<!DOCTYPE html> <html> <head> <!-- TODO(arv): Check in Closue unit tests and make this run as part of the tests --> <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script> <script src="../cr.js"></script> <script src="event_target.js"></script> <script> goog.require('goog.testing.jsunit'); </script> </head> <body> <script> const EventTarget = cr.EventTarget; const Event = cr.Event; function testFunctionListener() { var fi = 0; function f(e) { fi++; } var gi = 0; function g(e) { gi++; } var et = new EventTarget; et.addEventListener('f', f); et.addEventListener('g', g); // Adding again should not cause it to be called twice et.addEventListener('f', f); et.dispatchEvent(new Event('f')); assertEquals('Should have been called once', 1, fi); assertEquals(0, gi); et.removeEventListener('f', f); et.dispatchEvent(new Event('f')); assertEquals('Should not have been called again', 1, fi); et.dispatchEvent(new Event('g')); assertEquals('Should have been called once', 1, gi); } function testHandleEvent() { var fi = 0; var f = { handleEvent: function(e) { fi++; } }; var gi = 0; var g = { handleEvent: function(e) { gi++; } }; var et = new EventTarget; et.addEventListener('f', f); et.addEventListener('g', g); // Adding again should not cause it to be called twice et.addEventListener('f', f); et.dispatchEvent(new Event('f')); assertEquals('Should have been called once', 1, fi); assertEquals(0, gi); et.removeEventListener('f', f); et.dispatchEvent(new Event('f')); assertEquals('Should not have been called again', 1, fi); et.dispatchEvent(new Event('g')); assertEquals('Should have been called once', 1, gi); } function testPreventDefault() { var i = 0; function prevent(e) { i++; e.preventDefault(); } var j = 0; function pass(e) { j++; } var et = new EventTarget; et.addEventListener('test', pass); assertTrue(et.dispatchEvent(new Event('test'))); assertEquals(1, j); et.addEventListener('test', prevent); console.log('NOW'); assertFalse(et.dispatchEvent(new Event('test'))); assertEquals(2, j); assertEquals(1, i); } function testReturnFalse() { var i = 0; function prevent(e) { i++; return false; } var j = 0; function pass(e) { j++; } var et = new EventTarget; et.addEventListener('test', pass); assertTrue(et.dispatchEvent(new Event('test'))); assertEquals(1, j); et.addEventListener('test', prevent); assertFalse(et.dispatchEvent(new Event('test'))); assertEquals(2, j); assertEquals(1, i); } </script> </body> </html>