shuriken 0.1.2.2 → 0.1.3

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 (86) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +28 -0
  3. data/coffeescripts/shuriken/test/assertions.coffee +111 -0
  4. data/coffeescripts/shuriken/test/reporters.coffee +61 -0
  5. data/coffeescripts/shuriken/test.coffee +117 -0
  6. data/coffeescripts/shuriken.coffee +2 -2
  7. data/javascripts/shuriken/mixins/callbacks.js +45 -0
  8. data/javascripts/shuriken/mixins.js +58 -0
  9. data/javascripts/shuriken/test/assertions.js +117 -0
  10. data/javascripts/shuriken/test/reporters.js +84 -0
  11. data/javascripts/shuriken/test.js +165 -0
  12. data/javascripts/shuriken.js +195 -0
  13. data/lib/shuriken.rb +1 -1
  14. data/shuriken.gemspec +84 -4
  15. data/tests/basic_namespace_tests.coffee +114 -0
  16. data/tests/template.erb +26 -0
  17. data/tests.watchr +6 -0
  18. data/vendor/jasmine-0.10.0/MIT.LICENSE +20 -0
  19. data/vendor/jasmine-0.10.0/README.markdown +437 -0
  20. data/vendor/jasmine-0.10.0/doc/files.html +460 -0
  21. data/vendor/jasmine-0.10.0/doc/index.html +322 -0
  22. data/vendor/jasmine-0.10.0/doc/symbols/_global_.html +918 -0
  23. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Block.html +417 -0
  24. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Clock.html +678 -0
  25. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Env.html +1169 -0
  26. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.JsApiReporter.html +822 -0
  27. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Matchers.html +1461 -0
  28. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.MultiReporter.html +394 -0
  29. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.NestedResults.html +710 -0
  30. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Reporter.html +574 -0
  31. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Runner.html +710 -0
  32. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Spec.html +1259 -0
  33. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Spy.html +855 -0
  34. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.Suite.html +705 -0
  35. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.html +1345 -0
  36. data/vendor/jasmine-0.10.0/doc/symbols/jasmine.util.html +535 -0
  37. data/vendor/jasmine-0.10.0/doc/symbols/src/lib_TrivialReporter.js.html +124 -0
  38. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Block.js.html +29 -0
  39. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Env.js.html +240 -0
  40. data/vendor/jasmine-0.10.0/doc/symbols/src/src_JsApiReporter.js.html +111 -0
  41. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Matchers.js.html +328 -0
  42. data/vendor/jasmine-0.10.0/doc/symbols/src/src_MultiReporter.js.html +36 -0
  43. data/vendor/jasmine-0.10.0/doc/symbols/src/src_NestedResults.js.html +88 -0
  44. data/vendor/jasmine-0.10.0/doc/symbols/src/src_PrettyPrinter.js.html +130 -0
  45. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Queue.js.html +102 -0
  46. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Reporter.js.html +35 -0
  47. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Reporters.js.html +51 -0
  48. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Runner.js.html +75 -0
  49. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Spec.js.html +211 -0
  50. data/vendor/jasmine-0.10.0/doc/symbols/src/src_Suite.js.html +77 -0
  51. data/vendor/jasmine-0.10.0/doc/symbols/src/src_WaitsBlock.js.html +21 -0
  52. data/vendor/jasmine-0.10.0/doc/symbols/src/src_WaitsForBlock.js.html +45 -0
  53. data/vendor/jasmine-0.10.0/doc/symbols/src/src_base.js.html +555 -0
  54. data/vendor/jasmine-0.10.0/doc/symbols/src/src_mock-timeout.js.html +185 -0
  55. data/vendor/jasmine-0.10.0/doc/symbols/src/src_util.js.html +75 -0
  56. data/vendor/jasmine-0.10.0/example/example_runner.html +25 -0
  57. data/vendor/jasmine-0.10.0/example/spec/example_suite.js +11 -0
  58. data/vendor/jasmine-0.10.0/lib/TrivialReporter.js +117 -0
  59. data/vendor/jasmine-0.10.0/lib/consolex.js +28 -0
  60. data/vendor/jasmine-0.10.0/lib/jasmine-0.10.0.js +2261 -0
  61. data/vendor/jasmine-0.10.0/lib/jasmine.css +86 -0
  62. data/vendor/jasmine-0.10.0/spec/runner.html +63 -0
  63. data/vendor/jasmine-0.10.0/spec/suites/CustomMatchersSpec.js +112 -0
  64. data/vendor/jasmine-0.10.0/spec/suites/EnvSpec.js +71 -0
  65. data/vendor/jasmine-0.10.0/spec/suites/ExceptionsSpec.js +107 -0
  66. data/vendor/jasmine-0.10.0/spec/suites/JsApiReporterSpec.js +82 -0
  67. data/vendor/jasmine-0.10.0/spec/suites/MatchersSpec.js +589 -0
  68. data/vendor/jasmine-0.10.0/spec/suites/MockClockSpec.js +34 -0
  69. data/vendor/jasmine-0.10.0/spec/suites/MultiReporterSpec.js +30 -0
  70. data/vendor/jasmine-0.10.0/spec/suites/NestedResultsSpec.js +54 -0
  71. data/vendor/jasmine-0.10.0/spec/suites/PrettyPrintSpec.js +93 -0
  72. data/vendor/jasmine-0.10.0/spec/suites/QueueSpec.js +23 -0
  73. data/vendor/jasmine-0.10.0/spec/suites/ReporterSpec.js +60 -0
  74. data/vendor/jasmine-0.10.0/spec/suites/RunnerSpec.js +258 -0
  75. data/vendor/jasmine-0.10.0/spec/suites/SpecRunningSpec.js +1086 -0
  76. data/vendor/jasmine-0.10.0/spec/suites/SpecSpec.js +110 -0
  77. data/vendor/jasmine-0.10.0/spec/suites/SpySpec.js +187 -0
  78. data/vendor/jasmine-0.10.0/spec/suites/SuiteSpec.js +101 -0
  79. data/vendor/jasmine-0.10.0/spec/suites/TrivialReporterSpec.js +140 -0
  80. data/vendor/jasmine-0.10.0/spec/suites/UtilSpec.js +23 -0
  81. data/vendor/jquery.js +154 -0
  82. data/wip-coffeescripts/example_test.coffee +0 -0
  83. data/wip-coffeescripts/test/assertions.coffee +111 -0
  84. data/wip-coffeescripts/test/reporters.coffee +61 -0
  85. data/wip-coffeescripts/test.coffee +96 -15
  86. metadata +83 -4
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ test-output
data/Rakefile CHANGED
@@ -18,3 +18,31 @@ begin
18
18
  rescue LoadError
