import * as assert from 'assert' ; import * as fs from 'fs' ; import * as path from 'path' ; import * as colors from 'kleur' ; import { loadConfig , svelte , shouldUpdateExpected } from '../helpers' ; describe ( 'js' , ( ) => { fs . readdirSync ( `${ __dirname }/samples` ) . forEach ( dir => { if ( dir [ 0 ] === '.' ) return ; const solo = /\.solo/ . test ( dir ) ; if ( solo && process . env . CI ) { throw new Error ( 'Forgot to remove `solo: true` from test' ) ; } const resolved = path . resolve ( `${ __dirname }/samples` , dir ) ; if ( ! fs . existsSync ( `${ resolved }/input.svelte` ) ) { console . log ( colors . red ( ) . bold ( `Missing file ${ dir }/input.svelte. If you recently switched branches you may need to delete this directory` ) ) ; return ; } ( solo ? it . only : it ) ( dir , ( ) => { const config = loadConfig ( `${ resolved }/_config.js` ) ; const input = fs . readFileSync ( `${ resolved }/input.svelte` , 'utf-8' ) . replace ( /\s+$/ , '' ) . replace ( /\r/g , '' ) ; let actual ; try { const options = Object . assign ( config . options || { } ) ; actual = svelte . compile ( input , options ) . js . code . replace ( /generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/ , 'generated by Svelte vX.Y.Z' ) ; } catch ( err ) { console . log ( err . frame ) ; throw err ; } const output = `${ resolved }/_actual.js` ; fs . writeFileSync ( output , actual ) ; const expectedPath = `${ resolved }/expected.js` ; let expected = '' ; try { expected = fs . readFileSync ( expectedPath , 'utf-8' ) ; } catch ( error ) { console . log ( error ) ; if ( error . code === 'ENOENT' ) { fs . writeFileSync ( expectedPath , actual ) ; } } try { assert . equal ( actual . trim ( ) . replace ( /^[ \t]+$/gm , '' ) . replace ( /\r/g , '' ) , expected . trim ( ) . replace ( /^[ \t]+$/gm , '' ) . replace ( /\r/g , '' ) ) ; } catch ( error ) { if ( shouldUpdateExpected ( ) ) { fs . writeFileSync ( expectedPath , actual ) ; console . log ( `Updated ${ expectedPath }.` ) ; } else { throw error ; } } } ) ; } ) ; } ) ;