OSDN Git Service

Merge branch 'master' into develop
[sie/sie.git] / tool / Spec / lib / jasmine-1.0.1 / jasmine-html.js
1 jasmine.TrivialReporter = function(doc) {\r
2   this.document = doc || document;\r
3   this.suiteDivs = {};\r
4   this.logRunningSpecs = false;\r
5 };\r
6 \r
7 jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {\r
8   var el = document.createElement(type);\r
9 \r
10   for (var i = 2; i < arguments.length; i++) {\r
11     var child = arguments[i];\r
12 \r
13     if (typeof child === 'string') {\r
14       el.appendChild(document.createTextNode(child));\r
15     } else {\r
16       if (child) { el.appendChild(child); }\r
17     }\r
18   }\r
19 \r
20   for (var attr in attrs) {\r
21     if (attr == "className") {\r
22       el[attr] = attrs[attr];\r
23     } else {\r
24       el.setAttribute(attr, attrs[attr]);\r
25     }\r
26   }\r
27 \r
28   return el;\r
29 };\r
30 \r
31 jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {\r
32   var showPassed, showSkipped;\r
33 \r
34   this.outerDiv = this.createDom('div', { className: 'jasmine_reporter' },\r
35       this.createDom('div', { className: 'banner' },\r
36         this.createDom('div', { className: 'logo' },\r
37             this.createDom('a', { href: 'http://pivotal.github.com/jasmine/', target: "_blank" }, "Jasmine"),\r
38             this.createDom('span', { className: 'version' }, runner.env.versionString())),\r
39         this.createDom('div', { className: 'options' },\r
40             "Show ",\r
41             showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),\r
42             this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),\r
43             showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),\r
44             this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")\r
45             )\r
46           ),\r
47 \r
48       this.runnerDiv = this.createDom('div', { className: 'runner running' },\r
49           this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),\r
50           this.runnerMessageSpan = this.createDom('span', {}, "Running..."),\r
51           this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))\r
52       );\r
53 \r
54   this.document.body.appendChild(this.outerDiv);\r
55 \r
56   var suites = runner.suites();\r
57   for (var i = 0; i < suites.length; i++) {\r
58     var suite = suites[i];\r
59     var suiteDiv = this.createDom('div', { className: 'suite' },\r
60         this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),\r
61         this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));\r
62     this.suiteDivs[suite.id] = suiteDiv;\r
63     var parentDiv = this.outerDiv;\r
64     if (suite.parentSuite) {\r
65       parentDiv = this.suiteDivs[suite.parentSuite.id];\r
66     }\r
67     parentDiv.appendChild(suiteDiv);\r
68   }\r
69 \r
70   this.startedAt = new Date();\r
71 \r
72   var self = this;\r
73   showPassed.onclick = function(evt) {\r
74     if (showPassed.checked) {\r
75       self.outerDiv.className += ' show-passed';\r
76     } else {\r
77       self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');\r
78     }\r
79   };\r
80 \r
81   showSkipped.onclick = function(evt) {\r
82     if (showSkipped.checked) {\r
83       self.outerDiv.className += ' show-skipped';\r
84     } else {\r
85       self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');\r
86     }\r
87   };\r
88 };\r
89 \r
90 jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {\r
91   var results = runner.results();\r
92   var className = (results.failedCount > 0) ? "runner failed" : "runner passed";\r
93   this.runnerDiv.setAttribute("class", className);\r
94   //do it twice for IE\r
95   this.runnerDiv.setAttribute("className", className);\r
96   var specs = runner.specs();\r
97   var specCount = 0;\r
98   for (var i = 0; i < specs.length; i++) {\r
99     if (this.specFilter(specs[i])) {\r
100       specCount++;\r
101     }\r
102   }\r
103   var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");\r
104   message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";\r
105   this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);\r
106 \r
107   this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));\r
108 };\r
109 \r
110 jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {\r
111   var results = suite.results();\r
112   var status = results.passed() ? 'passed' : 'failed';\r
113   if (results.totalCount == 0) { // todo: change this to check results.skipped\r
114     status = 'skipped';\r
115   }\r
116   this.suiteDivs[suite.id].className += " " + status;\r
117 };\r
118 \r
119 jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {\r
120   if (this.logRunningSpecs) {\r
121     this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');\r
122   }\r
123 };\r
124 \r
125 jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {\r
126   var results = spec.results();\r
127   var status = results.passed() ? 'passed' : 'failed';\r
128   if (results.skipped) {\r
129     status = 'skipped';\r
130   }\r
131   var specDiv = this.createDom('div', { className: 'spec '  + status },\r
132       this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),\r
133       this.createDom('a', {\r
134         className: 'description',\r
135         href: '?spec=' + encodeURIComponent(spec.getFullName()),\r
136         title: spec.getFullName()\r
137       }, spec.description));\r
138 \r
139 \r
140   var resultItems = results.getItems();\r
141   var messagesDiv = this.createDom('div', { className: 'messages' });\r
142   for (var i = 0; i < resultItems.length; i++) {\r
143     var result = resultItems[i];\r
144 \r
145     if (result.type == 'log') {\r
146       messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));\r
147     } else if (result.type == 'expect' && result.passed && !result.passed()) {\r
148       messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));\r
149 \r
150       if (result.trace.stack) {\r
151         messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));\r
152       }\r
153     }\r
154   }\r
155 \r
156   if (messagesDiv.childNodes.length > 0) {\r
157     specDiv.appendChild(messagesDiv);\r
158   }\r
159 \r
160   this.suiteDivs[spec.suite.id].appendChild(specDiv);\r
161 };\r
162 \r
163 jasmine.TrivialReporter.prototype.log = function() {\r
164   var console = jasmine.getGlobal().console;\r
165   if (console && console.log) {\r
166     if (console.log.apply) {\r
167       console.log.apply(console, arguments);\r
168     } else {\r
169       console.log(arguments); // ie fix: console.log.apply doesn't exist on ie\r
170     }\r
171   }\r
172 };\r
173 \r
174 jasmine.TrivialReporter.prototype.getLocation = function() {\r
175   return this.document.location;\r
176 };\r
177 \r
178 jasmine.TrivialReporter.prototype.specFilter = function(spec) {\r
179   var paramMap = {};\r
180   var params = this.getLocation().search.substring(1).split('&');\r
181   for (var i = 0; i < params.length; i++) {\r
182     var p = params[i].split('=');\r
183     paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);\r
184   }\r
185 \r
186   if (!paramMap["spec"]) return true;\r
187   return spec.getFullName().indexOf(paramMap["spec"]) == 0;\r
188 };\r