comparison annotator_files/lib/vendor/jasmine-jquery.js @ 3:6356e78ccf5c

new version contains Annotator JS files to be used with FilesystemSite.
author casties
date Thu, 05 Apr 2012 19:37:27 +0200
parents
children
comparison
equal deleted inserted replaced
2:4c6c8835fc5c 3:6356e78ccf5c
1 var readFixtures = function() {
2 return jasmine.getFixtures().proxyCallTo_('read', arguments);
3 };
4
5 var loadFixtures = function() {
6 jasmine.getFixtures().proxyCallTo_('load', arguments);
7 };
8
9 var setFixtures = function(html) {
10 jasmine.getFixtures().set(html);
11 };
12
13 var sandbox = function(attributes) {
14 return jasmine.getFixtures().sandbox(attributes);
15 };
16
17 jasmine.getFixtures = function() {
18 return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures();
19 };
20
21 jasmine.Fixtures = function() {
22 this.containerId = 'jasmine-fixtures';
23 this.fixturesCache_ = {};
24 this.fixturesPath = 'spec/javascripts/fixtures';
25 };
26
27 jasmine.Fixtures.prototype.set = function(html) {
28 this.cleanUp();
29 this.createContainer_(html);
30 };
31
32 jasmine.Fixtures.prototype.load = function() {
33 this.cleanUp();
34 this.createContainer_(this.read.apply(this, arguments));
35 };
36
37 jasmine.Fixtures.prototype.read = function() {
38 var htmlChunks = [];
39
40 var fixtureUrls = arguments;
41 for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
42 htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]));
43 }
44
45 return htmlChunks.join('');
46 };
47
48 jasmine.Fixtures.prototype.clearCache = function() {
49 this.fixturesCache_ = {};
50 };
51
52 jasmine.Fixtures.prototype.cleanUp = function() {
53 $('#' + this.containerId).remove();
54 };
55
56 jasmine.Fixtures.prototype.sandbox = function(attributes) {
57 var attributesToSet = attributes || {};
58 return $('<div id="sandbox" />').attr(attributesToSet);
59 };
60
61 jasmine.Fixtures.prototype.createContainer_ = function(html) {
62 var container = $('<div id="' + this.containerId + '" />');
63 container.html(html);
64 $('body').append(container);
65 };
66
67 jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
68 if (typeof this.fixturesCache_[url] == 'undefined') {
69 this.loadFixtureIntoCache_(url);
70 }
71 return this.fixturesCache_[url];
72 };
73
74 jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
75 var self = this;
76 var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl;
77 $.ajax({
78 async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
79 cache: false,
80 dataType: 'html',
81 url: url,
82 success: function(data) {
83 self.fixturesCache_[relativeUrl] = data;
84 }
85 });
86 };
87
88 jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
89 return this[methodName].apply(this, passedArguments);
90 };
91
92
93 jasmine.JQuery = function() {};
94
95 jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
96 return $('<div/>').append(html).html();
97 };
98
99 jasmine.JQuery.elementToString = function(element) {
100 return $('<div />').append(element.clone()).html();
101 };
102
103 jasmine.JQuery.matchersClass = {};
104
105
106 (function(){
107 var jQueryMatchers = {
108 toHaveClass: function(className) {
109 return this.actual.hasClass(className);
110 },
111
112 toBeVisible: function() {
113 return this.actual.is(':visible');
114 },
115
116 toBeHidden: function() {
117 return this.actual.is(':hidden');
118 },
119
120 toBeSelected: function() {
121 return this.actual.is(':selected');
122 },
123
124 toBeChecked: function() {
125 return this.actual.is(':checked');
126 },
127
128 toBeEmpty: function() {
129 return this.actual.is(':empty');
130 },
131
132 toExist: function() {
133 return this.actual.size() > 0;
134 },
135
136 toHaveAttr: function(attributeName, expectedAttributeValue) {
137 return hasProperty(this.actual.attr(attributeName), expectedAttributeValue);
138 },
139
140 toHaveId: function(id) {
141 return this.actual.attr('id') == id;
142 },
143
144 toHaveHtml: function(html) {
145 return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html);
146 },
147
148 toHaveText: function(text) {
149 return this.actual.text() == text;
150 },
151
152 toHaveValue: function(value) {
153 return this.actual.val() == value;
154 },
155
156 toHaveData: function(key, expectedValue) {
157 return hasProperty(this.actual.data(key), expectedValue);
158 },
159
160 toBe: function(selector) {
161 return this.actual.is(selector);
162 },
163
164 toContain: function(selector) {
165 return this.actual.find(selector).size() > 0;
166 }
167 };
168
169 var hasProperty = function(actualValue, expectedValue) {
170 if (expectedValue === undefined) {
171 return actualValue !== undefined;
172 }
173 return actualValue == expectedValue;
174 };
175
176 var bindMatcher = function(methodName) {
177 var builtInMatcher = jasmine.Matchers.prototype[methodName];
178
179 jasmine.JQuery.matchersClass[methodName] = function() {
180 if (this.actual instanceof jQuery) {
181 var result = jQueryMatchers[methodName].apply(this, arguments);
182 this.actual = jasmine.JQuery.elementToString(this.actual);
183 return result;
184 }
185
186 if (builtInMatcher) {
187 return builtInMatcher.apply(this, arguments);
188 }
189
190 return false;
191 };
192 };
193
194 for(var methodName in jQueryMatchers) {
195 bindMatcher(methodName);
196 }
197 })();
198
199 beforeEach(function() {
200 this.addMatchers(jasmine.JQuery.matchersClass);
201 });
202