From da2e78d6fabdc198dfd477fc940cdcc6200e18ff Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Tue, 17 Jan 2017 13:46:37 -0500 Subject: [PATCH 1/8] run tests with SSR compiler, where possible --- test/generate.js | 27 ++------------------------- test/helpers.js | 23 +++++++++++++++++++++++ test/ssr.js | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 26 deletions(-) diff --git a/test/generate.js b/test/generate.js index 384bd95b841e..17a8aba7e3ca 100644 --- a/test/generate.js +++ b/test/generate.js @@ -4,7 +4,7 @@ import * as path from 'path'; import * as fs from 'fs'; import * as acorn from 'acorn'; -import { svelte, env, setupHtmlEqual } from './helpers.js'; +import { addLineNumbers, loadConfig, svelte, env, setupHtmlEqual } from './helpers.js'; let showCompiledCode = false; let compileOptions = null; @@ -18,36 +18,13 @@ require.extensions[ '.html' ] = function ( module, filename ) { return module._compile( code, filename ); }; -function addLineNumbers ( code ) { - return code.split( '\n' ).map( ( line, i ) => { - i = String( i + 1 ); - while ( i.length < 3 ) i = ` ${i}`; - - return `${i}: ${line.replace( /^\t+/, match => match.split( '\t' ).join( ' ' ) )}`; - }).join( '\n' ); -} - -function loadConfig ( dir ) { - try { - const resolved = require.resolve( `./generator/${dir}/_config.js` ); - delete require.cache[ resolved ]; - return require( resolved ).default; - } catch ( err ) { - if ( err.code === 'E_NOT_FOUND' ) { - return {}; - } - - throw err; - } -} - describe( 'generate', () => { before( setupHtmlEqual ); function runTest ( dir, shared ) { if ( dir[0] === '.' ) return; - const config = loadConfig( dir ); + const config = loadConfig( `./generator/${dir}/_config.js` ); if ( config.solo && process.env.CI ) { throw new Error( 'Forgot to remove `solo: true` from test' ); diff --git a/test/helpers.js b/test/helpers.js index d1f0539a6c31..ee419c3921d6 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -110,3 +110,26 @@ export function setupHtmlEqual () { }; }); } + +export function loadConfig ( file ) { + try { + const resolved = require.resolve( file ); + delete require.cache[ resolved ]; + return require( resolved ).default; + } catch ( err ) { + if ( err.code === 'E_NOT_FOUND' ) { + return {}; + } + + throw err; + } +} + +export function addLineNumbers ( code ) { + return code.split( '\n' ).map( ( line, i ) => { + i = String( i + 1 ); + while ( i.length < 3 ) i = ` ${i}`; + + return `${i}: ${line.replace( /^\t+/, match => match.split( '\t' ).join( ' ' ) )}`; + }).join( '\n' ); +} diff --git a/test/ssr.js b/test/ssr.js index ebac203de3ca..2560c1d3be04 100644 --- a/test/ssr.js +++ b/test/ssr.js @@ -1,7 +1,7 @@ import assert from 'assert'; import * as fs from 'fs'; -import { exists, setupHtmlEqual, tryToLoadJson } from './helpers.js'; +import { exists, loadConfig, setupHtmlEqual, svelte, tryToLoadJson } from './helpers.js'; function tryToReadFile ( file ) { try { @@ -47,4 +47,37 @@ describe( 'ssr', () => { assert.equal( css.replace( /^\s+/gm, '' ), expectedCss.replace( /^\s+/gm, '' ) ); }); }); + + // duplicate client-side tests, as far as possible + fs.readdirSync( 'test/generator' ).forEach( dir => { + if ( dir[0] === '.' ) return; + + const config = loadConfig( `./generator/${dir}/_config.js` ); + + if ( config.solo && process.env.CI ) { + throw new Error( 'Forgot to remove `solo: true` from test' ); + } + + ( config.skip ? it.skip : config.solo ? it.only : it )( dir, () => { + try { + const source = fs.readFileSync( `test/generator/${dir}/main.html`, 'utf-8' ); + svelte.compile( source, { generate: 'ssr' }); + } catch ( err ) { + if ( config.compileError ) { + config.compileError( err ); + return; + } else { + throw err; + } + } + + const component = require( `./generator/${dir}/main.html` ); + + const html = component.render( config.data ); + + if ( config.html ) { + assert.htmlEqual( html, config.html ); + } + }); + }); }); From 2673c10998fdb4d8117d30f270ca6a41943ac40e Mon Sep 17 00:00:00 2001 From: Paul Sauve Date: Mon, 23 Jan 2017 14:58:32 -0600 Subject: [PATCH 2/8] Work on skipping some tests --- test/generator/onrender-fires-when-ready-nested/_config.js | 2 ++ test/generator/onrender-fires-when-ready/_config.js | 2 ++ test/generator/set-in-observe/_config.js | 2 ++ test/generator/set-in-onrender/_config.js | 2 ++ test/ssr.js | 2 +- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/generator/onrender-fires-when-ready-nested/_config.js b/test/generator/onrender-fires-when-ready-nested/_config.js index 06327ebc4dab..cbc0b87604aa 100644 --- a/test/generator/onrender-fires-when-ready-nested/_config.js +++ b/test/generator/onrender-fires-when-ready-nested/_config.js @@ -1,3 +1,5 @@ export default { + 'skip-ssr': true, // uses onrender + html: `

true

\n

true

` }; diff --git a/test/generator/onrender-fires-when-ready/_config.js b/test/generator/onrender-fires-when-ready/_config.js index 14db20be9e2e..6ed7e85e9cc0 100644 --- a/test/generator/onrender-fires-when-ready/_config.js +++ b/test/generator/onrender-fires-when-ready/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, // uses onrender + html: `

true

`, test ( assert, component, target ) { diff --git a/test/generator/set-in-observe/_config.js b/test/generator/set-in-observe/_config.js index 81c02623cd6a..65d993fdb9bf 100644 --- a/test/generator/set-in-observe/_config.js +++ b/test/generator/set-in-observe/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, // uses onrender + html: `

1

2

diff --git a/test/generator/set-in-onrender/_config.js b/test/generator/set-in-onrender/_config.js index 1eb52e95224c..6cd361c07693 100644 --- a/test/generator/set-in-onrender/_config.js +++ b/test/generator/set-in-onrender/_config.js @@ -1,3 +1,5 @@ export default { + 'skip-ssr': true, // uses onrender + html: '

2

' }; diff --git a/test/ssr.js b/test/ssr.js index 2560c1d3be04..2ee993bbcff9 100644 --- a/test/ssr.js +++ b/test/ssr.js @@ -58,7 +58,7 @@ describe( 'ssr', () => { throw new Error( 'Forgot to remove `solo: true` from test' ); } - ( config.skip ? it.skip : config.solo ? it.only : it )( dir, () => { + ( config.skip || config['skip-ssr'] ? it.skip : config.solo ? it.only : it )( dir, () => { try { const source = fs.readFileSync( `test/generator/${dir}/main.html`, 'utf-8' ); svelte.compile( source, { generate: 'ssr' }); From 03e3ed441f10dcf8618e0b884b4166892b1fa73d Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 24 Jan 2017 12:04:20 -0500 Subject: [PATCH 3/8] don't mark `skip-ssr` tests as skipped, omit them altogether --- test/ssr.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/ssr.js b/test/ssr.js index 2ee993bbcff9..d03b1b8d06ed 100644 --- a/test/ssr.js +++ b/test/ssr.js @@ -57,8 +57,10 @@ describe( 'ssr', () => { if ( config.solo && process.env.CI ) { throw new Error( 'Forgot to remove `solo: true` from test' ); } + + if ( config['skip-ssr'] ) return; - ( config.skip || config['skip-ssr'] ? it.skip : config.solo ? it.only : it )( dir, () => { + ( config.skip ? it.skip : config.solo ? it.only : it )( dir, () => { try { const source = fs.readFileSync( `test/generator/${dir}/main.html`, 'utf-8' ); svelte.compile( source, { generate: 'ssr' }); From 94aca91d35b9f3f516ed80d8548227ccdc3ef718 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 31 Jan 2017 17:35:03 -0500 Subject: [PATCH 4/8] fix/skip various SSR tests --- .../visitors/YieldTag.js | 2 +- test/generator/component-yield/_config.js | 4 ++-- test/generator/component-yield/main.html | 23 ++++++++++--------- test/generator/raw-mustaches/_config.js | 4 ++++ .../_config.js | 0 .../main.html | 0 test/generator/svg-xmlns/_config.js | 2 ++ test/ssr.js | 20 +++++++++++----- 8 files changed, 35 insertions(+), 20 deletions(-) rename test/generator/{text-node-top-level => single-text-node}/_config.js (100%) rename test/generator/{text-node-top-level => single-text-node}/main.html (100%) diff --git a/src/generators/server-side-rendering/visitors/YieldTag.js b/src/generators/server-side-rendering/visitors/YieldTag.js index 732f96301b06..a9b35f777edf 100644 --- a/src/generators/server-side-rendering/visitors/YieldTag.js +++ b/src/generators/server-side-rendering/visitors/YieldTag.js @@ -1,5 +1,5 @@ export default { enter ( generator ) { - generator.append( `\${options.yield()}` ); + generator.append( `\${options && options.yield ? options.yield() : ''}` ); } }; diff --git a/test/generator/component-yield/_config.js b/test/generator/component-yield/_config.js index fcf00b507295..174d01f1a571 100644 --- a/test/generator/component-yield/_config.js +++ b/test/generator/component-yield/_config.js @@ -1,3 +1,3 @@ export default { - html: '

Hello

' -} + html: '

Hello

' +}; diff --git a/test/generator/component-yield/main.html b/test/generator/component-yield/main.html index 7d5cbf718065..5432dcf8f4e9 100644 --- a/test/generator/component-yield/main.html +++ b/test/generator/component-yield/main.html @@ -1,15 +1,16 @@

- Hello - {{#if test}} - {{yield}} - {{/if}} + Hello + {{#if test}} + {{yield}} + {{/if}}

+ diff --git a/test/generator/raw-mustaches/_config.js b/test/generator/raw-mustaches/_config.js index 850a169e02ec..8b7767d6d1fd 100644 --- a/test/generator/raw-mustaches/_config.js +++ b/test/generator/raw-mustaches/_config.js @@ -1,8 +1,12 @@ const ns = ''; + export default { + 'skip-ssr': true, + data: { raw: 'raw html!!!\\o/' }, + html: `before${ns}raw html!!!\\o/${ns}after`, test ( assert, component, target ) { diff --git a/test/generator/text-node-top-level/_config.js b/test/generator/single-text-node/_config.js similarity index 100% rename from test/generator/text-node-top-level/_config.js rename to test/generator/single-text-node/_config.js diff --git a/test/generator/text-node-top-level/main.html b/test/generator/single-text-node/main.html similarity index 100% rename from test/generator/text-node-top-level/main.html rename to test/generator/single-text-node/main.html diff --git a/test/generator/svg-xmlns/_config.js b/test/generator/svg-xmlns/_config.js index 37d94a1609fe..0df414232b01 100644 --- a/test/generator/svg-xmlns/_config.js +++ b/test/generator/svg-xmlns/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, + data: { x: 0, y: 0, diff --git a/test/ssr.js b/test/ssr.js index d03b1b8d06ed..6cc42608ac6e 100644 --- a/test/ssr.js +++ b/test/ssr.js @@ -1,7 +1,7 @@ import assert from 'assert'; import * as fs from 'fs'; -import { exists, loadConfig, setupHtmlEqual, svelte, tryToLoadJson } from './helpers.js'; +import { addLineNumbers, exists, loadConfig, setupHtmlEqual, svelte, tryToLoadJson } from './helpers.js'; function tryToReadFile ( file ) { try { @@ -57,13 +57,15 @@ describe( 'ssr', () => { if ( config.solo && process.env.CI ) { throw new Error( 'Forgot to remove `solo: true` from test' ); } - + if ( config['skip-ssr'] ) return; ( config.skip ? it.skip : config.solo ? it.only : it )( dir, () => { + let compiled; + try { const source = fs.readFileSync( `test/generator/${dir}/main.html`, 'utf-8' ); - svelte.compile( source, { generate: 'ssr' }); + compiled = svelte.compile( source, { generate: 'ssr' }); } catch ( err ) { if ( config.compileError ) { config.compileError( err ); @@ -74,11 +76,17 @@ describe( 'ssr', () => { } const component = require( `./generator/${dir}/main.html` ); + let html; - const html = component.render( config.data ); + try { + html = component.render( config.data ); - if ( config.html ) { - assert.htmlEqual( html, config.html ); + if ( config.html ) { + assert.htmlEqual( html, config.html ); + } + } catch ( err ) { + console.log( addLineNumbers( compiled.code ) ); + throw err; } }); }); From b8790d1efe8e703917cda76c46018d678eec0fe6 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 31 Jan 2017 17:42:47 -0500 Subject: [PATCH 5/8] add SSR triple test --- test/server-side-rendering/raw-mustaches/_actual.html | 1 + test/server-side-rendering/raw-mustaches/_expected.html | 1 + test/server-side-rendering/raw-mustaches/data.json | 3 +++ test/server-side-rendering/raw-mustaches/main.html | 1 + 4 files changed, 6 insertions(+) create mode 100644 test/server-side-rendering/raw-mustaches/_actual.html create mode 100644 test/server-side-rendering/raw-mustaches/_expected.html create mode 100644 test/server-side-rendering/raw-mustaches/data.json create mode 100644 test/server-side-rendering/raw-mustaches/main.html diff --git a/test/server-side-rendering/raw-mustaches/_actual.html b/test/server-side-rendering/raw-mustaches/_actual.html new file mode 100644 index 000000000000..c44897a0c27e --- /dev/null +++ b/test/server-side-rendering/raw-mustaches/_actual.html @@ -0,0 +1 @@ +beforeraw html!!!\o/after \ No newline at end of file diff --git a/test/server-side-rendering/raw-mustaches/_expected.html b/test/server-side-rendering/raw-mustaches/_expected.html new file mode 100644 index 000000000000..d4c767844659 --- /dev/null +++ b/test/server-side-rendering/raw-mustaches/_expected.html @@ -0,0 +1 @@ +beforeraw html!!!\o/after diff --git a/test/server-side-rendering/raw-mustaches/data.json b/test/server-side-rendering/raw-mustaches/data.json new file mode 100644 index 000000000000..450f2a60dc25 --- /dev/null +++ b/test/server-side-rendering/raw-mustaches/data.json @@ -0,0 +1,3 @@ +{ + "raw": "raw html!!!\\o/" +} diff --git a/test/server-side-rendering/raw-mustaches/main.html b/test/server-side-rendering/raw-mustaches/main.html new file mode 100644 index 000000000000..1a733843dfd0 --- /dev/null +++ b/test/server-side-rendering/raw-mustaches/main.html @@ -0,0 +1 @@ +before{{{raw}}}after From eab6935cc229ca66c4a52d19b2b9976a019e82ad Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 1 Feb 2017 12:05:39 -0500 Subject: [PATCH 6/8] skip component binding SSR tests, for now --- test/generator/component-binding-nested/_config.js | 2 ++ test/generator/component-binding/_config.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/generator/component-binding-nested/_config.js b/test/generator/component-binding-nested/_config.js index 77a138d9e8f1..fd1250e7a5fa 100644 --- a/test/generator/component-binding-nested/_config.js +++ b/test/generator/component-binding-nested/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, // TODO delete this line, once binding works + data: { x: 'initial' }, diff --git a/test/generator/component-binding/_config.js b/test/generator/component-binding/_config.js index b7f45f6304ce..f2ed4d67e25d 100644 --- a/test/generator/component-binding/_config.js +++ b/test/generator/component-binding/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, // TODO delete this line, once binding works + html: `

count: 0

From 31480a0025cbdb9fa23a24b188a7ef0712c18f63 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 1 Feb 2017 12:21:09 -0500 Subject: [PATCH 7/8] lint --- test/ssr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ssr.js b/test/ssr.js index 6cc42608ac6e..fa2873c81026 100644 --- a/test/ssr.js +++ b/test/ssr.js @@ -85,7 +85,7 @@ describe( 'ssr', () => { assert.htmlEqual( html, config.html ); } } catch ( err ) { - console.log( addLineNumbers( compiled.code ) ); + console.log( addLineNumbers( compiled.code ) ); // eslint-disable-line no-console throw err; } }); From 097975810549399c78297c2dfc3bc7f47edd6b39 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 1 Feb 2017 12:31:39 -0500 Subject: [PATCH 8/8] skip onrender-chain test --- test/generator/onrender-chain/_config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/generator/onrender-chain/_config.js b/test/generator/onrender-chain/_config.js index 348f66cd6fe4..cb3bab34a3b3 100644 --- a/test/generator/onrender-chain/_config.js +++ b/test/generator/onrender-chain/_config.js @@ -1,4 +1,6 @@ export default { + 'skip-ssr': true, + html: ` 321 `,