aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html399
1 files changed, 0 insertions, 399 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html b/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html
deleted file mode 100644
index 094a859..0000000
--- a/contexts/data/lib/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html
+++ /dev/null
@@ -1,399 +0,0 @@
-<!DOCTYPE html>
-<!--
-
- @author marcosalmeida@google.com (Marcos Almeida)
--->
-<html>
-<!--
-Copyright 2008 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.editor.plugins.AbstractDialogPlugin</title>
-<script src="../../base.js"></script>
-<script>
- goog.require('goog.dom.SavedRange');
- goog.require('goog.editor.Field');
- goog.require('goog.editor.Field.EventType');
- goog.require('goog.editor.plugins.AbstractDialogPlugin');
- goog.require('goog.editor.plugins.AbstractDialogPlugin.EventType');
- goog.require('goog.events.EventHandler');
- goog.require('goog.functions');
- goog.require('goog.testing.LooseMock');
- goog.require('goog.testing.MockClock');
- goog.require('goog.testing.MockControl');
- goog.require('goog.testing.PropertyReplacer');
- goog.require('goog.testing.editor.FieldMock');
- goog.require('goog.testing.editor.TestHelper');
- goog.require('goog.testing.events');
- goog.require('goog.testing.jsunit');
- goog.require('goog.ui.editor.AbstractDialog');
- goog.require('goog.ui.editor.AbstractDialog.Builder');
- goog.require('goog.userAgent');
-
-</script>
-</head>
-<body>
-<script>
-
- var plugin;
- var mockCtrl;
- var mockField;
- var mockSavedRange;
- var mockOpenedHandler;
- var mockClosedHandler;
-
- var COMMAND = 'myCommand';
- var stubs = new goog.testing.PropertyReplacer();
-
- var mockClock;
- var fieldObj;
- var fieldElem;
- var mockHandler;
-
- function setUp() {
- mockCtrl = new goog.testing.MockControl();
- mockOpenedHandler = mockCtrl.createLooseMock(goog.events.EventHandler);
- mockClosedHandler = mockCtrl.createLooseMock(goog.events.EventHandler);
-
- mockField = new goog.testing.editor.FieldMock(undefined, undefined, {});
- mockCtrl.addMock(mockField);
- mockField.focus();
-
- plugin = createDialogPlugin();
- }
-
- function setUpMockRange() {
- mockSavedRange = mockCtrl.createLooseMock(goog.dom.SavedRange);
- mockSavedRange.restore();
-
- stubs.set(goog.editor.range, 'saveUsingNormalizedCarets',
- goog.functions.constant(mockSavedRange));
- }
-
- function tearDown() {
- stubs.reset();
- tearDownRealEditableField();
- if (mockClock) {
- // Crucial to letting time operations work normally in the rest of tests.
- mockClock.dispose();
- }
- if (plugin) {
- mockField.$setIgnoreUnexpectedCalls(true);
- plugin.dispose();
- }
- }
-
- /**
- * Creates a concrete instance of goog.ui.editor.AbstractDialog by adding
- * a plain implementation of createDialogControl().
- * @param {goog.dom.DomHelper} dialogDomHelper The dom helper to be used to
- * create the dialog.
- * @return {goog.ui.editor.AbstractDialog} The created dialog.
- */
- function createDialog(domHelper) {
- var dialog = new goog.ui.editor.AbstractDialog(domHelper);
- dialog.createDialogControl = function() {
- return new goog.ui.editor.AbstractDialog.Builder(dialog).build();
- };
- return dialog;
- }
-
- /**
- * Creates a concrete instance of the abstract class
- * goog.editor.plugins.AbstractDialogPlugin
- * and registers it with the mock editable field being used.
- * @return {goog.editor.plugins.AbstractDialogPlugin} The created plugin.
- */
- function createDialogPlugin() {
- var plugin = new goog.editor.plugins.AbstractDialogPlugin(COMMAND);
- plugin.createDialog = createDialog;
- plugin.returnControlToEditableField = plugin.restoreOriginalSelection;
- plugin.registerFieldObject(mockField);
- plugin.addEventListener(
- goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED,
- mockOpenedHandler);
- plugin.addEventListener(
- goog.editor.plugins.AbstractDialogPlugin.EventType.CLOSED,
- mockClosedHandler);
- return plugin;
- }
-
- /**
- * Sets up the mock event handler to expect an OPENED event.
- */
- function expectOpened(opt_times) {
- mockOpenedHandler.handleEvent(new goog.testing.mockmatchers.ArgumentMatcher(
- function(arg) {
- return arg.type ==
- goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED;
- }));
- mockField.dispatchSelectionChangeEvent();
- if (opt_times) {
- mockOpenedHandler.$times(opt_times);
- mockField.$times(opt_times);
- }
- }
-
- /**
- * Sets up the mock event handler to expect a CLOSED event.
- */
- function expectClosed(opt_times) {
- mockClosedHandler.handleEvent(new goog.testing.mockmatchers.ArgumentMatcher(
- function(arg) {
- return arg.type ==
- goog.editor.plugins.AbstractDialogPlugin.EventType.CLOSED;
- }));
- mockField.dispatchSelectionChangeEvent();
- if (opt_times) {
- mockClosedHandler.$times(opt_times);
- mockField.$times(opt_times);
- }
- }
-
-
- /**
- * Tests the simple flow of calling execCommand (which opens the
- * dialog) and immediately disposing of the plugin (which closes the dialog).
- * @param {boolean=} opt_reuse Whether to set the plugin to reuse its dialog.
- */
- function testExecAndDispose(opt_reuse) {
- setUpMockRange();
- expectOpened();
- expectClosed();
- mockField.debounceEvent(goog.editor.Field.EventType.SELECTIONCHANGE);
- mockCtrl.$replayAll();
- if (opt_reuse) {
- plugin.setReuseDialog(true);
- }
- assertFalse('Dialog should not be open yet',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- plugin.execCommand(COMMAND);
- assertTrue('Dialog should be open now',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- var tempDialog = plugin.getDialog();
- plugin.dispose();
- assertFalse('Dialog should not still be open after disposal',
- tempDialog.isOpen());
- mockCtrl.$verifyAll();
- }
-
- /**
- * Tests execCommand and dispose while reusing the dialog.
- */
- function testExecAndDisposeReuse() {
- testExecAndDispose(true);
- }
-
-
- /**
- * Tests the flow of calling execCommand (which opens the dialog) and
- * then hiding it (simulating that a user did somthing to cause the dialog to
- * close).
- * @param {boolean} reuse Whether to set the plugin to reuse its dialog.
- */
- function testExecAndHide(opt_reuse) {
- setUpMockRange();
- expectOpened();
- expectClosed();
- mockField.debounceEvent(goog.editor.Field.EventType.SELECTIONCHANGE);
- mockCtrl.$replayAll();
- if (opt_reuse) {
- plugin.setReuseDialog(true);
- }
- assertFalse('Dialog should not be open yet',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- plugin.execCommand(COMMAND);
- assertTrue('Dialog should be open now',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- var tempDialog = plugin.getDialog();
- plugin.getDialog().hide();
- assertFalse('Dialog should not still be open after hiding',
- tempDialog.isOpen());
- if (opt_reuse) {
- assertFalse('Dialog should not be disposed after hiding (will be reused)',
- tempDialog.isDisposed());
- } else {
- assertTrue('Dialog should be disposed after hiding',
- tempDialog.isDisposed());
- }
- plugin.dispose();
- mockCtrl.$verifyAll();
- }
-
- /**
- * Tests execCommand and hide while reusing the dialog.
- */
- function testExecAndHideReuse() {
- testExecAndHide(true);
- }
-
- /**
- * Tests the flow of calling execCommand (which opens a dialog) and
- * then calling it again before the first dialog is closed. This is not
- * something anyone should be doing since dialogs are (usually?) modal so the
- * user can't do another execCommand before closing the first dialog. But
- * since the API makes it possible, I thought it would be good to guard
- * against and unit test.
- * @param {boolean} reuse Whether to set the plugin to reuse its dialog.
- */
- function testExecTwice(opt_reuse) {
- setUpMockRange();
- if (opt_reuse) {
- expectOpened(2); // The second exec should cause a second OPENED event.
- // But the dialog was not closed between exec calls, so only one CLOSED is
- // expected.
- expectClosed();
- plugin.setReuseDialog(true);
- mockField.debounceEvent(goog.editor.Field.EventType.SELECTIONCHANGE);
- } else {
- expectOpened(2); // The second exec should cause a second OPENED event.
- // The first dialog will be disposed so there should be two CLOSED events.
- expectClosed(2);
- mockSavedRange.restore(); // Expected 2x, once already recorded in setup.
- mockField.focus(); // Expected 2x, once already recorded in setup.
- mockField.debounceEvent(goog.editor.Field.EventType.SELECTIONCHANGE);
- mockField.$times(2);
- }
- mockCtrl.$replayAll();
-
- assertFalse('Dialog should not be open yet',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- plugin.execCommand(COMMAND);
- assertTrue('Dialog should be open now',
- !!plugin.getDialog() && plugin.getDialog().isOpen());
-
- var tempDialog = plugin.getDialog();
- plugin.execCommand(COMMAND);
- if (opt_reuse) {
- assertTrue('Reused dialog should still be open after second exec',
- tempDialog.isOpen());
- assertFalse('Reused dialog should not be disposed after second exec',
- tempDialog.isDisposed());
- } else {
- assertFalse('First dialog should not still be open after opening second',
- tempDialog.isOpen());
- assertTrue('First dialog should be disposed after opening second',
- tempDialog.isDisposed());
- }
- plugin.dispose();
- mockCtrl.$verifyAll();
- }
-
- /**
- * Tests execCommand twice while reusing the dialog.
- */
- function testExecTwiceReuse() {
- testExecTwice(true);
- }
-
-
- /**
- * Tests that the selection is cleared when the dialog opens and is
- * correctly restored after it closes.
- */
- function testRestoreSelection() {
- setUpRealEditableField();
-
- fieldObj.setHtml(false, '12345');
- var elem = fieldObj.getElement();
- var helper = new goog.testing.editor.TestHelper(elem);
- helper.select('12345', 1, '12345', 4); // Selects '234'.
-
- assertEquals('Incorrect text selected before dialog is opened',
- '234',
- fieldObj.getRange().getText());
- plugin.execCommand(COMMAND);
- if (!goog.userAgent.IE && !goog.userAgent.OPERA) {
- // IE returns some bogus range when field doesn't have selection.
- // Opera can't remove the selection from a whitebox field.
- assertNull('There should be no selection while dialog is open',
- fieldObj.getRange());
- }
- plugin.getDialog().hide();
- assertEquals('Incorrect text selected after dialog is closed',
- '234',
- fieldObj.getRange().getText());
- }
-
- /**
- * Setup a real editable field (instead of a mock) and register the plugin to
- * it.
- */
- function setUpRealEditableField() {
- fieldElem = document.createElement('div');
- fieldElem.id = 'myField';
- document.body.appendChild(fieldElem);
- fieldObj = new goog.editor.Field('myField', document);
- fieldObj.makeEditable();
- // Register the plugin to that field.
- plugin.getTrogClassId = goog.functions.constant('myClassId');
- fieldObj.registerPlugin(plugin);
- }
-
- /**
- * Tear down the real editable field.
- */
- function tearDownRealEditableField() {
- if (fieldObj) {
- fieldObj.makeUneditable();
- fieldObj.dispose();
- fieldObj = null;
- }
- if (fieldElem && fieldElem.parentNode == document.body) {
- document.body.removeChild(fieldElem);
- }
- }
-
-
- /**
- * Tests that after the dialog is hidden via a keystroke, the editable field
- * doesn't fire an extra SELECTIONCHANGE event due to the keyup from that
- * keystroke.
- * There is also a robot test in dialog_robot.html to test debouncing the
- * SELECTIONCHANGE event when the dialog closes.
- */
- function testDebounceSelectionChange() {
- mockClock = new goog.testing.MockClock(true);
- // Initial time is 0 which evaluates to false in debouncing implementation.
- mockClock.tick(1);
-
- setUpRealEditableField();
-
- // Set up a mock event handler to make sure selection change isn't fired
- // more than once on close and a second time on close.
- var count = 0;
- fieldObj.addEventListener(goog.editor.Field.EventType.SELECTIONCHANGE,
- function(e) {
- count++;
- });
-
- assertEquals(0, count);
- plugin.execCommand(COMMAND);
- assertEquals(1, count);
- plugin.getDialog().hide();
- assertEquals(2, count);
-
- // Fake the keyup event firing on the field after the dialog closes.
- var e = new goog.events.Event('keyup', plugin.fieldObject.getElement());
- e.keyCode = 13;
- goog.testing.events.fireBrowserEvent(e);
-
- // Tick the mock clock so that selection change tries to fire.
- mockClock.tick(goog.editor.Field.SELECTION_CHANGE_FREQUENCY_ + 1);
-
- // Ensure the handler did not fire again.
- assertEquals(2, count);
- }
-
-</script>
-</body>
-</html>