| // Copyright 2010 The Closure Library Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS-IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| goog.provide('goog.ui.PromptTest'); |
| goog.setTestOnly('goog.ui.PromptTest'); |
| |
| goog.require('goog.dom.selection'); |
| goog.require('goog.events.InputHandler'); |
| goog.require('goog.events.KeyCodes'); |
| goog.require('goog.functions'); |
| goog.require('goog.string'); |
| goog.require('goog.testing.events'); |
| goog.require('goog.testing.jsunit'); |
| goog.require('goog.ui.BidiInput'); |
| goog.require('goog.ui.Dialog'); |
| goog.require('goog.ui.Prompt'); |
| goog.require('goog.userAgent'); |
| goog.require('goog.userAgent.product'); |
| |
| var prompt; |
| |
| function setUp() { |
| document.body.focus(); |
| } |
| |
| function tearDown() { |
| goog.dispose(prompt); |
| } |
| |
| function testFocusOnInputElement() { |
| // FF does not perform focus if the window is not active in the first place. |
| if (goog.userAgent.GECKO && document.hasFocus && !document.hasFocus()) { |
| return; |
| } |
| |
| var promptResult = undefined; |
| prompt = new goog.ui.Prompt('title', 'Prompt:', function(result) { |
| promptResult = result; |
| }, 'defaultValue'); |
| prompt.setVisible(true); |
| |
| if (goog.userAgent.product.CHROME) { |
| // For some reason, this test fails non-deterministically on Chrome, |
| // but only on the test farm. |
| return; |
| } |
| assertEquals('defaultValue', |
| goog.dom.selection.getText(prompt.userInputEl_)); |
| } |
| |
| |
| function testValidationFunction() { |
| var promptResult = undefined; |
| prompt = new goog.ui.Prompt('title', 'Prompt:', function(result) { |
| promptResult = result; |
| }, ''); |
| prompt.setValidationFunction(goog.functions.not(goog.string.isEmptyOrWhitespace)); |
| prompt.setVisible(true); |
| |
| var buttonSet = prompt.getButtonSet(); |
| var okButton = buttonSet.getButton(goog.ui.Dialog.DefaultButtonKeys.OK); |
| assertTrue(okButton.disabled); |
| |
| prompt.userInputEl_.value = ''; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.SPACE); |
| assertTrue(okButton.disabled); |
| prompt.userInputEl_.value = 'foo'; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.X); |
| assertFalse(okButton.disabled); |
| } |
| |
| function testBidiInput() { |
| var shalomInHebrew = '\u05e9\u05dc\u05d5\u05dd'; |
| var promptResult = undefined; |
| prompt = new goog.ui.Prompt('title', 'Prompt:', goog.functions.NULL, ''); |
| var bidiInput = new goog.ui.BidiInput(); |
| prompt.setInputDecoratorFn(goog.bind(bidiInput.decorate, bidiInput)); |
| prompt.setVisible(true); |
| |
| prompt.userInputEl_.value = shalomInHebrew; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.SPACE); |
| goog.testing.events.fireBrowserEvent( |
| {'target' : prompt.userInputEl_, 'type' : 'input'}); |
| bidiInput.inputHandler_.dispatchEvent( |
| goog.events.InputHandler.EventType.INPUT); |
| assertEquals('rtl', prompt.userInputEl_.dir); |
| |
| prompt.userInputEl_.value = 'shalomInEnglish'; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.SPACE); |
| goog.testing.events.fireBrowserEvent( |
| {'target' : prompt.userInputEl_, 'type' : 'input'}); |
| bidiInput.inputHandler_.dispatchEvent( |
| goog.events.InputHandler.EventType.INPUT); |
| assertEquals('ltr', prompt.userInputEl_.dir); |
| goog.dispose(bidiInput); |
| } |
| |
| function testBidiInput_off() { |
| var shalomInHebrew = '\u05e9\u05dc\u05d5\u05dd'; |
| var promptResult = undefined; |
| prompt = new goog.ui.Prompt('title', 'Prompt:', goog.functions.NULL, ''); |
| prompt.setVisible(true); |
| |
| prompt.userInputEl_.value = shalomInHebrew; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.SPACE); |
| goog.testing.events.fireBrowserEvent( |
| {'target' : prompt.userInputEl_, 'type' : 'input'}); |
| assertEquals('', prompt.userInputEl_.dir); |
| |
| prompt.userInputEl_.value = 'shalomInEnglish'; |
| goog.testing.events.fireKeySequence(prompt.userInputEl_, |
| goog.events.KeyCodes.SPACE); |
| assertEquals('', prompt.userInputEl_.dir); |
| } |
| |
| // An interactive test so we can manually see what it looks like. |
| function newPrompt() { |
| prompt = new goog.ui.Prompt('title', 'Prompt:', function(result) { |
| alert('Result: ' + result); |
| goog.dispose(prompt); |
| }, 'defaultValue'); |
| prompt.setVisible(true); |
| } |