microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
7b48f26eb8caae7ed9cc1a09249195dfed76fa76

Branches

Tags

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

Clone

HTTPS

Download ZIP

test/common/projectVersionHelper.test.ts

261lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import { ProjectVersionHelper, REACT_NATIVE_PACKAGES } from "../../src/common/projectVersionHelper";
5import { RN_VERSION_ERRORS } from "../../src/common/error/versionError";
6import { Node } from "../../src/common/node/node";
7
8import assert = require("assert");
9import * as path from "path";
10import * as fs from "fs";
11import { ParsedPackage } from "../../src/common/reactNativeProjectHelper";
12
13suite("projectVersionHelper", function () {
14 const sampleReactNativeProjectDir = path.join(
15 __dirname,
16 "..",
17 "resources",
18 "sampleReactNativeProject",
19 );
20
21 const nodeModulesRoot: string = sampleReactNativeProjectDir;
22
23 test("getReactNativeVersionsFromProjectPackage should return object containing version strings if 'version' field is found in project's package.json file", async () => {
24 let additionalPackages: ParsedPackage[] = [];
25 additionalPackages.push(REACT_NATIVE_PACKAGES.REACT_NATIVE_WINDOWS);
26 const versions = await ProjectVersionHelper.getReactNativeVersionsFromProjectPackage(
27 sampleReactNativeProjectDir,
28 additionalPackages,
29 );
30 assert.strictEqual(versions.reactNativeVersion, "0.65.0");
31 assert.strictEqual(versions.reactNativeWindowsVersion, "0.65.9");
32 });
33
34 suite("getReactNativeVersionsFromProjectWithIncorrectPackageJson", () => {
35 const packageJsonPath = path.join(sampleReactNativeProjectDir, "package.json");
36 const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
37 const versionObj = {
38 devDependencies: {},
39 };
40
41 suiteSetup(() => {
42 fs.writeFileSync(packageJsonPath, JSON.stringify(versionObj, null, 2));
43 });
44
45 suiteTeardown(() => {
46 fs.writeFileSync(packageJsonPath, packageJsonContent);
47 });
48
49 test("getReactNativeVersionsFromProjectPackage should return containing empty version strings if 'version' field isn't found in project's package.json file", async () => {
50 let additionalPackages: ParsedPackage[] = [];
51 additionalPackages.push(REACT_NATIVE_PACKAGES.REACT_NATIVE_WINDOWS);
52 const versions = await ProjectVersionHelper.getReactNativeVersionsFromProjectPackage(
53 sampleReactNativeProjectDir,
54 additionalPackages,
55 );
56 assert.strictEqual(
57 versions.reactNativeVersion,
58 "errorMissingDependenciesFieldsInProjectPackageFile",
59 );
60 assert.strictEqual(
61 versions.reactNativeWindowsVersion,
62 "errorMissingDependenciesFieldsInProjectPackageFile",
63 );
64 });
65 });
66
67 suite("getReactNativeVersionsFromNodeModules", () => {
68 const reactNativePackageDir = path.join(
69 sampleReactNativeProjectDir,
70 "node_modules",
71 "react-native",
72 );
73 const reactNativeWindowsPackageDir = path.join(
74 sampleReactNativeProjectDir,
75 "node_modules",
76 "react-native-windows",
77 );
78 const fsHelper = new Node.FileSystem();
79
80 suiteSetup(() => {
81 fsHelper.makeDirectoryRecursiveSync(reactNativePackageDir);
82 fsHelper.makeDirectoryRecursiveSync(reactNativeWindowsPackageDir);
83 });
84
85 suiteTeardown(() => {
86 fsHelper.removePathRecursivelySync(
87 path.join(sampleReactNativeProjectDir, "node_modules"),
88 );
89 });
90
91 test("getReactNativePackageVersionsFromNodeModules should return object containing packages versions if 'version' field is found in react-native and react-native-windows packages package.json files from node_modules", async () => {
92 const reactNativeVersionObj = {
93 version: "^0.20.0",
94 };
95
96 const reactNativeWindowsVersionObj = {
97 version: "^0.60.0-vnext.68",
98 };
99
100 fs.writeFileSync(
101 path.join(reactNativePackageDir, "package.json"),
102 JSON.stringify(reactNativeVersionObj, null, 2),
103 );
104 fs.writeFileSync(
105 path.join(reactNativeWindowsPackageDir, "package.json"),
106 JSON.stringify(reactNativeWindowsVersionObj, null, 2),
107 );
108
109 let additionalPackages: ParsedPackage[] = [];
110 additionalPackages.push(REACT_NATIVE_PACKAGES.REACT_NATIVE_WINDOWS);
111 const versions =
112 await ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(
113 nodeModulesRoot,
114 additionalPackages,
115 );
116 assert.strictEqual(versions.reactNativeVersion, "0.20.0");
117 assert.strictEqual(versions.reactNativeWindowsVersion, "0.60.0-vnext.68");
118 });
119
120 test("getReactNativePackageVersionsFromNodeModules should return object containing strings if version field is an URL", async () => {
121 const versionObj = {
122 version: "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
123 };
124
125 fs.writeFileSync(
126 path.join(reactNativePackageDir, "package.json"),
127 JSON.stringify(versionObj, null, 2),
128 );
129
130 const versions =
131 await ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(
132 nodeModulesRoot,
133 );
134 assert.strictEqual(versions.reactNativeVersion, "SemverInvalid: URL");
135 });
136 });
137
138 test("getReactNativePackageVersionsFromNodeModules should throw ReactNativePackageIsNotInstalled error if the package is not installed", () => {
139 return ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(
140 nodeModulesRoot,
141 ).catch(error => {
142 assert.strictEqual(error.errorCode, 606);
143 });
144 });
145
146 test("isVersionError should return true if a version string contains an error substring", (done: Mocha.Done) => {
147 assert.strictEqual(
148 ProjectVersionHelper.isVersionError(
149 RN_VERSION_ERRORS.MISSING_DEPENDENCIES_FIELDS_IN_PROJECT_PACKAGE_FILE,
150 ),
151 true,
152 );
153 assert.strictEqual(
154 ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.MISSING_PACKAGE_IN_NODE_MODULES),
155 true,
156 );
157 assert.strictEqual(
158 ProjectVersionHelper.isVersionError(
159 RN_VERSION_ERRORS.MISSING_DEPENDENCY_IN_PROJECT_PACKAGE_FILE,
160 ),
161 true,
162 );
163 assert.strictEqual(
164 ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.UNKNOWN_ERROR),
165 true,
166 );
167 assert.strictEqual(ProjectVersionHelper.isVersionError("someError"), true);
168 assert.strictEqual(ProjectVersionHelper.isVersionError("ERRORSTRING"), true);
169
170 done();
171 });
172
173 test("isVersionError should return false if a version string doesn't contain an error substring", (done: Mocha.Done) => {
174 assert.strictEqual(ProjectVersionHelper.isVersionError("^0.60.0-vnext.68"), false);
175 assert.strictEqual(
176 ProjectVersionHelper.isVersionError(
177 "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
178 ),
179 false,
180 );
181 assert.strictEqual(ProjectVersionHelper.isVersionError("SemverInvalid"), false);
182 assert.strictEqual(ProjectVersionHelper.isVersionError("0.61.0"), false);
183 assert.strictEqual(ProjectVersionHelper.isVersionError("SemverInvalid: URL"), false);
184 assert.strictEqual(ProjectVersionHelper.isVersionError("*"), false);
185
186 done();
187 });
188
189 test("processVersion should return semver valid version strings or correct error strings", (done: Mocha.Done) => {
190 assert.strictEqual(
191 ProjectVersionHelper.processVersion("^0.60.0-vnext.68", false),
192 "0.60.0-vnext.68",
193 );
194 assert.strictEqual(
195 ProjectVersionHelper.processVersion("=v0.60.0-vnext.68", false),
196 "0.60.0-vnext.68",
197 );
198 assert.strictEqual(
199 ProjectVersionHelper.processVersion("1.0.0 - 2.9999.9999", false),
200 "SemverInvalid",
201 );
202 assert.strictEqual(ProjectVersionHelper.processVersion("latest", false), "SemverInvalid");
203 assert.strictEqual(ProjectVersionHelper.processVersion("~1.2", false), "SemverInvalid");
204 assert.strictEqual(ProjectVersionHelper.processVersion("2.x", false), "SemverInvalid");
205 assert.strictEqual(ProjectVersionHelper.processVersion(">=1.0.2", false), "1.0.2");
206 assert.strictEqual(ProjectVersionHelper.processVersion("<3.0.0", false), "3.0.0");
207
208 assert.strictEqual(ProjectVersionHelper.processVersion("0.61.0-rc.0"), "0.61.0");
209 assert.strictEqual(ProjectVersionHelper.processVersion("~1.2.3-beta.1"), "1.2.3");
210 assert.strictEqual(ProjectVersionHelper.processVersion("~0.61.3-dev"), "0.61.3");
211 assert.strictEqual(ProjectVersionHelper.processVersion("v0.61.3-dev"), "0.61.3");
212 assert.strictEqual(ProjectVersionHelper.processVersion("^0.61.2.0"), "0.61.2");
213 assert.strictEqual(ProjectVersionHelper.processVersion("0.61.3"), "0.61.3");
214
215 assert.strictEqual(
216 ProjectVersionHelper.processVersion(
217 "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
218 ),
219 "SemverInvalid: URL",
220 );
221 assert.strictEqual(
222 ProjectVersionHelper.processVersion(
223 "/github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
224 ),
225 "35.0.0",
226 );
227 assert.strictEqual(
228 ProjectVersionHelper.processVersion("git+https://git@github.com/test/test.git"),
229 "SemverInvalid: URL",
230 );
231 assert.strictEqual(
232 ProjectVersionHelper.processVersion("/github.com/expo/react-native/archive/sdk"),
233 "SemverInvalid",
234 );
235 assert.strictEqual(
236 ProjectVersionHelper.processVersion("qwertyuiop[]asdfghjk"),
237 "SemverInvalid",
238 );
239 assert.strictEqual(
240 ProjectVersionHelper.processVersion("/Users/test/Data"),
241 "SemverInvalid",
242 );
243 assert.strictEqual(
244 ProjectVersionHelper.processVersion("@#.str?/4568-7468/.fd"),
245 "4568.0.0",
246 );
247 assert.strictEqual(ProjectVersionHelper.processVersion("^str.0.61.str.2"), "0.61.0");
248 assert.strictEqual(ProjectVersionHelper.processVersion("qwert 1 asdf"), "1.0.0");
249 assert.strictEqual(ProjectVersionHelper.processVersion("^0.str.str.2"), "0.0.0");
250 assert.strictEqual(ProjectVersionHelper.processVersion(""), "SemverInvalid");
251
252 assert.strictEqual(ProjectVersionHelper.processVersion("1.0.x"), "1.0.0");
253 assert.strictEqual(ProjectVersionHelper.processVersion("*.0.*"), "0.0.0");
254 assert.strictEqual(ProjectVersionHelper.processVersion("~1.*"), "1.0.0");
255 assert.strictEqual(ProjectVersionHelper.processVersion("1.0"), "1.0.0");
256 assert.strictEqual(ProjectVersionHelper.processVersion("~1"), "1.0.0");
257 assert.strictEqual(ProjectVersionHelper.processVersion("*"), "SemverInvalid");
258
259 done();
260 });
261});
262