PageRenderTime 92ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/PhoneGap02/node_modules/karma/static/karma.js

https://gitlab.com/hemantr/NetBeansProjects
JavaScript | 407 lines | 316 code | 65 blank | 26 comment | 55 complexity | d1d8d4b02bec3e008838d8bb7404a137 MD5 | raw file
  1. (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  2. module.exports = {
  3. VERSION: '%KARMA_VERSION%',
  4. KARMA_URL_ROOT: '%KARMA_URL_ROOT%',
  5. CONTEXT_URL: 'context.html'
  6. }
  7. },{}],2:[function(require,module,exports){
  8. var stringify = require('./stringify')
  9. var constant = require('./constants')
  10. var util = require('./util')
  11. /* jshint unused: false */
  12. var Karma = function (socket, iframe, opener, navigator, location) {
  13. var hasError = false
  14. var startEmitted = false
  15. var reloadingContext = false
  16. var store = {}
  17. var self = this
  18. var queryParams = util.parseQueryParams(location.search)
  19. var browserId = queryParams.id || util.generateId('manual-')
  20. var returnUrl = queryParams['return_url' + ''] || null
  21. var currentTransport
  22. var resultsBufferLimit = 1
  23. var resultsBuffer = []
  24. this.VERSION = constant.VERSION
  25. this.config = {}
  26. var childWindow = null
  27. var navigateContextTo = function (url) {
  28. if (self.config.useIframe === false) {
  29. if (childWindow === null || childWindow.closed === true) {
  30. // If this is the first time we are opening the window, or the window is closed
  31. childWindow = opener('about:blank')
  32. }
  33. childWindow.location = url
  34. } else {
  35. iframe.src = url
  36. }
  37. }
  38. this.setupContext = function (contextWindow) {
  39. if (hasError) {
  40. return
  41. }
  42. var getConsole = function (currentWindow) {
  43. return currentWindow.console || {
  44. log: function () {},
  45. info: function () {},
  46. warn: function () {},
  47. error: function () {},
  48. debug: function () {}
  49. }
  50. }
  51. contextWindow.__karma__ = this
  52. // This causes memory leak in Chrome (17.0.963.66)
  53. contextWindow.onerror = function () {
  54. return contextWindow.__karma__.error.apply(contextWindow.__karma__, arguments)
  55. }
  56. contextWindow.onbeforeunload = function (e, b) {
  57. if (!reloadingContext) {
  58. // TODO(vojta): show what test (with explanation about jasmine.UPDATE_INTERVAL)
  59. contextWindow.__karma__.error('Some of your tests did a full page reload!')
  60. }
  61. }
  62. if (self.config.captureConsole) {
  63. // patch the console
  64. var localConsole = contextWindow.console = getConsole(contextWindow)
  65. var logMethods = ['log', 'info', 'warn', 'error', 'debug']
  66. var patchConsoleMethod = function (method) {
  67. var orig = localConsole[method]
  68. if (!orig) {
  69. return
  70. }
  71. localConsole[method] = function () {
  72. self.log(method, arguments)
  73. return Function.prototype.apply.call(orig, localConsole, arguments)
  74. }
  75. }
  76. for (var i = 0; i < logMethods.length; i++) {
  77. patchConsoleMethod(logMethods[i])
  78. }
  79. }
  80. contextWindow.dump = function () {
  81. self.log('dump', arguments)
  82. }
  83. contextWindow.alert = function (msg) {
  84. self.log('alert', [msg])
  85. }
  86. }
  87. this.log = function (type, args) {
  88. var values = []
  89. for (var i = 0; i < args.length; i++) {
  90. values.push(this.stringify(args[i], 3))
  91. }
  92. this.info({log: values.join(', '), type: type})
  93. }
  94. this.stringify = stringify
  95. var clearContext = function () {
  96. reloadingContext = true
  97. navigateContextTo('about:blank')
  98. }
  99. // error during js file loading (most likely syntax error)
  100. // we are not going to execute at all
  101. this.error = function (msg, url, line) {
  102. hasError = true
  103. socket.emit('error', url ? msg + '\nat ' + url + (line ? ':' + line : '') : msg)
  104. this.complete()
  105. return false
  106. }
  107. this.result = function (result) {
  108. if (!startEmitted) {
  109. socket.emit('start', {total: null})
  110. startEmitted = true
  111. }
  112. if (resultsBufferLimit === 1) {
  113. return socket.emit('result', result)
  114. }
  115. resultsBuffer.push(result)
  116. if (resultsBuffer.length === resultsBufferLimit) {
  117. socket.emit('result', resultsBuffer)
  118. resultsBuffer = []
  119. }
  120. }
  121. this.complete = function (result) {
  122. if (resultsBuffer.length) {
  123. socket.emit('result', resultsBuffer)
  124. resultsBuffer = []
  125. }
  126. // give the browser some time to breath, there could be a page reload, but because a bunch of
  127. // tests could run in the same event loop, we wouldn't notice.
  128. setTimeout(function () {
  129. clearContext()
  130. }, 0)
  131. socket.emit('complete', result || {}, function () {
  132. if (returnUrl) {
  133. location.href = returnUrl
  134. }
  135. })
  136. }
  137. this.info = function (info) {
  138. // TODO(vojta): introduce special API for this
  139. if (!startEmitted && util.isDefined(info.total)) {
  140. socket.emit('start', info)
  141. startEmitted = true
  142. } else {
  143. socket.emit('info', info)
  144. }
  145. }
  146. var UNIMPLEMENTED_START = function () {
  147. this.error('You need to include some adapter that implements __karma__.start method!')
  148. }
  149. // all files loaded, let's start the execution
  150. this.loaded = function () {
  151. // has error -> cancel
  152. if (!hasError) {
  153. this.start(this.config)
  154. }
  155. // remove reference to child iframe
  156. this.start = UNIMPLEMENTED_START
  157. }
  158. this.store = function (key, value) {
  159. if (util.isUndefined(value)) {
  160. return store[key]
  161. }
  162. if (util.instanceOf(value, 'Array')) {
  163. var s = store[key] = []
  164. for (var i = 0; i < value.length; i++) {
  165. s.push(value[i])
  166. }
  167. } else {
  168. // TODO(vojta): clone objects + deep
  169. store[key] = value
  170. }
  171. }
  172. // supposed to be overriden by the context
  173. // TODO(vojta): support multiple callbacks (queue)
  174. this.start = UNIMPLEMENTED_START
  175. socket.on('execute', function (cfg) {
  176. // reset hasError and reload the iframe
  177. hasError = false
  178. startEmitted = false
  179. reloadingContext = false
  180. self.config = cfg
  181. navigateContextTo(constant.CONTEXT_URL)
  182. // clear the console before run
  183. // works only on FF (Safari, Chrome do not allow to clear console from js source)
  184. if (window.console && window.console.clear) {
  185. window.console.clear()
  186. }
  187. })
  188. // report browser name, id
  189. socket.on('connect', function () {
  190. currentTransport = socket.socket.transport.name
  191. // TODO(vojta): make resultsBufferLimit configurable
  192. if (currentTransport === 'websocket' || currentTransport === 'flashsocket') {
  193. resultsBufferLimit = 1
  194. } else {
  195. resultsBufferLimit = 50
  196. }
  197. socket.emit('register', {
  198. name: navigator.userAgent,
  199. id: browserId
  200. })
  201. })
  202. }
  203. module.exports = Karma
  204. },{"./constants":1,"./stringify":4,"./util":6}],3:[function(require,module,exports){
  205. /* global io */
  206. /* eslint-disable no-new */
  207. var Karma = require('./karma')
  208. var StatusUpdater = require('./updater')
  209. var util = require('./util')
  210. var KARMA_URL_ROOT = require('./constants').KARMA_URL_ROOT
  211. // connect socket.io
  212. // https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
  213. var socket = io.connect(location.protocol + '//' + location.host, {
  214. 'reconnection delay': 500,
  215. 'reconnection limit': 2000,
  216. 'resource': KARMA_URL_ROOT.substr(1) + 'socket.io',
  217. 'sync disconnect on unload': true,
  218. 'max reconnection attempts': Infinity
  219. })
  220. // instantiate the updater of the view
  221. new StatusUpdater(socket, util.elm('title'), util.elm('banner'), util.elm('browsers'))
  222. window.karma = new Karma(socket, util.elm('context'), window.open,
  223. window.navigator, window.location)
  224. },{"./constants":1,"./karma":2,"./updater":5,"./util":6}],4:[function(require,module,exports){
  225. var instanceOf = require('./util').instanceOf
  226. var stringify = function stringify (obj, depth) {
  227. if (depth === 0) {
  228. return '...'
  229. }
  230. if (obj === null) {
  231. return 'null'
  232. }
  233. switch (typeof obj) {
  234. case 'string':
  235. return "'" + obj + "'"
  236. case 'undefined':
  237. return 'undefined'
  238. case 'function':
  239. return obj.toString().replace(/\{[\s\S]*\}/, '{ ... }')
  240. case 'boolean':
  241. return obj ? 'true' : 'false'
  242. case 'object':
  243. var strs = []
  244. if (instanceOf(obj, 'Array')) {
  245. strs.push('[')
  246. for (var i = 0, ii = obj.length; i < ii; i++) {
  247. if (i) {
  248. strs.push(', ')
  249. }
  250. strs.push(stringify(obj[i], depth - 1))
  251. }
  252. strs.push(']')
  253. } else if (instanceOf(obj, 'Date')) {
  254. return obj.toString()
  255. } else if (instanceOf(obj, 'Text')) {
  256. return obj.nodeValue
  257. } else if (instanceOf(obj, 'Comment')) {
  258. return '<!--' + obj.nodeValue + '-->'
  259. } else if (obj.outerHTML) {
  260. return obj.outerHTML
  261. } else {
  262. var constructor = 'Object'
  263. if (obj.constructor && typeof obj.constructor === 'function') {
  264. constructor = obj.constructor.name
  265. }
  266. strs.push(constructor)
  267. strs.push('{')
  268. var first = true
  269. for (var key in obj) {
  270. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  271. if (first) {
  272. first = false
  273. } else {
  274. strs.push(', ')
  275. }
  276. strs.push(key + ': ' + stringify(obj[key], depth - 1))
  277. }
  278. }
  279. strs.push('}')
  280. }
  281. return strs.join('')
  282. default:
  283. return obj
  284. }
  285. }
  286. module.exports = stringify
  287. },{"./util":6}],5:[function(require,module,exports){
  288. var VERSION = require('./constants').VERSION
  289. var StatusUpdater = function (socket, titleElement, bannerElement, browsersElement) {
  290. var updateBrowsersInfo = function (browsers) {
  291. var items = [], status
  292. for (var i = 0; i < browsers.length; i++) {
  293. status = browsers[i].isReady ? 'idle' : 'executing'
  294. items.push('<li class="' + status + '">' + browsers[i].name + ' is ' + status + '</li>')
  295. }
  296. browsersElement.innerHTML = items.join('\n')
  297. }
  298. var updateBanner = function (status) {
  299. return function (param) {
  300. var paramStatus = param ? status.replace('$', param) : status
  301. titleElement.innerHTML = 'Karma v' + VERSION + ' - ' + paramStatus
  302. bannerElement.className = status === 'connected' ? 'online' : 'offline'
  303. }
  304. }
  305. socket.on('connect', updateBanner('connected'))
  306. socket.on('disconnect', updateBanner('disconnected'))
  307. socket.on('reconnecting', updateBanner('reconnecting in $ ms...'))
  308. socket.on('reconnect', updateBanner('connected'))
  309. socket.on('reconnect_failed', updateBanner('failed to reconnect'))
  310. socket.on('info', updateBrowsersInfo)
  311. socket.on('disconnect', function () {
  312. updateBrowsersInfo([])
  313. })
  314. }
  315. module.exports = StatusUpdater
  316. },{"./constants":1}],6:[function(require,module,exports){
  317. exports.instanceOf = function (value, constructorName) {
  318. return Object.prototype.toString.apply(value) === '[object ' + constructorName + ']'
  319. }
  320. exports.elm = function (id) {
  321. return document.getElementById(id)
  322. }
  323. exports.generateId = function (prefix) {
  324. return prefix + Math.floor(Math.random() * 10000)
  325. }
  326. exports.isUndefined = function (value) {
  327. return typeof value === 'undefined'
  328. }
  329. exports.isDefined = function (value) {
  330. return !exports.isUndefined(value)
  331. }
  332. exports.parseQueryParams = function (locationSearch) {
  333. var params = {}
  334. var pairs = locationSearch.substr(1).split('&')
  335. var keyValue
  336. for (var i = 0; i < pairs.length; i++) {
  337. keyValue = pairs[i].split('=')
  338. params[decodeURIComponent(keyValue[0])] = decodeURIComponent(keyValue[1])
  339. }
  340. return params
  341. }
  342. },{}]},{},[3]);