From 347be5ae9aa6829427e1e8e1b1e58afdf2a36c0a Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Thu, 13 Jan 2011 10:35:26 -0800
Subject: fixed select with ng:format
select (one/multiple) could not chose from a list of objects, since DOM requires string ids.
Solved by adding index formatter, which exposed incorrect handling of formatters in select
widgets.
---
test/widgetsSpec.js | 98 ++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 79 insertions(+), 19 deletions(-)
(limited to 'test/widgetsSpec.js')
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index 8dab4630..946c433f 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -44,7 +44,7 @@ describe("widget", function(){
expect(scope.$get('name')).toEqual('Kai');
expect(scope.$get('count')).toEqual(2);
});
-
+
it('should not trigger eval if value does not change', function(){
compile('');
expect(scope.name).toEqual("Misko");
@@ -53,7 +53,7 @@ describe("widget", function(){
expect(scope.name).toEqual("Misko");
expect(scope.count).toEqual(0);
});
-
+
it('should allow complex refernce binding', function(){
compile('
'+
'
'+
@@ -416,7 +416,7 @@ describe("widget", function(){
scope.$eval();
expect(element[0].childNodes[1].selected).toEqual(true);
});
-
+
it('should select default option on repeater', function(){
compile(
'
');
expect(scope.selection).toEqual('1');
});
-
+
it('should select selected option on repeater', function(){
compile(
'
');
expect(scope.selection).toEqual('ABC');
});
-
+
it('should select dynamically selected option on repeater', function(){
compile(
'
');
expect(scope.selection).toEqual('2');
});
-
+
+ it('should allow binding to objects through JSON', function(){
+ compile(
+ '
');
+ scope.objs = [{name:'A'}, {name:'B'}];
+ scope.$eval();
+ expect(scope.selection).toEqual({name:'A'});
+ });
+
+ it('should allow binding to objects through index', function(){
+ compile(
+ '
');
+ scope.objs = [{name:'A'}, {name:'B'}];
+ scope.$eval();
+ expect(scope.selection).toBe(scope.objs[0]);
+ });
+
});
- it('should support type="select-multiple"', function(){
- compile(
- '
');
- expect(scope.selection).toEqual(['B']);
- scope.selection = ['A'];
- scope.$eval();
- expect(element[0].childNodes[0].selected).toEqual(true);
+ describe('select-multiple', function(){
+ it('should support type="select-multiple"', function(){
+ compile('
');
+ expect(scope.selection).toEqual(['B']);
+ scope.selection = ['A'];
+ scope.$eval();
+ expect(element[0].childNodes[0].selected).toEqual(true);
+ });
+
+ it('should allow binding to objects through index', function(){
+ compile('
',
+ function(){
+ scope.list = [{name:'A'}, {name:'B'}, {name:'C'}];
+ });
+ scope.$eval();
+ expect(scope.selection).toEqual([{name:'A'}, {name:'B'}]);
+ });
+
+ it('should be empty array when no items are selected', function(){
+ compile(
+ '
');
+ scope.list = [{name:'A'}, {name:'B'}, {name:'C'}];
+ scope.$eval();
+ expect(scope.selection).toEqual([]);
+ });
+
+ it('should be contain the selected object', function(){
+ compile('
',
+ function(){
+ scope.list = [{name:'A'}, {name:'B'}, {name:'C'}];
+ });
+ scope.$eval();
+ expect(scope.selection).toEqual([{name:'B'}]);
+ });
+
});
-
+
it('should ignore text widget which have no name', function(){
compile('
');
expect(scope.$element.attr('ng-exception')).toBeFalsy();
@@ -504,7 +564,7 @@ describe("widget", function(){
scope.$eval();
expect(element.text()).toEqual('true:misko');
});
-
+
it("should compare stringified versions", function(){
var switchWidget = angular.widget('ng:switch');
expect(switchWidget.equals(true, 'true')).toEqual(true);
@@ -521,7 +581,7 @@ describe("widget", function(){
scope.$eval();
expect(element.text()).toEqual('one');
});
-
+
it("should match urls", function(){
var scope = angular.compile('
{{params.name}}
');
scope.url = '/Book/Moby';
--
cgit v1.2.3