-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(ionItem): make target attribute work properly
Closes #1521
- Loading branch information
Showing
4 changed files
with
203 additions
and
192 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
describe('ionItem directive', function() { | ||
beforeEach(module('ionic')); | ||
function setup(attrs, content) { | ||
var el; | ||
inject(function($rootScope, $compile) { | ||
el = angular.element('<ion-item '+(attrs||'')+'>').html(content || ''); | ||
el.data('$ionListController', {}); | ||
$compile(el)($rootScope); | ||
$rootScope.$apply(); | ||
}); | ||
return el; | ||
} | ||
|
||
it('should be simple item by default', function() { | ||
var el = setup('', '{{1}} <b>2</b>'); | ||
expect(el.html()).toBe('1 <b>2</b>'); | ||
expect(el.hasClass('item')).toBe(true); | ||
expect(el.hasClass('item-complex')).toBe(false); | ||
}); | ||
it('should be complex if ui-sref', function() { | ||
var el = setup('ui-sref="something"'); | ||
expect(el.hasClass('item item-complex')).toBe(true); | ||
expect(el.children()[0].tagName).toBe('A'); | ||
expect(el.children().hasClass('item-content')).toBe(true); | ||
}); | ||
['href', 'ng-href'].forEach(function(attr) { | ||
it('should be complex anchor if '+attr+' is defined', function() { | ||
var el = setup(attr+'="something/{{foo}}"'); | ||
expect(el.hasClass('item item-complex')).toBe(true); | ||
expect(el.children()[0].tagName).toBe('A'); | ||
expect(el.children().hasClass('item-content')).toBe(true); | ||
expect(el.children().attr('href')).toBe('something/'); | ||
el.scope().$apply('foo = 44'); | ||
expect(el.children().attr('href')).toBe('something/44'); | ||
}); | ||
}); | ||
it('complex item should have target self by default', function() { | ||
var el = setup('href="foo"'); | ||
expect(el.find('a').attr('target')).toBe('_self'); | ||
}); | ||
it('complex item should have target if specified', function() { | ||
var el = setup('href="foo" target="bar"'); | ||
expect(el.find('a').attr('target')).toBe('bar'); | ||
}); | ||
['ion-option-button','ion-reorder-button','ion-delete-button'].forEach(function(tag) { | ||
it('should be complex div if '+tag+' is found', function() { | ||
var el = setup('', tag); | ||
expect(el.hasClass('item item-complex')).toBe(true); | ||
expect(el.children()[0].tagName).toBe('DIV'); | ||
expect(el.children().hasClass('item-content')).toBe(true); | ||
expect(el.children().html()).toBe(tag); | ||
}); | ||
}); | ||
}); | ||
|
||
describe('ionDeleteButton directive', function() { | ||
beforeEach(module('ionic')); | ||
it('should have delete button', inject(function($compile, $rootScope) { | ||
var setSpy = jasmine.createSpy('setDeleteButton'); | ||
var el = angular.element('<ion-item><ion-delete-button></ion-delete-button></ion-item>'); | ||
el.data('$ionListController', { | ||
showDelete: function() { return false; } | ||
}); | ||
$compile(el)($rootScope.$new()); | ||
$rootScope.$apply(); | ||
|
||
var deleteContainer = angular.element(el[0].querySelector('.item-left-edit.item-delete.ng-hide')); | ||
expect(deleteContainer.length).toBe(1); | ||
expect(deleteContainer.children().hasClass('button icon button-icon')).toBe(true); | ||
})); | ||
it('should unhide if delete is shown', inject(function($compile, $rootScope) { | ||
var setSpy = jasmine.createSpy('setDeleteButton'); | ||
var el = angular.element('<ion-item><ion-delete-button></ion-delete-button></ion-item>'); | ||
el.data('$ionListController', { | ||
showDelete: function() { return true; } | ||
}); | ||
$compile(el)($rootScope.$new()); | ||
$rootScope.$apply(); | ||
|
||
var deleteContainer = angular.element(el[0].querySelector('.item-left-edit.item-delete')); | ||
expect(deleteContainer.length).toBe(1); | ||
expect(deleteContainer.hasClass('ng-hide')).toBe(false); | ||
})); | ||
}); | ||
|
||
describe('ionReorderButton directive', function() { | ||
beforeEach(module('ionic')); | ||
it('should have reorder button', inject(function($compile, $rootScope) { | ||
var setSpy = jasmine.createSpy('setReorderButton'); | ||
var el = angular.element('<ion-item><ion-reorder-button></ion-reorder-button></ion-item>'); | ||
el.data('$ionListController', { | ||
showReorder: function() { return false; } | ||
}); | ||
$compile(el)($rootScope.$new()); | ||
$rootScope.$apply(); | ||
|
||
var reorderContainer = angular.element(el[0].querySelector('.item-right-edit.item-reorder.ng-hide')); | ||
expect(reorderContainer.length).toBe(1); | ||
expect(reorderContainer.children().hasClass('button icon button-icon')).toBe(true); | ||
expect(reorderContainer.attr('data-prevent-scroll')).toBe('true'); | ||
expect(reorderContainer.children().attr('data-prevent-scroll')).toBe('true'); | ||
})); | ||
it('should remove ng-hide if reorder is already active', inject(function($compile, $rootScope) { | ||
var setSpy = jasmine.createSpy('setReorderButton'); | ||
var el = angular.element('<ion-item><ion-reorder-button></ion-reorder-button></ion-item>'); | ||
el.data('$ionListController', { | ||
showReorder: function() { return true; } | ||
}); | ||
$compile(el)($rootScope.$new()); | ||
$rootScope.$apply(); | ||
var reorderContainer = angular.element(el[0].querySelector('.item-right-edit.item-reorder')); | ||
expect(reorderContainer.length).toBe(1); | ||
expect(reorderContainer.hasClass('ng-hide')).toBe(false); | ||
})); | ||
}); | ||
|
||
describe('ionOptionButton directive', function() { | ||
beforeEach(module('ionic')); | ||
it('should have option button', inject(function($compile, $rootScope) { | ||
var setSpy = jasmine.createSpy('setOptionButton'); | ||
var el = angular.element('<ion-item><ion-option-button></ion-option-button></ion-item>'); | ||
el.data('$ionListController', { | ||
showDelete: function() { return false; } | ||
}); | ||
$compile(el)($rootScope.$new()); | ||
$rootScope.$apply(); | ||
|
||
var optionContainer = angular.element(el[0].querySelector('.item-options')); | ||
expect(optionContainer.length).toBe(1); | ||
expect(optionContainer.children().hasClass('button')).toBe(true); | ||
})); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.