fix(specs): jQuery now returns attr name instead of true/false for special attrs

for special attrs like 'checked' or 'multiple', jquery now returns the name or undedefined.

e.g. foo.attr('checked') => 'checked' || undefined

The solution is a combination of updating our tests as well as switching
over to prop() instead which properly returns true/false
This commit is contained in:
Igor Minar 2011-09-15 00:47:15 +02:00
parent 4e8f0d6e9f
commit 0e5a24c584
3 changed files with 17 additions and 17 deletions

View file

@ -150,18 +150,18 @@ describe('jqLite', function(){
expect(jqLite(b).attr('prop')).toBeFalsy();
});
it('should read special attributes as boolean', function(){
it('should read special attributes as strings', function(){
var select = jqLite('<select>');
expect(select.attr('multiple')).toEqual(false);
expect(jqLite('<select multiple>').attr('multiple')).toEqual(true);
expect(jqLite('<select multiple="">').attr('multiple')).toEqual(true);
expect(jqLite('<select multiple="x">').attr('multiple')).toEqual(true);
expect(select.attr('multiple')).toBeUndefined();
expect(jqLite('<select multiple>').attr('multiple')).toBe('multiple');
expect(jqLite('<select multiple="">').attr('multiple')).toBe('multiple');
expect(jqLite('<select multiple="x">').attr('multiple')).toBe('multiple');
select.attr('multiple', false);
expect(select.attr('multiple')).toEqual(false);
expect(select.attr('multiple')).toBeUndefined();
select.attr('multiple', true);
expect(select.attr('multiple')).toEqual(true);
expect(select.attr('multiple')).toBe('multiple');
});
it('should return undefined for non-existing attributes', function() {

View file

@ -504,15 +504,15 @@ describe("angular.scenario.dsl", function() {
it('should toggle checkbox state', function() {
doc.append('<input type="checkbox" name="test.input" checked>');
expect(_jQuery('input[name="test.input"]').
attr('checked')).toBeTruthy();
prop('checked')).toBe(true);
var chain = $root.dsl.input('test.input');
chain.check();
expect(_jQuery('input[name="test.input"]').
attr('checked')).toBeFalsy();
prop('checked')).toBe(false);
$window.angular.reset();
chain.check();
expect(_jQuery('input[name="test.input"]').
attr('checked')).toBeTruthy();
prop('checked')).toBe(true);
});
it('should return error if checkbox did not match', function() {
@ -527,17 +527,17 @@ describe("angular.scenario.dsl", function() {
'<input type="radio" name="0@test.input" value="bar" checked="checked">'
);
// HACK! We don't know why this is sometimes false on chrome
_jQuery('input[name="0@test.input"][value="bar"]').attr('checked', true);
_jQuery('input[name="0@test.input"][value="bar"]').prop('checked', true);
expect(_jQuery('input[name="0@test.input"][value="bar"]').
attr('checked')).toBeTruthy();
prop('checked')).toBe(true);
expect(_jQuery('input[name="0@test.input"][value="foo"]').
attr('checked')).toBeFalsy();
prop('checked')).toBe(false);
var chain = $root.dsl.input('test.input');
chain.select('foo');
expect(_jQuery('input[name="0@test.input"][value="bar"]').
attr('checked')).toBeFalsy();
prop('checked')).toBe(false);
expect(_jQuery('input[name="0@test.input"][value="foo"]').
attr('checked')).toBeTruthy();
prop('checked')).toBe(true);
});
it('should return error if radio button did not match', function() {

View file

@ -957,8 +957,8 @@ describe("widget", function(){
scope.selected = [];
scope.$digest();
expect(select.find('option').length).toEqual(2);
expect(jqLite(select.find('option')[0]).attr('selected')).toEqual(false);
expect(jqLite(select.find('option')[1]).attr('selected')).toEqual(false);
expect(select.find('option')[0].selected).toBe(false);
expect(select.find('option')[1].selected).toBe(false);
scope.selected.push(scope.values[1]);
scope.$digest();