aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatias Niemelä2013-08-21 21:29:40 -0400
committerMisko Hevery2013-08-23 14:04:35 -0700
commitfb3a7db0809b959d50be4cb93a65a91200071dd5 (patch)
tree8179dc125231880b7b48b64d5bcf1cf0d14d1cba
parent040aa11ceb510d8f8ec8349a3ca99d9db874daf0 (diff)
downloadangular.js-fb3a7db0809b959d50be4cb93a65a91200071dd5.tar.bz2
feat(ngMock): add support for creating dynamic style sheets within test code
-rwxr-xr-xangularFiles.js3
-rw-r--r--src/privateMocks.js28
-rw-r--r--test/ngAnimate/animateSpec.js12
-rw-r--r--test/privateMocksSpec.js36
4 files changed, 74 insertions, 5 deletions
diff --git a/angularFiles.js b/angularFiles.js
index a8509b3f..a20dc21a 100755
--- a/angularFiles.js
+++ b/angularFiles.js
@@ -79,7 +79,8 @@ angularFiles = {
'src/ngTouch/swipe.js',
'src/ngTouch/directive/ngClick.js',
'src/ngTouch/directive/ngSwipe.js',
- 'docs/components/angular-bootstrap/bootstrap.js'
+ 'docs/components/angular-bootstrap/bootstrap.js',
+ 'src/privateMocks.js'
],
'angularScenario': [
diff --git a/src/privateMocks.js b/src/privateMocks.js
new file mode 100644
index 00000000..6d9fb34f
--- /dev/null
+++ b/src/privateMocks.js
@@ -0,0 +1,28 @@
+function createMockStyleSheet(doc, wind) {
+ doc = doc ? doc[0] : document;
+ wind = wind || window;
+
+ var node = doc.createElement('style');
+ var head = doc.getElementsByTagName('head')[0];
+ head.appendChild(node);
+
+ var ss = doc.styleSheets[doc.styleSheets.length - 1];
+
+ return {
+ addRule : function(selector, styles) {
+ try {
+ ss.insertRule(selector + '{ ' + styles + '}', 0);
+ }
+ catch(e) {
+ try {
+ ss.addRule(selector, styles);
+ }
+ catch(e) {}
+ }
+ },
+
+ destroy : function() {
+ head.removeChild(node);
+ }
+ };
+};
diff --git a/test/ngAnimate/animateSpec.js b/test/ngAnimate/animateSpec.js
index 30bf6ba7..37026640 100644
--- a/test/ngAnimate/animateSpec.js
+++ b/test/ngAnimate/animateSpec.js
@@ -1118,11 +1118,15 @@ describe("ngAnimate", function() {
}));
it("should properly execute CSS animations/transitions and use callbacks when using addClass / removeClass",
- inject(function($animate, $rootScope, $sniffer, $rootElement, $timeout) {
+ inject(function($animate, $rootScope, $sniffer, $rootElement, $timeout, $window, $document) {
- var transition = 'transition:11s linear all;';
- var style = transition + ' ' + vendorPrefix + transition;
- var parent = jqLite('<div><span style="' + style + '"></span></div>');
+ var ss = createMockStyleSheet($document, $window);
+ ss.addRule('.klass-add', 'transition:11s linear all');
+ ss.addRule('.klass-add', vendorPrefix + 'transition:11s linear all');
+ ss.addRule('.klass-remove', 'transition:11s linear all');
+ ss.addRule('.klass-remove', vendorPrefix + 'transition:11s linear all');
+
+ var parent = jqLite('<div><span></span></div>');
$rootElement.append(parent);
body.append($rootElement);
var element = jqLite(parent.find('span'));
diff --git a/test/privateMocksSpec.js b/test/privateMocksSpec.js
new file mode 100644
index 00000000..e58a2b75
--- /dev/null
+++ b/test/privateMocksSpec.js
@@ -0,0 +1,36 @@
+describe('private mocks', function() {
+ describe('createMockStyleSheet', function() {
+
+ it('should allow custom styles to be created and removed when the stylesheet is destroyed',
+ inject(function($compile, $document, $window, $rootElement, $rootScope) {
+
+ var doc = $document[0];
+ var count = doc.styleSheets.length;
+ var stylesheet = createMockStyleSheet($document, $window);
+ expect(doc.styleSheets.length).toBe(count + 1);
+
+ jqLite(doc.body).append($rootElement);
+
+ var elm = $compile('<div class="padded">...</div>')($rootScope);
+ $rootElement.append(elm);
+
+ expect(getStyle(elm, 'paddingTop')).toBe('0px');
+
+ stylesheet.addRule('.padded', 'padding-top:2px');
+
+ expect(getStyle(elm, 'paddingTop')).toBe('2px');
+
+ stylesheet.destroy();
+
+ expect(getStyle(elm, 'paddingTop')).toBe('0px');
+
+ function getStyle(element, key) {
+ var node = element[0];
+ return node.currentStyle ?
+ node.currentStyle[key] :
+ $window.getComputedStyle(node)[key];
+ };
+ }));
+
+ });
+});