diff --git a/test/test.html b/test/test.html index 0a0241ca..2d0ad4a9 100644 --- a/test/test.html +++ b/test/test.html @@ -43,6 +43,17 @@ this.eq = (x, y, msg) -> ok x is y, msg ? x + ' !== ' + y + this.deepEqual = (a, b, msg) -> ok deepEq(a,b), msg + + deepEq = (a, b) -> + if a instanceof Array and b instanceof Array + success = yes + success and= deepEq(a[prop],b[prop]) for prop in a + success and= deepEq(a[prop],b[prop]) for prop in b when prop not in a + success + else + `a == b` + this.throws = (fun, err, msg) -> try fun(); throw new String 'No Error' catch e then eq e, err @@ -71,6 +82,7 @@ 'break' 'comments' 'exception_handling' + 'helpers' 'operators' 'regular_expressions' 'test_chaining' @@ -79,7 +91,6 @@ 'test_comprehensions' 'test_existence' 'test_functions' - 'test_helpers' 'test_heredocs' 'test_if' 'test_literals' @@ -94,4 +105,4 @@ - \ No newline at end of file + diff --git a/test/test_helpers.coffee b/test/test_helpers.coffee index 490c7a80..317eb1cd 100644 --- a/test/test_helpers.coffee +++ b/test/test_helpers.coffee @@ -1,39 +1,96 @@ +# Helpers +# ------- + +# pull the helpers from `CoffeeScript.helpers` into local variables {starts, ends, compact, count, merge, extend, flatten, del, last} = CoffeeScript.helpers -array = [0, 1, 2, 3, 4] -string = array.join '' -object = {} -# Test `starts` -ok starts string, '012' -ok starts string, '34', 3 -ok not starts string, '42' -ok not starts string, '42', 6 +#### `starts` -# Test `ends` -ok ends string, '234' -ok ends string, '01', 3 -ok not ends string, '42' -ok not ends string, '42', 6 +test "the `starts` helper tests if a string starts with another string", -> + ok starts('01234', '012') + ok not starts('01234', '123') -# Test `merge` -merged = merge object, array -ok merged isnt object -eq merged[3], 3 +test "the `starts` helper can take an optional offset", -> + ok starts('01234', '34', 3) + ok not starts('01234', '01', 1) -# Test `extend` -ok object is extend object, array -eq object[3], 3 -# Test `flatten` -ay = yes -(ay and= typeof n is 'number') for n in flatten [0, [[1], 2], 3, [4]] -ok ay +#### `ends` -# Test `del` -eq 1, del object, 1 -ok 1 not of object +test "the `ends` helper tests if a string ends with another string", -> + ok ends('01234', '234') + ok not ends('01234', '012') -# Test `last` -eq 4, last array -eq 2, last array, 2 +test "the `ends` helper can take an optional offset", -> + ok ends('01234', '012', 2) + ok not ends('01234', '234', 6) + + +#### `compact` + +test "the `compact` helper removes falsey values from an array, preserves truthy ones", -> + allValues = [1, 0, false, obj={}, [], '', ' ', -1, null, undefined, true] + truthyValues = [1, obj, [], ' ', -1, true] + deepEqual truthyValues, compact(allValues) + + +#### `count` + +test "the `count` helper counts the number of occurances of a string in another string", -> + eq 1/0, count('abc', '') + eq 0, count('abc', 'z') + eq 1, count('abc', 'a') + eq 1, count('abc', 'b') + eq 2, count('abcdc', 'c') + eq 2, count('abcdabcd','abc') + + +#### `merge` + +test "the `merge` helper makes a new object with all properties of the objects given as its arguments", -> + ary = [0, 1, 2, 3, 4] + obj = {} + merged = merge obj, ary + ok merged isnt obj + ok merged isnt ary + for own key, val of ary + eq val, merged[key] + + +#### `extend` + +test "the `extend` helper performs a shallow copy", -> + ary = [0, 1, 2, 3] + obj = {} + # should return the object being extended + eq obj, extend(obj, ary) + # should copy the other object's properties as well (obviously) + eq 2, obj[2] + + +#### `flatten` + +test "the `flatten` helper flattens an array", -> + success = yes + (success and= typeof n is 'number') for n in flatten [0, [[[1]], 2], 3, [4]] + ok success + + +#### `del` + +test "the `del` helper deletes a property from an object and returns the deleted value", -> + obj = [0, 1, 2] + eq 1, del(obj, 1) + ok 1 not of obj + + +#### `last` + +test "the `last` helper returns the last item of an array-like object", -> + ary = [0, 1, 2, 3, 4] + eq 4, last(ary) + +test "the `last` helper allows one to specify an optional offset", -> + ary = [0, 1, 2, 3, 4] + eq 2, last(ary, 2)