PageRenderTime 53ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/compiler/traceur/branches/v0.10/third_party/closure-library/closure/goog/tweak/tweakui_test.html

https://github.com/pdubroy/Purple
HTML | 280 lines | 235 code | 37 blank | 8 comment | 0 complexity | 28624ab1cfd2769ca2ad1fc0c374e886 MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <!--
  4. Copyright 2010 The Closure Library Authors. All Rights Reserved.
  5. Use of this source code is governed by the Apache License, Version 2.0.
  6. See the COPYING file for details.
  7. Author: agrieve@google.com (Andrew Grieve)
  8. -->
  9. <head>
  10. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  11. <title>Closure Unit Tests - goog.tweak.TweakUi</title>
  12. <script src="../base.js"></script>
  13. <script>
  14. goog.require('goog.dom');
  15. goog.require('goog.string');
  16. goog.require('goog.testing.jsunit');
  17. goog.require('goog.tweak.TweakUi');
  18. goog.require('goog.tweak.testhelpers');
  19. </script>
  20. <link rel="stylesheet" type="text/css" href="../css/common.css">
  21. </head>
  22. <body>
  23. <div id="root"></div>
  24. <script>
  25. var root = document.getElementById('root');
  26. var registry;
  27. var EXPECTED_ENTRIES_COUNT = 14;
  28. function setUp() {
  29. // Make both test cases use the same entries in order to be able to test that
  30. // having two UIs on the same page does not cause trouble.
  31. createRegistryEntries('');
  32. registry = goog.tweak.getRegistry();
  33. }
  34. function tearDown() {
  35. goog.tweak.activeBooleanGroup_ = null;
  36. // When debugging a single test, don't clear out the DOM.
  37. if (window.location.search.indexOf('runTests') == -1) {
  38. root.innerHTML = '';
  39. }
  40. }
  41. function tearDownPage() {
  42. // When debugging a single test, don't clear out the DOM.
  43. if (window.location.search.indexOf('runTests') != -1) {
  44. return;
  45. }
  46. // Create both registries for interactive testing.
  47. createRegistryEntries('');
  48. registry = goog.tweak.getRegistry();
  49. // Add an extra tweak for testing the creation of tweaks after the UI has
  50. // already been rendered.
  51. var entryCounter = 0;
  52. goog.tweak.registerButton('CreateNewTweak', 'Creates a new tweak. Meant ' +
  53. 'to simulate a tweak being registered in a lazy-loaded module.',
  54. function() {
  55. goog.tweak.registerBoolean('Lazy' + ++entryCounter, 'Lazy-loaded tweak.');
  56. });
  57. goog.tweak.registerButton('CreateNewTweakInNamespace1',
  58. 'Creates a new tweak within a namespace. Meant to simulate a tweak ' +
  59. 'being registered in a lazy-loaded module.', function() {
  60. goog.tweak.registerString('foo.bar.Lazy' + ++entryCounter,
  61. 'Lazy-loaded tweak.');
  62. });
  63. goog.tweak.registerButton('CreateNewTweakInNamespace2',
  64. 'Creates a new tweak within a namespace. Meant to simulate a tweak ' +
  65. 'being registered in a lazy-loaded module.', function() {
  66. goog.tweak.registerNumber('foo.bar.baz.Lazy' + ++entryCounter, 'Lazy combo',
  67. 3, {
  68. validValues: [1, 2, 3],
  69. label: 'Lazy!'
  70. });
  71. });
  72. var label = document.createElement('h3');
  73. label.innerHTML = 'TweakUi:';
  74. root.appendChild(label);
  75. createUi(false);
  76. label = document.createElement('h3');
  77. label.innerHTML = 'Collapsible:';
  78. root.appendChild(label);
  79. createUi(true);
  80. }
  81. function createUi(collapsible) {
  82. var tweakUiElem = collapsible ? goog.tweak.TweakUi.createCollapsible() :
  83. goog.tweak.TweakUi.create();
  84. root.appendChild(tweakUiElem);
  85. }
  86. function getAllEntryDivs() {
  87. return goog.dom.getElementsByTagNameAndClass('div',
  88. goog.tweak.TweakUi.ENTRY_CSS_CLASS_);
  89. }
  90. function getEntryDiv(entry) {
  91. var label = goog.tweak.TweakUi.getNamespacedLabel_(entry);
  92. var allDivs = getAllEntryDivs();
  93. var ret;
  94. for (var i = 0, div; div = allDivs[i]; i++) {
  95. var divText = goog.dom.getTextContent(div);
  96. if (goog.string.startsWith(divText, label) &&
  97. goog.string.contains(divText, entry.description)) {
  98. assertFalse('Found multiple divs matching entry ' + entry.getId(), !!ret);
  99. ret = div;
  100. }
  101. }
  102. assertTrue('getEntryDiv failed for ' + entry.getId(), !!ret);
  103. return ret;
  104. }
  105. function getEntryInput(entry) {
  106. var div = getEntryDiv(entry);
  107. return div.getElementsByTagName('input')[0] ||
  108. div.getElementsByTagName('select')[0];
  109. }
  110. function testCreate() {
  111. createUi(false);
  112. assertEquals('Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT,
  113. getAllEntryDivs().length);
  114. assertFalse('checkbox should not be checked 1',
  115. getEntryInput(boolEntry).checked);
  116. assertTrue('checkbox should be checked 2',
  117. getEntryInput(boolEntry2).checked);
  118. // Enusre custom labels are being used.
  119. var html = document.getElementsByTagName('button')[0].innerHTML;
  120. assertTrue('Button label is wrong', html.indexOf('&lt;btn&gt;') > -1);
  121. html = getEntryDiv(numEnumEntry).innerHTML;
  122. assertTrue('Enum2 label is wrong', html.indexOf('second&amp;') > -1);
  123. }
  124. function testToggleBooleanSetting() {
  125. boolEntry.setValue(true);
  126. createUi(false);
  127. assertTrue('checkbox should be checked',
  128. getEntryInput(boolEntry).checked);
  129. boolEntry.setValue(false);
  130. assertFalse('checkbox should not be checked 1',
  131. getEntryInput(boolEntry).checked);
  132. }
  133. function testToggleStringSetting() {
  134. strEntry.setValue('val1');
  135. createUi(false);
  136. assertEquals('Textbox has wrong value 1',
  137. 'val1', getEntryInput(strEntry).value);
  138. strEntry.setValue('val2');
  139. assertEquals('Textbox has wrong value 2',
  140. 'val2', getEntryInput(strEntry).value);
  141. }
  142. function testToggleStringEnumSetting() {
  143. strEnumEntry.setValue('B');
  144. createUi(false);
  145. assertEquals('wrong value 1',
  146. 'B', getEntryInput(strEnumEntry).value);
  147. strEnumEntry.setValue('C');
  148. assertEquals('wrong value 2',
  149. 'C', getEntryInput(strEnumEntry).value);
  150. }
  151. function testToggleNumericSetting() {
  152. numEntry.setValue(3);
  153. createUi(false);
  154. assertEquals('wrong value 1',
  155. '3', getEntryInput(numEntry).value);
  156. numEntry.setValue(4);
  157. assertEquals('wrong value 2',
  158. '4', getEntryInput(numEntry).value);
  159. }
  160. function testToggleNumericEnumSetting() {
  161. numEnumEntry.setValue(2);
  162. createUi(false);
  163. assertEquals('wrong value 1',
  164. '2', getEntryInput(numEnumEntry).value);
  165. numEnumEntry.setValue(3);
  166. assertEquals('wrong value 2',
  167. '3', getEntryInput(numEnumEntry).value);
  168. }
  169. function testClickBooleanSetting() {
  170. createUi(false);
  171. var input = getEntryInput(boolEntry);
  172. input.checked = true;
  173. input.onchange();
  174. assertTrue('setting should be true', boolEntry.getNewValue());
  175. input.checked = false;
  176. input.onchange();
  177. assertFalse('setting should be false', boolEntry.getNewValue());
  178. }
  179. function testToggleDescriptions() {
  180. createUi(false);
  181. var toggleLink = root.getElementsByTagName('a')[0];
  182. var heightBefore = root.offsetHeight;
  183. toggleLink.onclick();
  184. assertTrue('Expected div height to grow from toggle descriptions.',
  185. root.offsetHeight > heightBefore);
  186. toggleLink.onclick();
  187. assertEquals('Expected div height to revert from toggle descriptions.',
  188. heightBefore, root.offsetHeight);
  189. }
  190. function assertEntryOrder(entryId1, entryId2) {
  191. var entry1 = registry.getEntry(entryId1);
  192. var entry2 = registry.getEntry(entryId2);
  193. var div1 = getEntryDiv(entry1);
  194. var div2 = getEntryDiv(entry2);
  195. var order = goog.dom.compareNodeOrder(div1, div2);
  196. assertTrue(entry1.getId() + ' should be before ' + entry2.getId(), order < 0);
  197. }
  198. function testAddEntry() {
  199. createUi(false);
  200. goog.tweak.registerBoolean('Lazy1', 'Lazy-loaded tweak.');
  201. goog.tweak.registerBoolean('Lazy2', 'Lazy-loaded tweak.',
  202. /* defaultValue */ false, { restartRequired: false });
  203. goog.tweak.beginBooleanGroup('LazyGroup', 'Lazy-loaded tweak.');
  204. goog.tweak.registerBoolean('Lazy3', 'Lazy-loaded tweak.');
  205. goog.tweak.endBooleanGroup();
  206. assertEquals('Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT + 4,
  207. getAllEntryDivs().length);
  208. assertEntryOrder('Enum2', 'Lazy1');
  209. assertEntryOrder('Lazy1', 'Lazy2');
  210. assertEntryOrder('Lazy2', 'Num');
  211. assertEntryOrder('BoolGroup', 'Lazy3');
  212. }
  213. function testAddNamespacedEntries() {
  214. createUi(false);
  215. goog.tweak.beginBooleanGroup('NS.LazyGroup', 'Lazy-loaded tweak.');
  216. goog.tweak.registerBoolean('NS.InGroup', 'Lazy-loaded tweak.');
  217. goog.tweak.endBooleanGroup();
  218. goog.tweak.registerBoolean('NS.Banana', 'Lazy-loaded tweak.');
  219. goog.tweak.registerBoolean('NS.Apple', 'Lazy-loaded tweak.');
  220. assertEquals('Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT + 5,
  221. getAllEntryDivs().length);
  222. assertEntryOrder('Enum2', 'NS.Apple');
  223. assertEntryOrder('NS.Apple', 'NS.Banana');
  224. assertEntryOrder('NS.Banana', 'NS.InGroup');
  225. }
  226. function testCollapsibleIsLazy() {
  227. if (document.createEvent) {
  228. createUi(true);
  229. assertEquals('Expected no entry divs.', 0, getAllEntryDivs().length);
  230. var showLink = root.getElementsByTagName('a')[0];
  231. var event = document.createEvent('MouseEvents');
  232. event.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false,
  233. false, false, false, 0, null);
  234. showLink.dispatchEvent(event);
  235. assertEquals('Wrong number of entry divs.', EXPECTED_ENTRIES_COUNT,
  236. getAllEntryDivs().length);
  237. }
  238. }
  239. </script>
  240. </body>
  241. </html>