microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
b2b5d016a126b337e01405c6006a069da028e0bf

Branches

Tags

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

Clone

HTTPS

Download ZIP

test/common/projectVersionHelper.test.ts

165lines · 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 } from "../../src/common/projectVersionHelper";
5import { RN_VERSION_ERRORS } from "../../src/common/error/versionError";
6import { Node } from "../../src/common/node/node";
7
8import * as assert from "assert";
9import * as path from "path";
10import * as fs from "fs";
11
12suite("projectVersionHelper", function() {
13
14 const sampleReactNative022ProjectDir = path.join(__dirname, "..", "resources", "sampleReactNative022Project");
15
16 test("getReactNativeVersionsFromProjectPackage should return object containing version strings if 'version' field is found in project's package.json file", (done: MochaDone) => {
17 ProjectVersionHelper.getReactNativeVersionsFromProjectPackage(sampleReactNative022ProjectDir, true)
18 .then(versions => {
19 assert.equal(versions.reactNativeVersion, "0.22.2");
20 assert.equal(versions.reactNativeWindowsVersion, "0.60.0-vnext.68");
21 }).done(() => done(), done);
22 });
23
24 suite("getReactNativeVersionsFromProjectWithIncorrectPackageJson", function() {
25
26 const packageJsonPath = path.join(sampleReactNative022ProjectDir, "package.json");
27 const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
28 const versionObj = {
29 "devDependencies": { },
30 };
31
32 suiteSetup(() => {
33 fs.writeFileSync(packageJsonPath, JSON.stringify(versionObj, null, 2));
34 });
35
36 suiteTeardown(() => {
37 fs.writeFileSync(packageJsonPath, packageJsonContent);
38 });
39
40 test("getReactNativeVersionsFromProjectPackage should return containing empty version strings if 'version' field isn't found in project's package.json file", (done: MochaDone) => {
41 ProjectVersionHelper.getReactNativeVersionsFromProjectPackage(sampleReactNative022ProjectDir, true)
42 .then(versions => {
43 assert.equal(versions.reactNativeVersion, "errorMissingDependenciesFieldsInProjectPackageFile");
44 assert.equal(versions.reactNativeWindowsVersion, "errorMissingDependenciesFieldsInProjectPackageFile");
45 }).done(() => done(), done);
46 });
47 });
48
49 suite("getReactNativeVersionsFromNodeModules", function () {
50
51 const reactNativePackageDir = path.join(sampleReactNative022ProjectDir, "node_modules", "react-native");
52 const reactNativeWindowsPackageDir = path.join(sampleReactNative022ProjectDir, "node_modules", "react-native-windows");
53 const fsHelper = new Node.FileSystem();
54
55 suiteSetup(() => {
56 fsHelper.makeDirectoryRecursiveSync(reactNativePackageDir);
57 fsHelper.makeDirectoryRecursiveSync(reactNativeWindowsPackageDir);
58 });
59
60 suiteTeardown(() => {
61 fsHelper.removePathRecursivelySync(path.join(sampleReactNative022ProjectDir, "node_modules"));
62 });
63
64 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", (done: MochaDone) => {
65 const reactNativeVersionObj = {
66 "version": "^0.20.0",
67 };
68
69 const reactNativeWindowsVersionObj = {
70 "version": "^0.60.0-vnext.68",
71 };
72
73 fs.writeFileSync(path.join(reactNativePackageDir, "package.json"), JSON.stringify(reactNativeVersionObj, null, 2));
74 fs.writeFileSync(path.join(reactNativeWindowsPackageDir, "package.json"), JSON.stringify(reactNativeWindowsVersionObj, null, 2));
75
76 ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(sampleReactNative022ProjectDir, true)
77 .then(versions => {
78 assert.equal(versions.reactNativeVersion, "0.20.0");
79 assert.equal(versions.reactNativeWindowsVersion, "0.60.0-vnext.68");
80 }).done(() => done(), done);
81 });
82
83 test("getReactNativePackageVersionsFromNodeModules should return object containing strings if version field is an URL", (done: MochaDone) => {
84 const versionObj = {
85 "version": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
86 };
87
88 fs.writeFileSync(path.join(reactNativePackageDir, "package.json"), JSON.stringify(versionObj, null, 2));
89
90 ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(sampleReactNative022ProjectDir)
91 .then(versions => {
92 assert.equal(versions.reactNativeVersion, "SemverInvalid: URL");
93 }).done(() => done(), done);
94 });
95 });
96
97 test("getReactNativePackageVersionsFromNodeModules should throw ReactNativePackageIsNotInstalled error if the package is not installed", (done: MochaDone) => {
98 ProjectVersionHelper.getReactNativePackageVersionsFromNodeModules(sampleReactNative022ProjectDir)
99 .catch(error => {
100 assert.equal(error.errorCode, 606);
101 }).done(() => done(), done);
102 });
103
104 test("isVersionError should return true if a version string contains an error substring", (done: MochaDone) => {
105 assert.equal(ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.MISSING_DEPENDENCIES_FIELDS_IN_PROJECT_PACKAGE_FILE), true);
106 assert.equal(ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.MISSING_PACKAGE_IN_NODE_MODULES), true);
107 assert.equal(ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.MISSING_DEPENDENCY_IN_PROJECT_PACKAGE_FILE), true);
108 assert.equal(ProjectVersionHelper.isVersionError(RN_VERSION_ERRORS.UNKNOWN_ERROR), true);
109 assert.equal(ProjectVersionHelper.isVersionError("someError"), true);
110 assert.equal(ProjectVersionHelper.isVersionError("ERRORSTRING"), true);
111
112 done();
113 });
114
115 test("isVersionError should return false if a version string doesn't contain an error substring", (done: MochaDone) => {
116 assert.equal(ProjectVersionHelper.isVersionError("^0.60.0-vnext.68"), false);
117 assert.equal(ProjectVersionHelper.isVersionError("https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"), false);
118 assert.equal(ProjectVersionHelper.isVersionError("SemverInvalid"), false);
119 assert.equal(ProjectVersionHelper.isVersionError("0.61.0"), false);
120 assert.equal(ProjectVersionHelper.isVersionError("SemverInvalid: URL"), false);
121 assert.equal(ProjectVersionHelper.isVersionError("*"), false);
122
123 done();
124 });
125
126 test("processVersion should return semver valid version strings or correct error strings", (done: MochaDone) => {
127
128 assert.equal(ProjectVersionHelper.processVersion("^0.60.0-vnext.68", false), "0.60.0-vnext.68");
129 assert.equal(ProjectVersionHelper.processVersion("=v0.60.0-vnext.68", false), "0.60.0-vnext.68");
130 assert.equal(ProjectVersionHelper.processVersion("1.0.0 - 2.9999.9999", false), "SemverInvalid");
131 assert.equal(ProjectVersionHelper.processVersion("latest", false), "SemverInvalid");
132 assert.equal(ProjectVersionHelper.processVersion("~1.2", false), "SemverInvalid");
133 assert.equal(ProjectVersionHelper.processVersion("2.x", false), "SemverInvalid");
134 assert.equal(ProjectVersionHelper.processVersion(">=1.0.2", false), "1.0.2");
135 assert.equal(ProjectVersionHelper.processVersion("<3.0.0", false), "3.0.0");
136
137 assert.equal(ProjectVersionHelper.processVersion("0.61.0-rc.0"), "0.61.0");
138 assert.equal(ProjectVersionHelper.processVersion("~1.2.3-beta.1"), "1.2.3");
139 assert.equal(ProjectVersionHelper.processVersion("~0.61.3-dev"), "0.61.3");
140 assert.equal(ProjectVersionHelper.processVersion("v0.61.3-dev"), "0.61.3");
141 assert.equal(ProjectVersionHelper.processVersion("^0.61.2.0"), "0.61.2");
142 assert.equal(ProjectVersionHelper.processVersion("0.61.3"), "0.61.3");
143
144 assert.equal(ProjectVersionHelper.processVersion("https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"), "SemverInvalid: URL");
145 assert.equal(ProjectVersionHelper.processVersion("/github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"), "35.0.0");
146 assert.equal(ProjectVersionHelper.processVersion("git+https://git@github.com/test/test.git"), "SemverInvalid: URL");
147 assert.equal(ProjectVersionHelper.processVersion("/github.com/expo/react-native/archive/sdk"), "SemverInvalid");
148 assert.equal(ProjectVersionHelper.processVersion("qwertyuiop[]asdfghjk"), "SemverInvalid");
149 assert.equal(ProjectVersionHelper.processVersion("/Users/test/Data"), "SemverInvalid");
150 assert.equal(ProjectVersionHelper.processVersion("@#.str?/4568-7468/.fd"), "4568.0.0");
151 assert.equal(ProjectVersionHelper.processVersion("^str.0.61.str.2"), "0.61.0");
152 assert.equal(ProjectVersionHelper.processVersion("qwert 1 asdf"), "1.0.0");
153 assert.equal(ProjectVersionHelper.processVersion("^0.str.str.2"), "0.0.0");
154 assert.equal(ProjectVersionHelper.processVersion(""), "SemverInvalid");
155
156 assert.equal(ProjectVersionHelper.processVersion("1.0.x"), "1.0.0");
157 assert.equal(ProjectVersionHelper.processVersion("*.0.*"), "0.0.0");
158 assert.equal(ProjectVersionHelper.processVersion("~1.*"), "1.0.0");
159 assert.equal(ProjectVersionHelper.processVersion("1.0"), "1.0.0");
160 assert.equal(ProjectVersionHelper.processVersion("~1"), "1.0.0");
161 assert.equal(ProjectVersionHelper.processVersion("*"), "SemverInvalid");
162
163 done();
164 });
165});