diff --git a/test/generate.js b/test/generate.js index 384bd95b84..17a8aba7e3 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 d1f0539a6c..ee419c3921 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 ebac203de3..2560c1d3be 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 ); + } + }); + }); });