microsoft/vscode-react-native
Publicmirrored from https://github.com/microsoft/vscode-react-nativeAvailable
src/test/common/extensionMessaging.test.ts
102lines · modeblame
347157a1Joshua Skelton10 years ago | 1 | // Copyright (c) Microsoft Corporation. All rights reserved. |
| 2 | // Licensed under the MIT license. See LICENSE file in the project root for details. | |
| 3 | | |
| 4 | import {HostPlatform} from "../../common/hostPlatform"; | |
| 5 | | |
| 6 | import { | |
| 7 | ExtensionMessage, | |
cdf34447digeff10 years ago | 8 | ExtensionMessageSender, |
347157a1Joshua Skelton10 years ago | 9 | } from "../../common/extensionMessaging"; |
| 10 | | |
| 11 | import * as assert from "assert"; | |
| 12 | import * as net from "net"; | |
| 13 | import * as Q from "q"; | |
| 14 | | |
8f09b17cJoshua Skelton10 years ago | 15 | let mockServer: net.Server; |
| 16 | | |
347157a1Joshua Skelton10 years ago | 17 | suite("extensionMessaging", function() { |
| 18 | suite("commonContext", function() { | |
| 19 | teardown(function() { | |
8f09b17cJoshua Skelton10 years ago | 20 | if (mockServer) { |
| 21 | mockServer.close(); | |
347157a1Joshua Skelton10 years ago | 22 | } |
| 23 | }); | |
| 24 | | |
| 25 | test("should successfully send a message", function(done: MochaDone) { | |
8f09b17cJoshua Skelton10 years ago | 26 | const port: string = HostPlatform.getExtensionPipePath(); |
ad7eb7feJoshua Skelton10 years ago | 27 | let receivedMessage: ExtensionMessage; |
| 28 | | |
8f09b17cJoshua Skelton10 years ago | 29 | mockServer = net.createServer(function(client: net.Socket): void { |
347157a1Joshua Skelton10 years ago | 30 | mockServer.close(); |
| 31 | client.on("data", function(data: Buffer) { | |
8f09b17cJoshua Skelton10 years ago | 32 | const messageData: any = JSON.parse(data.toString("utf8")); |
347157a1Joshua Skelton10 years ago | 33 | client.end(); |
| 34 | | |
ad7eb7feJoshua Skelton10 years ago | 35 | receivedMessage = messageData.message; |
347157a1Joshua Skelton10 years ago | 36 | }); |
| 37 | }); | |
| 38 | | |
| 39 | mockServer.on("error", done); | |
c1c16452Joshua Skelton10 years ago | 40 | mockServer.listen(port); |
347157a1Joshua Skelton10 years ago | 41 | |
| 42 | const sender = new ExtensionMessageSender(); | |
| 43 | | |
| 44 | Q({}) | |
| 45 | .then(function() { | |
| 46 | return sender.sendMessage(ExtensionMessage.START_PACKAGER); | |
ad7eb7feJoshua Skelton10 years ago | 47 | }) |
| 48 | .then(function() { | |
| 49 | assert.equal(receivedMessage, ExtensionMessage.START_PACKAGER); | |
347157a1Joshua Skelton10 years ago | 50 | }).done(() => done(), done); |
| 51 | }); | |
| 52 | | |
| 53 | test("should successfully send a message with args", function(done: MochaDone) { | |
8f09b17cJoshua Skelton10 years ago | 54 | const port: string = HostPlatform.getExtensionPipePath(); |
| 55 | const args = ["android"]; | |
ad7eb7feJoshua Skelton10 years ago | 56 | let receivedMessage: ExtensionMessage; |
| 57 | let receivedArgs: any; | |
| 58 | | |
8f09b17cJoshua Skelton10 years ago | 59 | mockServer = net.createServer(function(client: net.Socket): void { |
347157a1Joshua Skelton10 years ago | 60 | mockServer.close(); |
| 61 | client.on("data", function(data: Buffer) { | |
8f09b17cJoshua Skelton10 years ago | 62 | const messageData: any = JSON.parse(data.toString("utf8")); |
347157a1Joshua Skelton10 years ago | 63 | client.end(); |
| 64 | | |
ad7eb7feJoshua Skelton10 years ago | 65 | receivedMessage = messageData.message; |
| 66 | receivedArgs = messageData.args; | |
347157a1Joshua Skelton10 years ago | 67 | }); |
| 68 | }); | |
| 69 | | |
| 70 | mockServer.on("error", done); | |
c1c16452Joshua Skelton10 years ago | 71 | mockServer.listen(port); |
347157a1Joshua Skelton10 years ago | 72 | |
| 73 | const sender = new ExtensionMessageSender(); | |
| 74 | | |
| 75 | Q({}) | |
| 76 | .then(function() { | |
| 77 | return sender.sendMessage(ExtensionMessage.PREWARM_BUNDLE_CACHE, args); | |
ad7eb7feJoshua Skelton10 years ago | 78 | }) |
| 79 | .then(function() { | |
| 80 | assert.equal(receivedMessage, ExtensionMessage.PREWARM_BUNDLE_CACHE); | |
| 81 | assert.deepEqual(receivedArgs, args); | |
347157a1Joshua Skelton10 years ago | 82 | }).done(() => done(), done); |
| 83 | }); | |
| 84 | | |
| 85 | test("should reject on socket error", function(done: MochaDone) { | |
| 86 | const sender = new ExtensionMessageSender(); | |
| 87 | | |
| 88 | Q({}) | |
| 89 | .then(function() { | |
| 90 | return sender.sendMessage(ExtensionMessage.PREWARM_BUNDLE_CACHE); | |
| 91 | }) | |
| 92 | .then(function() { | |
15c3e378Joshua Skelton10 years ago | 93 | assert(false, "sendMessage should reject on socket error"); |
e9868794Joshua Skelton10 years ago | 94 | }, |
| 95 | function(reason: any) { | |
347157a1Joshua Skelton10 years ago | 96 | let expectedErrorMessage = "An error ocurred while handling message: PREWARM_BUNDLE_CACHE"; |
| 97 | assert.equal(reason.message, expectedErrorMessage); | |
| 98 | }) | |
| 99 | .done(() => done(), done); | |
| 100 | }); | |
| 101 | }); | |
| 102 | }); |