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