diff --git a/test/js/index.js b/test/js/index.js index cf8ab54bbd..fd5eb102bf 100644 --- a/test/js/index.js +++ b/test/js/index.js @@ -18,11 +18,17 @@ describe( 'js', () => { dir = path.resolve( 'test/js/samples', dir ); const input = fs.readFileSync( `${dir}/input.html`, 'utf-8' ).replace( /\s+$/, '' ); - const actual = svelte.compile( input ).code; + const actual = svelte.compile( input, { + shared: true + }).code; + fs.writeFileSync( `${dir}/_actual.js`, actual ); const expected = fs.readFileSync( `${dir}/expected.js`, 'utf-8' ); - assert.equal( actual.trim(), expected.trim() ); + assert.equal( + actual.trim().replace( /^\s+$/gm, '' ), + expected.trim().replace( /^\s+$/gm, '' ) + ); }); }); }); diff --git a/test/js/samples/event-handlers-custom/expected.js b/test/js/samples/event-handlers-custom/expected.js new file mode 100644 index 0000000000..8131e3bde3 --- /dev/null +++ b/test/js/samples/event-handlers-custom/expected.js @@ -0,0 +1,88 @@ +import { createElement, detachNode, insertNode, createText, appendNode, assign, dispatchObservers, noop, proto } from "svelte/shared.js"; + +var template = (function () { + return { + methods: { + foo ( bar ) { + console.log( bar ); + } + }, + + events: { + foo ( node, callback ) { + // code goes here + } + } + }; +}()); + +function create_main_fragment ( root, component ) { + var button = createElement( 'button' ); + + var foo_handler = template.events.foo.call( component, button, function ( event ) { + var root = component.get(); + + component.foo( root.bar ); + }); + + appendNode( createText( "foo" ), button ); + + return { + mount: function ( target, anchor ) { + insertNode( button, target, anchor ); + }, + + update: noop, + + destroy: function ( detach ) { + foo_handler.teardown(); + + if ( detach ) { + detachNode( button ); + } + } + }; +} + +function SvelteComponent ( options ) { + options = options || {}; + this._state = options.data || {}; + + this._observers = { + pre: Object.create( null ), + post: Object.create( null ) + }; + + this._handlers = Object.create( null ); + + this._root = options._root; + this._yield = options._yield; + + this._torndown = false; + + this._fragment = create_main_fragment( this._state, this ); + if ( options.target ) this._fragment.mount( options.target, null ); +} + +assign( SvelteComponent.prototype, template.methods, proto ); + +SvelteComponent.prototype._set = function _set ( newState ) { + var oldState = this._state; + this._state = assign( {}, oldState, newState ); + + dispatchObservers( this, this._observers.pre, newState, oldState ); + if ( this._fragment ) this._fragment.update( newState, this._state ); + dispatchObservers( this, this._observers.post, newState, oldState ); +}; + +SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { + this.fire( 'destroy' ); + + this._fragment.destroy( detach !== false ); + this._fragment = null; + + this._state = {}; + this._torndown = true; +}; + +export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/event-handlers-custom/input.html b/test/js/samples/event-handlers-custom/input.html new file mode 100644 index 0000000000..00d79363fa --- /dev/null +++ b/test/js/samples/event-handlers-custom/input.html @@ -0,0 +1,16 @@ + + + \ No newline at end of file