| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
- function f1_f(){};
- var f2_v = 123;
- function f3_f(){};
- var f4_v = 123;
- let f5_l = 123;
- const f6_c = 123;
- var ex = "0";
- // Top level function in script does not conflict with another top level function
- WScript.LoadScript("function f1_f(){};");
- // Top level function in script does not conflict with same-named var
- WScript.LoadScript("function f2_v(){};");
- // Top level function in eval does not conflict with another top level function
- eval("function f3_f(){};");
- // Top level function in eval does not conflict with same-named var
- eval("function f4_v(){};");
- // Top level function in script conflicts with top level let
- try { WScript.LoadScript("function f5_l(){};"); } catch (e) { ex = e.message }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "1";
- // Top level function in script conflicts with top level const
- try { WScript.LoadScript("function f6_c(){};"); } catch (e) { ex = e.message }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "2";
- // Top level function in eval conflicts with top level let
- try { eval("function f5_l(){};") } catch (e) { ex = e.message}
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "3";
- // Top level function in eval conflicts with top level const
- try { eval("function f6_c(){};") } catch (e) { ex = e.message }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "4";
- (function ff() {
- if (true) {
- let fo5_l = 123;
- if (true) {
- // TODO: this is blocked by https://github.com/Microsoft/ChakraCore/issues/5070
- //
- // Top level function in eval conflicts with outer function level let
- try { eval("function fo5_l(){};") } catch (e) { ex = e.message }
- assert.areEqual("4", ex);
- ex = "5";
- }
- }
- if (true) {
- // Top level function in eval conflicts with outer function level const
- try { eval("function fo6_c(){};") } catch (e) { ex = e.message }
- }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "6";
- const fo6_c = 123;
- })();
- (function ffs() {
- 'use strict';
- let fos5_l = 123;
- // Top level function in eval conflicts with outer function level let (strict)
- eval("function fos5_l(){};");
- if (true) {
- // Top level function in eval conflicts with outer function level const (strict)
- eval("function fos6_c(){};");
- }
- const fos6_c = 123;
- })();
- (function ffl() {
- let fo5_l_sl = 123;
- // Top level function in eval conflicts with outer function level let
- try { eval("function fo5_l_sl(){};") } catch (e) { ex = e.message }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "7";
- // Top level function in eval conflicts with outer function level const
- try { eval("function fo6_c_sl(){};") } catch (e) { ex = e.message }
- assert.areEqual("Let/Const redeclaration", ex);
- ex = "8";
- const fo6_c_sl = 123;
- })();
- (function ffsl() {
- 'use strict';
- let fos5_l = 123;
- // Top level function in eval conflicts with outer function level let (strict)
- WScript.LoadScript("function fos5_l_sl(){};");
- // Top level function in eval conflicts with outer function level const (strict)
- WScript.LoadScript("function fos6_c_sl(){};");
- const fos6_c_sl = 123;
- })();
- (function ffn() {
- let fo5_l_nf = 123;
- // Top level function in "new Function" does not conflict with outer function level let
- f = (new Function("return function fo5_l_nf(){};"))();
- // Top level function in "new Function" does not conflict with outer function level const
- f = (new Function("return function fo6_c_nf(){};"))();
- assert.areEqual("function fo6_c_nf(){}", f.toString());
- const fo6_c_nf = 123;
- })();
- // Top level function in eval does not conflict with top level const, in a class (since strict is assumed)
- class C1
- {
- static M()
- {
- eval("function f6_c(){};");
- }
- }
- C1.M();
- // Top level function in eval does not conflict with class level get
- class C2
- {
- get f7_l() {return "q";};
- static M()
- {
- eval("function f7_l(){};");
- }
- }
- C2.M();
- WScript.RegisterModuleSource("mod0.js", `
- import 'mod1.js';
- let qwer = 12;
- `);
- WScript.RegisterModuleSource("mod1.js",`
- // no redeclaration here since modules are not introducing global names.
- export function qwer(){};
- `);
- WScript.LoadScriptFile("mod0.js", "module");
- WScript.Echo("PASS");
|