123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- goog.provide('goog.cssomTest');
- goog.setTestOnly('goog.cssomTest');
- goog.require('goog.array');
- goog.require('goog.cssom');
- goog.require('goog.cssom.CssRuleType');
- goog.require('goog.testing.jsunit');
- goog.require('goog.userAgent');
- var cssText = '.css-link-1 { display: block; } ' +
- '.css-import-2 { display: block; } ' +
- '.css-import-1 { display: block; } ' +
- '.css-style-1 { display: block; } ' +
- '.css-style-2 { display: block; } ' +
- '.css-style-3 { display: block; }';
- var replacementCssText = '.css-repl-1 { display: block; }';
- var isIe7 = goog.userAgent.IE &&
- (goog.userAgent.compare(goog.userAgent.VERSION, '7.0') == 0);
- function fixCssTextForIe(cssText) {
- cssText = cssText.toLowerCase().replace(/\s*$/, '');
- if (cssText.match(/[^;] \}/)) {
- cssText = cssText.replace(/([^;]) \}/g, '$1; }');
- }
- return cssText;
- }
- function testGetFileNameFromStyleSheet() {
- var styleSheet = {'href': 'http://foo.com/something/filename.css'};
- assertEquals(
- 'filename.css', goog.cssom.getFileNameFromStyleSheet(styleSheet));
- styleSheet = {'href': 'https://foo.com:123/something/filename.css'};
- assertEquals(
- 'filename.css', goog.cssom.getFileNameFromStyleSheet(styleSheet));
- styleSheet = {'href': 'http://foo.com/something/filename.css?bar=bas'};
- assertEquals(
- 'filename.css', goog.cssom.getFileNameFromStyleSheet(styleSheet));
- styleSheet = {'href': 'filename.css?bar=bas'};
- assertEquals(
- 'filename.css', goog.cssom.getFileNameFromStyleSheet(styleSheet));
- styleSheet = {'href': 'filename.css'};
- assertEquals(
- 'filename.css', goog.cssom.getFileNameFromStyleSheet(styleSheet));
- }
- function testGetAllCssStyleSheets() {
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- assertEquals(4, styleSheets.length);
-
- assertEquals(
- 'cssom_test_link_1.css',
- goog.cssom.getFileNameFromStyleSheet(styleSheets[0]));
- assertEquals(
- 'cssom_test_import_2.css',
- goog.cssom.getFileNameFromStyleSheet(styleSheets[1]));
- assertEquals(
- 'cssom_test_import_1.css',
- goog.cssom.getFileNameFromStyleSheet(styleSheets[2]));
-
- assertNull(goog.cssom.getFileNameFromStyleSheet(styleSheets[3]));
- }
- function testGetAllCssText() {
- var allCssText = goog.cssom.getAllCssText();
-
-
-
-
-
- if (!isIe7) {
- assertEquals(cssText, fixCssTextForIe(allCssText));
- }
- }
- function testGetAllCssStyleRules() {
- var allCssRules = goog.cssom.getAllCssStyleRules();
- assertEquals(6, allCssRules.length);
- }
- function testAddCssText() {
- var newCssText = '.css-add-1 { display: block; }';
- var newCssNode = goog.cssom.addCssText(newCssText);
- assertEquals(document.styleSheets.length, 3);
- var allCssText = goog.cssom.getAllCssText();
-
-
-
-
-
- if (!isIe7) {
-
-
- if (goog.userAgent.OPERA) {
- assertEquals(newCssText + ' ' + cssText, fixCssTextForIe(allCssText));
- } else {
- assertEquals(cssText + ' ' + newCssText, fixCssTextForIe(allCssText));
- }
- }
- var cssRules = goog.cssom.getAllCssStyleRules();
- assertEquals(7, cssRules.length);
-
-
- newCssNode.parentNode.removeChild(newCssNode);
-
- cssRules = goog.cssom.getAllCssStyleRules();
- assertEquals(6, cssRules.length);
- }
- function testAddCssRule() {
-
-
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var newCssRule = '.css-addCssRule { display: block; }';
- var rules = styleSheet.rules || styleSheet.cssRules;
- var origNumberOfRules = rules.length;
- goog.cssom.addCssRule(styleSheet, newCssRule, 1);
- rules = styleSheet.rules || styleSheet.cssRules;
- var newNumberOfRules = rules.length;
- assertEquals(newNumberOfRules, origNumberOfRules + 1);
-
- goog.cssom.removeCssRule(styleSheet, 1);
- }
- function testAddCssRuleAtPos() {
-
-
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var newCssRule = '.css-addCssRulePos { display: block; }';
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var origNumberOfRules = rules.length;
-
-
-
-
-
-
-
-
-
-
- var pos = 0;
- if (styleSheet.cssRules) {
- pos = goog.array.findIndex(rules, function(rule) {
- return rule.type == goog.cssom.CssRuleType.STYLE;
- });
- }
- goog.cssom.addCssRule(styleSheet, newCssRule, pos);
- rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var newNumberOfRules = rules.length;
- assertEquals(newNumberOfRules, origNumberOfRules + 1);
-
- goog.cssom.removeCssRule(styleSheet, pos);
- rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- assertEquals(origNumberOfRules, rules.length);
- }
- function testAddCssRuleNoIndex() {
-
-
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var origNumberOfRules = rules.length;
- var newCssRule = '.css-addCssRuleNoIndex { display: block; }';
-
-
-
- goog.cssom.addCssRule(styleSheet, newCssRule);
- rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var newNumberOfRules = rules.length;
- assertEquals(newNumberOfRules, origNumberOfRules + 1);
-
- goog.cssom.removeCssRule(styleSheet, newNumberOfRules - 1);
- rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- assertEquals(origNumberOfRules, rules.length);
- }
- function testGetParentStyleSheetAfterGetAllCssStyleRules() {
- var cssRules = goog.cssom.getAllCssStyleRules();
- var cssRule = cssRules[4];
- var parentStyleSheet = goog.cssom.getParentStyleSheet(cssRule);
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- assertEquals(styleSheet, parentStyleSheet);
- }
- function testGetCssRuleIndexInParentStyleSheetAfterGetAllCssStyleRules() {
- var cssRules = goog.cssom.getAllCssStyleRules();
- var cssRule = cssRules[4];
-
-
-
-
- var parentStyleSheet = goog.cssom.getParentStyleSheet(cssRule);
- var ruleIndex = goog.isDefAndNotNull(parentStyleSheet.cssRules) ? 2 : 1;
- assertEquals(
- ruleIndex, goog.cssom.getCssRuleIndexInParentStyleSheet(cssRule));
- }
- function testGetCssRuleIndexInParentStyleSheetNonStyleRule() {
-
- if (!goog.userAgent.IE) {
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var newCssRule = '@media print { .css-nonStyle { display: block; } }';
- goog.cssom.addCssRule(styleSheet, newCssRule);
- var rules = styleSheet.rules || styleSheet.cssRules;
- var cssRule = rules[rules.length - 1];
- assertEquals(goog.cssom.CssRuleType.MEDIA, cssRule.type);
-
- goog.cssom.getCssRuleIndexInParentStyleSheet(cssRule, styleSheet);
-
- goog.cssom.removeCssRule(styleSheet, rules.length - 1);
- }
- }
- function testReplaceCssRuleWithStyleSheetAndIndex() {
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var index = 2;
- var origCssRule = rules[index];
- var origCssText =
- fixCssTextForIe(goog.cssom.getCssTextFromCssRule(origCssRule));
- goog.cssom.replaceCssRule(origCssRule, replacementCssText, styleSheet, index);
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var newCssRule = rules[index];
- var newCssText = goog.cssom.getCssTextFromCssRule(newCssRule);
- assertEquals(replacementCssText, fixCssTextForIe(newCssText));
-
-
- goog.cssom.replaceCssRule(newCssRule, origCssText, styleSheet, index);
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var nowCssRule = rules[index];
- var nowCssText = goog.cssom.getCssTextFromCssRule(nowCssRule);
- assertEquals(origCssText, fixCssTextForIe(nowCssText));
- }
- function testReplaceCssRuleUsingGetAllCssStyleRules() {
- var cssRules = goog.cssom.getAllCssStyleRules();
- var origCssRule = cssRules[4];
- var origCssText =
- fixCssTextForIe(goog.cssom.getCssTextFromCssRule(origCssRule));
-
- goog.cssom.replaceCssRule(origCssRule, replacementCssText);
- var styleSheets = goog.cssom.getAllCssStyleSheets();
- var styleSheet = styleSheets[3];
- var rules = goog.cssom.getCssRulesFromStyleSheet(styleSheet);
- var index = goog.isDefAndNotNull(styleSheet.cssRules) ? 2 : 1;
- var newCssRule = rules[index];
- var newCssText =
- fixCssTextForIe(goog.cssom.getCssTextFromCssRule(newCssRule));
- assertEquals(replacementCssText, newCssText);
-
- var cssRules = goog.cssom.getAllCssStyleRules();
- var newCssRule = cssRules[4];
- var newCssText =
- fixCssTextForIe(goog.cssom.getCssTextFromCssRule(newCssRule));
- assertEquals(replacementCssText, newCssText);
-
-
- goog.cssom.replaceCssRule(newCssRule, origCssText);
- var cssRules = goog.cssom.getAllCssStyleRules();
- var nowCssRule = cssRules[4];
- var nowCssText =
- fixCssTextForIe(goog.cssom.getCssTextFromCssRule(nowCssRule));
- assertEquals(origCssText, nowCssText);
- }
|