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"