mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-13 09:13:12 +00:00
feat(ngMock): add support for creating dynamic style sheets within test code
This commit is contained in:
parent
040aa11ceb
commit
fb3a7db080
4 changed files with 74 additions and 5 deletions
3
angularFiles.js
vendored
3
angularFiles.js
vendored
|
|
@ -79,7 +79,8 @@ angularFiles = {
|
||||||
'src/ngTouch/swipe.js',
|
'src/ngTouch/swipe.js',
|
||||||
'src/ngTouch/directive/ngClick.js',
|
'src/ngTouch/directive/ngClick.js',
|
||||||
'src/ngTouch/directive/ngSwipe.js',
|
'src/ngTouch/directive/ngSwipe.js',
|
||||||
'docs/components/angular-bootstrap/bootstrap.js'
|
'docs/components/angular-bootstrap/bootstrap.js',
|
||||||
|
'src/privateMocks.js'
|
||||||
],
|
],
|
||||||
|
|
||||||
'angularScenario': [
|
'angularScenario': [
|
||||||
|
|
|
||||||
28
src/privateMocks.js
Normal file
28
src/privateMocks.js
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -1118,11 +1118,15 @@ describe("ngAnimate", function() {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it("should properly execute CSS animations/transitions and use callbacks when using addClass / removeClass",
|
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 ss = createMockStyleSheet($document, $window);
|
||||||
var style = transition + ' ' + vendorPrefix + transition;
|
ss.addRule('.klass-add', 'transition:11s linear all');
|
||||||
var parent = jqLite('<div><span style="' + style + '"></span></div>');
|
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);
|
$rootElement.append(parent);
|
||||||
body.append($rootElement);
|
body.append($rootElement);
|
||||||
var element = jqLite(parent.find('span'));
|
var element = jqLite(parent.find('span'));
|
||||||
|
|
|
||||||
36
test/privateMocksSpec.js
Normal file
36
test/privateMocksSpec.js
Normal file
|
|
@ -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];
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue