From 91b42fc0ccc80f3c83e9f789b192bcdf2b117298 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 29 Dec 2015 12:41:38 -0800 Subject: [PATCH] [Mobile] Test DeviceClassifier --- .../mobile/test/DeviceClassifierSpec.js | 112 ++++++++++++++++++ platform/commonUI/mobile/test/suite.json | 1 + 2 files changed, 113 insertions(+) create mode 100644 platform/commonUI/mobile/test/DeviceClassifierSpec.js diff --git a/platform/commonUI/mobile/test/DeviceClassifierSpec.js b/platform/commonUI/mobile/test/DeviceClassifierSpec.js new file mode 100644 index 0000000000..8d1b9db11f --- /dev/null +++ b/platform/commonUI/mobile/test/DeviceClassifierSpec.js @@ -0,0 +1,112 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + + +define( + ["../src/DeviceClassifier", "../src/DeviceMatchers"], + function (DeviceClassifier, DeviceMatchers) { + "use strict"; + + var AGENT_SERVICE_METHODS = [ + 'isMobile', + 'isPhone', + 'isTablet', + 'isPortrait', + 'isLandscape', + 'isTouch' + ], + TEST_PERMUTATIONS = [ + [ 'isMobile', 'isPhone', 'isTouch', 'isPortrait' ], + [ 'isMobile', 'isPhone', 'isTouch', 'isLandscape' ], + [ 'isMobile', 'isTablet', 'isTouch', 'isPortrait' ], + [ 'isMobile', 'isTablet', 'isTouch', 'isLandscape' ], + [ 'isTouch' ], + [] + ]; + + describe("DeviceClassifier", function () { + var mockAgentService, + mockDocument, + mockBody; + + beforeEach(function () { + mockAgentService = jasmine.createSpyObj( + 'agentService', + AGENT_SERVICE_METHODS + ); + mockDocument = jasmine.createSpyObj( + '$document', + [ 'find' ] + ); + mockBody = jasmine.createSpyObj( + 'body', + [ 'addClass' ] + ); + mockDocument.find.andCallFake(function (sel) { + return sel === 'body' && mockBody; + }); + AGENT_SERVICE_METHODS.forEach(function (m) { + mockAgentService[m].andReturn(false); + }); + }); + + TEST_PERMUTATIONS.forEach(function (trueMethods) { + var summary = trueMethods.length === 0 ? + "device has no detected characteristics" : + "device " + (trueMethods.join(", ")); + + describe("when " + summary, function () { + var classifier; + + beforeEach(function () { + trueMethods.forEach(function (m) { + mockAgentService[m].andReturn(true); + }); + classifier = new DeviceClassifier( + mockAgentService, + mockDocument + ); + }); + + it("adds classes for matching, detected characteristics", function () { + Object.keys(DeviceMatchers).filter(function (m) { + return DeviceMatchers[m](mockAgentService); + }).forEach(function (key) { + expect(mockBody.addClass) + .toHaveBeenCalledWith(key); + }); + }); + + it("does not add classes for non-matching characteristics", function () { + Object.keys(DeviceMatchers).filter(function (m) { + return !DeviceMatchers[m](mockAgentService); + }).forEach(function (key) { + expect(mockBody.addClass) + .not.toHaveBeenCalledWith(key); + }); + }); + }); + }); + }); + } +); diff --git a/platform/commonUI/mobile/test/suite.json b/platform/commonUI/mobile/test/suite.json index b56625efb4..0265644c9c 100644 --- a/platform/commonUI/mobile/test/suite.json +++ b/platform/commonUI/mobile/test/suite.json @@ -1,4 +1,5 @@ [ "AgentService", + "DeviceClassifier", "MCTDevice" ]