MIF_E31212289/public/library/selectric/test/mobile.spec.js

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');
});
});
});
});