262 lines
9.6 KiB
JavaScript
262 lines
9.6 KiB
JavaScript
/* eslint-env jasmine, jquery */
|
|
/* global loadFixtures */
|
|
|
|
'use strict';
|
|
|
|
describe('mobile', function() {
|
|
var select;
|
|
var multiple;
|
|
var oldUserAgent = window.navigator.userAgent;
|
|
|
|
function setUserAgent(window, userAgent) {
|
|
if (window.navigator.userAgent != userAgent) {
|
|
var userAgentProp = { get: function () { return userAgent; } };
|
|
try {
|
|
Object.defineProperty(window.navigator, 'userAgent', userAgentProp);
|
|
} catch (e) {
|
|
window.navigator = Object.create(navigator, {
|
|
userAgent: userAgentProp
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
describe('Single Selects', function () {
|
|
|
|
beforeEach(function() {
|
|
jasmine.getFixtures().fixturesPath = 'base/test/fixtures';
|
|
loadFixtures('basic.html');
|
|
|
|
select = $('#basic');
|
|
select.selectric();
|
|
});
|
|
|
|
afterEach(function() {
|
|
setUserAgent(window, oldUserAgent);
|
|
});
|
|
|
|
it('should not enabled on android', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19');
|
|
select.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on ipad', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10');
|
|
select.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on ipod', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3');
|
|
select.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on iphone', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
select.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should enabled on android', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19');
|
|
select.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on ipad', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10');
|
|
select.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on ipod', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3');
|
|
select.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on iphone', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
select.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should refresh the select after change', function () {
|
|
setUserAgent(window, 'Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19');
|
|
select.selectric({
|
|
disableOnMobile: false,
|
|
nativeOnMobile: true
|
|
});
|
|
var spy = spyOn(select.data('selectric'), 'refresh');
|
|
select.trigger('change');
|
|
expect(spy).toHaveBeenCalled();
|
|
});
|
|
|
|
describe('nativeOnMobile', function () {
|
|
beforeEach(function () {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
select.selectric({
|
|
disableOnMobile: false,
|
|
nativeOnMobile: true
|
|
});
|
|
});
|
|
|
|
afterEach(function() {
|
|
setUserAgent(window, oldUserAgent);
|
|
});
|
|
|
|
it('should add class `selectric-is-native`', function () {
|
|
expect($('.selectric-wrapper').find('.selectric-is-native').length).toBe(1);
|
|
});
|
|
|
|
it('should update the label', function () {
|
|
select.find('option').eq(2).prop('selected', true);
|
|
select.find('option').eq(3).prop('selected', false);
|
|
select.selectric('refresh');
|
|
expect($('.selectric-wrapper').find('.label').text()).toBe('Apple');
|
|
});
|
|
});
|
|
|
|
it('open() should return false on mobile', function () {
|
|
select.selectric();
|
|
spyOn(select.data('selectric').utils, 'isMobile').and.returnValue(true);
|
|
spyOn(select.data('selectric').options, 'nativeOnMobile').and.returnValue(true);
|
|
expect(select.data('selectric').open()).toBe(false);
|
|
});
|
|
|
|
});
|
|
|
|
describe('Multi Selects', function () {
|
|
|
|
beforeEach(function() {
|
|
jasmine.getFixtures().fixturesPath = 'base/test/fixtures';
|
|
loadFixtures('multiple.html');
|
|
|
|
multiple = $('#multiple');
|
|
multiple.selectric();
|
|
});
|
|
|
|
afterEach(function() {
|
|
setUserAgent(window, oldUserAgent);
|
|
});
|
|
|
|
it('should not enabled on android', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19');
|
|
multiple.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on ipad', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10');
|
|
multiple.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on ipod', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3');
|
|
multiple.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should not enabled on iphone', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
multiple.selectric({
|
|
disableOnMobile: true,
|
|
nativeOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(0);
|
|
});
|
|
|
|
it('should enabled on android', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19');
|
|
multiple.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on ipad', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10');
|
|
multiple.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on ipod', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3');
|
|
multiple.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('should enabled on iphone', function() {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
multiple.selectric({
|
|
disableOnMobile: false
|
|
});
|
|
expect($('.selectric-wrapper').length).toBe(1);
|
|
});
|
|
|
|
describe('nativeOnMobile', function () {
|
|
beforeEach(function () {
|
|
setUserAgent(window, 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3');
|
|
multiple.selectric({
|
|
disableOnMobile: false,
|
|
nativeOnMobile: true
|
|
});
|
|
});
|
|
|
|
it('should add class `selectric-is-native`', function () {
|
|
expect($('.selectric-wrapper').find('.selectric-is-native').length).toBe(1);
|
|
});
|
|
|
|
it('should update the label', function () {
|
|
multiple.find('option').eq(2).prop('selected', true);
|
|
multiple.find('option').eq(3).prop('selected', false);
|
|
multiple.selectric('refresh');
|
|
expect($('.selectric-wrapper').find('.label').text()).toBe('Cat');
|
|
});
|
|
|
|
it('should update the label with multiple selected values', function () {
|
|
multiple.find('option').eq(2).prop('selected', true);
|
|
multiple.find('option').eq(3).prop('selected', true);
|
|
multiple.selectric('refresh');
|
|
expect($('.selectric-wrapper').find('.label').text()).toBe('Cat, Dog');
|
|
});
|
|
});
|
|
});
|
|
});
|