update jsdom

pull/737/head
Rich Harris 8 years ago
parent 8da4a9f081
commit 46cb2a4da3

@ -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",

@ -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)
);
}
});
});

@ -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 }, `<div>42</div>`)
.then(() => testCjs(code, { answer: 42 }, `<div>42</div>`))
.then(() => testIife(code, "Foo", { answer: 42 }, `<div>42</div>`));
testAmd(code, "foo", { answer: 42 }, `<div>42</div>`);
testCjs(code, { answer: 42 }, `<div>42</div>`);
testIife(code, "Foo", { answer: 42 }, `<div>42</div>`);
});
});

@ -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('<main></main>', (err, window) => {
if (err) {
reject(err);
} else {
global.document = window.document;
fulfil(window);
}
});
});
const { window } = new JSDOM('<main></main>');
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) {

@ -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' });
});
}

@ -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 });
});
}

@ -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"

Loading…
Cancel
Save