123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- // Copyright 2013 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.tweak.TweakUiTest');
- goog.setTestOnly('goog.tweak.TweakUiTest');
- goog.require('goog.dom');
- goog.require('goog.dom.TagName');
- goog.require('goog.string');
- goog.require('goog.testing.jsunit');
- goog.require('goog.tweak');
- goog.require('goog.tweak.TweakUi');
- /** @suppress {extraRequire} needed for createRegistryEntries. */
- goog.require('goog.tweak.testhelpers');
- var root;
- var registry;
- var EXPECTED_ENTRIES_COUNT = 14;
- function setUp() {
- root = document.getElementById('root');
- // Make both test cases use the same entries in order to be able to test that
- // having two UIs on the same page does not cause trouble.
- createRegistryEntries('');
- registry = goog.tweak.getRegistry();
- }
- function tearDown() {
- goog.tweak.activeBooleanGroup_ = null;
- // When debugging a single test, don't clear out the DOM.
- if (window.location.search.indexOf('runTests') == -1) {
- goog.dom.removeChildren(root);
- }
- }
- function tearDownPage() {
- // When debugging a single test, don't clear out the DOM.
- if (window.location.search.indexOf('runTests') != -1) {
- return;
- }
- // Create both registries for interactive testing.
- createRegistryEntries('');
- registry = goog.tweak.getRegistry();
- // Add an extra tweak for testing the creation of tweaks after the UI has
- // already been rendered.
- var entryCounter = 0;
- goog.tweak.registerButton(
- 'CreateNewTweak', 'Creates a new tweak. Meant ' +
- 'to simulate a tweak being registered in a lazy-loaded module.',
- function() {
- goog.tweak.registerBoolean(
- 'Lazy' + ++entryCounter, 'Lazy-loaded tweak.');
- });
- goog.tweak.registerButton(
- 'CreateNewTweakInNamespace1',
- 'Creates a new tweak within a namespace. Meant to simulate a tweak ' +
- 'being registered in a lazy-loaded module.',
- function() {
- goog.tweak.registerString(
- 'foo.bar.Lazy' + ++entryCounter, 'Lazy-loaded tweak.');
- });
- goog.tweak.registerButton(
- 'CreateNewTweakInNamespace2',
- 'Creates a new tweak within a namespace. Meant to simulate a tweak ' +
- 'being registered in a lazy-loaded module.',
- function() {
- goog.tweak.registerNumber(
- 'foo.bar.baz.Lazy' + ++entryCounter, 'Lazy combo', 3,
- {validValues: [1, 2, 3], label: 'Lazy!'});
- });
- var label = document.createElement('h3');
- goog.dom.setTextContent(label, 'TweakUi:');
- root.appendChild(label);
- createUi(false);
- label = document.createElement('h3');
- goog.dom.setTextContent(label, 'Collapsible:');
- root.appendChild(label);
- createUi(true);
- }
- function createUi(collapsible) {
- var tweakUiElem = collapsible ? goog.tweak.TweakUi.createCollapsible() :
- goog.tweak.TweakUi.create();
- root.appendChild(tweakUiElem);
- }
- function getAllEntryDivs() {
- return goog.dom.getElementsByTagNameAndClass(
- goog.dom.TagName.DIV, goog.tweak.TweakUi.ENTRY_CSS_CLASS_);
- }
- function getEntryDiv(entry) {
- var label = goog.tweak.TweakUi.getNamespacedLabel_(entry);
- var allDivs = getAllEntryDivs();
- var ret;
- for (var i = 0, div; div = allDivs[i]; i++) {
- var divText = goog.dom.getTextContent(div);
- if (goog.string.startsWith(divText, label) &&
- goog.string.contains(divText, entry.description)) {
- assertFalse('Found multiple divs matching entry ' + entry.getId(), !!ret);
- ret = div;
- }
- }
- assertTrue('getEntryDiv failed for ' + entry.getId(), !!ret);
- return ret;
- }
- function getEntryInput(entry) {
- var div = getEntryDiv(entry);
- return goog.dom.getElementsByTagName(goog.dom.TagName.INPUT, div)[0] ||
- goog.dom.getElementsByTagName(goog.dom.TagName.SELECT, div)[0];
- }
- function testCreate() {
- createUi(false);
- assertEquals(
- 'Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT,
- getAllEntryDivs().length);
- assertFalse(
- 'checkbox should not be checked 1', getEntryInput(boolEntry).checked);
- assertTrue('checkbox should be checked 2', getEntryInput(boolEntry2).checked);
- // Enusre custom labels are being used.
- var html =
- goog.dom.getElementsByTagName(goog.dom.TagName.BUTTON)[0].innerHTML;
- assertTrue('Button label is wrong', html.indexOf('<btn>') > -1);
- html = getEntryDiv(numEnumEntry).innerHTML;
- assertTrue('Enum2 label is wrong', html.indexOf('second&') > -1);
- }
- function testToggleBooleanSetting() {
- boolEntry.setValue(true);
- createUi(false);
- assertTrue('checkbox should be checked', getEntryInput(boolEntry).checked);
- boolEntry.setValue(false);
- assertFalse(
- 'checkbox should not be checked 1', getEntryInput(boolEntry).checked);
- }
- function testToggleStringSetting() {
- strEntry.setValue('val1');
- createUi(false);
- assertEquals(
- 'Textbox has wrong value 1', 'val1', getEntryInput(strEntry).value);
- strEntry.setValue('val2');
- assertEquals(
- 'Textbox has wrong value 2', 'val2', getEntryInput(strEntry).value);
- }
- function testToggleStringEnumSetting() {
- strEnumEntry.setValue('B');
- createUi(false);
- assertEquals('wrong value 1', 'B', getEntryInput(strEnumEntry).value);
- strEnumEntry.setValue('C');
- assertEquals('wrong value 2', 'C', getEntryInput(strEnumEntry).value);
- }
- function testToggleNumericSetting() {
- numEntry.setValue(3);
- createUi(false);
- assertEquals('wrong value 1', '3', getEntryInput(numEntry).value);
- numEntry.setValue(4);
- assertEquals('wrong value 2', '4', getEntryInput(numEntry).value);
- }
- function testToggleNumericEnumSetting() {
- numEnumEntry.setValue(2);
- createUi(false);
- assertEquals('wrong value 1', '2', getEntryInput(numEnumEntry).value);
- numEnumEntry.setValue(3);
- assertEquals('wrong value 2', '3', getEntryInput(numEnumEntry).value);
- }
- function testClickBooleanSetting() {
- createUi(false);
- var input = getEntryInput(boolEntry);
- input.checked = true;
- input.onchange();
- assertTrue('setting should be true', boolEntry.getNewValue());
- input.checked = false;
- input.onchange();
- assertFalse('setting should be false', boolEntry.getNewValue());
- }
- function testToggleDescriptions() {
- createUi(false);
- var toggleLink = goog.dom.getElementsByTagName(goog.dom.TagName.A, root)[0];
- var heightBefore = root.offsetHeight;
- toggleLink.onclick();
- assertTrue(
- 'Expected div height to grow from toggle descriptions.',
- root.offsetHeight > heightBefore);
- toggleLink.onclick();
- assertEquals(
- 'Expected div height to revert from toggle descriptions.', heightBefore,
- root.offsetHeight);
- }
- function assertEntryOrder(entryId1, entryId2) {
- var entry1 = registry.getEntry(entryId1);
- var entry2 = registry.getEntry(entryId2);
- var div1 = getEntryDiv(entry1);
- var div2 = getEntryDiv(entry2);
- var order = goog.dom.compareNodeOrder(div1, div2);
- assertTrue(entry1.getId() + ' should be before ' + entry2.getId(), order < 0);
- }
- function testAddEntry() {
- createUi(false);
- goog.tweak.registerBoolean('Lazy1', 'Lazy-loaded tweak.');
- goog.tweak.registerBoolean(
- 'Lazy2', 'Lazy-loaded tweak.',
- /* defaultValue */ false, {restartRequired: false});
- goog.tweak.beginBooleanGroup('LazyGroup', 'Lazy-loaded tweak.');
- goog.tweak.registerBoolean('Lazy3', 'Lazy-loaded tweak.');
- goog.tweak.endBooleanGroup();
- assertEquals(
- 'Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT + 4,
- getAllEntryDivs().length);
- assertEntryOrder('Enum2', 'Lazy1');
- assertEntryOrder('Lazy1', 'Lazy2');
- assertEntryOrder('Lazy2', 'Num');
- assertEntryOrder('BoolGroup', 'Lazy3');
- }
- function testAddNamespacedEntries() {
- createUi(false);
- goog.tweak.beginBooleanGroup('NS.LazyGroup', 'Lazy-loaded tweak.');
- goog.tweak.registerBoolean('NS.InGroup', 'Lazy-loaded tweak.');
- goog.tweak.endBooleanGroup();
- goog.tweak.registerBoolean('NS.Banana', 'Lazy-loaded tweak.');
- goog.tweak.registerBoolean('NS.Apple', 'Lazy-loaded tweak.');
- assertEquals(
- 'Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT + 5,
- getAllEntryDivs().length);
- assertEntryOrder('Enum2', 'NS.Apple');
- assertEntryOrder('NS.Apple', 'NS.Banana');
- assertEntryOrder('NS.Banana', 'NS.InGroup');
- }
- function testCollapsibleIsLazy() {
- if (document.createEvent) {
- createUi(true);
- assertEquals('Expected no entry divs.', 0, getAllEntryDivs().length);
- var showLink = goog.dom.getElementsByTagName(goog.dom.TagName.A, root)[0];
- var event = document.createEvent('MouseEvents');
- event.initMouseEvent(
- 'click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false,
- 0, null);
- showLink.dispatchEvent(event);
- assertEquals(
- 'Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT,
- getAllEntryDivs().length);
- }
- }
|