microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.4.1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/test/common/extensionMessaging.test.ts

130lines · modeblame

347157a1Joshua Skelton10 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
df1e4c6fdigeff10 years ago4import {ExtensionMessage, MessagingChannel} from "../../common/extensionMessaging";
347157a1Joshua Skelton10 years ago5
df1e4c6fdigeff10 years ago6import {RemoteExtension} from "../../common/remoteExtension";
725cf712digeff10 years ago7
df1e4c6fdigeff10 years ago8import {InterProcessMessageSender} from "../../common/interProcessMessageSender";
76c41138digeff10 years ago9
347157a1Joshua Skelton10 years ago10import * as assert from "assert";
11import * as net from "net";
12import * as Q from "q";
13
8f09b17cJoshua Skelton10 years ago14let mockServer: net.Server;
15
347157a1Joshua Skelton10 years ago16suite("extensionMessaging", function() {
17suite("commonContext", function() {
d3950d7edigeff10 years ago18const projectRootPath = "/myPath";
19const port: string = new MessagingChannel(projectRootPath).getPath();
20
347157a1Joshua Skelton10 years ago21teardown(function() {
8f09b17cJoshua Skelton10 years ago22if (mockServer) {
23mockServer.close();
347157a1Joshua Skelton10 years ago24}
25});
26
27test("should successfully send a message", function(done: MochaDone) {
ad7eb7feJoshua Skelton10 years ago28let receivedMessage: ExtensionMessage;
29
8f09b17cJoshua Skelton10 years ago30mockServer = net.createServer(function(client: net.Socket): void {
347157a1Joshua Skelton10 years ago31mockServer.close();
32client.on("data", function(data: Buffer) {
8f09b17cJoshua Skelton10 years ago33const messageData: any = JSON.parse(data.toString("utf8"));
347157a1Joshua Skelton10 years ago34client.end();
35
ad7eb7feJoshua Skelton10 years ago36receivedMessage = messageData.message;
347157a1Joshua Skelton10 years ago37});
38});
39
40mockServer.on("error", done);
c1c16452Joshua Skelton10 years ago41mockServer.listen(port);
347157a1Joshua Skelton10 years ago42
c7f1165cdigeff10 years ago43const sender = RemoteExtension.atProjectRootPath(projectRootPath);
347157a1Joshua Skelton10 years ago44
45Q({})
46.then(function() {
725cf712digeff10 years ago47return sender.startPackager();
ad7eb7feJoshua Skelton10 years ago48})
49.then(function() {
50assert.equal(receivedMessage, ExtensionMessage.START_PACKAGER);
347157a1Joshua Skelton10 years ago51}).done(() => done(), done);
52});
53
54test("should successfully send a message with args", function(done: MochaDone) {
8f09b17cJoshua Skelton10 years ago55const args = ["android"];
ad7eb7feJoshua Skelton10 years ago56let receivedMessage: ExtensionMessage;
57let receivedArgs: any;
58
8f09b17cJoshua Skelton10 years ago59mockServer = net.createServer(function(client: net.Socket): void {
347157a1Joshua Skelton10 years ago60mockServer.close();
61client.on("data", function(data: Buffer) {
8f09b17cJoshua Skelton10 years ago62const messageData: any = JSON.parse(data.toString("utf8"));
347157a1Joshua Skelton10 years ago63client.end();
64
ad7eb7feJoshua Skelton10 years ago65receivedMessage = messageData.message;
66receivedArgs = messageData.args;
347157a1Joshua Skelton10 years ago67});
68});
69
70mockServer.on("error", done);
c1c16452Joshua Skelton10 years ago71mockServer.listen(port);
347157a1Joshua Skelton10 years ago72
c7f1165cdigeff10 years ago73const sender = RemoteExtension.atProjectRootPath(projectRootPath);
347157a1Joshua Skelton10 years ago74
75Q({})
76.then(function() {
725cf712digeff10 years ago77return sender.prewarmBundleCache(args[0]);
ad7eb7feJoshua Skelton10 years ago78})
79.then(function() {
80assert.equal(receivedMessage, ExtensionMessage.PREWARM_BUNDLE_CACHE);
81assert.deepEqual(receivedArgs, args);
347157a1Joshua Skelton10 years ago82}).done(() => done(), done);
83});
84
4b124a08Jimmy Thomson9 years ago85test("should reject on failed communication", function(done: MochaDone) {
86
87mockServer = net.createServer(function(client: net.Socket): void {
88mockServer.close();
89client.on("data", function(data: Buffer) {
90client.end("vscodereactnative-error-marker");
91});
92});
93
94mockServer.on("error", done);
95mockServer.listen(port);
96
97const sender = RemoteExtension.atProjectRootPath(projectRootPath);
98
99Q({})
100.then(function() {
101return sender.prewarmBundleCache("android");
102})
103.then(function() {
104assert(false, "sendMessage should reject on failed communication");
105},
106function(reason: any) {
107let expectedErrorMessage = "An error ocurred while handling message: PREWARM_BUNDLE_CACHE";
108assert.equal(reason.message, expectedErrorMessage);
109})
110.done(() => done(), done);
111});
112
347157a1Joshua Skelton10 years ago113test("should reject on socket error", function(done: MochaDone) {
725cf712digeff10 years ago114const sender = new InterProcessMessageSender(projectRootPath);
347157a1Joshua Skelton10 years ago115
116Q({})
117.then(function() {
118return sender.sendMessage(ExtensionMessage.PREWARM_BUNDLE_CACHE);
119})
120.then(function() {
15c3e378Joshua Skelton10 years ago121assert(false, "sendMessage should reject on socket error");
e9868794Joshua Skelton10 years ago122},
123function(reason: any) {
4b124a08Jimmy Thomson9 years ago124let expectedErrorMessage = "Unable to set up communication with VSCode react-native extension. Is this a react-native project, and have you made sure that the react-native npm package is installed at the root?";
347157a1Joshua Skelton10 years ago125assert.equal(reason.message, expectedErrorMessage);
126})
127.done(() => done(), done);
128});
129});
df1e4c6fdigeff10 years ago130});