Add an AngularJS test to DoYouEvenBench
[WebKit-https.git] / PerformanceTests / DoYouEvenBench / todomvc / architecture-examples / angularjs / test / unit / todoCtrlSpec.js
1 /*global describe, it, beforeEach, inject, expect*/
2 (function () {
3     'use strict';
4
5     describe('Todo Controller', function () {
6     var ctrl, scope;
7     var todoList;
8     var todoStorage = {
9     storage: {},
10     get: function () {
11     return this.storage;
12     },
13     put: function (value) {
14     this.storage = value;
15     }
16     };
17
18     // Load the module containing the app, only 'ng' is loaded by default.
19     beforeEach(module('todomvc'));
20
21     beforeEach(inject(function ($controller, $rootScope) {
22     scope = $rootScope.$new();
23     ctrl = $controller('TodoCtrl', { $scope: scope });
24     }));
25
26     it('should not have an edited Todo on start', function () {
27     expect(scope.editedTodo).toBeNull();
28     });
29
30     it('should not have any Todos on start', function () {
31     expect(scope.todos.length).toBe(0);
32     });
33
34     it('should have all Todos completed', function () {
35     scope.$digest();
36     expect(scope.allChecked).toBeTruthy();
37     });
38
39     describe('the path', function () {
40     it('should default to "/"', function () {
41     expect(scope.location.path()).toBe('/');
42     });
43
44     describe('being at /active', function () {
45     it('should filter non-completed', inject(function ($controller) {
46     ctrl = $controller('TodoCtrl', {
47     $scope: scope,
48     $location: {
49     path: function () { return '/active'; }
50     }
51     });
52
53     scope.$digest();
54     expect(scope.statusFilter.completed).toBeFalsy();
55     }));
56     });
57
58     describe('being at /completed', function () {
59     it('should filter completed', inject(function ($controller) {
60     ctrl = $controller('TodoCtrl', {
61     $scope: scope,
62     $location: {
63     path: function () { return '/completed'; }
64     }
65     });
66
67     scope.$digest();
68     expect(scope.statusFilter.completed).toBeTruthy();
69     }));
70     });
71     });
72
73     describe('having no Todos', function () {
74     var ctrl;
75
76     beforeEach(inject(function ($controller) {
77     todoStorage.storage = [];
78     ctrl = $controller('TodoCtrl', {
79     $scope: scope,
80     todoStorage: todoStorage
81     });
82     scope.$digest();
83     }));
84
85     it('should not add empty Todos', function () {
86     scope.newTodo = '';
87     scope.addTodo();
88     scope.$digest();
89     expect(scope.todos.length).toBe(0);
90     });
91
92     it('should not add items consisting only of whitespaces', function () {
93     scope.newTodo = '   ';
94     scope.addTodo();
95     scope.$digest();
96     expect(scope.todos.length).toBe(0);
97     });
98
99
100     it('should trim whitespace from new Todos', function () {
101     scope.newTodo = '  buy some unicorns  ';
102     scope.addTodo();
103     scope.$digest();
104     expect(scope.todos.length).toBe(1);
105     expect(scope.todos[0].title).toBe('buy some unicorns');
106     });
107     });
108
109     describe('having some saved Todos', function () {
110     var ctrl;
111
112     beforeEach(inject(function ($controller) {
113     todoList = [{
114     'title': 'Uncompleted Item 0',
115     'completed': false
116     }, {
117     'title': 'Uncompleted Item 1',
118     'completed': false
119     }, {
120     'title': 'Uncompleted Item 2',
121     'completed': false
122     }, {
123     'title': 'Completed Item 0',
124     'completed': true
125     }, {
126     'title': 'Completed Item 1',
127     'completed': true
128     }];
129
130     todoStorage.storage = todoList;
131     ctrl = $controller('TodoCtrl', {
132     $scope: scope,
133     todoStorage: todoStorage
134     });
135     scope.$digest();
136     }));
137
138     it('should count Todos correctly', function () {
139     expect(scope.todos.length).toBe(5);
140     expect(scope.remainingCount).toBe(3);
141     expect(scope.completedCount).toBe(2);
142     expect(scope.allChecked).toBeFalsy();
143     });
144
145     it('should save Todos to local storage', function () {
146     expect(todoStorage.storage.length).toBe(5);
147     });
148
149     it('should remove Todos w/o title on saving', function () {
150     var todo = todoList[2];
151     todo.title = '';
152
153     scope.doneEditing(todo);
154     expect(scope.todos.length).toBe(4);
155     });
156
157     it('should trim Todos on saving', function () {
158     var todo = todoList[0];
159     todo.title = ' buy moar unicorns  ';
160
161     scope.doneEditing(todo);
162     expect(scope.todos[0].title).toBe('buy moar unicorns');
163     });
164
165     it('clearCompletedTodos() should clear completed Todos', function () {
166     scope.clearCompletedTodos();
167     expect(scope.todos.length).toBe(3);
168     });
169
170     it('markAll() should mark all Todos completed', function () {
171     scope.markAll();
172     scope.$digest();
173     expect(scope.completedCount).toBe(5);
174     });
175
176     it('revertTodo() get a Todo to its previous state', function () {
177     var todo = todoList[0];
178     scope.editTodo(todo);
179     todo.title = 'Unicorn sparkly skypuffles.';
180     scope.revertEditing(todo);
181     scope.$digest();
182     expect(scope.todos[0].title).toBe('Uncompleted Item 0');
183     });
184     });
185     });
186 }());