/* -*- 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 = 321874; var summary = 'lhs must be a reference in (for lhs in rhs) ...'; var actual = ''; var expect = ''; var section; printBugNumber(BUGNUMBER); printStatus (summary); function a() {} var b = {foo: 'bar'}; printStatus('for-in tests'); var v; section = summary + ': for((v) in b);'; expect = 'foo'; printStatus(section); try { eval('for ((v) in b);'); actual = v; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, section); section = summary + ': function foo(){for((v) in b);};foo();'; expect = 'foo'; printStatus(section); try { eval('function foo(){ for ((v) in b);}; foo();'); actual = v; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, section); section = summary + ': for(a() in b);'; expect = 'error'; printStatus(section); try { eval('for (a() in b);'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, section); section = summary + ': function foo(){for(a() in b);};foo();'; expect = 'error'; printStatus(section); try { eval('function foo(){ for (a() in b);};foo();'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, section); section = ': for(new a() in b);'; expect = 'error'; printStatus(section); try { eval('for (new a() in b);'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); section = ': function foo(){for(new a() in b);};foo();'; expect = 'error'; printStatus(section); try { eval('function foo(){ for (new a() in b);};foo();'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); section = ': for(void in b);'; expect = 'error'; printStatus(section); try { eval('for (void in b);'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); section = ': function foo(){for(void in b);};foo();'; expect = 'error'; printStatus(section); try { eval('function foo(){ for (void in b);};foo();'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); var d = 1; var e = 2; expect = 'error'; section = ': for((d*e) in b);'; printStatus(section); try { eval('for ((d*e) in b);'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); var d = 1; var e = 2; expect = 'error'; section = ': function foo(){for((d*e) in b);};foo();'; printStatus(section); try { eval('function foo(){ for ((d*e) in b);};foo();'); actual = 'no error'; } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); const c = 0; expect = 'error'; section = ': for(c in b);'; printStatus(section); try { eval('for (c in b);'); actual = c; printStatus('typeof c: ' + (typeof c) + ', c: ' + c); } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section); expect = 'error'; section = ': function foo(){for(c in b);};foo();'; printStatus(section); try { eval('function foo(){ for (c in b);};foo();'); actual = c; printStatus('typeof c: ' + (typeof c) + ', c: ' + c); } catch(ex) { printStatus(ex+''); actual = 'error'; } reportCompare(expect, actual, summary + section);