diff --git a/test/language/module-code/verify-dfs-a_FIXTURE.js b/test/language/module-code/verify-dfs-a_FIXTURE.js new file mode 100644 index 0000000000..3bfa274b3f --- /dev/null +++ b/test/language/module-code/verify-dfs-a_FIXTURE.js @@ -0,0 +1,8 @@ +// Copyright (C) 2020 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +import { evaluated, check } from './verify-dfs.js'; + +check(import('./verify-dfs-b_FIXTURE.js')); + +evaluated('A'); diff --git a/test/language/module-code/verify-dfs-b_FIXTURE.js b/test/language/module-code/verify-dfs-b_FIXTURE.js new file mode 100644 index 0000000000..f61c444ebf --- /dev/null +++ b/test/language/module-code/verify-dfs-b_FIXTURE.js @@ -0,0 +1,6 @@ +// Copyright (C) 2020 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +import { evaluated } from './verify-dfs.js'; + +evaluated('B'); diff --git a/test/language/module-code/verify-dfs.js b/test/language/module-code/verify-dfs.js new file mode 100644 index 0000000000..9dcd295289 --- /dev/null +++ b/test/language/module-code/verify-dfs.js @@ -0,0 +1,34 @@ +// Copyright (C) 2020 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: Dynamic import can't preempt DFS evaluation order +esid: sec-moduleevaluation +info: | + Evaluate ( ) Concrete Method + + 1. Assert: This call to Evaluate is not happening at the same time as another call to Evaluate within the surrounding agent. + [...] +flags: [module, async] +features: [dynamic-import] +---*/ + +import './verify-dfs-a_FIXTURE.js'; +import './verify-dfs-b_FIXTURE.js'; + +// rely on function hoisting to create shared array +export function evaluated(name) { + if (!evaluated.order) { + evaluated.order = []; + } + evaluated.order.push(name); +} + +export function check(promise) { + promise.then(() => { + assert.sameValue(evaluated.order.length, 2); + assert.sameValue(evaluated.order[0], 'A'); + assert.sameValue(evaluated.order[1], 'B'); + }) + .then($DONE, $DONE); +}