|
|
@@ -0,0 +1,63 @@
|
|
|
+/**
|
|
|
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
|
|
|
+ * For licensing, see LICENSE.md.
|
|
|
+ */
|
|
|
+
|
|
|
+/* global Event */
|
|
|
+
|
|
|
+import preventDefault from '../../src/bindings/preventdefault';
|
|
|
+import View from '../../src/view';
|
|
|
+import Template from '../../src/template';
|
|
|
+
|
|
|
+describe( 'preventDefault', () => {
|
|
|
+ it( 'prevents default of a native DOM event', () => {
|
|
|
+ const view = new View();
|
|
|
+
|
|
|
+ view.template = new Template( {
|
|
|
+ tag: 'div',
|
|
|
+
|
|
|
+ on: {
|
|
|
+ foo: preventDefault( view )
|
|
|
+ }
|
|
|
+ } );
|
|
|
+
|
|
|
+ const evt = new Event( 'foo', { bubbles: true } );
|
|
|
+ const spy = sinon.spy( evt, 'preventDefault' );
|
|
|
+
|
|
|
+ // Render to enable bubbling.
|
|
|
+ view.element;
|
|
|
+
|
|
|
+ view.element.dispatchEvent( evt );
|
|
|
+ sinon.assert.calledOnce( spy );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'prevents only when target is view#element', () => {
|
|
|
+ const view = new View();
|
|
|
+ const child = new View();
|
|
|
+
|
|
|
+ child.template = new Template( {
|
|
|
+ tag: 'a'
|
|
|
+ } );
|
|
|
+
|
|
|
+ view.template = new Template( {
|
|
|
+ tag: 'div',
|
|
|
+
|
|
|
+ on: {
|
|
|
+ foo: preventDefault( view )
|
|
|
+ },
|
|
|
+
|
|
|
+ children: [
|
|
|
+ child
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const evt = new Event( 'foo', { bubbles: true } );
|
|
|
+ const spy = sinon.spy( evt, 'preventDefault' );
|
|
|
+
|
|
|
+ // Render to enable bubbling.
|
|
|
+ view.element;
|
|
|
+
|
|
|
+ child.element.dispatchEvent( evt );
|
|
|
+ sinon.assert.notCalled( spy );
|
|
|
+ } );
|
|
|
+} );
|