Permalink
Browse files

v1.2.0. Now supports visual search search strings. Added new demos. C…

…leaned up. See change log.

- v1.2.0 June 16, 2012
	- You can now pass the standard `models`, and `options` arguments to
`QueryCollection::createChildCollection` and
`QueryCollection::createLiveChildCollection`
	- If `options.collection` is specified when creating a child
collection, it will be used as the child collectiont type
	- Restructured directories and files
	- Cleaned up demos and added two new demos:
[search](http://bevry.github.com/query-engine/demo/search.html) and
[visual
search](http://bevry.github.com/query-engine/demo/visual-search.html)
	- Updated search string syntax to be compliant with [Visual
Search's](http://documentcloud.github.com/visualsearch/) search string
syntax
		- Adds support for quotes when using pills, e.g. `user:"Benjamin
Lupton"`
		- Adds support for using pills of the same name multiple times, e.g.
`tag:node tag:query`
			- Whether this Ors or ANDs is customisable via the pill's
`logicalOperator` which can be `AND` or `OR` (defaults to `OR`)
	- Moved tests to [Joe](https://github.com/bevry/joe)
	- Added browser tests
  • Loading branch information...
1 parent e06e8d8 commit bbd64052b90a7dfb578b61c70bf5dbe1f1801f6c @balupton balupton committed Jun 15, 2012
Showing with 4,451 additions and 42 deletions.
  1. +14 −1 .gitignore
  2. +5 −2 .npmignore
  3. +3 −1 .travis.yml
  4. +12 −0 History.md
  5. +1 −1 README.md
  6. +7 −7 demo/code.html
  7. +7 −7 demo/search.html
  8. 0 demo/{lib → vendor}/ace/ace-uncompressed.js
  9. 0 demo/{lib → vendor}/ace/ace.js
  10. 0 demo/{lib → vendor}/ace/cockpit-uncompressed.js
  11. 0 demo/{lib → vendor}/ace/cockpit.js
  12. 0 demo/{lib → vendor}/ace/keybinding-emacs.js
  13. 0 demo/{lib → vendor}/ace/keybinding-vim.js
  14. 0 demo/{lib → vendor}/ace/mode-c_cpp.js
  15. 0 demo/{lib → vendor}/ace/mode-clojure.js
  16. 0 demo/{lib → vendor}/ace/mode-coffee.js
  17. 0 demo/{lib → vendor}/ace/mode-csharp.js
  18. 0 demo/{lib → vendor}/ace/mode-css.js
  19. 0 demo/{lib → vendor}/ace/mode-groovy.js
  20. 0 demo/{lib → vendor}/ace/mode-html.js
  21. 0 demo/{lib → vendor}/ace/mode-java.js
  22. 0 demo/{lib → vendor}/ace/mode-javascript.js
  23. 0 demo/{lib → vendor}/ace/mode-json.js
  24. 0 demo/{lib → vendor}/ace/mode-ocaml.js
  25. 0 demo/{lib → vendor}/ace/mode-perl.js
  26. 0 demo/{lib → vendor}/ace/mode-php.js
  27. 0 demo/{lib → vendor}/ace/mode-python.js
  28. 0 demo/{lib → vendor}/ace/mode-ruby.js
  29. 0 demo/{lib → vendor}/ace/mode-scad.js
  30. 0 demo/{lib → vendor}/ace/mode-scala.js
  31. 0 demo/{lib → vendor}/ace/mode-scss.js
  32. 0 demo/{lib → vendor}/ace/mode-svg.js
  33. 0 demo/{lib → vendor}/ace/mode-textile.js
  34. 0 demo/{lib → vendor}/ace/mode-xml.js
  35. 0 demo/{lib → vendor}/ace/theme-clouds.js
  36. 0 demo/{lib → vendor}/ace/theme-clouds_midnight.js
  37. 0 demo/{lib → vendor}/ace/theme-cobalt.js
  38. 0 demo/{lib → vendor}/ace/theme-crimson_editor.js
  39. 0 demo/{lib → vendor}/ace/theme-dawn.js
  40. 0 demo/{lib → vendor}/ace/theme-eclipse.js
  41. 0 demo/{lib → vendor}/ace/theme-idle_fingers.js
  42. 0 demo/{lib → vendor}/ace/theme-kr_theme.js
  43. 0 demo/{lib → vendor}/ace/theme-merbivore.js
  44. 0 demo/{lib → vendor}/ace/theme-merbivore_soft.js
  45. 0 demo/{lib → vendor}/ace/theme-mono_industrial.js
  46. 0 demo/{lib → vendor}/ace/theme-monokai.js
  47. 0 demo/{lib → vendor}/ace/theme-pastel_on_dark.js
  48. 0 demo/{lib → vendor}/ace/theme-solarized_dark.js
  49. 0 demo/{lib → vendor}/ace/theme-solarized_light.js
  50. 0 demo/{lib → vendor}/ace/theme-textmate.js
  51. 0 demo/{lib → vendor}/ace/theme-twilight.js
  52. 0 demo/{lib → vendor}/ace/theme-vibrant_ink.js
  53. 0 demo/{lib → vendor}/ace/worker-coffee.js
  54. 0 demo/{lib → vendor}/ace/worker-css.js
  55. 0 demo/{lib → vendor}/ace/worker-javascript.js
  56. 0 demo/{lib → vendor}/backbone.js
  57. 0 demo/{lib → vendor}/coffeescript.js
  58. 0 demo/{lib → vendor}/jquery.js
  59. 0 demo/{lib → vendor}/js2coffee.js
  60. 0 demo/{lib → vendor}/underscore.js
  61. 0 demo/{lib → vendor}/visualsearch/LICENSE
  62. 0 demo/{lib → vendor}/visualsearch/build/visualsearch-datauri.css
  63. 0 demo/{lib → vendor}/visualsearch/build/visualsearch.css
  64. 0 demo/{lib → vendor}/visualsearch/build/visualsearch.js
  65. 0 demo/{lib → vendor}/visualsearch/images/embed/icons/cancel_search.png
  66. 0 demo/{lib → vendor}/visualsearch/images/embed/icons/search_glyph.png
  67. 0 demo/{lib → vendor}/visualsearch/vendor/jquery.ui.autocomplete.js
  68. 0 demo/{lib → vendor}/visualsearch/vendor/jquery.ui.core.js
  69. 0 demo/{lib → vendor}/visualsearch/vendor/jquery.ui.position.js
  70. 0 demo/{lib → vendor}/visualsearch/vendor/jquery.ui.widget.js
  71. +14 −14 demo/visual-search.html
  72. +1 −1 out/test/live.test.js
  73. +1 −1 out/test/misc.test.js
  74. +1 −1 out/test/queries.test.js
  75. +1 −1 out/test/sort.test.js
  76. +1 −1 package.json
  77. +1 −1 src/test/live.test.coffee
  78. +1 −1 src/test/misc.test.coffee
  79. +1 −1 src/test/queries.test.coffee
  80. +1 −1 src/test/sort.test.coffee
  81. +27 −0 test-web/index.html
  82. +456 −0 test-web/vendor/bal-util.flow.js
  83. +3,403 −0 test-web/vendor/chai.js
  84. +247 −0 test-web/vendor/joe/joe.js
  85. +167 −0 test-web/vendor/joe/reporters/console.js
  86. +79 −0 test-web/vendor/joe/reporters/list.js
View
15 .gitignore
@@ -1,2 +1,15 @@
-*node_modules*
+lib-cov
+*.seed
+*.log
+*.csv
+*.dat
+*.out
+*.pid
+*.gz
+
+pids
+logs
+results
+
+node_modules
npm-debug.log
View
7 .npmignore
@@ -3,6 +3,9 @@
.travis*
*.md
Makefile
+
+src/
+out/demo/
+out/test/
demo/
-test/
-lib/*.coffee
+test-web/
View
4 .travis.yml
@@ -1,10 +1,12 @@
language: node_js
+before_script: "make compile"
node_js:
- 0.4
- 0.6
+ - 0.7
notifications:
irc:
- "irc.freenode.org#bevry"
email:
recipients:
- - queryengine@bevry.me
+ - query-engine@bevry.me
View
12 History.md
@@ -1,5 +1,17 @@
## History
+- v1.2.0 June 16, 2012
+ - You can now pass the standard `models`, and `options` arguments to `QueryCollection::createChildCollection` and `QueryCollection::createLiveChildCollection`
+ - If `options.collection` is specified when creating a child collection, it will be used as the child collectiont type
+ - Restructured directories and files
+ - Cleaned up demos and added two new demos: [search](http://bevry.github.com/query-engine/demo/search.html) and [visual search](http://bevry.github.com/query-engine/demo/visual-search.html)
+ - Updated search string syntax to be compliant with [Visual Search's](http://documentcloud.github.com/visualsearch/) search string syntax
+ - Adds support for quotes when using pills, e.g. `user:"Benjamin Lupton"`
+ - Adds support for using pills of the same name multiple times, e.g. `tag:node tag:query`
+ - Whether this ORs or ANDs is customisable via the pill's `logicalOperator` which can be `AND` or `OR` (defaults to `OR`)
+ - Moved tests to [Joe](https://github.com/bevry/joe)
+ - Added browser tests
+
- v1.1.14 June 5, 2012
- Fixed using arrays in `queryEngine.generateComparator`
View
2 README.md
@@ -5,7 +5,7 @@ QueryEngine provides extensive Querying, Filtering, and Searching abilities for
## Features
-* includes a [live interactive demo](http://bevry.github.com/query-engine/demo/) with several examples, [wiki documentation](https://github.com/bevry/query-engine/wiki/Using) and [source-code documentation](https://github.com/bevry/query-engine/blob/master/lib/query-engine.coffee#files)
+* includes a [live interactive demos](http://bevry.github.com/query-engine/demo/) with several examples, [wiki documentation](https://github.com/bevry/query-engine/wiki/Using) and [source-code documentation](https://github.com/bevry/query-engine/blob/master/lib/query-engine.coffee#files)
* runs on [node.js](http://nodejs.org/) and in the browser
* supports [NoSQL](http://www.mongodb.org/display/DOCS/Advanced+Queries) queries (like [MongoDB](http://www.mongodb.org/))
* supports filters (applying a filter function to a collection)
View
14 demo/code.html
@@ -57,13 +57,13 @@
<!-- Scripts -->
- <script src="lib/coffeescript.js"></script>
- <script src="lib/jquery.js"></script>
- <script src="lib/underscore.js"></script>
- <script src="lib/backbone.js"></script>
- <script src="lib/js2coffee.js"></script>
- <script src="lib/ace/ace.js"></script>
- <script src="lib/ace/mode-coffee.js"></script>
+ <script src="vendor/coffeescript.js"></script>
+ <script src="vendor/jquery.js"></script>
+ <script src="vendor/underscore.js"></script>
+ <script src="vendor/backbone.js"></script>
+ <script src="vendor/js2coffee.js"></script>
+ <script src="vendor/ace/ace.js"></script>
+ <script src="vendor/ace/mode-coffee.js"></script>
<script src="../out/lib/query-engine.js"></script>
<script src="../out/demo/code.js"></script>
View
14 demo/search.html
@@ -64,13 +64,13 @@
</div>
<!-- Scripts -->
- <script src="lib/coffeescript.js"></script>
- <script src="lib/jquery.js"></script>
- <script src="lib/underscore.js"></script>
- <script src="lib/backbone.js"></script>
- <script src="lib/js2coffee.js"></script>
- <script src="lib/ace/ace.js"></script>
- <script src="lib/ace/mode-coffee.js"></script>
+ <script src="vendor/coffeescript.js"></script>
+ <script src="vendor/jquery.js"></script>
+ <script src="vendor/underscore.js"></script>
+ <script src="vendor/backbone.js"></script>
+ <script src="vendor/js2coffee.js"></script>
+ <script src="vendor/ace/ace.js"></script>
+ <script src="vendor/ace/mode-coffee.js"></script>
<script src="../out/lib/query-engine.js"></script>
<script src="../out/demo/search.js"></script>
View
0 demo/lib/ace/ace-uncompressed.js → demo/vendor/ace/ace-uncompressed.js
File renamed without changes.
View
0 demo/lib/ace/ace.js → demo/vendor/ace/ace.js
File renamed without changes.
View
0 demo/lib/ace/cockpit-uncompressed.js → demo/vendor/ace/cockpit-uncompressed.js
File renamed without changes.
View
0 demo/lib/ace/cockpit.js → demo/vendor/ace/cockpit.js
File renamed without changes.
View
0 demo/lib/ace/keybinding-emacs.js → demo/vendor/ace/keybinding-emacs.js
File renamed without changes.
View
0 demo/lib/ace/keybinding-vim.js → demo/vendor/ace/keybinding-vim.js
File renamed without changes.
View
0 demo/lib/ace/mode-c_cpp.js → demo/vendor/ace/mode-c_cpp.js
File renamed without changes.
View
0 demo/lib/ace/mode-clojure.js → demo/vendor/ace/mode-clojure.js
File renamed without changes.
View
0 demo/lib/ace/mode-coffee.js → demo/vendor/ace/mode-coffee.js
File renamed without changes.
View
0 demo/lib/ace/mode-csharp.js → demo/vendor/ace/mode-csharp.js
File renamed without changes.
View
0 demo/lib/ace/mode-css.js → demo/vendor/ace/mode-css.js
File renamed without changes.
View
0 demo/lib/ace/mode-groovy.js → demo/vendor/ace/mode-groovy.js
File renamed without changes.
View
0 demo/lib/ace/mode-html.js → demo/vendor/ace/mode-html.js
File renamed without changes.
View
0 demo/lib/ace/mode-java.js → demo/vendor/ace/mode-java.js
File renamed without changes.
View
0 demo/lib/ace/mode-javascript.js → demo/vendor/ace/mode-javascript.js
File renamed without changes.
View
0 demo/lib/ace/mode-json.js → demo/vendor/ace/mode-json.js
File renamed without changes.
View
0 demo/lib/ace/mode-ocaml.js → demo/vendor/ace/mode-ocaml.js
File renamed without changes.
View
0 demo/lib/ace/mode-perl.js → demo/vendor/ace/mode-perl.js
File renamed without changes.
View
0 demo/lib/ace/mode-php.js → demo/vendor/ace/mode-php.js
File renamed without changes.
View
0 demo/lib/ace/mode-python.js → demo/vendor/ace/mode-python.js
File renamed without changes.
View
0 demo/lib/ace/mode-ruby.js → demo/vendor/ace/mode-ruby.js
File renamed without changes.
View
0 demo/lib/ace/mode-scad.js → demo/vendor/ace/mode-scad.js
File renamed without changes.
View
0 demo/lib/ace/mode-scala.js → demo/vendor/ace/mode-scala.js
File renamed without changes.
View
0 demo/lib/ace/mode-scss.js → demo/vendor/ace/mode-scss.js
File renamed without changes.
View
0 demo/lib/ace/mode-svg.js → demo/vendor/ace/mode-svg.js
File renamed without changes.
View
0 demo/lib/ace/mode-textile.js → demo/vendor/ace/mode-textile.js
File renamed without changes.
View
0 demo/lib/ace/mode-xml.js → demo/vendor/ace/mode-xml.js
File renamed without changes.
View
0 demo/lib/ace/theme-clouds.js → demo/vendor/ace/theme-clouds.js
File renamed without changes.
View
0 demo/lib/ace/theme-clouds_midnight.js → demo/vendor/ace/theme-clouds_midnight.js
File renamed without changes.
View
0 demo/lib/ace/theme-cobalt.js → demo/vendor/ace/theme-cobalt.js
File renamed without changes.
View
0 demo/lib/ace/theme-crimson_editor.js → demo/vendor/ace/theme-crimson_editor.js
File renamed without changes.
View
0 demo/lib/ace/theme-dawn.js → demo/vendor/ace/theme-dawn.js
File renamed without changes.
View
0 demo/lib/ace/theme-eclipse.js → demo/vendor/ace/theme-eclipse.js
File renamed without changes.
View
0 demo/lib/ace/theme-idle_fingers.js → demo/vendor/ace/theme-idle_fingers.js
File renamed without changes.
View
0 demo/lib/ace/theme-kr_theme.js → demo/vendor/ace/theme-kr_theme.js
File renamed without changes.
View
0 demo/lib/ace/theme-merbivore.js → demo/vendor/ace/theme-merbivore.js
File renamed without changes.
View
0 demo/lib/ace/theme-merbivore_soft.js → demo/vendor/ace/theme-merbivore_soft.js
File renamed without changes.
View
0 demo/lib/ace/theme-mono_industrial.js → demo/vendor/ace/theme-mono_industrial.js
File renamed without changes.
View
0 demo/lib/ace/theme-monokai.js → demo/vendor/ace/theme-monokai.js
File renamed without changes.
View
0 demo/lib/ace/theme-pastel_on_dark.js → demo/vendor/ace/theme-pastel_on_dark.js
File renamed without changes.
View
0 demo/lib/ace/theme-solarized_dark.js → demo/vendor/ace/theme-solarized_dark.js
File renamed without changes.
View
0 demo/lib/ace/theme-solarized_light.js → demo/vendor/ace/theme-solarized_light.js
File renamed without changes.
View
0 demo/lib/ace/theme-textmate.js → demo/vendor/ace/theme-textmate.js
File renamed without changes.
View
0 demo/lib/ace/theme-twilight.js → demo/vendor/ace/theme-twilight.js
File renamed without changes.
View
0 demo/lib/ace/theme-vibrant_ink.js → demo/vendor/ace/theme-vibrant_ink.js
File renamed without changes.
View
0 demo/lib/ace/worker-coffee.js → demo/vendor/ace/worker-coffee.js
File renamed without changes.
View
0 demo/lib/ace/worker-css.js → demo/vendor/ace/worker-css.js
File renamed without changes.
View
0 demo/lib/ace/worker-javascript.js → demo/vendor/ace/worker-javascript.js
File renamed without changes.
View
0 demo/lib/backbone.js → demo/vendor/backbone.js
File renamed without changes.
View
0 demo/lib/coffeescript.js → demo/vendor/coffeescript.js
File renamed without changes.
View
0 demo/lib/jquery.js → demo/vendor/jquery.js
File renamed without changes.
View
0 demo/lib/js2coffee.js → demo/vendor/js2coffee.js
File renamed without changes.
View
0 demo/lib/underscore.js → demo/vendor/underscore.js
File renamed without changes.
View
0 demo/lib/visualsearch/LICENSE → demo/vendor/visualsearch/LICENSE
File renamed without changes.
View
0 ...sualsearch/build/visualsearch-datauri.css → ...sualsearch/build/visualsearch-datauri.css
File renamed without changes.
View
0 demo/lib/visualsearch/build/visualsearch.css → ...endor/visualsearch/build/visualsearch.css
File renamed without changes.
View
0 demo/lib/visualsearch/build/visualsearch.js → ...vendor/visualsearch/build/visualsearch.js
File renamed without changes.
View
0 ...arch/images/embed/icons/cancel_search.png → ...arch/images/embed/icons/cancel_search.png
File renamed without changes
View
0 ...earch/images/embed/icons/search_glyph.png → ...earch/images/embed/icons/search_glyph.png
File renamed without changes
View
0 ...alsearch/vendor/jquery.ui.autocomplete.js → ...alsearch/vendor/jquery.ui.autocomplete.js
File renamed without changes.
View
0 ...lib/visualsearch/vendor/jquery.ui.core.js → ...dor/visualsearch/vendor/jquery.ui.core.js
File renamed without changes.
View
0 ...visualsearch/vendor/jquery.ui.position.js → ...visualsearch/vendor/jquery.ui.position.js
File renamed without changes.
View
0 ...b/visualsearch/vendor/jquery.ui.widget.js → ...r/visualsearch/vendor/jquery.ui.widget.js
File renamed without changes.
View
28 demo/visual-search.html
@@ -6,8 +6,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- Stylesheets-->
- <link rel="stylesheet" href="lib/visualsearch/build/visualsearch-datauri.css" />
- <link rel="stylesheet" href="lib/visualsearch/build/visualsearch.css" />
+ <link rel="stylesheet" href="vendor/visualsearch/build/visualsearch-datauri.css" />
+ <link rel="stylesheet" href="vendor/visualsearch/build/visualsearch.css" />
<!-- Information -->
<title>Query-Engine Visual Search Demo</title>
@@ -67,18 +67,18 @@
</div>
<!-- Scripts -->
- <script src="lib/coffeescript.js"></script>
- <script src="lib/jquery.js"></script>
- <script src="lib/underscore.js"></script>
- <script src="lib/backbone.js"></script>
- <script src="lib/js2coffee.js"></script>
- <script src="lib/ace/ace.js"></script>
- <script src="lib/ace/mode-coffee.js"></script>
- <script src="lib/visualsearch/build/visualsearch.js"></script>
- <script src="lib/visualsearch/vendor/jquery.ui.core.js"></script>
- <script src="lib/visualsearch/vendor/jquery.ui.widget.js"></script>
- <script src="lib/visualsearch/vendor/jquery.ui.position.js"></script>
- <script src="lib/visualsearch/vendor/jquery.ui.autocomplete.js"></script>
+ <script src="vendor/coffeescript.js"></script>
+ <script src="vendor/jquery.js"></script>
+ <script src="vendor/underscore.js"></script>
+ <script src="vendor/backbone.js"></script>
+ <script src="vendor/js2coffee.js"></script>
+ <script src="vendor/ace/ace.js"></script>
+ <script src="vendor/ace/mode-coffee.js"></script>
+ <script src="vendor/visualsearch/build/visualsearch.js"></script>
+ <script src="vendor/visualsearch/vendor/jquery.ui.core.js"></script>
+ <script src="vendor/visualsearch/vendor/jquery.ui.widget.js"></script>
+ <script src="vendor/visualsearch/vendor/jquery.ui.position.js"></script>
+ <script src="vendor/visualsearch/vendor/jquery.ui.autocomplete.js"></script>
<script src="../out/lib/query-engine.js"></script>
<script src="../out/demo/visual-search.js"></script>
View
2 out/test/live.test.js
@@ -9,7 +9,7 @@
Backbone = (typeof require === "function" ? require('backbone') : void 0) || this.Backbone;
- joe = require('joe') || this.joe;
+ joe = (typeof require === "function" ? require('joe') : void 0) || this.joe;
describe = joe.describe;
View
2 out/test/misc.test.js
@@ -10,7 +10,7 @@
Backbone = (typeof require === "function" ? require('backbone') : void 0) || this.Backbone;
- joe = require('joe') || this.joe;
+ joe = (typeof require === "function" ? require('joe') : void 0) || this.joe;
describe = joe.describe;
View
2 out/test/queries.test.js
@@ -9,7 +9,7 @@
Backbone = (typeof require === "function" ? require('backbone') : void 0) || this.Backbone;
- joe = require('joe') || this.joe;
+ joe = (typeof require === "function" ? require('joe') : void 0) || this.joe;
describe = joe.describe;
View
2 out/test/sort.test.js
@@ -9,7 +9,7 @@
Backbone = (typeof require === "function" ? require('backbone') : void 0) || this.Backbone;
- joe = require('joe') || this.joe;
+ joe = (typeof require === "function" ? require('joe') : void 0) || this.joe;
describe = joe.describe;
View
2 package.json
@@ -1,6 +1,6 @@
{
"name": "query-engine",
- "version": "1.1.14",
+ "version": "1.2.0",
"description": "Query-Engine is a NoSQL and MongoDb compliant query engine. It can run on the server-side with Node.js, or on the client-side within web browsers",
"homepage": "https://github.com/bevry/query-engine",
"keywords": [
View
2 src/test/live.test.coffee
@@ -2,7 +2,7 @@
queryEngine = require?(__dirname+'/../lib/query-engine.js') or @queryEngine
assert = require?('assert') or @assert
Backbone = require?('backbone') or @Backbone
-joe = require('joe') or @joe
+joe = require?('joe') or @joe
{describe} = joe
View
2 src/test/misc.test.coffee
@@ -2,7 +2,7 @@
queryEngine = require?(__dirname+'/../lib/query-engine.js') or @queryEngine
assert = require?('assert') or @assert
Backbone = require?('backbone') or @Backbone
-joe = require('joe') or @joe
+joe = require?('joe') or @joe
{describe} = joe
View
2 src/test/queries.test.coffee
@@ -2,7 +2,7 @@
queryEngine = require?(__dirname+'/../lib/query-engine.js') or @queryEngine
assert = require?('assert') or @assert
Backbone = require?('backbone') or @Backbone
-joe = require('joe') or @joe
+joe = require?('joe') or @joe
{describe} = joe
View
2 src/test/sort.test.coffee
@@ -2,7 +2,7 @@
queryEngine = require?(__dirname+'/../lib/query-engine.js') or @queryEngine
assert = require?('assert') or @assert
Backbone = require?('backbone') or @Backbone
-joe = require('joe') or @joe
+joe = require?('joe') or @joe
{describe} = joe
View
27 test-web/index.html
@@ -0,0 +1,27 @@
+<html>
+<head>
+ <!-- Query Engine -->
+ <script src="../demo/vendor/underscore.js"></script>
+ <script src="../demo/vendor/backbone.js"></script>
+ <script src="../out/lib/query-engine.js"></script>
+
+ <!-- Joe -->
+ <script src="vendor/chai.js"></script>
+ <script>this.assert = this.chai.assert</script>
+ <script src="vendor/bal-util.flow.js"></script>
+ <script src="vendor/joe/joe.js"></script>
+ <script src="vendor/joe/reporters/console.js"></script>
+ <script src="vendor/joe/reporters/list.js"></script>
+ <script>this.joe.setReporter(new this.joe.ListReporter());</script>
+
+ <!-- Tests -->
+ <script src="../out/test/live.test.js"></script>
+ <script src="../out/test/misc.test.js"></script>
+ <script src="../out/test/queries.test.js"></script>
+ <script src="../out/test/sort.test.js"></script>
+</head>
+<body>
+ <p>open your developer console</p>
+ <button onclick="javascript:joe.exit();">I'm done, give me the results</button>
+</body>
+</html>
View
456 test-web/vendor/bal-util.flow.js
@@ -0,0 +1,456 @@
+// Generated by CoffeeScript 1.3.1
+(function() {
+ var balUtilFlow,
+ __hasProp = {}.hasOwnProperty,
+ __slice = [].slice,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };
+
+ balUtilFlow = {
+ toString: function(obj) {
+ return Object.prototype.toString.call(obj);
+ },
+ isArray: function(obj) {
+ return this.toString(obj) === '[object Array]';
+ },
+ each: function(obj, callback, context) {
+ var broke, item, key, _i, _len;
+ broke = false;
+ context || (context = obj);
+ if (this.isArray(obj)) {
+ for (key = _i = 0, _len = obj.length; _i < _len; key = ++_i) {
+ item = obj[key];
+ if (callback.call(context, item, key, obj) === false) {
+ broke = true;
+ break;
+ }
+ }
+ } else {
+ for (key in obj) {
+ if (!__hasProp.call(obj, key)) continue;
+ item = obj[key];
+ if (callback.call(context, item, key, obj) === false) {
+ broke = true;
+ break;
+ }
+ }
+ }
+ return this;
+ },
+ flow: function(opts) {
+ var action, actions, args, next, object, tasks;
+ object = opts.object, action = opts.action, args = opts.args, tasks = opts.tasks, next = opts.next;
+ if (!action) {
+ throw new Error('balUtilFlow.flow called without any action');
+ }
+ actions = action.split(/[,\s]+/g);
+ tasks || (tasks = new balUtilFlow.Group(next));
+ balUtilFlow.each(actions, function(action) {
+ return tasks.push(function(complete) {
+ var argsClone, fn;
+ argsClone = (args || []).slice();
+ argsClone.push(complete);
+ fn = object[action];
+ return fn.apply(object, argsClone);
+ });
+ });
+ tasks.sync();
+ return this;
+ }
+ };
+
+ /*
+ Usage:
+ # Add tasks to a queue then fire them in parallel (asynchronously)
+ tasks = new Group (err) -> next err
+ tasks.push (complete) -> someAsyncFunction(arg1, arg2, complete)
+ tasks.push (complete) -> anotherAsyncFunction(arg1, arg2, complete)
+ tasks.async()
+
+ # Add tasks to a queue then fire them in serial (synchronously)
+ tasks = new Group (err) -> next err
+ tasks.push (complete) -> someAsyncFunction(arg1, arg2, complete)
+ tasks.push (complete) -> anotherAsyncFunction(arg1, arg2, complete)
+ tasks.sync()
+ */
+
+
+ balUtilFlow.Group = (function() {
+
+ _Class.prototype.total = 0;
+
+ _Class.prototype.completed = 0;
+
+ _Class.prototype.running = 0;
+
+ _Class.prototype.exited = false;
+
+ _Class.prototype.breakOnError = true;
+
+ _Class.prototype.autoClear = false;
+
+ _Class.prototype.queue = [];
+
+ _Class.prototype.mode = 'async';
+
+ _Class.prototype.lastResult = null;
+
+ _Class.prototype.results = [];
+
+ _Class.prototype.errors = [];
+
+ _Class.prototype.next = function() {
+ throw new Error('Groups require a completion callback');
+ };
+
+ function _Class() {
+ var arg, args, autoClear, breakOnError, mode, next, _i, _len;
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+ this.clear();
+ for (_i = 0, _len = args.length; _i < _len; _i++) {
+ arg = args[_i];
+ if (typeof arg === 'string') {
+ this.mode = arg;
+ } else if (typeof arg === 'function') {
+ this.next = arg;
+ } else if (typeof arg === 'object') {
+ next = arg.next, mode = arg.mode, breakOnError = arg.breakOnError, autoClear = arg.autoClear;
+ if (next) {
+ this.next = next;
+ }
+ if (mode) {
+ this.mode = mode;
+ }
+ if (breakOnError) {
+ this.breakOnError = breakOnError;
+ }
+ if (autoClear) {
+ this.autoClear = autoClear;
+ }
+ } else {
+ throw new Error('Unknown argument sent to Groups constructor');
+ }
+ }
+ }
+
+ _Class.prototype.clear = function() {
+ this.total = 0;
+ this.completed = 0;
+ this.running = 0;
+ this.exited = false;
+ this.queue = [];
+ this.results = [];
+ this.errors = [];
+ this.lastResult = null;
+ return this;
+ };
+
+ _Class.prototype.hasTasks = function() {
+ return this.queue.length !== 0;
+ };
+
+ _Class.prototype.hasCompleted = function() {
+ return this.total !== 0 && this.total === this.completed;
+ };
+
+ _Class.prototype.isRunning = function() {
+ return this.running !== 0;
+ };
+
+ _Class.prototype.hasExited = function(value) {
+ if (value != null) {
+ this.exited = value;
+ }
+ return this.exited === true;
+ };
+
+ _Class.prototype.complete = function() {
+ var args, err;
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+ err = args[0] || void 0;
+ this.lastResult = args;
+ if (err) {
+ this.errors.push(err);
+ }
+ this.results.push(args);
+ if (this.running !== 0) {
+ --this.running;
+ }
+ if (this.hasExited()) {
+
+ } else {
+ if (err && this.breakOnError) {
+ this.exit();
+ } else {
+ ++this.completed;
+ if (this.hasTasks()) {
+ this.nextTask();
+ } else if (this.isRunning() === false && this.hasCompleted()) {
+ this.exit();
+ }
+ }
+ }
+ return this;
+ };
+
+ _Class.prototype.completer = function() {
+ var _this = this;
+ return function() {
+ var args;
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+ return _this.complete.apply(_this, args);
+ };
+ };
+
+ _Class.prototype.exit = function(err) {
+ var errors, lastResult, results;
+ if (err == null) {
+ err = null;
+ }
+ if (this.hasExited()) {
+
+ } else {
+ lastResult = this.lastResult;
+ errors = this.errors.length !== 0 ? this.errors : null;
+ results = this.results;
+ if (this.autoClear) {
+ this.clear();
+ } else {
+ this.hasExited(true);
+ }
+ if (typeof this.next === "function") {
+ this.next(errors, lastResult, results);
+ }
+ }
+ return this;
+ };
+
+ _Class.prototype.tasks = function(tasks) {
+ var task, _i, _len;
+ for (_i = 0, _len = tasks.length; _i < _len; _i++) {
+ task = tasks[_i];
+ this.push(task);
+ }
+ return this;
+ };
+
+ _Class.prototype.push = function(task) {
+ ++this.total;
+ this.queue.push(task);
+ return this;
+ };
+
+ _Class.prototype.pushAndRun = function(task) {
+ if (this.mode === 'sync' && this.isRunning()) {
+ this.push(task);
+ } else {
+ ++this.total;
+ this.runTask(task);
+ }
+ return this;
+ };
+
+ _Class.prototype.nextTask = function() {
+ var task;
+ if (this.hasTasks()) {
+ task = this.queue.shift();
+ this.runTask(task);
+ }
+ return this;
+ };
+
+ _Class.prototype.runTask = function(task) {
+ try {
+ ++this.running;
+ task(this.completer());
+ } catch (err) {
+ this.complete(err);
+ }
+ return this;
+ };
+
+ _Class.prototype.run = function() {
+ var task, _i, _len, _ref;
+ if (this.isRunning() === false) {
+ this.hasExited(false);
+ if (this.hasTasks()) {
+ if (this.mode === 'sync') {
+ this.nextTask();
+ } else {
+ _ref = this.queue;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ task = _ref[_i];
+ this.nextTask();
+ }
+ }
+ } else {
+ this.exit();
+ }
+ }
+ return this;
+ };
+
+ _Class.prototype.async = function() {
+ this.mode = 'async';
+ this.run();
+ return this;
+ };
+
+ _Class.prototype.sync = function() {
+ this.mode = 'sync';
+ this.run();
+ return this;
+ };
+
+ return _Class;
+
+ })();
+
+ balUtilFlow.Block = (function(_super) {
+
+ __extends(_Class, _super);
+
+ _Class.prototype.blockBefore = function(block) {};
+
+ _Class.prototype.blockAfter = function(block, err) {};
+
+ _Class.prototype.blockTaskBefore = function(block, task, err) {};
+
+ _Class.prototype.blockTaskAfter = function(block, task, err) {};
+
+ function _Class(name, initFunction, parentBlock) {
+ var block;
+ block = this;
+ _Class.__super__.constructor.call(this, function(err) {
+ var _ref;
+ block.blockAfter(block, err);
+ return (_ref = block.parentBlock) != null ? _ref.complete(err) : void 0;
+ });
+ block.blockName = name;
+ if (parentBlock != null) {
+ block.parentBlock = parentBlock;
+ }
+ block.mode = 'sync';
+ block.initFunction = initFunction;
+ block.blockBefore(block);
+ if (block.initFunction != null) {
+ if (block.initFunction.length === 3) {
+ block.total = Infinity;
+ }
+ try {
+ block.initFunction(function(name, fn) {
+ return block.block(name, fn);
+ }, function(name, fn) {
+ return block.task(name, fn);
+ }, function(err) {
+ return block.exit(err);
+ });
+ } catch (err) {
+ block.exit(err);
+ }
+ if (block.initFunction.length !== 3) {
+ block.run();
+ }
+ } else {
+ block.total = Infinity;
+ }
+ this;
+
+ }
+
+ _Class.prototype.block = function(name, fn) {
+ var block, push;
+ block = this;
+ push = function(complete) {
+ if (block.total === Infinity) {
+ return block.pushAndRun(complete);
+ } else {
+ return block.push(complete);
+ }
+ };
+ push(function() {
+ var subBlock;
+ return subBlock = block.createSubBlock(name, fn, block);
+ });
+ return this;
+ };
+
+ _Class.prototype.createSubBlock = function(name, fn, parentBlock) {
+ return new balUtilFlow.Block(name, fn, parentBlock);
+ };
+
+ _Class.prototype.task = function(name, fn) {
+ var block, pushTask;
+ block = this;
+ pushTask = function(complete) {
+ if (block.total === Infinity) {
+ return block.pushAndRun(complete);
+ } else {
+ return block.push(complete);
+ }
+ };
+ pushTask(function(complete) {
+ var preComplete;
+ preComplete = function(err) {
+ block.blockTaskAfter(block, name, err);
+ return complete(err);
+ };
+ block.blockTaskBefore(block, name);
+ if (fn.length < 1) {
+ try {
+ fn();
+ return preComplete();
+ } catch (err) {
+ return preComplete(err);
+ }
+ } else {
+ try {
+ return fn(preComplete);
+ } catch (err) {
+ return preComplete(err);
+ }
+ }
+ });
+ return this;
+ };
+
+ return _Class;
+
+ })(balUtilFlow.Group);
+
+ balUtilFlow.Runner = (function() {
+
+ _Class.prototype.runnerBlock = null;
+
+ function _Class() {
+ if (this.runnerBlock == null) {
+ this.runnerBlock = new balUtilFlow.Block();
+ }
+ }
+
+ _Class.prototype.getRunnerBlock = function() {
+ return this.runnerBlock;
+ };
+
+ _Class.prototype.block = function() {
+ var args, _ref;
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+ return (_ref = this.getRunnerBlock()).block.apply(_ref, args);
+ };
+
+ _Class.prototype.task = function() {
+ var args, _ref;
+ args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+ return (_ref = this.getRunnerBlock()).task.apply(_ref, args);
+ };
+
+ return _Class;
+
+ })();
+
+ if (typeof module !== "undefined" && module !== null) {
+ module.exports = balUtilFlow;
+ } else {
+ this.balUtilFlow = balUtilFlow;
+ }
+
+}).call(this);
View
3,403 test-web/vendor/chai.js
3,403 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
247 test-web/vendor/joe/joe.js
@@ -0,0 +1,247 @@
+// Generated by CoffeeScript 1.3.3
+(function() {
+ var Block, balUtilFlow, config, joe, joePrivate,
+ __slice = [].slice,
+ __hasProp = {}.hasOwnProperty,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+ balUtilFlow = (typeof require === "function" ? require('bal-util') : void 0) || this.balUtilFlow;
+
+ Block = balUtilFlow.Block;
+
+ config = {
+ troubleshootingURL: 'https://github.com/bevry/joe/wiki/Troubleshooting'
+ };
+
+ joePrivate = {
+ globalSuite: null,
+ getGlobalSuite: function() {
+ if (joePrivate.globalSuite == null) {
+ joePrivate.globalSuite = new joe.Suite('joe');
+ }
+ return joePrivate.globalSuite;
+ },
+ errord: false,
+ exited: false,
+ reporters: [],
+ getReporters: function() {
+ var Reporter, arg, argResult, defaultReporter, _i, _len, _ref;
+ if (joePrivate.reporters.length === 0) {
+ if ((typeof process !== "undefined" && process !== null ? process.argv : void 0) && (typeof require !== "undefined" && require !== null)) {
+ defaultReporter = 'console';
+ _ref = process.argv;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ arg = _ref[_i];
+ argResult = arg.replace(/^--joe-reporter=/, '');
+ if (argResult !== arg) {
+ defaultReporter = argResult;
+ break;
+ }
+ }
+ try {
+ Reporter = joe.require("reporters/" + defaultReporter);
+ joe.addReporter(new Reporter());
+ } catch (err) {
+ console.log("Joe could not load the reporter: " + defaultReporter + ". The error is as follows:\n", err);
+ joe.exit(1);
+ }
+ } else {
+ try {
+ Reporter = joe.ConsoleReporter;
+ joe.addReporter(new Reporter());
+ } catch (err) {
+ console.log("Joe could not load the reporter: " + defaultReporter + ". The error is as follows:\n", err);
+ joe.exit(1);
+ }
+ }
+ }
+ return joePrivate.reporters;
+ }
+ };
+
+ joe = {
+ hasErrors: function() {
+ return joePrivate.errord === true;
+ },
+ hasExited: function() {
+ return joePrivate.exited === true;
+ },
+ hasReporters: function() {
+ return joePrivate.reporters !== 0;
+ },
+ addReporter: function(reporterInstance) {
+ joePrivate.reporters.push(reporterInstance);
+ return this;
+ },
+ setReporter: function(reporterInstance) {
+ joePrivate.reporters = [];
+ if (reporterInstance != null) {
+ joe.addReporter(reporterInstance);
+ }
+ return this;
+ },
+ report: function() {
+ var args, event, reporter, reporters, _i, _len, _ref;
+ event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+ reporters = joePrivate.getReporters();
+ if (!reporters.length) {
+ console.log("Joe has no reporters loaded, so cannot log anything...");
+ joe.exit(1);
+ return this;
+ }
+ for (_i = 0, _len = reporters.length; _i < _len; _i++) {
+ reporter = reporters[_i];
+ if ((_ref = reporter[event]) != null) {
+ _ref.apply(reporter, args);
+ }
+ }
+ return this;
+ },
+ exit: function(exitCode) {
+ if (joe.exited) {
+ return;
+ }
+ joePrivate.exited = true;
+ joe.report('exit');
+ if (typeof process !== "undefined" && process !== null) {
+ if (exitCode == null) {
+ exitCode = joe.hasErrors() ? 1 : 0;
+ }
+ process.exit(exitCode);
+ }
+ return this;
+ },
+ uncaughtException: function(err) {
+ if (joe.hasExited()) {
+ return;
+ }
+ joePrivate.errord = true;
+ if (!(err instanceof Error)) {
+ err = new Error(err);
+ }
+ joe.report('uncaughtException', err);
+ joe.exit(1);
+ return this;
+ },
+ Suite: (function(_super) {
+
+ __extends(_Class, _super);
+
+ function _Class() {
+ return _Class.__super__.constructor.apply(this, arguments);
+ }
+
+ _Class.prototype.createSubBlock = function(name, fn, parentBlock) {
+ return new joe.Suite(name, fn, parentBlock);
+ };
+
+ _Class.prototype.blockBefore = function(block) {
+ joe.report('startSuite', block);
+ return _Class.__super__.blockBefore.apply(this, arguments);
+ };
+
+ _Class.prototype.blockAfter = function(block, err) {
+ if (err) {
+ joePrivate.errord = true;
+ }
+ joe.report('finishSuite', block, err);
+ return _Class.__super__.blockAfter.apply(this, arguments);
+ };
+
+ _Class.prototype.blockTaskBefore = function(block, test) {
+ joe.report('startTest', block, test);
+ return _Class.__super__.blockTaskBefore.apply(this, arguments);
+ };
+
+ _Class.prototype.blockTaskAfter = function(block, test, err) {
+ if (err) {
+ joePrivate.errord = true;
+ }
+ joe.report('finishTest', block, test, err);
+ return _Class.__super__.blockTaskAfter.apply(this, arguments);
+ };
+
+ _Class.prototype.getSuiteName = function() {
+ return this.blockName;
+ };
+
+ _Class.prototype.getParentSuite = function() {
+ return this.parentBlock;
+ };
+
+ _Class.prototype.suite = function(name, fn) {
+ var _ref;
+ if ((_ref = fn.length) !== 0 && _ref !== 2 && _ref !== 3) {
+ throw new Error("An invalid amount of arguments were specified for a Joe Suite, more info here: " + config.troubleshootingURL);
+ } else {
+ return this.block(name, fn);
+ }
+ };
+
+ _Class.prototype.describe = function(name, fn) {
+ return this.suite(name, fn);
+ };
+
+ _Class.prototype.test = function(name, fn) {
+ var _ref;
+ if ((_ref = fn.length) !== 0 && _ref !== 1) {
+ throw new Error("An invalid amount of arguments were specified for a Joe Test, more info here: " + config.troubleshootingURL);
+ } else {
+ return this.task(name, fn);
+ }
+ };
+
+ _Class.prototype.it = function(name, fn) {
+ return this.test(name, fn);
+ };
+
+ return _Class;
+
+ })(Block)
+ };
+
+ if (typeof process !== "undefined" && process !== null) {
+ process.on('SIGINT', function() {
+ if (!joe.hasExited()) {
+ return joe.exit();
+ }
+ });
+ process.on('exit', function() {
+ if (!joe.hasExited()) {
+ return joe.exit();
+ }
+ });
+ process.on('uncaughtException', function(err) {
+ if (!joe.hasExited()) {
+ return joe.uncaughtException(err);
+ }
+ });
+ }
+
+ joe.describe = joe.suite = function(name, fn) {
+ return joePrivate.getGlobalSuite().suite(name, fn);
+ };
+
+ joe.it = joe.test = function(name, fn) {
+ return joePrivate.getGlobalSuite().test(name, fn);
+ };
+
+ if (typeof require !== "undefined" && require !== null) {
+ joe.require = function(path) {
+ return require(__dirname + '/' + path);
+ };
+ }
+
+ if (typeof require !== "undefined" && require !== null) {
+ if (typeof Object.freeze === "function") {
+ Object.freeze(joe);
+ }
+ }
+
+ if (typeof module !== "undefined" && module !== null) {
+ module.exports = joe;
+ } else {
+ this.joe = joe;
+ }
+
+}).call(this);
View
167 test-web/vendor/joe/reporters/console.js
@@ -0,0 +1,167 @@
+// Generated by CoffeeScript 1.3.3
+(function() {
+ var ConsoleReporter, cliColor,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ try {
+ cliColor = typeof require === "function" ? require('cli-color') : void 0;
+ } catch (err) {
+ cliColor = null;
+ }
+
+ ConsoleReporter = (function() {
+
+ ConsoleReporter.prototype.errors = null;
+
+ ConsoleReporter.prototype.config = null;
+
+ ConsoleReporter.prototype.passed = 0;
+
+ ConsoleReporter.prototype.failed = 0;
+
+ ConsoleReporter.prototype.total = 0;
+
+ function ConsoleReporter(config) {
+ var _base, _base1, _base2, _base3, _base4, _base5, _base6, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6;
+ this.errors || (this.errors = []);
+ this.config || (this.config = config || {});
+ if ((_ref = (_base = this.config).start) == null) {
+ _base.start = '';
+ }
+ if ((_ref1 = (_base1 = this.config).fail) == null) {
+ _base1.fail = '';
+ }
+ if ((_ref2 = (_base2 = this.config).pass) == null) {
+ _base2.pass = '';
+ }
+ if ((_ref3 = (_base3 = this.config).sub) == null) {
+ _base3.sub = '';
+ }
+ if ((_ref4 = (_base4 = this.config).failHeading) == null) {
+ _base4.failHeading = 'Error #%s:';
+ }
+ if ((_ref5 = (_base5 = this.config).summaryPass) == null) {
+ _base5.summaryPass = "%s/%s tests ran successfully, everything passed";
+ }
+ if ((_ref6 = (_base6 = this.config).summaryFail) == null) {
+ _base6.summaryFail = "%s/%s tests ran successfully, with %s errors";
+ }
+ if (cliColor != null) {
+ if (__indexOf.call(typeof process !== "undefined" && process !== null ? process.argv : void 0, '--no-colors') < 0) {
+ this.config.fail = cliColor.red(this.config.fail);
+ this.config.pass = cliColor.green(this.config.pass);
+ this.config.sub = cliColor.gray(this.config.sub);
+ this.config.failHeading = cliColor.red.underline(this.config.failHeading);
+ this.config.summaryPass = cliColor.green.underline(this.config.summaryPass);
+ this.config.summaryFail = cliColor.red.bold.underline(this.config.summaryFail);
+ }
+ }
+ }
+
+ ConsoleReporter.prototype.getSuiteName = function(suite) {
+ var parentSuite, parentSuiteName, suiteName;
+ suiteName = suite.getSuiteName();
+ parentSuite = suite.getParentSuite();
+ if (parentSuite) {
+ parentSuiteName = this.getSuiteName(parentSuite);
+ suiteName = "" + parentSuiteName + this.config.sub + suiteName;
+ }
+ return suiteName;
+ };
+
+ ConsoleReporter.prototype.getTestName = function(suite, testName) {
+ var suiteName;
+ if (suite != null) {
+ suiteName = this.getSuiteName(suite);
+ testName = "" + suiteName + this.config.sub + testName;
+ }
+ return testName;
+ };
+
+ ConsoleReporter.prototype.startSuite = function(suite) {
+ var message, suiteName;
+ suiteName = this.getSuiteName(suite);
+ message = "" + suiteName + this.config.start;
+ console.log(message);
+ return this;
+ };
+
+ ConsoleReporter.prototype.finishSuite = function(suite, err) {
+ var check, message, suiteName;
+ if (err && this.errors.length === 0) {
+ this.uncaughtException(err);
+ }
+ suiteName = this.getSuiteName(suite);
+ check = (err ? this.config.fail : this.config.pass);
+ message = "" + suiteName + check;
+ console.log(message);
+ return this;
+ };
+
+ ConsoleReporter.prototype.startTest = function(suite, testName) {
+ var message;
+ ++this.total;
+ testName = this.getTestName(suite, testName);
+ message = "" + testName + this.config.start;
+ console.log(message);
+ return this;
+ };
+
+ ConsoleReporter.prototype.finishTest = function(suite, testName, err) {
+ var check, message;
+ if (err) {
+ this.errors.push({
+ suite: suite,
+ testName: testName,
+ err: err
+ });
+ ++this.failed;
+ } else {
+ ++this.passed;
+ }
+ testName = this.getTestName(suite, testName);
+ check = (err ? this.config.fail : this.config.pass);
+ message = "" + testName + check;
+ console.log(message, (typeof process !== "undefined" && process !== null) === false && err ? [err, err.stack] : '');
+ return this;
+ };
+
+ ConsoleReporter.prototype.uncaughtException = function(err) {
+ this.errors.push({
+ testName: 'uncaughtException',
+ err: err
+ });
+ return this;
+ };
+
+ ConsoleReporter.prototype.exit = function() {
+ var error, index, suite, testName, _i, _len, _ref, _ref1;
+ if (this.errors.length === 0) {
+ console.log("\n" + this.config.summaryPass, this.passed, this.total);
+ } else {
+ console.log("\n" + this.config.summaryFail, this.passed, this.total, this.errors.length);
+ _ref = this.errors;
+ for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {
+ error = _ref[index];
+ suite = error.suite, testName = error.testName, err = error.err;
+ testName = this.getTestName(suite, testName);
+ console.log("\n" + this.config.failHeading, index + 1);
+ console.log(testName);
+ console.log(((_ref1 = err.stack) != null ? _ref1.toString() : void 0) || err);
+ }
+ console.log('');
+ }
+ return this;
+ };
+
+ return ConsoleReporter;
+
+ })();
+
+ if (typeof module !== "undefined" && module !== null) {
+ module.exports = ConsoleReporter;
+ } else {
+ this.joe.ConsoleReporter = ConsoleReporter;
+ }
+
+}).call(this);
View
79 test-web/vendor/joe/reporters/list.js
@@ -0,0 +1,79 @@
+// Generated by CoffeeScript 1.3.3
+(function() {
+ var ConsoleReporter, ListReporter,
+ __hasProp = {}.hasOwnProperty,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+ ConsoleReporter = typeof require !== "undefined" && require !== null ? require(__dirname + '/console') : this.joe.ConsoleReporter;
+
+ ListReporter = (function(_super) {
+
+ __extends(ListReporter, _super);
+
+ ListReporter.prototype.startSuite = function() {};
+
+ ListReporter.prototype.finishSuite = function() {};
+
+ ListReporter.prototype.startTest = function() {
+ return ++this.total;
+ };
+
+ function ListReporter(config) {
+ var _base, _base1, _ref, _ref1;
+ this.config || (this.config = config || {});
+ if ((_ref = (_base = this.config).fail) == null) {
+ _base.fail = '';
+ }
+ if ((_ref1 = (_base1 = this.config).pass) == null) {
+ _base1.pass = '';
+ }
+ ListReporter.__super__.constructor.apply(this, arguments);
+ }
+
+ ListReporter.prototype.finishTest = function(suite, testName, err) {
+ var check, message;
+ if (err) {
+ this.errors.push({
+ suite: suite,
+ testName: testName,
+ err: err
+ });
+ ++this.failed;
+ } else {
+ ++this.passed;
+ }
+ testName = this.getTestName(suite, testName);
+ check = (err ? this.config.fail : this.config.pass);
+ message = "" + check + testName;
+ return console.log(message, (typeof process !== "undefined" && process !== null) === false && err ? [err, err.stack] : '');
+ };
+
+ ListReporter.prototype.exit = function() {
+ var err, error, index, suite, testName, _i, _len, _ref;
+ if (this.errors.length === 0) {
+ console.log("\n" + this.config.summaryPass, this.passed, this.total);
+ } else {
+ console.log("\n" + this.config.summaryFail, this.passed, this.total, this.errors.length);
+ _ref = this.errors;
+ for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {
+ error = _ref[index];
+ suite = error.suite, testName = error.testName, err = error.err;
+ testName = this.getTestName(suite, testName);
+ console.log("\n" + this.config.failHeading, index + 1);
+ console.log("" + testName + "\n" + (err.stack.toString()));
+ }
+ }
+ return console.log('');
+ };
+
+ return ListReporter;
+
+ })(ConsoleReporter);
+
+ if (typeof module !== "undefined" && module !== null) {
+ module.exports = ListReporter;
+ } else {
+ this.joe.ListReporter = ListReporter;
+ }
+
+}).call(this);

0 comments on commit bbd6405

Please sign in to comment.