19
19
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
20
  end
21
+
22
+ desc "Compiles the javascript from Coffeescript to Javascript"
23
+ task :compile_scripts do
24
+ Dir["coffeescripts/**/*.coffee"].each do |cs|
25
+ output = File.dirname(cs).gsub("coffeescripts", "javascripts")
26
+ system "coffee", "-c", "--no-wrap", cs, "-o", output
27
+ end
28
+ end
29
+
30
+ task :test => :compile_scripts do
31
+ require 'erb'
32
+ template = ERB.new(File.read("tests/template.erb"))
33
+ FileUtils.mkdir_p 'test-output'
34
+ FileUtils.rm_rf 'test-output/*'
35
+ Dir["tests/*.coffee"].each do |test|
36
+ test_name = File.basename(test, ".coffee")
37
+ $js_file = "#{test_name}.js"
38
+ File.open("test-output/#{test_name}.html", "w+") do |f|
39
+ f.write template.result
40
+ end
41
+ $js_file = nil
42
+ system "coffee", "-c", "--no-wrap", test, "-o", "test-output"
43
+ end
44
+ end
45
+
46
+ task :watchr do
47
+ system "watchr tests.watchr"
48
+ end
@@ -0,0 +1,111 @@
1
+ # General assertions.
2
+ Shuriken.Test.Assertions: ((ns) ->
3
+
4
+ ns.currentAssertionCatcher: null
5
+
6
+ class ns.AssertionCatcher
7
+
8
+ constructor: ->
9
+ @passedCount: 0
10
+ @passedMessages: []
11
+ @failedOn: null
12
+
13
+ failAssertion: (e) ->
14
+ @failedOn: e
15
+
16
+ passAssertion: (e) ->
17
+ @passedMessages.push e.message
18
+ @passedCount++
19
+
20
+ failedReason: ->
21
+ return "Not failed" if !@failedOn?
22
+ @failedOn.toString()
23
+
24
+ passed: -> not @failed()
25
+
26
+ failed: -> @failedOn?
27
+
28
+
29
+ class ns.AssertionFailed
30
+
31
+ constructor: (message) ->
32
+ @message: message
33
+
34
+ toString: ->
35
+ "Assertion Failed: $@message"
36
+
37
+ ns.assert: (condition, message) ->
38
+ if condition
39
+ # TODO: Track in some sort of test scope.
40
+ console.log "Assertion passed: $message"
41
+ else
42
+ throw new ns.AssertionFailed message
43
+
44
+ ns.assertEqual: (expected, actual, message) ->
45
+ message?= "Expected $actual, got $expected."
46
+ ns.assert actual is expected, message
47
+
48
+ ns.assertBlock: (message, block) ->
49
+ if typeof message is "function"
50
+ block: message
51
+ message: "expected block to return true"
52
+ ns.assert block(), message
53
+
54
+ ns.assertInDelta: (expected, actual, delta, message) ->
55
+ message?= "expected $actual and $expected to be within $delta of each other."
56
+ ns.assert Math.abs(expected - actual) <= delta, message
57
+
58
+ ns.assertTypeOf: (expected, object, message) ->
59
+ message?= "Expected the type of $object to be $expected"
60
+ ns.assert (typeof object is expected), message
61
+
62
+ ns.assertTypeOfIsnt: (expected, object, message) ->
63
+ message?= "Expected the type of $object to not be $expected"
64
+ ns.assert (typeof object isnt expected), message
65
+
66
+ ns.assertInstanceOf: (expected, object, message) ->
67
+ message?= "Expected $object to be an instance of $expected"
68
+ ns.assert (object instanceof expected), message
69
+
70
+ ns.assertUndefined: (object, message) ->
71
+ message?= "Expected $object to be undefined"
72
+ ns.assertTypeOf 'undefined', object, message
73
+
74
+ ns.assertDefined: (object, message) ->
75
+ message?= "Expected $object to be defined"
76
+ ns.assertTypeOfIsnt 'undefined', object, message
77
+
78
+ ns.assertNotEqual: (expected, object, message) ->
79
+ message?= "Expected $object not to equal $expected"
80
+ ns.assert object isnt expected, message
81
+
82
+ ns.assertNull: (object, message) ->
83
+ message?= "Expected $object to be null"
84
+ ns.assert object is null, message
85
+
86
+ ns.assertNotNull: (object, message) ->
87
+ message?= "Expected $object to not be null"
88
+ ns.assert object isnt null, message
89
+
90
+ ns.flunk: (message) ->
91
+ message?= "Flunking test for no reason"
92
+ ns.assert false, "Flunk: $message"
93
+
94
+ )({})
95
+
96
+ Shuriken.Test.withAssertions: (closure) ->
97
+ `with(Shuriken.Test.Assertions) { closure() }`
98
+
99
+ Shuriken.Test.catchingAssertions: (closure) ->
100
+ ac: Shuriken.Test.AssertionCatcher
101
+ catcher: new ac()
102
+ old: ac.currentAssertionCatcher
103
+ ac.currentAssertionCatcher: catcher
104
+ try
105
+ closure()
106
+ catch e
107
+ catcher.failAssertion e
108
+ finally
109
+ ac.currentAssertionCatcher: old
110
+ catcher
111
+
@@ -0,0 +1,61 @@
1
+ Shuriken.Test.Reporters: {}
2
+
3
+ ((reporters) ->
4
+
5
+ class reporters.Reporter
6
+
7
+ constructor: (results) ->
8
+ @results: results
9
+
10
+ showResults: () -> throw "Please us an implemented reporter."
11
+
12
+ class reporters.ConsoleReporter extends reporters.Reporter
13
+
14
+ showResults: (results, padding) ->
15
+ results?= @results
16
+ padding?= 0
17
+ if $.isArray @results
18
+ # A
19
+ else if @results instanceof Shuriken.Test.ContextResult
20
+ # B
21
+ else if @results instanceof Shuriken.Test.AssertionCatcher
22
+ # C
23
+
24
+ puts: (args...) -> console.log('[Shuriken.Test.Reporters.ConsoleReporter]', args...)
25
+
26
+ paddedPuts: (padding, args...) ->
27
+ padding
28
+
29
+
30
+ showContext: (cr, padding) ->
31
+ padding?= 0
32
+ context: cr.context
33
+ @paddedPuts padding, "Context: $context.name"
34
+ @showResults cr.results, padding + 2
35
+
36
+ showTest: (tr, padding) ->
37
+ padding?= 0
38
+ assertions: tr.assertions
39
+ if assertions.failed()
40
+ @paddedPuts padding, "[\u2718]", tr.test.name, "(${assertions.failedReason()})"
41
+ else if assertions.passed() and assertions.passedCount > 0
42
+ @paddedPuts padding, "[\u2714]", tr.test.name
43
+ else
44
+ @paddedPuts padding, "[\u203D]", tr.test.name, "(Pending)"
45
+
46
+ showArray: (array, padding) ->
47
+ padding?= 0
48
+ lastIndex: array.length - 1
49
+ for i in [0..lastIndex]
50
+ @showResults array[i], padding
51
+ @paddedPuts padding, "" unless i == lastIndex
52
+
53
+
54
+ # Set the current reporter.
55
+ reporters.current: reporters.ConsoleReporter
56
+
57
+ Shuriken.Test.displayResults: (results) ->
58
+ reporter: new reporters.current results
59
+ reporter.showResults()
60
+
61
+ )(Shuriken.Test.Reporters)
@@ -0,0 +1,117 @@
1
+ Shuriken.Test = {
2
+ currentContext: []
3
+ }
4
+
5
+ Shuriken.withObject: (object, block) ->
6
+ `with(object) { block.apply(object); }`
7
+
8
+ ((test) ->
9
+
10
+ class test.ContextResult
11
+
12
+ constructor: (context, results) ->
13
+ @context: context
14
+ @results: results
15
+
16
+ class test.TestResult
17
+
18
+ constructor: (test, assertions) ->
19
+ @test: test
20
+ @assertions: assertions
21
+
22
+ class test.Context
23
+
24
+ constructor: (name, context) ->
25
+ @name: name
26
+ @blocks: {}
27
+ @context: context
28
+
29
+ blocksFor: (name) ->
30
+ @blocks[name]?= []
31
+
32
+ addBlockFor: (name, block) ->
33
+ @blocksFor(name).push block
34
+
35
+ run: ->
36
+ scope: @toScope()
37
+ @context.invokeBlocksFor "setupAll", scope if @context?
38
+ @invokeBlocksFor "setupAll", scope
39
+ # Invoke all stuff.
40
+ results: []
41
+ Shuriken.withObject @, -> results: @invokeBlocksFor("inner", scope)
42
+ @invokeBlocksFor "teardownAll", scope
43
+ @context.invokeBlocksFor "teardownAll", scope if @context?
44
+ new test.ContextResult @, results
45
+
46
+ toScope: ->
47
+ return @scope if @scope?
48
+ scope: ->
49
+ scope.prototype: @context.toScope() if @context?
50
+ self: @
51
+ @scope: new scope()
52
+ @scope.setup: ->
53
+ superSetup: scope::setup
54
+ superSetup.apply(@) if superSetup?
55
+ self.invokeBlocksFor "setup", @
56
+ @scope.teardown: ->
57
+ superSetup: scope::teardown
58
+ superSetup.apply(@) if superTeardown?
59
+ self.invokeBlocksFor "teardown", @
60
+
61
+ invokeBlocksFor: (blockName, scope) ->
62
+ block.apply(scope) for block in @blocksFor(blockNmae)
63
+
64
+ setup: (c) -> @addBlockFor "setup", c
65
+ teardown: (c) -> @addBlockFor "teardown", c
66
+ setupAll: (c) -> @addBlockFor "setupAll", c
67
+ teardownAll: (c) -> @addBlockFor "teardownAll", c
68
+
69
+ context: (name, block) ->
70
+ context: new test.Context name, @
71
+ block.apply context
72
+ addBlockFor 'inner', -> context.run
73
+
74
+ should: (name, block) ->
75
+ test: new test.Test name, block, @
76
+ addBlockFor 'inner', -> test.run
77
+
78
+ class test.Test
79
+
80
+ constructor: (name, body, context) ->
81
+ @name: name
82
+ @body: body
83
+ @context: context
84
+
85
+ run: ->
86
+ scope = @toScope()
87
+ scope.setup()
88
+ result: Shuriken.Test.catchingAssertions -> @body.apply scope
89
+ scope.teardown()
90
+ new test.TestResult @, result
91
+
92
+ toScope: ->
93
+ scope: ->
94
+ scope.prototype: @context
95
+ scope: new scope()
96
+
97
+
98
+ test.displayResults: (results) ->
99
+ # Do nothing at the moment...
100
+
101
+ test.testsFor: (name, block) ->
102
+ context: new test.Context name
103
+ test.tests[name]: context
104
+ Shuriken.withObject context, block
105
+ context.runSuite: ->
106
+ results: @run()
107
+ test.displayResults results
108
+
109
+ test.tests: {}
110
+
111
+ test.runAll: ->
112
+ results: test.run() for test in test.tests when test.runSuite?
113
+ test.displayResults results
114
+
115
+ test
116
+
117
+ )(Shuriken.Test)
@@ -35,8 +35,8 @@
35
35
  base.toNSName: (children...) ->
