aboutsummaryrefslogtreecommitdiffstats
path: root/test/ApiSpecs.js
blob: 8969e1bfa602046a3e09a7d5e6a2c54768162011 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
describe('api', function(){

  it('ShouldReturnTypeOf', function(){
    assertEquals("undefined", angular.Object.typeOf(undefined));
    assertEquals("null", angular.Object.typeOf(null));
    assertEquals("object", angular.Collection.typeOf({}));
    assertEquals("array", angular.Array.typeOf([]));
    assertEquals("string", angular.Object.typeOf(""));
    assertEquals("date", angular.Object.typeOf(new Date()));
    assertEquals("element", angular.Object.typeOf(document.body));
    assertEquals($function, angular.Object.typeOf(function(){}));
  });

  it('ShouldReturnSize', function(){
    assertEquals(0, angular.Collection.size({}));
    assertEquals(1, angular.Collection.size({a:"b"}));
    assertEquals(0, angular.Object.size({}));
    assertEquals(1, angular.Array.size([0]));
  });

  it('should sum', function(){
    assertEquals(3, angular.Array.sum([{a:"1"}, {a:"2"}], 'a'));
  });

  it('SumContainingNaN', function(){
    assertEquals(1, angular.Array.sum([{a:1}, {a:Number.NaN}], 'a'));
    assertEquals(1, angular.Array.sum([{a:1}, {a:Number.NaN}], function($){return $.a;}));
  });

  it('Index', function(){
    assertEquals(angular.Array.indexOf(['a'], 'a'), 0);
    assertEquals(angular.Array.indexOf(['a', 'b'], 'a'), 0);
    assertEquals(angular.Array.indexOf(['b', 'a'], 'a'), 1);
    assertEquals(angular.Array.indexOf(['b', 'b'],'x'), -1);
  });

  it('Remove', function(){
    var items = ['a', 'b', 'c'];
    assertEquals(angular.Array.remove(items, 'q'), 'q');
    assertEquals(items.length, 3);

    assertEquals(angular.Array.remove(items, 'b'), 'b');
    assertEquals(items.length, 2);

    assertEquals(angular.Array.remove(items, 'a'), 'a');
    assertEquals(items.length, 1);

    assertEquals(angular.Array.remove(items, 'c'), 'c');
    assertEquals(items.length, 0);

    assertEquals(angular.Array.remove(items, 'q'), 'q');
    assertEquals(items.length, 0);
  });

  describe('filter', function(){

    it('Filter', function() {
      var items = ["MIsKO", {name:"shyam"}, ["adam"], 1234];
      assertEquals(4, angular.Array.filter(items, "").length);
      assertEquals(4, angular.Array.filter(items, undefined).length);

      assertEquals(1, angular.Array.filter(items, 'iSk').length);
      assertEquals("MIsKO", angular.Array.filter(items, 'isk')[0]);

      assertEquals(1, angular.Array.filter(items, 'yam').length);
      assertEquals(items[1], angular.Array.filter(items, 'yam')[0]);

      assertEquals(1, angular.Array.filter(items, 'da').length);
      assertEquals(items[2], angular.Array.filter(items, 'da')[0]);

      assertEquals(1, angular.Array.filter(items, '34').length);
      assertEquals(1234, angular.Array.filter(items, '34')[0]);

      assertEquals(0, angular.Array.filter(items, "I don't exist").length);
    });

    it('ShouldNotFilterOnSystemData', function() {
      assertEquals("", "".charAt(0)); // assumption
      var items = [{$name:"misko"}];
      assertEquals(0, angular.Array.filter(items, "misko").length);
    });

    it('FilterOnSpecificProperty', function(){
      var items = [{ignore:"a", name:"a"}, {ignore:"a", name:"abc"}];
      assertEquals(2, angular.Array.filter(items, {}).length);

      assertEquals(2, angular.Array.filter(items, {name:'a'}).length);

      assertEquals(1, angular.Array.filter(items, {name:'b'}).length);
      assertEquals("abc", angular.Array.filter(items, {name:'b'})[0].name);
    });

    it('FilterOnFunction', function(){
      var items = [{name:"a"}, {name:"abc", done:true}];
      assertEquals(1, angular.Array.filter(items, function(i){return i.done;}).length);
    });

    it('FilterIsAndFunction', function(){
      var items = [{first:"misko", last:"hevery"},
                   {first:"adam", last:"abrons"}];

      assertEquals(2, angular.Array.filter(items, {first:'', last:''}).length);
      assertEquals(1, angular.Array.filter(items, {first:'', last:'hevery'}).length);
      assertEquals(0, angular.Array.filter(items, {first:'adam', last:'hevery'}).length);
      assertEquals(1, angular.Array.filter(items, {first:'misko', last:'hevery'}).length);
      assertEquals(items[0], angular.Array.filter(items, {first:'misko', last:'hevery'})[0]);
    });

    it('FilterNot', function(){
      var items = ["misko", "adam"];

      assertEquals(1, angular.Array.filter(items, '!isk').length);
      assertEquals(items[1], angular.Array.filter(items, '!isk')[0]);
    });
  });


  it('Add', function(){
    var add = angular.Array.add;
    assertJsonEquals([{}, "a"], add(add([]),"a"));
  });

  it('Count', function(){
    var array = [{name:'a'},{name:'b'},{name:''}];
    var obj = {};

    assertEquals(3, angular.Array.count(array));
    assertEquals(2, angular.Array.count(array, 'name'));
    assertEquals(1, angular.Array.count(array, 'name=="a"'));
  });

  describe('orderBy', function(){
    var orderBy = angular.Array.orderBy;

    it('ShouldSortArray', function(){
      assertEquals([2,15], angular.Array.orderBy([15,2]));
      assertEquals(["a","B", "c"], angular.Array.orderBy(["c","B", "a"]));
      assertEquals([15,"2"], angular.Array.orderBy([15,"2"]));
      assertEquals(["15","2"], angular.Array.orderBy(["15","2"]));
      assertJsonEquals([{a:2},{a:15}], angular.Array.orderBy([{a:15},{a:2}], 'a'));
      assertJsonEquals([{a:2},{a:15}], angular.Array.orderBy([{a:15},{a:2}], 'a', "F"));
    });

    it('ShouldSortArrayInReverse', function(){
      assertJsonEquals([{a:15},{a:2}], angular.Array.orderBy([{a:15},{a:2}], 'a', true));
      assertJsonEquals([{a:15},{a:2}], angular.Array.orderBy([{a:15},{a:2}], 'a', "T"));
      assertJsonEquals([{a:15},{a:2}], angular.Array.orderBy([{a:15},{a:2}], 'a', "reverse"));
    });

    it('ShouldSortArrayByPredicate', function(){
      assertJsonEquals([{a:2, b:1},{a:15, b:1}],
          angular.Array.orderBy([{a:15, b:1},{a:2, b:1}], ['a', 'b']));
      assertJsonEquals([{a:2, b:1},{a:15, b:1}],
          angular.Array.orderBy([{a:15, b:1},{a:2, b:1}], ['b', 'a']));
      assertJsonEquals([{a:15, b:1},{a:2, b:1}],
          angular.Array.orderBy([{a:15, b:1},{a:2, b:1}], ['+b', '-a']));
    });

    it('should use function', function(){
      expect(
        orderBy(
          [{a:15, b:1},{a:2, b:1}],
          function(value){ return value.a; })).
      toEqual([{a:2, b:1},{a:15, b:1}]);
    });

  });

  it('QuoteString', function(){
    assertEquals(angular.String.quote('a'), '"a"');
    assertEquals(angular.String.quote('\\'), '"\\\\"');
    assertEquals(angular.String.quote("'a'"), '"\'a\'"');
    assertEquals(angular.String.quote('"a"'), '"\\"a\\""');
    assertEquals(angular.String.quote('\n\f\r\t'), '"\\n\\f\\r\\t"');
  });

  it('QuoteStringBug', function(){
    assertEquals('"7\\\\\\\"7"', angular.String.quote("7\\\"7"));
  });

  it('QuoteUnicode', function(){
    assertEquals('"abc\\u00a0def"', angular.String.quoteUnicode('abc\u00A0def'));
  });

  it('DateToUTC', function(){
    var date = new Date("Sep 10 2003 13:02:03 GMT");
    assertEquals("date", angular.Object.typeOf(date));
    assertEquals("2003-09-10T13:02:03Z", angular.Date.toString(date));
    assertEquals(date.getTime(), angular.String.toDate(angular.Date.toString(date)).getTime());
  });

  it('UTCtoDate', function(){
    expect(angular.String.toDate("2003-09-10T13:02:03Z")).toEqual(new Date("Sep 10 2003 13:02:03 GMT"));
  });

  it('StringFromUTC', function(){
    var date = angular.String.toDate("2003-09-10T13:02:03Z");
    assertEquals("date", angular.Object.typeOf(date));
    assertEquals("2003-09-10T13:02:03Z", angular.Date.toString(date));
    assertEquals("str", angular.String.toDate("str"));
  });

  it('ObjectShouldHaveExtend', function(){
    assertEquals({a:1, b:2}, angular.Object.extend({a:1}, {b:2}));
  });

});