From f3456dc2826e9570cf2969fab3c314255d16188f Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Thu, 7 Jul 2011 13:56:13 -0700
Subject: fix(directive): ng:options now support binding to expression
Closes #449
---
test/widgetsSpec.js | 53 +++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 43 insertions(+), 10 deletions(-)
(limited to 'test/widgetsSpec.js')
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index d9228f09..5d39b4ec 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -576,22 +576,31 @@ describe("widget", function(){
describe('ng:options', function(){
var select, scope;
- function createSelect(multiple, blank, unknown){
- select = jqLite(
- '');
+ function createSelect(attrs, blank, unknown){
+ var html = '';
+ select = jqLite(html);
scope = compile(select);
};
function createSingleSelect(blank, unknown){
- createSelect(false, blank, unknown);
+ createSelect({name:'selected', 'ng:options':'value.name for value in values'},
+ blank, unknown);
};
function createMultiSelect(blank, unknown){
- createSelect(true, blank, unknown);
+ createSelect({name:'selected', multiple:true, 'ng:options':'value.name for value in values'},
+ blank, unknown);
};
afterEach(function(){
@@ -602,7 +611,7 @@ describe("widget", function(){
it('should throw when not formated "? for ? in ?"', function(){
expect(function(){
compile('');
- }).toThrow("Expected ng:options in form of '_expresion_ for _item_ in _collection_' but got 'i dont parse'.");
+ }).toThrow("Expected ng:options in form of '(_expression_ as)? _expresion_ for _item_ in _collection_' but got 'i dont parse'.");
$logMock.error.logs.shift();
});
@@ -712,6 +721,18 @@ describe("widget", function(){
expect(select.val()).toEqual('1');
});
+ it('should bind to scope value through experession', function(){
+ createSelect({name:'selected', 'ng:options':'item.id as item.name for item in values'});
+ scope.values = [{id:10, name:'A'}, {id:20, name:'B'}];
+ scope.selected = scope.values[0].id;
+ scope.$eval();
+ expect(select.val()).toEqual('0');
+
+ scope.selected = scope.values[1].id;
+ scope.$eval();
+ expect(select.val()).toEqual('1');
+ });
+
it('should insert a blank option if bound to null', function(){
createSingleSelect();
scope.values = [{name:'A'}];
@@ -771,6 +792,18 @@ describe("widget", function(){
expect(scope.selected).toEqual(scope.values[1]);
});
+ it('should update model on change through expression', function(){
+ createSelect({name:'selected', 'ng:options':'item.id as item.name for item in values'});
+ scope.values = [{id:10, name:'A'}, {id:20, name:'B'}];
+ scope.selected = scope.values[0].id;
+ scope.$eval();
+ expect(select.val()).toEqual('0');
+
+ select.val('1');
+ browserTrigger(select, 'change');
+ expect(scope.selected).toEqual(scope.values[1].id);
+ });
+
it('should update model to null on change', function(){
createSingleSelect(true);
scope.values = [{name:'A'}, {name:'B'}];
--
cgit v1.2.3