You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
6.8 KiB

  1. /**
  2. * Copyright 2016 LasLabs Inc.
  3. * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. **/
  5. odoo.define_section('web_widget_float_formula', ['web.form_common', 'web.form_widgets', 'web.core'], function(test) {
  6. 'use strict';
  7. window.test_setup = function(self, form_common, form_widgets, core) {
  8. core.bus.trigger('web_client_ready');
  9. var field_manager = new form_common.DefaultFieldManager(null, {});
  10. var filler = {'attrs': {}}; // Needed to instantiate FieldFloat
  11. self.field = new form_widgets.FieldFloat(field_manager, filler);
  12. self.field.$input = $('<input>');
  13. self.field.$label = $('<label>');
  14. };
  15. test('Float fields should have a _formula_text property that defaults to an empty string',
  16. function(assert, form_common, form_widgets, core) {
  17. window.test_setup(this, form_common, form_widgets, core);
  18. assert.strictEqual(this.field._formula_text, '');
  19. });
  20. test('.initialize_content() on float fields should clear the _formula_text property',
  21. function(assert, form_common, form_widgets, core) {
  22. window.test_setup(this, form_common, form_widgets, core);
  23. this.field._formula_text = 'test';
  24. this.field.initialize_content();
  25. assert.strictEqual(this.field._formula_text, '');
  26. });
  27. test('._clean_formula_text() on float fields should clear the _formula_text property',
  28. function(assert, form_common, form_widgets, core) {
  29. window.test_setup(this, form_common, form_widgets, core);
  30. this.field._formula_text = 'test';
  31. this.field._clean_formula_text();
  32. assert.strictEqual(this.field._formula_text, '');
  33. });
  34. test('._process_formula() on float fields should return false when given invalid formulas',
  35. function(assert, form_common, form_widgets, core) {
  36. window.test_setup(this, form_common, form_widgets, core);
  37. assert.strictEqual(this.field._process_formula('2*3'), false);
  38. assert.strictEqual(this.field._process_formula('=2*3a'), false);
  39. });
  40. test('._process_formula() on float fields should properly process a valid formula',
  41. function(assert, form_common, form_widgets, core) {
  42. window.test_setup(this, form_common, form_widgets, core);
  43. assert.strictEqual(this.field._process_formula(' =2*3\n'), '2*3');
  44. });
  45. test('._eval_formula() on float fields should properly evaluate a valid formula',
  46. function(assert, form_common, form_widgets, core) {
  47. window.test_setup(this, form_common, form_widgets, core);
  48. assert.equal(this.field._eval_formula('2*3'), 6);
  49. });
  50. test('._eval_formula() on float fields should properly handle alternative decimal points and thousands seps',
  51. function(assert, form_common, form_widgets, core) {
  52. var translation_params = core._t.database.parameters;
  53. translation_params.decimal_point = ',';
  54. translation_params.thousands_sep = '.';
  55. window.test_setup(this, form_common, form_widgets, core);
  56. assert.equal(this.field._eval_formula('2.000*3,5'), 7000);
  57. });
  58. test('._eval_formula() on float fields should return false when given an input that evals to undefined',
  59. function(assert, form_common, form_widgets, core) {
  60. window.test_setup(this, form_common, form_widgets, core);
  61. assert.equal(this.field._eval_formula(''), false);
  62. });
  63. test('._eval_formula() on float fields should return false when given an input that cannot be evaluated',
  64. function(assert, form_common, form_widgets, core) {
  65. window.test_setup(this, form_common, form_widgets, core);
  66. assert.equal(this.field._eval_formula('*/'), false);
  67. });
  68. test('._compute_result() on float fields should always clean up _formula_text',
  69. function(assert, form_common, form_widgets, core) {
  70. window.test_setup(this, form_common, form_widgets, core);
  71. this.field._formula_text = 'test';
  72. this.field._compute_result();
  73. assert.strictEqual(this.field._formula_text, '');
  74. });
  75. test('._compute_result() should not change the value of the associated input when it is not a valid formula',
  76. function(assert, form_common, form_widgets, core) {
  77. window.test_setup(this, form_common, form_widgets, core);
  78. this.field.$input.val('=2*3a');
  79. this.field._compute_result();
  80. assert.strictEqual(this.field.$input.val(), '=2*3a');
  81. });
  82. test('._compute_result() should not change the value of the associated input when it cannot be evaled',
  83. function(assert, form_common, form_widgets, core) {
  84. window.test_setup(this, form_common, form_widgets, core);
  85. this.field.$input.val('=*/');
  86. this.field._compute_result();
  87. assert.strictEqual(this.field.$input.val(), '=*/');
  88. });
  89. test('._compute_result() should behave properly when the current value of the input element is a valid formula',
  90. function(assert, form_common, form_widgets, core) {
  91. window.test_setup(this, form_common, form_widgets, core);
  92. this.field.$input.val('=2*3');
  93. this.field._compute_result();
  94. assert.equal(this.field.$input.val(), '6');
  95. assert.strictEqual(this.field._formula_text, '=2*3');
  96. });
  97. test('._display_formula() should update the value of the input element when there is a stored formula',
  98. function(assert, form_common, form_widgets, core) {
  99. window.test_setup(this, form_common, form_widgets, core);
  100. this.field._formula_text = "test";
  101. this.field._display_formula();
  102. assert.equal(this.field.$input.val(), 'test');
  103. });
  104. test('.start() on float fields should add a handler that calls ._compute_result() when the field is blurred',
  105. function(assert, form_common, form_widgets, core) {
  106. window.test_setup(this, form_common, form_widgets, core);
  107. this.field.called = false;
  108. this.field._compute_result = function() {
  109. this.called = true;
  110. };
  111. this.field.start();
  112. this.field.trigger('blurred');
  113. assert.strictEqual(this.field.called, true);
  114. });
  115. test('.start() on float fields should add a handler that calls ._display_formula() when the field is focused',
  116. function(assert, form_common, form_widgets, core) {
  117. window.test_setup(this, form_common, form_widgets, core);
  118. this.field.called = false;
  119. this.field._display_formula = function() {
  120. this.called = true;
  121. };
  122. this.field.start();
  123. this.field.trigger('focused');
  124. assert.strictEqual(this.field.called, true);
  125. });
  126. });