aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html414
1 files changed, 0 insertions, 414 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html b/contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html
deleted file mode 100644
index b6b9561..0000000
--- a/contexts/data/lib/closure-library/closure/goog/events/pastehandler_test.html
+++ /dev/null
@@ -1,414 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-Copyright 2009 The Closure Library Authors. All Rights Reserved.
-
-Use of this source code is governed by the Apache License, Version 2.0.
-See the COPYING file for details.
--->
-<!--
--->
-<head>
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<title>Closure Unit Tests - goog.events.PasteHandler</title>
-<script src="../base.js"></script>
-<script>
- goog.require('goog.events.PasteHandler');
- goog.require('goog.testing.MockClock');
- goog.require('goog.testing.MockUserAgent');
- goog.require('goog.testing.jsunit');
- goog.require('goog.events.EventTarget');
- goog.require('goog.events.EventType');
- goog.require('goog.dom');
-</script>
-</head>
-<body>
-
-<textarea id="foo"></textarea>
-
-<script>
-
-function setUp() {
- // TODO(user): fix {@code goog.testing.MockUserAgent} to do the right thing.
- // the code doesn't seem to be updating the variables with
- // goog.userAgent.init_(), which means it is not allowing me to mock the
- // user agent variables.
- goog.userAgent.GECKO = true;
- goog.userAgent.IE = false;
- goog.userAgent.WEBKIT = false;
- goog.userAgent.VERSION = '1.8';
-
- textarea = new goog.events.EventTarget();
- textarea.value = '';
- clock = new goog.testing.MockClock(true);
- mockUserAgent = new goog.testing.MockUserAgent();
- handler = new goog.events.PasteHandler(textarea);
- pasted = false;
- goog.events.listen(handler, goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
-}
-
-function tearDown() {
- textarea.dispose();
- handler.dispose();
- clock.dispose();
- mockUserAgent.dispose();
-}
-
-function newBrowserEvent(type) {
- if (goog.isString(type)) {
- return new goog.events.BrowserEvent({type: type});
- } else {
- return new goog.events.BrowserEvent(type);
- }
-}
-
-function testDispatchingPasteEventSupportedByAFewBrowsersWork() {
- goog.userAgent.IE = true;
- var handlerThatSupportsPasteEvents =
- new goog.events.PasteHandler(textarea);
- // user clicks on the textarea and give it focus
- goog.events.listen(handlerThatSupportsPasteEvents,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- textarea.dispatchEvent(newBrowserEvent('paste'));
- assertTrue(pasted);
-}
-
-function testJustTypingDoesntFirePasteEvent() {
- // user clicks on the textarea and give it focus
- textarea.dispatchEvent(newBrowserEvent(goog.events.EventType.FOCUS));
- assertFalse(pasted);
- // user starts typing
- textarea.dispatchEvent(newBrowserEvent({
- type: goog.events.EventType.KEYDOWN,
- keyCode: goog.events.KeyCodes.A
- }));
- textarea.value = 'a';
- assertFalse(pasted);
-
- // still typing
- textarea.dispatchEvent({
- type: goog.events.EventType.KEYDOWN,
- keyCode: goog.events.KeyCodes.B
- });
- textarea.value = 'ab';
- assertFalse(pasted);
-
- // ends typing
- textarea.dispatchEvent({
- type: goog.events.EventType.KEYDOWN,
- keyCode: goog.events.KeyCodes.C
- });
- textarea.value = 'abc';
- assertFalse(pasted);
-}
-
-function testStartsOnInitialState() {
- assertTrue(handler.getState() == goog.events.PasteHandler.State.INIT);
- assertFalse(pasted);
-}
-
-function testBlurOnInit() {
- textarea.dispatchEvent(goog.events.EventType.BLUR);
- assertTrue(handler.getState() == goog.events.PasteHandler.State.INIT);
- assertFalse(pasted);
-}
-
-function testFocusOnInit() {
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
- assertTrue(handler.getState() == goog.events.PasteHandler.State.FOCUSED);
- assertFalse(pasted);
-}
-
-function testInputOnFocus() {
- // user clicks on the textarea
- textarea.dispatchEvent(newBrowserEvent(goog.events.EventType.FOCUS));
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- // and right click -> paste a text!
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(handler.getState() == goog.events.PasteHandler.State.FOCUSED);
- // make sure we detected it
- assertTrue(pasted);
-}
-
-function testKeyPressOnFocus() {
- // user clicks on the textarea
- textarea.dispatchEvent(newBrowserEvent(goog.events.EventType.FOCUS));
-
- // starts typing something
- textarea.dispatchEvent(newBrowserEvent({
- type: goog.events.EventType.KEYDOWN,
- keyCode: goog.events.KeyCodes.A
- }));
- assertTrue(handler.getState() == goog.events.PasteHandler.State.TYPING);
- assertFalse(pasted);
-
- // and then presses ctrl+v
- textarea.dispatchEvent(newBrowserEvent({
- type: goog.events.EventType.KEYDOWN,
- keyCode: goog.events.KeyCodes.V,
- ctrlKey: true
- }));
- assertTrue(handler.getState() == goog.events.PasteHandler.State.TYPING);
-
- // makes sure we detected it
- assertTrue(pasted);
-}
-
-function testMouseOverOnInit() {
- // user has something on the events
- textarea.value = 'pasted string';
- // and right click -> paste it on the textarea, WITHOUT giving focus
- textarea.dispatchEvent(newBrowserEvent(goog.events.EventType.MOUSEOVER));
- assertTrue(handler.getState() == goog.events.PasteHandler.State.INIT);
- // makes sure we detect it
- assertTrue(pasted);
-
- pasted = false;
-
- // user normaly mouseovers the textarea, with no text change
- textarea.dispatchEvent(goog.events.EventType.MOUSEOVER);
- assertTrue(handler.getState() == goog.events.PasteHandler.State.INIT);
- // text area value doesnt change
- assertFalse(pasted);
-}
-
-function testMouseOverAfterTyping() {
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
- assertFalse(pasted);
- textarea.dispatchEvent(
- {type: goog.events.EventType.KEYDOWN, keyCode: goog.events.KeyCodes.A});
- assertFalse(pasted);
- textarea.value = 'a';
- textarea.dispatchEvent('input');
- assertFalse(pasted);
- assertEquals('a', handler.oldValue_);
- textarea.dispatchEvent(goog.events.EventType.MOUSEOVER);
- assertFalse(pasted);
-}
-
-function testTypingAndThenRightClickPaste() {
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
-
- textarea.dispatchEvent(
- {type: goog.events.EventType.KEYDOWN, keyCode: goog.events.KeyCodes.A});
- assertFalse(pasted);
- textarea.value = 'a';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- textarea.dispatchEvent('input');
- assertFalse(pasted);
-
- assertEquals('a', handler.oldValue_);
-
- textarea.value = 'ab';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-}
-
-function testTypingReallyFastDispatchesTwoInputEventsBeforeTheKeyDownEvent() {
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
-
- // keydown and input events seems to be fired indepently: even though input
- // should happen after the key event, it doens't if the user types fast
- // enough. FF2 + linux doesn't fire keydown events for every key pressed when
- // you type fast enough. if one of the keydown events gets swallowed, two
- // input events are fired consecutively. notice that there is a similar
- // scenario, that actually does produce a valid paste action.
- // {@see testRightClickRightClickAlsoDispatchesTwoConsecutiveInputEvents}
-
- textarea.dispatchEvent(
- {type: goog.events.EventType.KEYDOWN, keyCode: goog.events.KeyCodes.A});
- assertFalse(pasted);
- textarea.value = 'a';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER -
- 1);
- textarea.dispatchEvent('input');
- assertFalse(pasted);
-
- // second key down events gets fired on a different order
- textarea.value = 'ab';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER -
- 1);
- textarea.dispatchEvent('input');
- assertFalse(pasted);
-}
-
-function testRightClickRightClickAlsoDispatchesTwoConsecutiveInputEvents() {
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
-
- // there is also another case that two consecutive INPUT events are fired,
- // but in a valid paste action: if the user edit -> paste -> edit -> paste,
- // it is a valid paste action.
-
- textarea.value = 'a';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-
- // second key down events gets fired on a different order
- textarea.value = 'ab';
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-}
-
-function testMiddleClickWithoutFocusTriggersPasteEvent() {
- // if the textarea is NOT selected, and then we use the middle button,
- // FF2+linux pastes what was last highlighted, causing a paste action.
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-}
-
-
-function testMacRightClickPasteRequiresToPressCtrlBecauseItDoesntHaveTwoMouseButtons() {
- // Macs don't have two buttons mouse: this means that you need to press
- // ctrl + click to get to the menu, and then you can click paste.
- // The sequences of events fired on Opera are:
- // focus -> keydown (keyCode == 0, not e.ctrlKey) -> input
- goog.userAgent.OPERA = true;
- goog.userAgent.MAC = true;
- var handler = new goog.events.PasteHandler(textarea);
- // user clicks on the textarea and give it focus
- goog.events.listen(handler,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
- assertFalse(pasted);
- textarea.dispatchEvent({type: goog.events.EventType.KEYDOWN, keyCode: 0});
- assertFalse(pasted);
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-}
-
-function testOperaOnMacFiresKeyCode17WhenAppleKeyIsPressedButDoesNotFireAnKeyDownOnVLater() {
- // Opera on Macs fires keycode 17 when apple key is pressed, and then it does
- // not fire a keydown event when the V is pressed.
- goog.userAgent.OPERA = true;
- goog.userAgent.MAC = true;
- var handler = new goog.events.PasteHandler(textarea);
- // user clicks on the textarea and give it focus
- goog.events.listen(handler,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- textarea.dispatchEvent(goog.events.EventType.FOCUS);
- assertFalse(pasted);
- // apple key is pressed, generating a keydown event
- textarea.dispatchEvent({type: goog.events.EventType.KEYDOWN, keyCode: 17});
- assertFalse(pasted);
- clock.tick(
- goog.events.PasteHandler.MANDATORY_MS_BETWEEN_INPUT_EVENTS_TIE_BREAKER +
- 1);
- // and then text is added magically without any extra keydown events.
- textarea.dispatchEvent(newBrowserEvent('input'));
- assertTrue(pasted);
-}
-
-function testScriptingDoesntTriggerPasteEvents() {
- var handlerUsedToListenForScriptingChanges =
- new goog.events.PasteHandler(textarea);
- pasted = false;
- // user clicks on the textarea and give it focus
- goog.events.listen(handlerUsedToListenForScriptingChanges,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- goog.dom.getElement('foo').value = 'dear paste handler,';
- assertFalse(pasted);
- goog.dom.getElement('foo').value = 'please dont misunderstand script changes';
- assertFalse(pasted);
- goog.dom.getElement('foo').value = 'with user generated paste events';
- assertFalse(pasted);
- goog.dom.getElement('foo').value = 'thanks!';
- assertFalse(pasted);
-}
-
-function testAfterPaste() {
- goog.userAgent.IE = true;
- var handlerThatSupportsPasteEvents =
- new goog.events.PasteHandler(textarea);
- pasted = false;
- goog.events.listen(handlerThatSupportsPasteEvents,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- var afterPasteFired = false;
- goog.events.listen(handlerThatSupportsPasteEvents,
- goog.events.PasteHandler.EventType.AFTER_PASTE,
- function() {
- afterPasteFired = true;
- });
-
- // Initial paste event comes before AFTER_PASTE has fired.
- textarea.dispatchEvent(newBrowserEvent('paste'));
- assertTrue(pasted);
- assertFalse(afterPasteFired);
-
- // Once text is pasted, it takes a bit to detect it, at which point
- // AFTER_PASTE is fired.
- clock.tick(goog.events.PasteHandler.PASTE_POLLING_PERIOD_MS_);
- textarea.value = 'text';
- clock.tick(goog.events.PasteHandler.PASTE_POLLING_PERIOD_MS_);
- assertTrue(afterPasteFired);
-}
-
-
-function testAfterPasteNotFiredIfDelayTooLong() {
- goog.userAgent.IE = true;
- var handlerThatSupportsPasteEvents =
- new goog.events.PasteHandler(textarea);
- pasted = false;
- goog.events.listen(handlerThatSupportsPasteEvents,
- goog.events.PasteHandler.EventType.PASTE,
- function() {
- pasted = true;
- });
- var afterPasteFired = false;
- goog.events.listen(handlerThatSupportsPasteEvents,
- goog.events.PasteHandler.EventType.AFTER_PASTE,
- function() {
- afterPasteFired = true;
- });
-
- // Initial paste event comes before AFTER_PASTE has fired.
- textarea.dispatchEvent(newBrowserEvent('paste'));
- assertTrue(pasted);
- assertFalse(afterPasteFired);
-
- // If the new text doesn't show up in time, we never fire AFTER_PASTE.
- clock.tick(goog.events.PasteHandler.PASTE_POLLING_TIMEOUT_MS_);
- textarea.value = 'text';
- clock.tick(goog.events.PasteHandler.PASTE_POLLING_PERIOD_MS_);
- assertFalse(afterPasteFired);
-}
-
-</script>
-</body>
-</html>