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

/closure-library/closure/goog/dom/fontsizemonitor_test.js

https://gitlab.com/sc15lar/algorithmsproject
JavaScript | 277 lines | 206 code | 49 blank | 22 comment | 5 complexity | 7c925189bf112f024f75ba36cb8e38bc MD5 | raw file
  1. // Copyright 2008 The Closure Library Authors. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS-IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. goog.provide('goog.dom.FontSizeMonitorTest');
  15. goog.setTestOnly('goog.dom.FontSizeMonitorTest');
  16. goog.require('goog.dom');
  17. goog.require('goog.dom.FontSizeMonitor');
  18. goog.require('goog.dom.TagName');
  19. goog.require('goog.events');
  20. goog.require('goog.events.Event');
  21. goog.require('goog.testing.PropertyReplacer');
  22. goog.require('goog.testing.events');
  23. goog.require('goog.testing.jsunit');
  24. goog.require('goog.userAgent');
  25. function isBuggyGecko() {
  26. return goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher('1.9');
  27. }
  28. var monitor;
  29. function setUp() {
  30. monitor = new goog.dom.FontSizeMonitor();
  31. }
  32. function tearDown() {
  33. monitor.dispose();
  34. }
  35. function getResizeTarget() {
  36. return goog.userAgent.IE ?
  37. monitor.sizeElement_ :
  38. goog.dom.getFrameContentWindow(monitor.sizeElement_);
  39. }
  40. function testFontSizeNoChange() {
  41. // This tests that firing the resize event without changing the font-size
  42. // does not trigger the event.
  43. var fired = false;
  44. goog.events.listen(
  45. monitor, goog.dom.FontSizeMonitor.EventType.CHANGE,
  46. function(e) { fired = true; });
  47. var resizeEvent = new goog.events.Event('resize', getResizeTarget());
  48. goog.testing.events.fireBrowserEvent(resizeEvent);
  49. assertFalse('The font size should not have changed', fired);
  50. }
  51. function testFontSizeChanged() {
  52. // One can trigger the iframe resize by changing the
  53. // document.body.style.fontSize but the event is fired asynchronously in
  54. // Firefox. Instead, we just override the lastWidth_ to simulate that the
  55. // size changed.
  56. var fired = false;
  57. goog.events.listen(
  58. monitor, goog.dom.FontSizeMonitor.EventType.CHANGE,
  59. function(e) { fired = true; });
  60. monitor.lastWidth_--;
  61. var resizeEvent = new goog.events.Event('resize', getResizeTarget());
  62. goog.testing.events.fireBrowserEvent(resizeEvent);
  63. assertTrue('The font size should have changed', fired);
  64. }
  65. function testCreateAndDispose() {
  66. var frameCount = window.frames.length;
  67. var iframeElementCount =
  68. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  69. var divElementCount =
  70. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  71. var monitor = new goog.dom.FontSizeMonitor();
  72. monitor.dispose();
  73. var newFrameCount = window.frames.length;
  74. var newIframeElementCount =
  75. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  76. var newDivElementCount =
  77. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  78. assertEquals(
  79. 'There should be no trailing frames', frameCount + isBuggyGecko(),
  80. newFrameCount);
  81. assertEquals(
  82. 'There should be no trailing iframe elements',
  83. iframeElementCount + isBuggyGecko(), newIframeElementCount);
  84. assertEquals(
  85. 'There should be no trailing div elements', divElementCount,
  86. newDivElementCount);
  87. }
  88. function testWithDomHelper() {
  89. var frameCount = window.frames.length;
  90. var iframeElementCount =
  91. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  92. var divElementCount =
  93. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  94. var monitor = new goog.dom.FontSizeMonitor(goog.dom.getDomHelper());
  95. var newFrameCount = window.frames.length;
  96. var newIframeElementCount =
  97. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  98. var newDivElementCount =
  99. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  100. if (goog.userAgent.IE) {
  101. assertEquals(
  102. 'There should be one new div element', divElementCount + 1,
  103. newDivElementCount);
  104. } else {
  105. assertEquals(
  106. 'There should be one new frame', frameCount + 1, newFrameCount);
  107. assertEquals(
  108. 'There should be one new iframe element', iframeElementCount + 1,
  109. newIframeElementCount);
  110. }
  111. // Use the first iframe in the doc. This is added in the HTML markup.
  112. var win = window.frames[0];
  113. var doc = win.document;
  114. doc.open();
  115. doc.write('<html><body></body></html>');
  116. doc.close();
  117. var domHelper = goog.dom.getDomHelper(doc);
  118. var frameCount2 = win.frames.length;
  119. var iframeElementCount2 =
  120. doc.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  121. var divElementCount2 = doc.getElementsByTagName(goog.dom.TagName.DIV).length;
  122. var monitor2 = new goog.dom.FontSizeMonitor(domHelper);
  123. var newFrameCount2 = win.frames.length;
  124. var newIframeElementCount2 =
  125. doc.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  126. var newDivElementCount2 =
  127. doc.getElementsByTagName(goog.dom.TagName.DIV).length;
  128. if (goog.userAgent.IE) {
  129. assertEquals(
  130. 'There should be one new div element', divElementCount2 + 1,
  131. newDivElementCount2);
  132. } else {
  133. assertEquals(
  134. 'There should be one new frame', frameCount2 + 1, newFrameCount2);
  135. assertEquals(
  136. 'There should be one new iframe element', iframeElementCount2 + 1,
  137. newIframeElementCount2);
  138. }
  139. monitor.dispose();
  140. monitor2.dispose();
  141. }
  142. function testEnsureThatDocIsOpenedForGecko() {
  143. var pr = new goog.testing.PropertyReplacer();
  144. pr.set(goog.userAgent, 'GECKO', true);
  145. pr.set(goog.userAgent, 'IE', false);
  146. var openCalled = false;
  147. var closeCalled = false;
  148. var instance = {
  149. document: {
  150. open: function() { openCalled = true; },
  151. close: function() { closeCalled = true; }
  152. },
  153. attachEvent: function() {}
  154. };
  155. pr.set(goog.dom, 'getFrameContentWindow', function() { return instance; });
  156. try {
  157. var monitor = new goog.dom.FontSizeMonitor();
  158. assertTrue('doc.open should have been called', openCalled);
  159. assertTrue('doc.close should have been called', closeCalled);
  160. monitor.dispose();
  161. } finally {
  162. pr.reset();
  163. }
  164. }
  165. function testFirefox2WorkAroundFirefox3() {
  166. var pr = new goog.testing.PropertyReplacer();
  167. pr.set(goog.userAgent, 'GECKO', true);
  168. pr.set(goog.userAgent, 'IE', false);
  169. try {
  170. // 1.9 should clear iframes
  171. pr.set(goog.userAgent, 'VERSION', '1.9');
  172. goog.userAgent.isVersionOrHigherCache_ = {};
  173. var frameCount = window.frames.length;
  174. var iframeElementCount =
  175. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  176. var divElementCount =
  177. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  178. var monitor = new goog.dom.FontSizeMonitor();
  179. monitor.dispose();
  180. var newFrameCount = window.frames.length;
  181. var newIframeElementCount =
  182. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  183. var newDivElementCount =
  184. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  185. assertEquals(
  186. 'There should be no trailing frames', frameCount, newFrameCount);
  187. assertEquals(
  188. 'There should be no trailing iframe elements', iframeElementCount,
  189. newIframeElementCount);
  190. assertEquals(
  191. 'There should be no trailing div elements', divElementCount,
  192. newDivElementCount);
  193. } finally {
  194. pr.reset();
  195. }
  196. }
  197. function testFirefox2WorkAroundFirefox2() {
  198. var pr = new goog.testing.PropertyReplacer();
  199. pr.set(goog.userAgent, 'GECKO', true);
  200. pr.set(goog.userAgent, 'IE', false);
  201. try {
  202. // 1.8 should NOT clear iframes
  203. pr.set(goog.userAgent, 'VERSION', '1.8');
  204. goog.userAgent.isVersionOrHigherCache_ = {};
  205. var frameCount = window.frames.length;
  206. var iframeElementCount =
  207. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  208. var divElementCount =
  209. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  210. var monitor = new goog.dom.FontSizeMonitor();
  211. monitor.dispose();
  212. var newFrameCount = window.frames.length;
  213. var newIframeElementCount =
  214. document.getElementsByTagName(goog.dom.TagName.IFRAME).length;
  215. var newDivElementCount =
  216. document.getElementsByTagName(goog.dom.TagName.DIV).length;
  217. assertEquals(
  218. 'There should be no trailing frames', frameCount + 1, newFrameCount);
  219. assertEquals(
  220. 'There should be no trailing iframe elements', iframeElementCount + 1,
  221. newIframeElementCount);
  222. assertEquals(
  223. 'There should be no trailing div elements', divElementCount,
  224. newDivElementCount);
  225. } finally {
  226. pr.reset();
  227. }
  228. }