diff --git a/package.json b/package.json index 575b2a9a82..cb1acbe5a9 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "estree-walker": "^0.5.0", "fuzzyset.js": "0.0.1", "glob": "^7.1.1", - "jsdom": "^9.9.1", + "jsdom": "^11.1.0", "locate-character": "^2.0.0", "magic-string": "^0.22.3", "mocha": "^3.2.0", diff --git a/test/css/index.js b/test/css/index.js index 0d0b0e1b4a..0ce676d6ce 100644 --- a/test/css/index.js +++ b/test/css/index.js @@ -73,29 +73,29 @@ describe("css", () => { // verify that the right elements have scoping selectors if (expected.html !== null) { - return env().then(window => { - const Component = eval(`(function () { ${dom.code}; return SvelteComponent; }())`); - const target = window.document.querySelector("main"); + const window = env(); - new Component({ target, data: config.data }); - const html = target.innerHTML; + const Component = eval(`(function () { ${dom.code}; return SvelteComponent; }())`); + const target = window.document.querySelector("main"); - fs.writeFileSync(`test/css/samples/${dir}/_actual.html`, html); + new Component({ target, data: config.data }); + const html = target.innerHTML; - // dom - assert.equal( - normalizeHtml(window, html).replace(/svelte-\d+/g, 'svelte-xyz'), - normalizeHtml(window, expected.html) - ); + fs.writeFileSync(`test/css/samples/${dir}/_actual.html`, html); - // ssr - const component = eval(`(function () { ${ssr.code}; return SvelteComponent; }())`); + // dom + assert.equal( + normalizeHtml(window, html).replace(/svelte-\d+/g, 'svelte-xyz'), + normalizeHtml(window, expected.html) + ); - assert.equal( - normalizeHtml(window, component.render(config.data)).replace(/svelte-\d+/g, 'svelte-xyz'), - normalizeHtml(window, expected.html) - ); - }); + // ssr + const component = eval(`(function () { ${ssr.code}; return SvelteComponent; }())`); + + assert.equal( + normalizeHtml(window, component.render(config.data)).replace(/svelte-\d+/g, 'svelte-xyz'), + normalizeHtml(window, expected.html) + ); } }); }); diff --git a/test/formats/index.js b/test/formats/index.js index 9d62bb712f..b69bde817a 100644 --- a/test/formats/index.js +++ b/test/formats/index.js @@ -3,84 +3,80 @@ import { svelte, deindent, env, setupHtmlEqual } from "../helpers.js"; function testAmd(code, expectedId, dependencies, html) { const fn = new Function("define", code); + const window = env(); - return env().then(window => { - function define(id, deps, factory) { - assert.equal(id, expectedId); - assert.deepEqual(deps, Object.keys(dependencies)); + function define(id, deps, factory) { + assert.equal(id, expectedId); + assert.deepEqual(deps, Object.keys(dependencies)); - const SvelteComponent = factory( - ...Object.keys(dependencies).map(key => dependencies[key]) - ); + const SvelteComponent = factory( + ...Object.keys(dependencies).map(key => dependencies[key]) + ); - const main = window.document.body.querySelector("main"); - const component = new SvelteComponent({ target: main }); + const main = window.document.body.querySelector("main"); + const component = new SvelteComponent({ target: main }); - assert.htmlEqual(main.innerHTML, html); + assert.htmlEqual(main.innerHTML, html); - component.destroy(); - } + component.destroy(); + } - define.amd = true; + define.amd = true; - fn(define); - }); + fn(define); } function testCjs(code, dependencyById, html) { const fn = new Function("module", "exports", "require", code); + const window = env(); - return env().then(window => { - const module = { exports: {} }; - const require = id => { - return dependencyById[id]; - }; + const module = { exports: {} }; + const require = id => { + return dependencyById[id]; + }; - fn(module, module.exports, require); + fn(module, module.exports, require); - const SvelteComponent = module.exports; + const SvelteComponent = module.exports; - const main = window.document.body.querySelector("main"); - const component = new SvelteComponent({ target: main }); + const main = window.document.body.querySelector("main"); + const component = new SvelteComponent({ target: main }); - assert.htmlEqual(main.innerHTML, html); + assert.htmlEqual(main.innerHTML, html); - component.destroy(); - }); + component.destroy(); } function testIife(code, name, globals, html) { const fn = new Function(Object.keys(globals), `${code}\n\nreturn ${name};`); + const window = env(); - return env().then(window => { - const SvelteComponent = fn( - ...Object.keys(globals).map(key => globals[key]) - ); + const SvelteComponent = fn( + ...Object.keys(globals).map(key => globals[key]) + ); - const main = window.document.body.querySelector("main"); - const component = new SvelteComponent({ target: main }); + const main = window.document.body.querySelector("main"); + const component = new SvelteComponent({ target: main }); - assert.htmlEqual(main.innerHTML, html); + assert.htmlEqual(main.innerHTML, html); - component.destroy(); - }); + component.destroy(); } function testEval(code, name, globals, html) { const fn = new Function(Object.keys(globals), `return ${code};`); + const window = env(); - return env().then(window => { - const SvelteComponent = fn( - ...Object.keys(globals).map(key => globals[key]) - ); + const SvelteComponent = fn( + ...Object.keys(globals).map(key => globals[key]) + ); - const main = window.document.body.querySelector("main"); - const component = new SvelteComponent({ target: main }); + const main = window.document.body.querySelector("main"); + const component = new SvelteComponent({ target: main }); - assert.htmlEqual(main.innerHTML, html); + assert.htmlEqual(main.innerHTML, html); - component.destroy(); - }); + component.destroy(); } describe("formats", () => { @@ -190,9 +186,9 @@ describe("formats", () => { } }); - return testAmd(code, "foo", { answer: 42 }, `
42
`) - .then(() => testCjs(code, { answer: 42 }, `
42
`)) - .then(() => testIife(code, "Foo", { answer: 42 }, `
42
`)); + testAmd(code, "foo", { answer: 42 }, `
42
`); + testCjs(code, { answer: 42 }, `
42
`); + testIife(code, "Foo", { answer: 42 }, `
42
`); }); }); diff --git a/test/helpers.js b/test/helpers.js index 0dfa43fa54..3e42033ad9 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,4 +1,4 @@ -import jsdom from 'jsdom'; +import { JSDOM } from 'jsdom'; import assert from 'assert'; import glob from 'glob'; import fs from 'fs'; @@ -54,16 +54,10 @@ export function tryToReadFile(file) { } export function env() { - return new Promise((fulfil, reject) => { - jsdom.env('
', (err, window) => { - if (err) { - reject(err); - } else { - global.document = window.document; - fulfil(window); - } - }); - }); + const { window } = new JSDOM('
'); + global.document = window.document; + + return window; } function cleanChildren(node) { @@ -138,15 +132,15 @@ export function normalizeHtml(window, html) { } export function setupHtmlEqual() { - return env().then(window => { - assert.htmlEqual = (actual, expected, message) => { - assert.deepEqual( - normalizeHtml(window, actual), - normalizeHtml(window, expected), - message - ); - }; - }); + const window = env(); + + assert.htmlEqual = (actual, expected, message) => { + assert.deepEqual( + normalizeHtml(window, actual), + normalizeHtml(window, expected), + message + ); + }; } export function loadConfig(file) { diff --git a/test/hydration/index.js b/test/hydration/index.js index 1e291ed6b1..fc4df0f2da 100644 --- a/test/hydration/index.js +++ b/test/hydration/index.js @@ -57,45 +57,44 @@ describe('hydration', () => { compileOptions.dev = config.dev; compileOptions.hydrate = true; - return env() - .then(window => { - global.window = window; - - let SvelteComponent; - - try { - SvelteComponent = require(`${cwd}/main.html`).default; - } catch (err) { - throw err; - } - - const target = window.document.body; - target.innerHTML = fs.readFileSync(`${cwd}/_before.html`, 'utf-8'); - - const snapshot = config.snapshot ? config.snapshot(target) : {}; - - const component = new SvelteComponent({ - target, - hydrate: true, - data: config.data - }); - - assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8')); - - if (config.test) { - config.test(assert, target, snapshot, component, window); - } else { - component.destroy(); - assert.equal(target.innerHTML, ''); - } - }) - .catch(err => { - showOutput(cwd, { shared: 'svelte/shared.js' }); // eslint-disable-line no-console + const window = env(); + + try { + global.window = window; + + let SvelteComponent; + + try { + SvelteComponent = require(`${cwd}/main.html`).default; + } catch (err) { throw err; - }) - .then(() => { - if (config.show) showOutput(cwd, { shared: 'svelte/shared.js' }); + } + + const target = window.document.body; + target.innerHTML = fs.readFileSync(`${cwd}/_before.html`, 'utf-8'); + + const snapshot = config.snapshot ? config.snapshot(target) : {}; + + const component = new SvelteComponent({ + target, + hydrate: true, + data: config.data }); + + assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8')); + + if (config.test) { + config.test(assert, target, snapshot, component, window); + } else { + component.destroy(); + assert.equal(target.innerHTML, ''); + } + } catch (err) { + showOutput(cwd, { shared: 'svelte/shared.js' }); // eslint-disable-line no-console + throw err; + } + + if (config.show) showOutput(cwd, { shared: 'svelte/shared.js' }); }); } diff --git a/test/runtime/index.js b/test/runtime/index.js index dea60082a3..188829f328 100644 --- a/test/runtime/index.js +++ b/test/runtime/index.js @@ -103,111 +103,110 @@ describe("runtime", () => { let unintendedError = null; - return env() - .then(window => { - // set of hacks to support transition tests - transitionManager.running = false; - transitionManager.transitions = []; - - const raf = { - time: 0, - callback: null, - tick: now => { - raf.time = now; - if (raf.callback) raf.callback(); + const window = env(); + + try { + // set of hacks to support transition tests + transitionManager.running = false; + transitionManager.transitions = []; + + const raf = { + time: 0, + callback: null, + tick: now => { + raf.time = now; + if (raf.callback) raf.callback(); + } + }; + window.performance = { now: () => raf.time }; + global.requestAnimationFrame = cb => { + let called = false; + raf.callback = () => { + if (!called) { + called = true; + cb(); } }; - window.performance = { now: () => raf.time }; - global.requestAnimationFrame = cb => { - let called = false; - raf.callback = () => { - if (!called) { - called = true; - cb(); - } - }; - }; + }; - global.window = window; + global.window = window; - try { - SvelteComponent = require(`./samples/${dir}/main.html`).default; - } catch (err) { - showOutput(cwd, { shared }); // eslint-disable-line no-console - throw err; - } + try { + SvelteComponent = require(`./samples/${dir}/main.html`).default; + } catch (err) { + showOutput(cwd, { shared }); // eslint-disable-line no-console + throw err; + } - let usedObjectAssign = false; - Object.assign = () => { - usedObjectAssign = true; - }; + let usedObjectAssign = false; + Object.assign = () => { + usedObjectAssign = true; + }; - global.window = window; + global.window = window; - // Put the constructor on window for testing - window.SvelteComponent = SvelteComponent; + // Put the constructor on window for testing + window.SvelteComponent = SvelteComponent; - const target = window.document.querySelector("main"); + const target = window.document.querySelector("main"); - const warnings = []; - const warn = console.warn; - console.warn = warning => { - warnings.push(warning); - }; + const warnings = []; + const warn = console.warn; + console.warn = warning => { + warnings.push(warning); + }; - const component = new SvelteComponent({ - target, - hydrate, - data: config.data - }); + const component = new SvelteComponent({ + target, + hydrate, + data: config.data + }); - Object.assign = Object_assign; + Object.assign = Object_assign; - console.warn = warn; + console.warn = warn; - if (config.error) { - unintendedError = true; - throw new Error("Expected a runtime error"); - } + if (config.error) { + unintendedError = true; + throw new Error("Expected a runtime error"); + } - if (config.warnings) { - assert.deepEqual(warnings, config.warnings); - } else if (warnings.length) { - unintendedError = true; - throw new Error("Received unexpected warnings"); - } + if (config.warnings) { + assert.deepEqual(warnings, config.warnings); + } else if (warnings.length) { + unintendedError = true; + throw new Error("Received unexpected warnings"); + } - if (config.html) { - assert.htmlEqual(target.innerHTML, config.html); - } + if (config.html) { + assert.htmlEqual(target.innerHTML, config.html); + } - if (config.test) { - config.test(assert, component, target, window, raf); - } else { - component.destroy(); - assert.equal(target.innerHTML, ""); - } + if (config.test) { + config.test(assert, component, target, window, raf); + } else { + component.destroy(); + assert.equal(target.innerHTML, ""); + } - if (usedObjectAssign) { - throw new Error( - "cannot use Object.assign in generated code, as it is not supported everywhere" - ); - } - }) - .catch(err => { - Object.assign = Object_assign; - - if (config.error && !unintendedError) { - config.error(assert, err); - } else { - failed.add(dir); - showOutput(cwd, { shared }); // eslint-disable-line no-console - throw err; - } - }) - .then(() => { - if (config.show) showOutput(cwd, { shared }); - }); + if (usedObjectAssign) { + throw new Error( + "cannot use Object.assign in generated code, as it is not supported everywhere" + ); + } + } catch (err) { + Object.assign = Object_assign; + + if (config.error && !unintendedError) { + config.error(assert, err); + } else { + failed.add(dir); + showOutput(cwd, { shared }); // eslint-disable-line no-console + throw err; + } + } + + if (config.show) showOutput(cwd, { shared }); }); } diff --git a/yarn.lock b/yarn.lock index b4c0df7bfa..ff76577a80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,6 +6,10 @@ version "2.2.41" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.41.tgz#e27cf0817153eb9f2713b2d3f6c68f1e1c3ca608" +"@types/node@^6.0.46": + version "6.0.85" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae" + "@types/node@^8.0.17": version "8.0.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1" @@ -1958,9 +1962,9 @@ jschardet@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.0.tgz#a61f310306a5a71188e1b1acd08add3cfbb08b1e" -jsdom@^9.9.1: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" +jsdom@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.1.0.tgz#6c48d7a48ffc5c300283c312904d15da8360509b" dependencies: abab "^1.0.3" acorn "^4.0.4" @@ -1971,15 +1975,17 @@ jsdom@^9.9.1: cssstyle ">= 0.2.37 < 0.3.0" escodegen "^1.6.1" html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" + nwmatcher "^1.4.1" + parse5 "^3.0.2" + pn "^1.0.0" request "^2.79.0" + request-promise-native "^1.0.3" sax "^1.2.1" symbol-tree "^3.2.1" tough-cookie "^2.3.2" webidl-conversions "^4.0.0" whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" + whatwg-url "^6.1.0" xml-name-validator "^2.0.1" jsesc@^1.3.0: @@ -2137,6 +2143,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2362,9 +2372,9 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" +nwmatcher@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" nyc@^11.1.0: version "11.1.0" @@ -2495,9 +2505,11 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parse5@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510" + dependencies: + "@types/node" "^6.0.46" path-exists@^2.0.0: version "2.1.0" @@ -2573,6 +2585,10 @@ pluralize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" +pn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -2748,6 +2764,20 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.4.tgz#86988ec8eee408e45579fce83bfd05b3adf9a155" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.0" + request@2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" @@ -3060,6 +3090,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -3199,7 +3233,7 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: +tough-cookie@>=2.3.0, tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: @@ -3295,11 +3329,7 @@ vlq@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webidl-conversions@^4.0.0: +webidl-conversions@^4.0.0, webidl-conversions@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" @@ -3309,12 +3339,13 @@ whatwg-encoding@^1.0.1: dependencies: iconv-lite "0.4.13" -whatwg-url@^4.3.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" +whatwg-url@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.1.0.tgz#5fc8279b93d75483b9ced8b26239854847a18578" dependencies: + lodash.sortby "^4.7.0" tr46 "~0.0.3" - webidl-conversions "^3.0.0" + webidl-conversions "^4.0.1" which-module@^2.0.0: version "2.0.0"