You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.3 KiB
144 lines
4.3 KiB
$ = jQuery |
|
|
|
describe "Superfish", -> |
|
|
|
$menu = null |
|
$li_with_sub = null |
|
|
|
beforeEach -> |
|
$menu = $('ul.sf-menu') |
|
$li_with_sub = $menu.find('li:has(ul):first') |
|
$menu.superfish() |
|
|
|
afterEach -> |
|
$menu.superfish('destroy') |
|
|
|
it "should exist", -> |
|
expect($.fn.superfish).toBeDefined() |
|
|
|
it "should be chainable", -> |
|
$menu.superfish('destroy') |
|
expect($menu.superfish()).toBeMatchedBy 'ul' |
|
|
|
it "should store options", -> |
|
expect($menu.data('sfOptions') ).toBeDefined() |
|
|
|
|
|
describe "options", -> |
|
|
|
it "should have default options", -> |
|
options = $menu.data('sfOptions') |
|
expect(options.speed).toMatch 'normal' |
|
|
|
it "should allow default options to be overridden", -> |
|
$menu.superfish('destroy') |
|
$menu.superfish |
|
speed: 1000 |
|
options = $menu.data('sfOptions') |
|
expect(options.speed).toEqual 1000 |
|
|
|
|
|
describe "method access", -> |
|
|
|
it "'show' method should exist", -> |
|
expect($li_with_sub.superfish('show')).toBeDefined() |
|
|
|
it "'hide' method should exist", -> |
|
expect($li_with_sub.superfish('hide')).toBeDefined() |
|
|
|
it "'destroy' method should exist", -> |
|
expect($menu.superfish('destroy')).toBeDefined() |
|
$menu.superfish() |
|
|
|
it "should not allow access to private functions", -> |
|
expect( -> |
|
$menu.superfish('close') |
|
).toThrow new Error('Method close does not exist on jQuery.fn.superfish') |
|
|
|
it "should not throw an error when accessing a valid method", -> |
|
expect( -> |
|
$li_with_sub.superfish('show') |
|
).not.toThrow new Error('Method show does not exist on jQuery.fn.superfish') |
|
|
|
|
|
describe "'destroy' method", -> |
|
|
|
it "should handle multiple calls gracefully", -> |
|
$menu.superfish('destroy') |
|
expect( -> |
|
$menu.superfish('destroy') |
|
).not.toThrow new Error("Uncaught TypeError: Cannot read property 'sfTimer' of null") |
|
expect($menu.superfish('destroy')).toBeMatchedBy 'ul' |
|
|
|
|
|
describe "'show' method", -> |
|
it "should fail silently if Superfish is uninitialised", -> |
|
$menu.superfish('destroy') |
|
expect( $li_with_sub.superfish('show') ).toBeMatchedBy 'li' |
|
|
|
it "should cause child ul to be visible", -> |
|
$submenu = $li_with_sub.children('ul') |
|
expect($submenu).toBeHidden() |
|
expect($li_with_sub).not.toBeMatchedBy '.sfHover' |
|
$li_with_sub.superfish('show') |
|
expect($submenu).toBeVisible() |
|
expect($li_with_sub).toBeMatchedBy '.sfHover' |
|
|
|
|
|
describe "'hide' method", -> |
|
it "should fail silently if Superfish is uninitialised", -> |
|
$menu.superfish('destroy') |
|
expect( $li_with_sub.superfish('hide') ).toBeMatchedBy 'li' |
|
|
|
it "should cause child ul to be hidden", -> |
|
$submenu = $li_with_sub.children('ul') |
|
$li_with_sub.superfish('show') |
|
expect($li_with_sub).toBeMatchedBy '.sfHover' |
|
expect($submenu).toBeVisible() |
|
# do an instant hide for now until I figure out why .toBeHidden fails when animated |
|
$li_with_sub.superfish('hide', true) |
|
expect($submenu).toBeHidden() |
|
expect($li_with_sub).not.toBeMatchedBy '.sfHover' |
|
|
|
|
|
describe "initialisation", -> |
|
it "should fail silently if already initialised", -> |
|
$menu.superfish('destroy') |
|
init_count = 0 |
|
$.fn.superfish.defaults.onInit = -> init_count++ |
|
$menu.superfish().superfish() |
|
expect(init_count).toEqual 1 |
|
$.fn.superfish.defaults.onInit = $.noop |
|
|
|
it "should not remove sf-arrows class if already present in markup", -> |
|
$menu.superfish('destroy') |
|
$menu.addClass('sf-arrows') |
|
$menu.superfish() |
|
expect($('.sf-arrows').length).toEqual 1 |
|
|
|
it "should be able to store the path to the 'current' menu item (pathClass)", -> |
|
expect($menu.data('sfOptions').$path.length).toEqual 0 |
|
$menu.superfish('destroy') |
|
$menu.superfish |
|
pathClass: 'current' |
|
expect($menu.data('sfOptions').$path.length).toEqual 1 |
|
|
|
|
|
describe "pathClass feature", -> |
|
it "should show 'current' submenu", -> |
|
$menu.superfish('destroy') |
|
$menu.superfish |
|
pathClass: 'current' |
|
expect($li_with_sub).toBeMatchedBy '.sfHover' |
|
|
|
|
|
describe "callbacks", -> |
|
|
|
describe "onDestroy", -> |
|
it "should fire", -> |
|
destroy_count = 0 |
|
$menu.superfish('destroy') |
|
$menu.superfish |
|
onDestroy: -> destroy_count++ |
|
$menu.superfish('destroy') |
|
expect(destroy_count).toEqual 1
|
|
|