mobile_template 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.md +28 -0
  5. data/Rakefile +3 -0
  6. data/bin/mobile_template +71 -0
  7. data/lib/mobile_template/version.rb +4 -0
  8. data/lib/mobile_template.rb +5 -0
  9. data/mobile_template.gemspec +21 -0
  10. data/templates/assets/Gemfile +4 -0
  11. data/templates/assets/config.rb +96 -0
  12. data/templates/assets/config.ru +4 -0
  13. data/templates/assets/source/images/vendor/ajax-loader.gif +0 -0
  14. data/templates/assets/source/images/vendor/ajax-loader.png +0 -0
  15. data/templates/assets/source/images/vendor/icons-18-black.png +0 -0
  16. data/templates/assets/source/images/vendor/icons-18-white.png +0 -0
  17. data/templates/assets/source/images/vendor/icons-36-black.png +0 -0
  18. data/templates/assets/source/images/vendor/icons-36-white.png +0 -0
  19. data/templates/assets/source/index.html.erb +2 -0
  20. data/templates/assets/source/javascripts/app/index.js.coffee +2 -0
  21. data/templates/assets/source/javascripts/application.js.coffee +5 -0
  22. data/templates/assets/source/javascripts/vendor/cordova.js +4841 -0
  23. data/templates/assets/source/javascripts/vendor/jquery.js +9267 -0
  24. data/templates/assets/source/javascripts/vendor/jquery.mobile.js +7410 -0
  25. data/templates/assets/source/layout.erb +24 -0
  26. data/templates/assets/source/stylesheets/application.css.scss +2 -0
  27. data/templates/assets/source/stylesheets/vendor/jquery.mobile.css.scss +1872 -0
  28. data/templates/cordova_android/.gitignore +18 -0
  29. data/templates/cordova_android/LICENSE +202 -0
  30. data/templates/cordova_android/NOTICE +5 -0
  31. data/templates/cordova_android/README.md +95 -0
  32. data/templates/cordova_android/VERSION +1 -0
  33. data/templates/cordova_android/bin/BOOM +4 -0
  34. data/templates/cordova_android/bin/autotest +2 -0
  35. data/templates/cordova_android/bin/bench +29 -0
  36. data/templates/cordova_android/bin/create +46 -0
  37. data/templates/cordova_android/bin/create.bat +1 -0
  38. data/templates/cordova_android/bin/create.js +88 -0
  39. data/templates/cordova_android/bin/create.xml +79 -0
  40. data/templates/cordova_android/bin/node_modules/.bin/cake +7 -0
  41. data/templates/cordova_android/bin/node_modules/.bin/coffee +7 -0
  42. data/templates/cordova_android/bin/node_modules/.bin/nodeunit +120 -0
  43. data/templates/cordova_android/bin/node_modules/coffee-script/.npmignore +11 -0
  44. data/templates/cordova_android/bin/node_modules/coffee-script/LICENSE +22 -0
  45. data/templates/cordova_android/bin/node_modules/coffee-script/README +48 -0
  46. data/templates/cordova_android/bin/node_modules/coffee-script/Rakefile +78 -0
  47. data/templates/cordova_android/bin/node_modules/coffee-script/bin/cake +7 -0
  48. data/templates/cordova_android/bin/node_modules/coffee-script/bin/coffee +7 -0
  49. data/templates/cordova_android/bin/node_modules/coffee-script/extras/jsl.conf +44 -0
  50. data/templates/cordova_android/bin/node_modules/coffee-script/lib/browser.js +75 -0
  51. data/templates/cordova_android/bin/node_modules/coffee-script/lib/cake.js +76 -0
  52. data/templates/cordova_android/bin/node_modules/coffee-script/lib/coffee-script.js +135 -0
  53. data/templates/cordova_android/bin/node_modules/coffee-script/lib/command.js +301 -0
  54. data/templates/cordova_android/bin/node_modules/coffee-script/lib/grammar.js +591 -0
  55. data/templates/cordova_android/bin/node_modules/coffee-script/lib/helpers.js +66 -0
  56. data/templates/cordova_android/bin/node_modules/coffee-script/lib/index.js +8 -0
  57. data/templates/cordova_android/bin/node_modules/coffee-script/lib/lexer.js +656 -0
  58. data/templates/cordova_android/bin/node_modules/coffee-script/lib/nodes.js +2289 -0
  59. data/templates/cordova_android/bin/node_modules/coffee-script/lib/optparse.js +111 -0
  60. data/templates/cordova_android/bin/node_modules/coffee-script/lib/parser.js +676 -0
  61. data/templates/cordova_android/bin/node_modules/coffee-script/lib/repl.js +123 -0
  62. data/templates/cordova_android/bin/node_modules/coffee-script/lib/rewriter.js +363 -0
  63. data/templates/cordova_android/bin/node_modules/coffee-script/lib/scope.js +120 -0
  64. data/templates/cordova_android/bin/node_modules/coffee-script/package.json +27 -0
  65. data/templates/cordova_android/bin/node_modules/nodeunit/.gitignore +5 -0
  66. data/templates/cordova_android/bin/node_modules/nodeunit/.npmignore +3 -0
  67. data/templates/cordova_android/bin/node_modules/nodeunit/CONTRIBUTORS.md +60 -0
  68. data/templates/cordova_android/bin/node_modules/nodeunit/LICENSE +19 -0
  69. data/templates/cordova_android/bin/node_modules/nodeunit/Makefile +126 -0
  70. data/templates/cordova_android/bin/node_modules/nodeunit/README.md +432 -0
  71. data/templates/cordova_android/bin/node_modules/nodeunit/bin/nodeunit +120 -0
  72. data/templates/cordova_android/bin/node_modules/nodeunit/bin/nodeunit.json +10 -0
  73. data/templates/cordova_android/bin/node_modules/nodeunit/deps/async.js +623 -0
  74. data/templates/cordova_android/bin/node_modules/nodeunit/deps/console.log.js +55 -0
  75. data/templates/cordova_android/bin/node_modules/nodeunit/deps/ejs.js +125 -0
  76. data/templates/cordova_android/bin/node_modules/nodeunit/deps/json2.js +483 -0
  77. data/templates/cordova_android/bin/node_modules/nodeunit/examples/browser/nodeunit.js +1757 -0
  78. data/templates/cordova_android/bin/node_modules/nodeunit/examples/browser/suite1.js +12 -0
  79. data/templates/cordova_android/bin/node_modules/nodeunit/examples/browser/suite2.js +13 -0
  80. data/templates/cordova_android/bin/node_modules/nodeunit/examples/browser/test.html +16 -0
  81. data/templates/cordova_android/bin/node_modules/nodeunit/img/example_fail.png +0 -0
  82. data/templates/cordova_android/bin/node_modules/nodeunit/img/example_pass.png +0 -0
  83. data/templates/cordova_android/bin/node_modules/nodeunit/index.js +3 -0
  84. data/templates/cordova_android/bin/node_modules/nodeunit/lib/assert.js +316 -0
  85. data/templates/cordova_android/bin/node_modules/nodeunit/lib/core.js +260 -0
  86. data/templates/cordova_android/bin/node_modules/nodeunit/lib/nodeunit.js +82 -0
  87. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/browser.js +119 -0
  88. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/default.js +123 -0
  89. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/html.js +107 -0
  90. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/index.js +9 -0
  91. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/junit.js +183 -0
  92. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/minimal.js +112 -0
  93. data/templates/cordova_android/bin/node_modules/nodeunit/lib/reporters/skip_passed.js +105 -0
  94. data/templates/cordova_android/bin/node_modules/nodeunit/lib/track.js +48 -0
  95. data/templates/cordova_android/bin/node_modules/nodeunit/lib/types.js +187 -0
  96. data/templates/cordova_android/bin/node_modules/nodeunit/lib/utils.js +209 -0
  97. data/templates/cordova_android/bin/node_modules/nodeunit/man1/nodeunit.1 +95 -0
  98. data/templates/cordova_android/bin/node_modules/nodeunit/nodelint.cfg +4 -0
  99. data/templates/cordova_android/bin/node_modules/nodeunit/package.json +56 -0
  100. data/templates/cordova_android/bin/node_modules/nodeunit/share/junit.xml.ejs +19 -0
  101. data/templates/cordova_android/bin/node_modules/nodeunit/share/license.js +11 -0
  102. data/templates/cordova_android/bin/node_modules/nodeunit/share/nodeunit.css +70 -0
  103. data/templates/cordova_android/bin/templates/project/.cordova/android/readme.md +1 -0
  104. data/templates/cordova_android/bin/templates/project/.cordova/readme.md +3 -0
  105. data/templates/cordova_android/bin/templates/project/cordova/create +36 -0
  106. data/templates/cordova_android/bin/templates/project/cordova/debug +9 -0
  107. data/templates/cordova_android/bin/templates/project/cordova/emulate +12 -0
  108. data/templates/cordova_android/bin/templates/project/cordova/log +3 -0
  109. data/templates/cordova_android/bin/templates/project/cordova/templates/Activity.java +16 -0
  110. data/templates/cordova_android/bin/templates/project/cordova/templates/project/AndroidManifest.xml +50 -0
  111. data/templates/cordova_android/bin/templates/project/cordova/templates/project/assets/www/index.html +42 -0
  112. data/templates/cordova_android/bin/templates/project/cordova/templates/project/assets/www/main.js +146 -0
  113. data/templates/cordova_android/bin/templates/project/cordova/templates/project/assets/www/master.css +96 -0
  114. data/templates/cordova_android/bin/templates/project/cordova/templates/project/res/drawable/icon.png +0 -0
  115. data/templates/cordova_android/bin/templates/project/cordova/templates/project/res/xml/cordova.xml +5 -0
  116. data/templates/cordova_android/bin/templates/project/cordova/templates/project/res/xml/plugins.xml +19 -0
  117. data/templates/cordova_android/bin/test +26 -0
  118. data/templates/cordova_android/bin/tests/autotest.coffee +4 -0
  119. data/templates/cordova_android/bin/tests/create.coffee +21 -0
  120. data/templates/cordova_android/bin/tests/debug.coffee +0 -0
  121. data/templates/cordova_android/bin/tests/test.coffee +0 -0
  122. data/templates/cordova_android/framework/.classpath +8 -0
  123. data/templates/cordova_android/framework/.project +33 -0
  124. data/templates/cordova_android/framework/AndroidManifest.xml +68 -0
  125. data/templates/cordova_android/framework/ant.properties +34 -0
  126. data/templates/cordova_android/framework/assets/js/accelerometer.js +137 -0
  127. data/templates/cordova_android/framework/assets/js/app.js +89 -0
  128. data/templates/cordova_android/framework/assets/js/battery.js +134 -0
  129. data/templates/cordova_android/framework/assets/js/camera.js +168 -0
  130. data/templates/cordova_android/framework/assets/js/capture.js +203 -0
  131. data/templates/cordova_android/framework/assets/js/compass.js +168 -0
  132. data/templates/cordova_android/framework/assets/js/contact.js +310 -0
  133. data/templates/cordova_android/framework/assets/js/cordova.android.js +4841 -0
  134. data/templates/cordova_android/framework/assets/js/cordova.js.base +924 -0
  135. data/templates/cordova_android/framework/assets/js/crypto.js +54 -0
  136. data/templates/cordova_android/framework/assets/js/device.js +83 -0
  137. data/templates/cordova_android/framework/assets/js/file.js +1082 -0
  138. data/templates/cordova_android/framework/assets/js/filetransfer.js +125 -0
  139. data/templates/cordova_android/framework/assets/js/geolocation.js +209 -0
  140. data/templates/cordova_android/framework/assets/js/header.txt +19 -0
  141. data/templates/cordova_android/framework/assets/js/media.js +233 -0
  142. data/templates/cordova_android/framework/assets/js/network.js +100 -0
  143. data/templates/cordova_android/framework/assets/js/notification.js +133 -0
  144. data/templates/cordova_android/framework/assets/js/position.js +100 -0
  145. data/templates/cordova_android/framework/assets/js/storage.js +439 -0
  146. data/templates/cordova_android/framework/assets/www/index.html +27 -0
  147. data/templates/cordova_android/framework/build.xml +216 -0
  148. data/templates/cordova_android/framework/libs/commons-codec-1.3.jar +0 -0
  149. data/templates/cordova_android/framework/proguard-project.txt +20 -0
  150. data/templates/cordova_android/framework/project.properties +14 -0
  151. data/templates/cordova_android/framework/res/drawable/icon.png +0 -0
  152. data/templates/cordova_android/framework/res/drawable/splash.png +0 -0
  153. data/templates/cordova_android/framework/res/layout/main.xml +29 -0
  154. data/templates/cordova_android/framework/res/values/strings.xml +23 -0
  155. data/templates/cordova_android/framework/res/xml/cordova.xml +37 -0
  156. data/templates/cordova_android/framework/res/xml/plugins.xml +37 -0
  157. data/templates/cordova_android/framework/src/com/phonegap/api/IPlugin.java +27 -0
  158. data/templates/cordova_android/framework/src/com/phonegap/api/LOG.java +28 -0
  159. data/templates/cordova_android/framework/src/com/phonegap/api/PhonegapActivity.java +28 -0
  160. data/templates/cordova_android/framework/src/com/phonegap/api/Plugin.java +27 -0
  161. data/templates/cordova_android/framework/src/com/phonegap/api/PluginManager.java +35 -0
  162. data/templates/cordova_android/framework/src/com/phonegap/api/PluginResult.java +53 -0
  163. data/templates/cordova_android/framework/src/org/apache/cordova/AccelListener.java +311 -0
  164. data/templates/cordova_android/framework/src/org/apache/cordova/App.java +198 -0
  165. data/templates/cordova_android/framework/src/org/apache/cordova/AudioHandler.java +364 -0
  166. data/templates/cordova_android/framework/src/org/apache/cordova/AudioPlayer.java +450 -0
  167. data/templates/cordova_android/framework/src/org/apache/cordova/AuthenticationToken.java +69 -0
  168. data/templates/cordova_android/framework/src/org/apache/cordova/BatteryListener.java +156 -0
  169. data/templates/cordova_android/framework/src/org/apache/cordova/CallbackServer.java +431 -0
  170. data/templates/cordova_android/framework/src/org/apache/cordova/CameraLauncher.java +500 -0
  171. data/templates/cordova_android/framework/src/org/apache/cordova/Capture.java +400 -0
  172. data/templates/cordova_android/framework/src/org/apache/cordova/CompassListener.java +308 -0
  173. data/templates/cordova_android/framework/src/org/apache/cordova/ContactAccessor.java +198 -0
  174. data/templates/cordova_android/framework/src/org/apache/cordova/ContactAccessorSdk5.java +1934 -0
  175. data/templates/cordova_android/framework/src/org/apache/cordova/ContactManager.java +113 -0
  176. data/templates/cordova_android/framework/src/org/apache/cordova/CordovaChromeClient.java +314 -0
  177. data/templates/cordova_android/framework/src/org/apache/cordova/CordovaWebViewClient.java +306 -0
  178. data/templates/cordova_android/framework/src/org/apache/cordova/Device.java +219 -0
  179. data/templates/cordova_android/framework/src/org/apache/cordova/DirectoryManager.java +161 -0
  180. data/templates/cordova_android/framework/src/org/apache/cordova/DroidGap.java +1417 -0
  181. data/templates/cordova_android/framework/src/org/apache/cordova/ExifHelper.java +165 -0
  182. data/templates/cordova_android/framework/src/org/apache/cordova/FileTransfer.java +458 -0
  183. data/templates/cordova_android/framework/src/org/apache/cordova/FileUploadResult.java +63 -0
  184. data/templates/cordova_android/framework/src/org/apache/cordova/FileUtils.java +1048 -0
  185. data/templates/cordova_android/framework/src/org/apache/cordova/GeoBroker.java +165 -0
  186. data/templates/cordova_android/framework/src/org/apache/cordova/GeoListener.java +133 -0
  187. data/templates/cordova_android/framework/src/org/apache/cordova/GpsListener.java +163 -0
  188. data/templates/cordova_android/framework/src/org/apache/cordova/HttpHandler.java +80 -0
  189. data/templates/cordova_android/framework/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java +104 -0
  190. data/templates/cordova_android/framework/src/org/apache/cordova/NetworkListener.java +153 -0
  191. data/templates/cordova_android/framework/src/org/apache/cordova/NetworkManager.java +248 -0
  192. data/templates/cordova_android/framework/src/org/apache/cordova/Notification.java +366 -0
  193. data/templates/cordova_android/framework/src/org/apache/cordova/PreferenceNode.java +34 -0
  194. data/templates/cordova_android/framework/src/org/apache/cordova/PreferenceSet.java +62 -0
  195. data/templates/cordova_android/framework/src/org/apache/cordova/StandAlone.java +35 -0
  196. data/templates/cordova_android/framework/src/org/apache/cordova/Storage.java +239 -0
  197. data/templates/cordova_android/framework/src/org/apache/cordova/TempListener.java +112 -0
  198. data/templates/cordova_android/framework/src/org/apache/cordova/api/CordovaInterface.java +145 -0
  199. data/templates/cordova_android/framework/src/org/apache/cordova/api/IPlugin.java +116 -0
  200. data/templates/cordova_android/framework/src/org/apache/cordova/api/LOG.java +234 -0
  201. data/templates/cordova_android/framework/src/org/apache/cordova/api/Plugin.java +210 -0
  202. data/templates/cordova_android/framework/src/org/apache/cordova/api/PluginManager.java +359 -0
  203. data/templates/cordova_android/framework/src/org/apache/cordova/api/PluginResult.java +119 -0
  204. data/templates/cordova_android/framework/src/org/apache/cordova/file/EncodingException.java +28 -0
  205. data/templates/cordova_android/framework/src/org/apache/cordova/file/FileExistsException.java +28 -0
  206. data/templates/cordova_android/framework/src/org/apache/cordova/file/InvalidModificationException.java +29 -0
  207. data/templates/cordova_android/framework/src/org/apache/cordova/file/NoModificationAllowedException.java +28 -0
  208. data/templates/cordova_android/framework/src/org/apache/cordova/file/TypeMismatchException.java +29 -0
  209. data/templates/cordova_android/framework/test/org/apache/cordova/PreferenceNodeTest.java +53 -0
  210. data/templates/cordova_android/framework/test/org/apache/cordova/PreferenceSetTest.java +73 -0
  211. metadata +279 -0
