| /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 433672; |
| var summary = 'operator evaluation order'; |
| var actual = ''; |
| var expect = ''; |
| |
| function makeObject(label) |
| { |
| var o = (function (){}); |
| |
| o.label = label; |
| o.valueOf = (function() { actual += this.label + ' valueOf, '; return Object.prototype.valueOf.call(this); }); |
| o.toString = (function() { actual += this.label + ' toString, '; return Object.prototype.toString.call(this); }); |
| |
| return o; |
| } |
| |
| operators = [ |
| {section: '11.5.1', operator: '*'}, |
| {section: '11.5.2', operator: '/'}, |
| {section: '11.5.3', operator: '%'}, |
| {section: '11.6.1', operator: '+'}, |
| {section: '11.6.2', operator: '-'}, |
| {section: '11.7.1', operator: '<<'}, |
| {section: '11.7.2', operator: '>>'}, |
| {section: '11.7.3', operator: '>>>'}, |
| {section: '11.8.1', operator: '<'}, |
| {section: '11.8.2', operator: '>'}, |
| {section: '11.8.3', operator: '<='}, |
| {section: '11.8.4', operator: '>='}, |
| {section: '11.10', operator: '&'}, |
| {section: '11.10', operator: '^'}, |
| {section: '11.10', operator: '|'}, |
| {section: '11.13.2', operator: '*='}, |
| {section: '11.13.2', operator: '/='}, |
| {section: '11.13.2', operator: '%='}, |
| {section: '11.13.2', operator: '+='}, |
| {section: '11.13.2', operator: '<<='}, |
| {section: '11.13.2', operator: '>>='}, |
| {section: '11.13.2', operator: '>>>='}, |
| {section: '11.13.2', operator: '&='}, |
| {section: '11.13.2', operator: '^='}, |
| {section: '11.13.2', operator: '|='}, |
| ]; |
| |
| //----------------------------------------------------------------------------- |
| test(); |
| //----------------------------------------------------------------------------- |
| |
| function test() |
| { |
| enterFunc ('test'); |
| printBugNumber(BUGNUMBER); |
| printStatus (summary); |
| |
| for (var i = 0; i < operators.length; i++) |
| { |
| expect = 'left valueOf, left toString, right valueOf, right toString, '; |
| actual = ''; |
| |
| var left = makeObject('left'); |
| var right = makeObject('right'); |
| |
| eval('left ' + operators[i].operator + ' right'); |
| |
| reportCompare(expect, actual, summary + ': ' + operators[i].section + ' ' + operators[i].operator); |
| } |
| |
| exitFunc ('test'); |
| } |