36
36
  parts: children
37
37
  current: @
38
- while current.parent?
39
- parts.unshift parts
38
+ while current?
39
+ parts.unshift current.name
40
40
  current: current.parent
41
41
  parts.join "."
42
42
 
@@ -0,0 +1,45 @@
1
+ var __slice = Array.prototype.slice;
2
+ Shuriken.defineExtension(function(baseNS) {
3
+ return baseNS.defineMixin('Callbacks', function(mixin) {
4
+ mixin.callbacks = {};
5
+ mixin.defineCallback = function defineCallback(key) {
6
+ this[("on" + key)] = function(callback) {
7
+ return this.hasCallback(key, callback);
8
+ };
9
+ this[("invoke" + key)] = function() {
10
+ var args;
11
+ args = __slice.call(arguments, 0, arguments.length - 0);
12
+ return this.invokeCallbacks.apply(this, [key].concat(args));
13
+ };
14
+ return true;
15
+ };
16
+ mixin.hasCallback = function hasCallback(name, callback) {
17
+ var _a, callbacks;
18
+ callbacks = mixin.callbacks[name] = (typeof (_a = mixin.callbacks[name]) !== "undefined" && _a !== null) ? mixin.callbacks[name] : [];
19
+ callbacks.push(callback);
20
+ return true;
21
+ };
22
+ mixin.callbacksFor = function callbacksFor(name) {
23
+ var existing;
24
+ existing = mixin.callbacks[name];
25
+ if ((typeof existing !== "undefined" && existing !== null)) {
26
+ return existing;
27
+ } else {
28
+ return [];
29
+ }
30
+ };
31
+ mixin.invokeCallbacks = function invokeCallbacks(name) {
32
+ var _a, _b, _c, args, callback;
33
+ args = __slice.call(arguments, 1, arguments.length - 0);
34
+ _b = mixin.callbacksFor(name);
35
+ for (_a = 0, _c = _b.length; _a < _c; _a++) {
36
+ callback = _b[_a];
37
+ if (callback.apply(this, args) === false) {
38
+ return false;
39
+ }
40
+ }
41
+ return true;
42
+ };
43
+ return mixin.invokeCallbacks;
44
+ });
45
+ });
@@ -0,0 +1,58 @@
1
+ Shuriken.defineExtension(function(baseNS) {
2
+ return baseNS.withNS('Mixins', function(ns) {
3
+ var defineMixin, root;
4
+ root = this.getRootNS();
5
+ ns.mixins = {};
6
+ root.mixins = {};
7
+ root.withBase(function(base) {
8
+ base.mixin = function mixin(mixins) {
9
+ return ns.mixin(this, mixins);
10
+ };
11
+ return base.mixin;
12
+ });
13
+ defineMixin = function defineMixin(key, mixin) {
14
+ this.mixins[key] = mixin;
15
+ return this.mixins[key];
16
+ };
17
+ root.defineMixin = defineMixin;
18
+ ns.define = defineMixin;
19
+ ns.lookupMixin = function lookupMixin(mixin) {
20
+ var _a, _b, _c;
21
+ if ((_a = typeof mixin) === "string") {
22
+ if ((typeof (_b = ns.mixins[mixin]) !== "undefined" && _b !== null)) {
23
+ return ns.mixins[mixin];
24
+ } else if ((typeof (_c = root.mixins[mixin]) !== "undefined" && _c !== null)) {
25
+ return root.mixins[mixin];
26
+ } else {
27
+ return {};
28
+ // unknown mixin, return a blank object.
29
+ }
30
+ } else {
31
+ return mixin;
32
+ }
33
+ };
34
+ ns.invokeMixin = function invokeMixin(scope, mixin) {
35
+ var _a;
36
+ if ((_a = typeof mixin) === "string") {
37
+ return ns.invokeMixin(scope, ns.lookupMixin(mixin));
38
+ } else if (_a === "function") {
39
+ return mixin.call(scope, scope);
40
+ } else if (_a === "object") {
41
+ return $.extend(scope, mixin);
42
+ }
43
+ };
44
+ ns.mixin = function mixin(scope, mixins) {
45
+ var _a, _b, _c, mixin;
46
+ if (!($.isArray(mixins))) {
47
+ mixins = [mixins];
48
+ }
49
+ _b = mixins;
50
+ for (_a = 0, _c = _b.length; _a < _c; _a++) {
51
+ mixin = _b[_a];
52
+ ns.invokeMixin(scope, ns.lookupMixin(mixin));
53
+ }
54
+ return true;
55
+ };
56
+ return ns.mixin;
57
+ });
58
+ });
@@ -0,0 +1,117 @@
1
+ // General assertions.
2
+ Shuriken.Test.Assertions = (function(ns) {
3
+ ns.currentAssertionCatcher = null;
4
+ ns.AssertionCatcher = function AssertionCatcher() {
5
+ this.passedCount = 0;
6
+ this.passedMessages = [];
7
+ this.failedOn = null;
8
+ return this;
9
+ };
10
+ ns.AssertionCatcher.prototype.failAssertion = function failAssertion(e) {
11
+ this.failedOn = e;
12
+ return this.failedOn;
13
+ };
14
+ ns.AssertionCatcher.prototype.passAssertion = function passAssertion(e) {
15
+ this.passedMessages.push(e.message);
16
+ return this.passedCount++;
17
+ };
18
+ ns.AssertionCatcher.prototype.failedReason = function failedReason() {
19
+ var _a;
20
+ if (!(typeof (_a = this.failedOn) !== "undefined" && _a !== null)) {
21
+ return "Not failed";
22
+ }
23
+ return this.failedOn.toString();
24
+ };
25
+ ns.AssertionCatcher.prototype.passed = function passed() {
26
+ return !this.failed();
27
+ };
28
+ ns.AssertionCatcher.prototype.failed = function failed() {
29
+ var _a;
30
+ return (typeof (_a = this.failedOn) !== "undefined" && _a !== null);
31
+ };
32
+ ns.AssertionFailed = function AssertionFailed(message) {
33
+ this.message = message;
34
+ return this;
35
+ };
36
+ ns.AssertionFailed.prototype.toString = function toString() {
37
+ return "Assertion Failed: " + this.message;
38
+ };
39
+ ns.assert = function assert(condition, message) {
40
+ if (condition) {
41
+ // TODO: Track in some sort of test scope.
42
+ return console.log(("Assertion passed: " + message));
43
+ } else {
44
+ throw new ns.AssertionFailed(message);
45
+ }
46
+ };
47
+ ns.assertEqual = function assertEqual(expected, actual, message) {
48
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + actual + ", got " + expected + ".");
49
+ return ns.assert(actual === expected, message);
50
+ };
51
+ ns.assertBlock = function assertBlock(message, block) {
52
+ if (typeof message === "function") {
53
+ block = message;
54
+ message = "expected block to return true";
55
+ }
56
+ return ns.assert(block(), message);
57
+ };
58
+ ns.assertInDelta = function assertInDelta(expected, actual, delta, message) {
59
+ message = (typeof message !== "undefined" && message !== null) ? message : ("expected " + actual + " and " + expected + " to be within " + delta + " of each other.");
60
+ return ns.assert(Math.abs(expected - actual) <= delta, message);
61
+ };
62
+ ns.assertTypeOf = function assertTypeOf(expected, object, message) {
63
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected the type of " + object + " to be " + expected);
64
+ return ns.assert((typeof object === expected), message);
65
+ };
66
+ ns.assertTypeOfIsnt = function assertTypeOfIsnt(expected, object, message) {
67
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected the type of " + object + " to not be " + expected);
68
+ return ns.assert((typeof object !== expected), message);
69
+ };
70
+ ns.assertInstanceOf = function assertInstanceOf(expected, object, message) {
71
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " to be an instance of " + expected);
72
+ return ns.assert((object instanceof expected), message);
73
+ };
74
+ ns.assertUndefined = function assertUndefined(object, message) {
75
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " to be undefined");
76
+ return ns.assertTypeOf('undefined', object, message);
77
+ };
78
+ ns.assertDefined = function assertDefined(object, message) {
79
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " to be defined");
80
+ return ns.assertTypeOfIsnt('undefined', object, message);
81
+ };
82
+ ns.assertNotEqual = function assertNotEqual(expected, object, message) {
83
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " not to equal " + expected);
84
+ return ns.assert(object !== expected, message);
85
+ };
86
+ ns.assertNull = function assertNull(object, message) {
87
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " to be null");
88
+ return ns.assert(object === null, message);
89
+ };
90
+ ns.assertNotNull = function assertNotNull(object, message) {
91
+ message = (typeof message !== "undefined" && message !== null) ? message : ("Expected " + object + " to not be null");
92
+ return ns.assert(object !== null, message);
93
+ };
94
+ ns.flunk = function flunk(message) {
95
+ message = (typeof message !== "undefined" && message !== null) ? message : "Flunking test for no reason";
96
+ return ns.assert(false, ("Flunk: " + message));
97
+ };
98
+ return ns.flunk;
99
+ })({});
100
+ Shuriken.Test.withAssertions = function withAssertions(closure) {
101
+ return with(Shuriken.Test.Assertions) { closure() };
102
+ };
103
+ Shuriken.Test.catchingAssertions = function catchingAssertions(closure) {
104
+ var ac, catcher, old;
105
+ ac = Shuriken.Test.AssertionCatcher;
106
+ catcher = new ac();
107
+ old = ac.currentAssertionCatcher;
108
+ ac.currentAssertionCatcher = catcher;
109
+ try {
110
+ closure();
111
+ } catch (e) {
112
+ catcher.failAssertion(e);
113
+ } finally {
114
+ ac.currentAssertionCatcher = old;
115
+ }
116
+ return catcher;
117
+ };
@@ -0,0 +1,84 @@
1
+ var __slice = Array.prototype.slice, __extends = function(child, parent) {
2
+ var ctor = function(){ };
3
+ ctor.prototype = parent.prototype;
4
+ child.__superClass__ = parent.prototype;
5
+ child.prototype = new ctor();
6
+ child.prototype.constructor = child;
7
+ };
8
+ Shuriken.Test.Reporters = {};
9
+ (function(reporters) {
10
+ reporters.Reporter = function Reporter(results) {
11
+ this.results = results;
12
+ return this;
13
+ };
14
+ reporters.Reporter.prototype.showResults = function showResults() {
15
+ throw "Please us an implemented reporter.";
16
+ };
17
+ reporters.ConsoleReporter = function ConsoleReporter() {
18
+ return reporters.Reporter.apply(this, arguments);
19
+ };
20
+ __extends(reporters.ConsoleReporter, reporters.Reporter);
21
+ reporters.ConsoleReporter.prototype.showResults = function showResults(results, padding) {
22
+ results = (typeof results !== "undefined" && results !== null) ? results : this.results;
23
+ padding = (typeof padding !== "undefined" && padding !== null) ? padding : 0;
24
+ if ($.isArray(this.results)) {
25
+ // A
26
+ } else if (this.results instanceof Shuriken.Test.ContextResult) {
27
+ // B
28
+ } else if (this.results instanceof Shuriken.Test.AssertionCatcher) {
29
+ // C
30
+ }
31
+ };
32
+ reporters.ConsoleReporter.prototype.puts = function puts() {
33
+ var args;
34
+ args = __slice.call(arguments, 0, arguments.length - 0);
35
+ return console.log.apply(console, ['[Shuriken.Test.Reporters.ConsoleReporter]'].concat(args));
36
+ };
37
+ reporters.ConsoleReporter.prototype.paddedPuts = function paddedPuts(padding) {
38
+ var args;
39
+ args = __slice.call(arguments, 1, arguments.length - 0);
40
+ return padding;
41
+ };
42
+ reporters.ConsoleReporter.prototype.showContext = function showContext(cr, padding) {
43
+ var context;
44
+ padding = (typeof padding !== "undefined" && padding !== null) ? padding : 0;
45
+ context = cr.context;
46
+ this.paddedPuts(padding, ("Context: " + context.name));
47
+ return this.showResults(cr.results, padding + 2);
48
+ };
49
+ reporters.ConsoleReporter.prototype.showTest = function showTest(tr, padding) {
50
+ var assertions;
51
+ padding = (typeof padding !== "undefined" && padding !== null) ? padding : 0;
52
+ assertions = tr.assertions;
53
+ if (assertions.failed()) {
54
+ return this.paddedPuts(padding, "[\u2718]", tr.test.name, ("(" + (assertions.failedReason()) + ")"));
55
+ } else if (assertions.passed() && assertions.passedCount > 0) {
56
+ return this.paddedPuts(padding, "[\u2714]", tr.test.name);
57
+ } else {
58
+ return this.paddedPuts(padding, "[\u203D]", tr.test.name, "(Pending)");
59
+ }
60
+ };
61
+ reporters.ConsoleReporter.prototype.showArray = function showArray(array, padding) {
62
+ var _a, _b, _c, _d, i, lastIndex;
63
+ padding = (typeof padding !== "undefined" && padding !== null) ? padding : 0;
64
+ lastIndex = array.length - 1;
65
+ _a = []; _c = 0; _d = lastIndex;
66
+ for (_b = 0, i = _c; (_c <= _d ? i <= _d : i >= _d); (_c <= _d ? i += 1 : i -= 1), _b++) {
67
+ _a.push((function() {
68
+ this.showResults(array[i], padding);
69
+ if (!(i === lastIndex)) {
70
+ return this.paddedPuts(padding, "");
71
+ }
72
+ }).call(this));
73
+ }
74
+ return _a;
75
+ };
76
+ // Set the current reporter.
77
+ reporters.current = reporters.ConsoleReporter;
78
+ Shuriken.Test.displayResults = function displayResults(results) {
79
+ var reporter;
80
+ reporter = new reporters.current(results);
81
+ return reporter.showResults();
82
+ };
83
+ return Shuriken.Test.displayResults;
84
+ })(Shuriken.Test.Reporters);