@@ -0,0 +1,82 @@
1
+ /*!
2
+ * Nodeunit
3
+ * Copyright (c) 2010 Caolan McMahon
4
+ * MIT Licensed
5
+ */
6
+
7
+ /**
8
+ * Module dependencies
9
+ */
10
+
11
+ var async = require('../deps/async'),
12
+ types = require('./types'),
13
+ utils = require('./utils'),
14
+ core = require('./core'),
15
+ reporters = require('./reporters'),
16
+ assert = require('./assert'),
17
+ path = require('path');
18
+
19
+
20
+ /**
21
+ * Export sub-modules.
22
+ */
23
+
24
+ exports.types = types;
25
+ exports.utils = utils;
26
+ exports.reporters = reporters;
27
+ exports.assert = assert;
28
+
29
+ // backwards compatibility
30
+ exports.testrunner = {
31
+ run: function () {
32
+ console.log(
33
+ 'WARNING: nodeunit.testrunner is going to be deprecated, please ' +
34
+ 'use nodeunit.reporters.default instead!'
35
+ );
36
+ return reporters['default'].run.apply(this, arguments);
37
+ }
38
+ };
39
+
40
+
41
+ /**
42
+ * Export all core functions
43
+ */
44
+
45
+ for (var k in core) {
46
+ exports[k] = core[k];
47
+ };
48
+
49
+
50
+ /**
51
+ * Load modules from paths array and run all exported tests in series. If a path
52
+ * is a directory, load all supported file types inside it as modules. This only
53
+ * reads 1 level deep in the directory and does not recurse through
54
+ * sub-directories.
55
+ *
56
+ * @param {Array} paths
57
+ * @param {Object} opt
58
+ * @api public
59
+ */
60
+
61
+ exports.runFiles = function (paths, opt) {
62
+ var all_assertions = [];
63
+ var options = types.options(opt);
64
+ var start = new Date().getTime();
65
+
66
+ if (!paths.length) {
67
+ return options.done(types.assertionList(all_assertions));
68
+ }
69
+
70
+ utils.modulePaths(paths, function (err, files) {
71
+ if (err) throw err;
72
+ async.concatSeries(files, function (file, cb) {
73
+ var name = path.basename(file);
74
+ exports.runModule(name, require(file), options, cb);
75
+ },
76
+ function (err, all_assertions) {
77
+ var end = new Date().getTime();
78
+ options.done(types.assertionList(all_assertions, end - start));
79
+ });
80
+ });
81
+
82
+ };
@@ -0,0 +1,119 @@
1
+ /*!
2
+ * Nodeunit
3
+ * Copyright (c) 2010 Caolan McMahon
4
+ * MIT Licensed
5
+ *
6
+ * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
7
+ * You can use @REMOVE_LINE_FOR_BROWSER to remove code from the browser build.
8
+ * Only code on that line will be removed, its mostly to avoid requiring code
9
+ * that is node specific
10
+ */
11
+
12
+
13
+ /**
14
+ * NOTE: this test runner is not listed in index.js because it cannot be
15
+ * used with the command-line tool, only inside the browser.
16
+ */
17
+
18
+
19
+ /**
20
+ * Reporter info string
21
+ */
22
+
23
+ exports.info = "Browser-based test reporter";
24
+
25
+
26
+ /**
27
+ * Run all tests within each module, reporting the results
28
+ *
29
+ * @param {Array} files
30
+ * @api public
31
+ */
32
+
33
+ exports.run = function (modules, options) {
34
+ var start = new Date().getTime();
35
+
36
+ function setText(el, txt) {
37
+ if ('innerText' in el) {
38
+ el.innerText = txt;
39
+ }
40
+ else if ('textContent' in el){
41
+ el.textContent = txt;
42
+ }
43
+ }
44
+
45
+ function getOrCreate(tag, id) {
46
+ var el = document.getElementById(id);
47
+ if (!el) {
48
+ el = document.createElement(tag);
49
+ el.id = id;
50
+ document.body.appendChild(el);
51
+ }
52
+ return el;
53
+ };
54
+
55
+ var header = getOrCreate('h1', 'nodeunit-header');
56
+ var banner = getOrCreate('h2', 'nodeunit-banner');
57
+ var userAgent = getOrCreate('h2', 'nodeunit-userAgent');
58
+ var tests = getOrCreate('ol', 'nodeunit-tests');
59
+ var result = getOrCreate('p', 'nodeunit-testresult');
60
+
61
+ setText(userAgent, navigator.userAgent);
62
+
63
+ nodeunit.runModules(modules, {
64
+ moduleStart: function (name) {
65
+ /*var mheading = document.createElement('h2');
66
+ mheading.innerText = name;
67
+ results.appendChild(mheading);
68
+ module = document.createElement('ol');
69
+ results.appendChild(module);*/
70
+ },
71
+ testDone: function (name, assertions) {
72
+ var test = document.createElement('li');
73
+ var strong = document.createElement('strong');
74
+ strong.innerHTML = name + ' <b style="color: black;">(' +
75
+ '<b class="fail">' + assertions.failures() + '</b>, ' +
76
+ '<b class="pass">' + assertions.passes() + '</b>, ' +
77
+ assertions.length +
78
+ ')</b>';
79
+ test.className = assertions.failures() ? 'fail': 'pass';
80
+ test.appendChild(strong);
81
+
82
+ var aList = document.createElement('ol');
83
+ aList.style.display = 'none';
84
+ test.onclick = function () {
85
+ var d = aList.style.display;
86
+ aList.style.display = (d == 'none') ? 'block': 'none';
87
+ };
88
+ for (var i=0; i<assertions.length; i++) {
89
+ var li = document.createElement('li');
90
+ var a = assertions[i];
91
+ if (a.failed()) {
92
+ li.innerHTML = (a.message || a.method || 'no message') +
93
+ '<pre>' + (a.error.stack || a.error) + '</pre>';
94
+ li.className = 'fail';
95
+ }
96
+ else {
97
+ li.innerHTML = a.message || a.method || 'no message';
98
+ li.className = 'pass';
99
+ }
100
+ aList.appendChild(li);
101
+ }
102
+ test.appendChild(aList);
103
+ tests.appendChild(test);
104
+ },
105
+ done: function (assertions) {
106
+ var end = new Date().getTime();
107
+ var duration = end - start;
108
+
109
+ var failures = assertions.failures();
110
+ banner.className = failures ? 'fail': 'pass';
111
+
112
+ result.innerHTML = 'Tests completed in ' + duration +
113
+ ' milliseconds.<br/><span class="passed">' +
114
+ assertions.passes() + '</span> assertions of ' +
115
+ '<span class="all">' + assertions.length + '<span> passed, ' +
116
+ assertions.failures() + ' failed.';
117
+ }
118
+ });
119
+ };
@@ -0,0 +1,123 @@
1
+ /*!
2
+ * Nodeunit
3
+ * Copyright (c) 2010 Caolan McMahon
4
+ * MIT Licensed
5
+ */
6
+
7
+ /**
8
+ * Module dependencies
9
+ */
10
+
11
+ var nodeunit = require('../nodeunit'),
12
+ utils = require('../utils'),
13
+ fs = require('fs'),
14
+ track = require('../track'),
15
+ path = require('path');
16
+ AssertionError = require('../assert').AssertionError;
17
+
18
+ /**
19
+ * Reporter info string
20
+ */
21
+
22
+ exports.info = "Default tests reporter";
23
+
24
+
25
+ /**
26
+ * Run all tests within each module, reporting the results to the command-line.
27
+ *
28
+ * @param {Array} files
29
+ * @api public
30
+ */
31
+
32
+ exports.run = function (files, options) {
33
+
34
+ if (!options) {
35
+ // load default options
36
+ var content = fs.readFileSync(
37
+ __dirname + '/../../bin/nodeunit.json', 'utf8'
38
+ );
39
+ options = JSON.parse(content);
40
+ }
41
+
42
+ var error = function (str) {
43
+ return options.error_prefix + str + options.error_suffix;
44
+ };
45
+ var ok = function (str) {
46
+ return options.ok_prefix + str + options.ok_suffix;
47
+ };
48
+ var bold = function (str) {
49
+ return options.bold_prefix + str + options.bold_suffix;
50
+ };
51
+ var assertion_message = function (str) {
52
+ return options.assertion_prefix + str + options.assertion_suffix;
53
+ };
54
+
55
+ var start = new Date().getTime();
56
+ var paths = files.map(function (p) {
57
+ return path.join(process.cwd(), p);
58
+ });
59
+ var tracker = track.createTracker(function (tracker) {
60
+ if (tracker.unfinished()) {
61
+ console.log('');
62
+ console.log(error(bold(
63
+ 'FAILURES: Undone tests (or their setups/teardowns): '
64
+ )));
65
+ var names = tracker.names();
66
+ for (var i = 0; i < names.length; i += 1) {
67
+ console.log('- ' + names[i]);
68
+ }
69
+ console.log('');
70
+ console.log('To fix this, make sure all tests call test.done()');
71
+ process.reallyExit(tracker.unfinished());
72
+ }
73
+ });
74
+
75
+ nodeunit.runFiles(paths, {
76
+ testspec: options.testspec,
77
+ moduleStart: function (name) {
78
+ console.log('\n' + bold(name));
79
+ },
80
+ testDone: function (name, assertions) {
81
+ tracker.remove(name);
82
+
83
+ if (!assertions.failures()) {
84
+ console.log('✔ ' + name);
85
+ }
86
+ else {
87
+ console.log(error('✖ ' + name) + '\n');
88
+ assertions.forEach(function (a) {
89
+ if (a.failed()) {
90
+ a = utils.betterErrors(a);
91
+ if (a.error instanceof AssertionError && a.message) {
92
+ console.log(
93
+ 'Assertion Message: ' +
94
+ assertion_message(a.message)
95
+ );
96
+ }
97
+ console.log(a.error.stack + '\n');
98
+ }
99
+ });
100
+ }
101
+ },
102
+ done: function (assertions, end) {
103
+ var end = end || new Date().getTime();
104
+ var duration = end - start;
105
+ if (assertions.failures()) {
106
+ console.log(
107
+ '\n' + bold(error('FAILURES: ')) + assertions.failures() +
108
+ '/' + assertions.length + ' assertions failed (' +
109
+ assertions.duration + 'ms)'
110
+ );
111
+ }
112
+ else {
113
+ console.log(
114
+ '\n' + bold(ok('OK: ')) + assertions.length +
115
+ ' assertions (' + assertions.duration + 'ms)'
116
+ );
117
+ }
118
+ },
119
+ testStart: function(name) {
120
+ tracker.put(name);
121
+ }
122
+ });
123
+ };
@@ -0,0 +1,107 @@
1
+ /*!
2
+ * Nodeunit
3
+ * Copyright (c) 2010 Caolan McMahon
4
+ * MIT Licensed
5
+ */
6
+
7
+ /**
8
+ * Module dependencies
9
+ */
10
+
11
+ var nodeunit = require('../nodeunit'),
12
+ utils = require('../utils'),
13
+ fs = require('fs'),
14
+ path = require('path'),
15
+ AssertionError = require('assert').AssertionError;
16
+
17
+ /**
18
+ * Reporter info string
19
+ */
20
+
21
+ exports.info = "Report tests result as HTML";
22
+
23
+ /**
24
+ * Run all tests within each module, reporting the results to the command-line.
25
+ *
26
+ * @param {Array} files
27
+ * @api public
28
+ */
29
+
30
+ exports.run = function (files, options) {
31
+
32
+ var start = new Date().getTime();
33
+ var paths = files.map(function (p) {
34
+ return path.join(process.cwd(), p);
35
+ });
36
+
37
+ console.log('<html>');
38
+ console.log('<head>');
39
+ console.log('<title></title>');
40
+ console.log('<style type="text/css">');
41
+ console.log('body { font: 12px Helvetica Neue }');
42
+ console.log('h2 { margin:0 ; padding:0 }');
43
+ console.log('pre { font: 11px Andale Mono; margin-left: 1em; padding-left: 1em; margin-top:0; font-size:smaller;}');
44
+ console.log('.assertion_message { margin-left: 1em; }');
45
+ console.log(' ol {' +
46
+ ' list-style: none;' +
47
+ ' margin-left: 1em;' +
48
+ ' padding-left: 1em;' +
49
+ ' text-indent: -1em;' +
50
+ '}');
51
+ console.log(' ol li.pass:before { content: "\\2714 \\0020"; }');
52
+ console.log(' ol li.fail:before { content: "\\2716 \\0020"; }');
53
+ console.log('</style>');
54
+ console.log('</head>');
55
+ console.log('<body>');
56
+ nodeunit.runFiles(paths, {
57
+ testspec: options.testspec,
58
+ moduleStart: function (name) {
59
+ console.log('<h2>' + name + '</h2>');
60
+ console.log('<ol>');
61
+ },
62
+ testDone: function (name, assertions) {
63
+ if (!assertions.failures()) {
64
+ console.log('<li class="pass">' + name + '</li>');
65
+ }
66
+ else {
67
+ console.log('<li class="fail">' + name);
68
+ assertions.forEach(function (a) {
69
+ if (a.failed()) {
70
+ a = utils.betterErrors(a);
71
+ if (a.error instanceof AssertionError && a.message) {
72
+ console.log('<div class="assertion_message">' +
73
+ 'Assertion Message: ' + a.message +
74
+ '</div>');
75
+ }
76
+ console.log('<pre>');
77
+ console.log(a.error.stack);
78
+ console.log('</pre>');
79
+ }
80
+ });
81
+ console.log('</li>');
82
+ }
83
+ },
84
+ moduleDone: function () {
85
+ console.log('</ol>');
86
+ },
87
+ done: function (assertions) {
88
+ var end = new Date().getTime();
89
+ var duration = end - start;
90
+ if (assertions.failures()) {
91
+ console.log(
92
+ '<h3>FAILURES: ' + assertions.failures() +
93
+ '/' + assertions.length + ' assertions failed (' +
94
+ assertions.duration + 'ms)</h3>'
95
+ );
96
+ }
97
+ else {
98
+ console.log(
99
+ '<h3>OK: ' + assertions.length +
100
+ ' assertions (' + assertions.duration + 'ms)</h3>'
101
+ );
102
+ }
103
+ console.log('</body>');
104
+ }
105
+ });
106
+
107
+ };
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ 'junit': require('./junit'),
3
+ 'default': require('./default'),
4
+ 'skip_passed': require('./skip_passed'),
5
+ 'minimal': require('./minimal'),
6
+ 'html': require('./html')
7
+ // browser test reporter is not listed because it cannot be used
8
+ // with the command line tool, only inside a browser.
9
+ };
@@ -0,0 +1,183 @@
1
+ /*!
2
+ * Nodeunit
3
+ * Copyright (c) 2010 Caolan McMahon
4
+ * MIT Licensed
5
+ */
6
+
7
+ /**
8
+ * Module dependencies
9
+ */
10
+
11
+ var nodeunit = require('../nodeunit'),
12
+ utils = require('../utils'),
13
+ fs = require('fs'),
14
+ path = require('path'),
15
+ async = require('../../deps/async'),
16
+ AssertionError = require('assert').AssertionError,
17
+ child_process = require('child_process'),
18
+ ejs = require('../../deps/ejs');
19
+
20
+
21
+ /**
22
+ * Reporter info string
23
+ */
24
+
25
+ exports.info = "jUnit XML test reports";
26
+
27
+
28
+ /**
29
+ * Ensures a directory exists using mkdir -p.
30
+ *
31
+ * @param {String} path
32
+ * @param {Function} callback
33
+ * @api private
34
+ */
35
+
36
+ var ensureDir = function (path, callback) {
37
+ var mkdir = child_process.spawn('mkdir', ['-p', path]);
38
+ mkdir.on('error', function (err) {
39
+ callback(err);
40
+ callback = function(){};
41
+ });
42
+ mkdir.on('exit', function (code) {
43
+ if (code === 0) callback();
44
+ else callback(new Error('mkdir exited with code: ' + code));
45
+ });
46
+ };
47
+
48
+
49
+ /**
50
+ * Returns absolute version of a path. Relative paths are interpreted
51
+ * relative to process.cwd() or the cwd parameter. Paths that are already
52
+ * absolute are returned unaltered.
53
+ *
54
+ * @param {String} p
55
+ * @param {String} cwd
56
+ * @return {String}
57
+ * @api public
58
+ */
59
+
60
+ var abspath = function (p, /*optional*/cwd) {
61
+ if (p[0] === '/') return p;
62
+ cwd = cwd || process.cwd();
63
+ return path.normalize(path.join(cwd, p));
64
+ };
65
+
66
+
67
+ /**
68
+ * Run all tests within each module, reporting the results to the command-line,
69
+ * then writes out junit-compatible xml documents.
70
+ *
71
+ * @param {Array} files
72
+ * @api public
73
+ */
74
+
75
+ exports.run = function (files, opts, callback) {
76
+ if (!opts.output) {
77
+ console.error(
78
+ 'Error: No output directory defined.\n' +
79
+ '\tEither add an "output" property to your nodeunit.json config ' +
80
+ 'file, or\n\tuse the --output command line option.'
81
+ );
82
+ return;
83
+ }
84
+ opts.output = abspath(opts.output);
85
+ var error = function (str) {
86
+ return opts.error_prefix + str + opts.error_suffix;
87
+ };
88
+ var ok = function (str) {
89
+ return opts.ok_prefix + str + opts.ok_suffix;
90
+ };
91
+ var bold = function (str) {
92
+ return opts.bold_prefix + str + opts.bold_suffix;
93
+ };
94
+
95
+ var start = new Date().getTime();
96
+ var paths = files.map(function (p) {
97
+ return path.join(process.cwd(), p);
98
+ });
99
+
100
+ var modules = {}
101
+ var curModule;
102
+
103
+ nodeunit.runFiles(paths, {
104
+ testspec: opts.testspec,
105
+ moduleStart: function (name) {
106
+ curModule = {
107
+ errorCount: 0,
108
+ failureCount: 0,
109
+ tests: 0,
110
+ testcases: [],
111
+ name: name
112
+ };
113
+ modules[name] = curModule;
114
+ },
115
+ testDone: function (name, assertions) {
116
+ var testcase = {name: name};
117
+ for (var i=0; i<assertions.length; i++) {
118
+ var a = assertions[i];
119
+ if (a.failed()) {
120
+ a = utils.betterErrors(a);
121
+ testcase.failure = {
122
+ message: a.message,
123
+ backtrace: a.error.stack
124
+ };
125
+
126
+ if (a.error instanceof AssertionError) {
127
+ curModule.failureCount++;
128
+ }
129
+ else {
130
+ curModule.errorCount++;
131
+ }
132
+ break;
133
+ }
134
+ }
135
+ curModule.tests++;
136
+ curModule.testcases.push(testcase);
137
+ },
138
+ done: function (assertions) {
139
+ var end = new Date().getTime();
140
+ var duration = end - start;
141
+
142
+ ensureDir(opts.output, function (err) {
143
+ var tmpl = __dirname + "/../../share/junit.xml.ejs";
144
+ fs.readFile(tmpl, function (err, data) {
145
+ if (err) throw err;
146
+ var tmpl = data.toString();
147
+
148
+ async.forEach(Object.keys(modules), function (k, cb) {
149
+ var module = modules[k];
150
+ var rendered = ejs.render(tmpl, {
151
+ locals: {suites: [module]}
152
+ });
153
+ var filename = path.join(
154
+ opts.output,
155
+ module.name + '.xml'
156
+ );
157
+ console.log('Writing ' + filename);
158
+ fs.writeFile(filename, rendered, cb);
159
+ },
160
+ function (err) {
161
+ if (err) throw err;
162
+ else if (assertions.failures()) {
163
+ console.log(
164
+ '\n' + bold(error('FAILURES: ')) +
165
+ assertions.failures() + '/' +
166
+ assertions.length + ' assertions failed (' +
167
+ assertions.duration + 'ms)'
168
+ );
169
+ }
170
+ else {
171
+ console.log(
172
+ '\n' + bold(ok('OK: ')) + assertions.length +
173
+ ' assertions (' + assertions.duration + 'ms)'
174
+ );
175
+ }
176
+ });
177
+
178
+ });
179
+ });
180
+
181
+ }
182
+ });
183
+ }