From ae4313253cc9769f4295fbd433614b64fe7359c3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 18 Sep 2015 16:47:50 -0700 Subject: [PATCH] [Mobile] Test mct-device --- .../commonUI/mobile/test/MCTDeviceSpec.js | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/platform/commonUI/mobile/test/MCTDeviceSpec.js b/platform/commonUI/mobile/test/MCTDeviceSpec.js index 3b9bf9dcff..7396c704d7 100644 --- a/platform/commonUI/mobile/test/MCTDeviceSpec.js +++ b/platform/commonUI/mobile/test/MCTDeviceSpec.js @@ -25,5 +25,141 @@ define( ['../src/MCTDevice'], function (MCTDevice) { "use strict"; + + var JQLITE_METHODS = [ 'parent', 'append' ]; + + describe("The mct-device directive", function () { + var mockAgentService, + mockTransclude, + mockElement, + mockParent, + mockClone, + testAttrs, + directive; + + function link() { + directive.link(null, mockElement, testAttrs, null, mockTransclude); + } + + beforeEach(function () { + mockAgentService = jasmine.createSpyObj( + "agentService", + [ "isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape" ] + ); + mockTransclude = jasmine.createSpy("$transclude"); + mockElement = jasmine.createSpyObj(name, JQLITE_METHODS); + mockParent = jasmine.createSpyObj(name, JQLITE_METHODS); + mockClone = jasmine.createSpyObj(name, JQLITE_METHODS); + + mockElement.parent.andReturn(mockParent); + + mockTransclude.andCallFake(function (fn) { + fn(mockClone); + }); + + // Look desktop-like by default + mockAgentService.isLandscape.andReturn(true); + + testAttrs = {}; + + directive = new MCTDevice(mockAgentService); + }); + + it("is applicable at the attribute level", function () { + expect(directive.restrict).toEqual("A"); + }); + + it("transcludes at the elmeent level", function () { + expect(directive.transclude).toEqual('element'); + }); + + it("has a greater priority number than ng-if", function () { + expect(directive.priority > 600).toBeTruthy(); + }); + + it("restricts element inclusion for mobile devices", function () { + testAttrs.mctDevice = "mobile"; + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isMobile.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("restricts element inclusion for tablet devices", function () { + testAttrs.mctDevice = "tablet"; + mockAgentService.isMobile.andReturn(true); + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isTablet.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("restricts element inclusion for phone devices", function () { + testAttrs.mctDevice = "phone"; + mockAgentService.isMobile.andReturn(true); + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isPhone.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("restricts element inclusion for desktop devices", function () { + testAttrs.mctDevice = "desktop"; + mockAgentService.isMobile.andReturn(true); + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isMobile.andReturn(false); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("restricts element inclusion for portrait orientation", function () { + testAttrs.mctDevice = "portrait"; + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isPortrait.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("restricts element inclusion for landscape orientation", function () { + testAttrs.mctDevice = "landscape"; + mockAgentService.isLandscape.andReturn(false); + mockAgentService.isPortrait.andReturn(true); + link(); + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isLandscape.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + + it("allows multiple device characteristics to be requested", function () { + // Won't try to test every permutation here, just + // make sure the multi-characteristic feature has support. + testAttrs.mctDevice = "portrait mobile"; + link(); + // Neither portrait nor mobile, not called + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isPortrait.andReturn(true); + link(); + + // Was portrait, but not mobile, so no + expect(mockParent.append).not.toHaveBeenCalled(); + + mockAgentService.isMobile.andReturn(true); + link(); + expect(mockParent.append).toHaveBeenCalledWith(mockClone); + }); + }); } );