| Nils Diewald | 19ccee9 | 2014-12-08 11:30:08 +0000 | [diff] [blame] | 1 | /* | 
|  | 2 | Copyright (c) 2008-2014 Pivotal Labs | 
|  | 3 |  | 
|  | 4 | Permission is hereby granted, free of charge, to any person obtaining | 
|  | 5 | a copy of this software and associated documentation files (the | 
|  | 6 | "Software"), to deal in the Software without restriction, including | 
|  | 7 | without limitation the rights to use, copy, modify, merge, publish, | 
|  | 8 | distribute, sublicense, and/or sell copies of the Software, and to | 
|  | 9 | permit persons to whom the Software is furnished to do so, subject to | 
|  | 10 | the following conditions: | 
|  | 11 |  | 
|  | 12 | The above copyright notice and this permission notice shall be | 
|  | 13 | included in all copies or substantial portions of the Software. | 
|  | 14 |  | 
|  | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
|  | 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
|  | 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | 
|  | 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | 
|  | 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | 
|  | 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | 
|  | 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
|  | 22 | */ | 
|  | 23 | function getJasmineRequireObj() { | 
|  | 24 | if (typeof module !== 'undefined' && module.exports) { | 
|  | 25 | return exports; | 
|  | 26 | } else { | 
|  | 27 | window.jasmineRequire = window.jasmineRequire || {}; | 
|  | 28 | return window.jasmineRequire; | 
|  | 29 | } | 
|  | 30 | } | 
|  | 31 |  | 
|  | 32 | getJasmineRequireObj().console = function(jRequire, j$) { | 
|  | 33 | j$.ConsoleReporter = jRequire.ConsoleReporter(); | 
|  | 34 | }; | 
|  | 35 |  | 
|  | 36 | getJasmineRequireObj().ConsoleReporter = function() { | 
|  | 37 |  | 
|  | 38 | var noopTimer = { | 
|  | 39 | start: function(){}, | 
|  | 40 | elapsed: function(){ return 0; } | 
|  | 41 | }; | 
|  | 42 |  | 
|  | 43 | function ConsoleReporter(options) { | 
|  | 44 | var print = options.print, | 
|  | 45 | showColors = options.showColors || false, | 
|  | 46 | onComplete = options.onComplete || function() {}, | 
|  | 47 | timer = options.timer || noopTimer, | 
|  | 48 | specCount, | 
|  | 49 | failureCount, | 
|  | 50 | failedSpecs = [], | 
|  | 51 | pendingCount, | 
|  | 52 | ansi = { | 
|  | 53 | green: '\x1B[32m', | 
|  | 54 | red: '\x1B[31m', | 
|  | 55 | yellow: '\x1B[33m', | 
|  | 56 | none: '\x1B[0m' | 
|  | 57 | }, | 
|  | 58 | failedSuites = []; | 
|  | 59 |  | 
|  | 60 | print('ConsoleReporter is deprecated and will be removed in a future version.'); | 
|  | 61 |  | 
|  | 62 | this.jasmineStarted = function() { | 
|  | 63 | specCount = 0; | 
|  | 64 | failureCount = 0; | 
|  | 65 | pendingCount = 0; | 
|  | 66 | print('Started'); | 
|  | 67 | printNewline(); | 
|  | 68 | timer.start(); | 
|  | 69 | }; | 
|  | 70 |  | 
|  | 71 | this.jasmineDone = function() { | 
|  | 72 | printNewline(); | 
|  | 73 | for (var i = 0; i < failedSpecs.length; i++) { | 
|  | 74 | specFailureDetails(failedSpecs[i]); | 
|  | 75 | } | 
|  | 76 |  | 
|  | 77 | if(specCount > 0) { | 
|  | 78 | printNewline(); | 
|  | 79 |  | 
|  | 80 | var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' + | 
|  | 81 | failureCount + ' ' + plural('failure', failureCount); | 
|  | 82 |  | 
|  | 83 | if (pendingCount) { | 
|  | 84 | specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount); | 
|  | 85 | } | 
|  | 86 |  | 
|  | 87 | print(specCounts); | 
|  | 88 | } else { | 
|  | 89 | print('No specs found'); | 
|  | 90 | } | 
|  | 91 |  | 
|  | 92 | printNewline(); | 
|  | 93 | var seconds = timer.elapsed() / 1000; | 
|  | 94 | print('Finished in ' + seconds + ' ' + plural('second', seconds)); | 
|  | 95 | printNewline(); | 
|  | 96 |  | 
|  | 97 | for(i = 0; i < failedSuites.length; i++) { | 
|  | 98 | suiteFailureDetails(failedSuites[i]); | 
|  | 99 | } | 
|  | 100 |  | 
|  | 101 | onComplete(failureCount === 0); | 
|  | 102 | }; | 
|  | 103 |  | 
|  | 104 | this.specDone = function(result) { | 
|  | 105 | specCount++; | 
|  | 106 |  | 
|  | 107 | if (result.status == 'pending') { | 
|  | 108 | pendingCount++; | 
|  | 109 | print(colored('yellow', '*')); | 
|  | 110 | return; | 
|  | 111 | } | 
|  | 112 |  | 
|  | 113 | if (result.status == 'passed') { | 
|  | 114 | print(colored('green', '.')); | 
|  | 115 | return; | 
|  | 116 | } | 
|  | 117 |  | 
|  | 118 | if (result.status == 'failed') { | 
|  | 119 | failureCount++; | 
|  | 120 | failedSpecs.push(result); | 
|  | 121 | print(colored('red', 'F')); | 
|  | 122 | } | 
|  | 123 | }; | 
|  | 124 |  | 
|  | 125 | this.suiteDone = function(result) { | 
|  | 126 | if (result.failedExpectations && result.failedExpectations.length > 0) { | 
|  | 127 | failureCount++; | 
|  | 128 | failedSuites.push(result); | 
|  | 129 | } | 
|  | 130 | }; | 
|  | 131 |  | 
|  | 132 | return this; | 
|  | 133 |  | 
|  | 134 | function printNewline() { | 
|  | 135 | print('\n'); | 
|  | 136 | } | 
|  | 137 |  | 
|  | 138 | function colored(color, str) { | 
|  | 139 | return showColors ? (ansi[color] + str + ansi.none) : str; | 
|  | 140 | } | 
|  | 141 |  | 
|  | 142 | function plural(str, count) { | 
|  | 143 | return count == 1 ? str : str + 's'; | 
|  | 144 | } | 
|  | 145 |  | 
|  | 146 | function repeat(thing, times) { | 
|  | 147 | var arr = []; | 
|  | 148 | for (var i = 0; i < times; i++) { | 
|  | 149 | arr.push(thing); | 
|  | 150 | } | 
|  | 151 | return arr; | 
|  | 152 | } | 
|  | 153 |  | 
|  | 154 | function indent(str, spaces) { | 
|  | 155 | var lines = (str || '').split('\n'); | 
|  | 156 | var newArr = []; | 
|  | 157 | for (var i = 0; i < lines.length; i++) { | 
|  | 158 | newArr.push(repeat(' ', spaces).join('') + lines[i]); | 
|  | 159 | } | 
|  | 160 | return newArr.join('\n'); | 
|  | 161 | } | 
|  | 162 |  | 
|  | 163 | function specFailureDetails(result) { | 
|  | 164 | printNewline(); | 
|  | 165 | print(result.fullName); | 
|  | 166 |  | 
|  | 167 | for (var i = 0; i < result.failedExpectations.length; i++) { | 
|  | 168 | var failedExpectation = result.failedExpectations[i]; | 
|  | 169 | printNewline(); | 
|  | 170 | print(indent(failedExpectation.message, 2)); | 
|  | 171 | print(indent(failedExpectation.stack, 2)); | 
|  | 172 | } | 
|  | 173 |  | 
|  | 174 | printNewline(); | 
|  | 175 | } | 
|  | 176 |  | 
|  | 177 | function suiteFailureDetails(result) { | 
|  | 178 | for (var i = 0; i < result.failedExpectations.length; i++) { | 
|  | 179 | printNewline(); | 
|  | 180 | print(colored('red', 'An error was thrown in an afterAll')); | 
|  | 181 | printNewline(); | 
|  | 182 | print(colored('red', 'AfterAll ' + result.failedExpectations[i].message)); | 
|  | 183 |  | 
|  | 184 | } | 
|  | 185 | printNewline(); | 
|  | 186 | } | 
|  | 187 | } | 
|  | 188 |  | 
|  | 189 | return ConsoleReporter; | 
|  | 190 | }; |