UNPKG

website-page-frame

Version:

This library provides a way to allow browser based programs to have cross parent to child window communication through code.

305 lines (161 loc) 12.5 kB
describe("WebsitePageFrameClient Functional Test Suite", function() { beforeAll(function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; }); beforeEach(function() { var electronAppScriptPath = __dirname + "/../.."; this.app = this.setupMockSpectronApp(electronAppScriptPath); return this.app.start(); }); afterEach(function() { if (this.app && this.app.isRunning()) { return this.app.stop(); } }); it("Navigation Test", function() { var iframeInitialURL = "http://localhost:8080/navigation-test/index.html"; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL).executeAsync(this.waitUntilConnectionReady) .execute(function() { var headingExtractionActionToBeInvoked = new websitePageFrame.Action([], [], function() { postMessageDataReturned.homePageHeading = document.getElementById("pageHeading").textContent; }); window.messageBuilder = new websitePageFrame.WebsitePageFrameMessageBuilder(); messageBuilder.attachAction(headingExtractionActionToBeInvoked); websitePageFrameClient.sendMessage( messageBuilder.finishBuild() ); }).executeAsync(this.waitUntilWebsitePageFrameResponseReturned).execute(function() { return websitePageFrameClient.getResponse().homePageHeading; }).then(function(homePageHeading) { homePageHeading = homePageHeading.value; expect(homePageHeading.trim()).toBe("Home"); }).execute(function() { var navigatonActionToBeInvoked = new websitePageFrame.Action([], [], function() { window.location.assign("http://localhost:8080/navigation-test/about.html"); }); messageBuilder.attachAction(navigatonActionToBeInvoked); websitePageFrameClient.sendMessage( messageBuilder.finishBuild() ); }).executeAsync(this.waitUntilConnectionReady).execute(function() { var headingExtractionAction = new websitePageFrame.Action([], [], function() { postMessageDataReturned.aboutPageHeading = document.getElementById("pageHeading").textContent; }); messageBuilder.attachAction(headingExtractionAction); websitePageFrameClient.sendMessage(messageBuilder.finishBuild()); }).executeAsync(this.waitUntilWebsitePageFrameResponseReturned).execute(function() { return websitePageFrameClient.getResponse().aboutPageHeading; }).then(function(aboutPageHeading) { aboutPageHeading = aboutPageHeading.value; expect(aboutPageHeading.trim()).toBe("About"); }); }); it("Communication Test", function() { var iframeInitialURL = "http://localhost:8080/communications-test/index.html"; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL) .executeAsync(this.waitUntilConnectionReady).execute(function () { var actionToBeInvoked = new websitePageFrame.Action([], [], function() { document.getElementById("heading").textContent = "HelloWorld"; postMessageDataReturned.headingChanged = document.getElementById("heading").textContent; }); var messageBuilder = new websitePageFrame.WebsitePageFrameMessageBuilder(); messageBuilder.attachAction(actionToBeInvoked); websitePageFrameClient.sendMessage(messageBuilder.finishBuild()); }).executeAsync(this.waitUntilWebsitePageFrameResponseReturned).execute(function() { return websitePageFrameClient.getResponse(); }).then(function(messageResponse) { messageResponse = messageResponse.value; expect(messageResponse.ping.toLowerCase()).toEqual("pong"); expect(messageResponse.messageSignature).toBeGreaterThanOrEqual(0); expect(messageResponse.headingChanged).toEqual("HelloWorld"); }); }); it("Response Timeout Test", function() { var iframeInitialURL = "http://localhost:8080/communications-test/index.html"; var responseTimeoutMilliseconds = 2000; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL, null, responseTimeoutMilliseconds) .executeAsync(this.waitUntilConnectionReady) .execute(function() { var actionToBeInvoked = new websitePageFrame.Action([], [], function() { var waitUntilCurrentSecondsEqualToOrOver = ((new Date()).getSeconds() + 3); while ( (new Date()).getSeconds() < waitUntilCurrentSecondsEqualToOrOver); }); var messageBuilder = new websitePageFrame.WebsitePageFrameMessageBuilder(); messageBuilder.attachAction(actionToBeInvoked); var messageToBeSent = messageBuilder.finishBuild(); websitePageFrameClient.sendMessage(messageToBeSent); }).executeAsync(function(finishedWaitingForResponseTimeout) { setTimeout(function() { finishedWaitingForResponseTimeout({ response: websitePageFrameClient.getResponse(), messageSignature: websitePageFrameClient.getPreviousMessageSignature() }); }, 3000); }).then(function(expectedResults) { expectedResults = expectedResults.value; expect(expectedResults.messageSignature).toBeNull(); expect(expectedResults.response).toBeNull(); }); }); it("Send Message wait for Response Test", function() { var iframeInitialURL = "http://localhost:8080/communications-test/index.html"; var responseTimeoutMilliseconds = 20000; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL, null, responseTimeoutMilliseconds) .executeAsync(this.waitUntilConnectionReady) .execute(function() { var actionToBeInvokedUntilResponseTimeout = new websitePageFrame.Action([], [], function() { }); var websitePageFrameMessageBuilder = new websitePageFrame.WebsitePageFrameMessageBuilder(); websitePageFrameMessageBuilder.attachAction(actionToBeInvokedUntilResponseTimeout); var firstMessageSent = websitePageFrameMessageBuilder.finishBuild(); websitePageFrameClient.sendMessage(firstMessageSent); try { websitePageFrameClient.sendMessage(websitePageFrameMessageBuilder.finishBuild()); } catch(error) { console.log(error); } return { "expectedMessageSignature" : firstMessageSent.getMessageSignature(), "previousMessageSignature": websitePageFrameClient.getPreviousMessageSignature() }; }).then(function(specTestResults) { specTestResults = specTestResults.value; expect(specTestResults.previousMessageSignature).toBe(specTestResults.expectedMessageSignature); }); }); it("Handling unexpected response returned WebsitePageFrameClient Test", function() { var iframeInitialURL = "http://localhost:8080/unexpected-message-response/index.html"; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL).executeAsync(this.waitUntilConnectionReady) .execute(function() { var expectedCurrentWebsitePageFrameClientResponse = websitePageFrameClient.getResponse(); }).then(function(expectedCurrentWebsitePageFrameClientResponse) { expectedCurrentWebsitePageFrameClientResponse = expectedCurrentWebsitePageFrameClientResponse.value; expect(expectedCurrentWebsitePageFrameClientResponse).toBeNull(); }); }); it("Test previous message sent response timeout does not block next message response", function() { var iframeInitialURL = "http://localhost:8080/default/index.html"; var responseTimeoutMilliseconds = 4000; return this.app.client.execute(this.setupWindowWebsitePageFrameClient, iframeInitialURL, null, responseTimeoutMilliseconds).executeAsync(this.waitUntilConnectionReady) .execute(function() { var firstMessageActionToBeExecuted = new websitePageFrame.Action([], [], function() {}); window.messageBuilder = new websitePageFrame.WebsitePageFrameMessageBuilder(); messageBuilder.attachAction(firstMessageActionToBeExecuted); websitePageFrameClient.sendMessage( messageBuilder.finishBuild() ); }).executeAsync(function (finishedWaitingXSecondsToSendSecondMessage) { var secondMessageActionToBeExecuted = new websitePageFrame.Action([], [], function() { postMessageDataReturned.secondMessageValueExpected = 21; var waitUntilFirstResponseTimeoutTriggered = ((new Date()).getSeconds() + 2); console.log(waitUntilFirstResponseTimeoutTriggered); while ( ((new Date()).getSeconds()) < waitUntilFirstResponseTimeoutTriggered); console.log(postMessageDataReturned); }); messageBuilder.attachAction(secondMessageActionToBeExecuted); setTimeout(function() { websitePageFrameClient.sendMessage( messageBuilder.finishBuild() ); finishedWaitingXSecondsToSendSecondMessage(); }.bind(this), 3000); }).executeAsync(function(waitUntilSecondMessageTimeout) { setTimeout(function() { waitUntilSecondMessageTimeout(); }.bind(this), 4000); }).execute(function() { return this.websitePageFrameClient.getResponse(); }).then(function(websitePageFrameClientResponse) { var expectedSecondMessageResponse = websitePageFrameClientResponse.value; expect(expectedSecondMessageResponse.secondMessageValueExpected).toBe(21); }); }); });