brighterscript 0.42.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/dist/Cache.d.ts +3 -8
- package/dist/Cache.js +9 -14
- package/dist/Cache.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +21 -1
- package/dist/DiagnosticMessages.js +20 -0
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +1 -6
- package/dist/LanguageServer.js +3 -12
- package/dist/LanguageServer.js.map +1 -1
- package/dist/PluginInterface.d.ts +3 -3
- package/dist/PluginInterface.js +3 -0
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +68 -25
- package/dist/Program.js +169 -76
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +6 -6
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +18 -11
- package/dist/Scope.js +41 -14
- package/dist/Scope.js.map +1 -1
- package/dist/XmlScope.d.ts +3 -3
- package/dist/astUtils/AstEditor.d.ts +6 -0
- package/dist/astUtils/AstEditor.js +10 -0
- package/dist/astUtils/AstEditor.js.map +1 -1
- package/dist/astUtils/AstEditor.spec.js +37 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +5 -2
- package/dist/astUtils/reflection.js +14 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +6 -6
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +15 -18
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +4 -1
- package/dist/bscPlugin/BscPlugin.js +21 -2
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +18 -16
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +9 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +97 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.d.ts → BrsFileSemanticTokensProcessor.spec.d.ts} +0 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +32 -4
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +218 -114
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +27 -8
- package/dist/files/BrsFile.js +216 -95
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +338 -190
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +11 -5
- package/dist/files/XmlFile.js +15 -9
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +118 -114
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +29 -27
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +50 -9
- package/dist/lexer/Lexer.js +1 -2
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +470 -462
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +2 -0
- package/dist/lexer/TokenKind.js +5 -0
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/Expression.d.ts +1 -1
- package/dist/parser/Expression.js +10 -10
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +32 -31
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +23 -2
- package/dist/parser/Parser.js +445 -254
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +86 -24
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.spec.js +1 -1
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +54 -2
- package/dist/parser/Statement.js +162 -9
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +5 -5
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +3 -3
- package/dist/parser/tests/Parser.spec.js +4 -4
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +40 -40
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +22 -21
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +100 -99
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +25 -25
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +21 -21
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +91 -91
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +102 -102
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +15 -15
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +22 -21
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +11 -11
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +171 -171
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +50 -50
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +25 -25
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +17 -17
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +26 -26
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +27 -27
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +4 -3
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/Relational.spec.js +25 -25
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +8 -8
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +7 -7
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +20 -20
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +774 -0
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
- package/dist/parser/tests/statement/Function.spec.js +121 -120
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +9 -8
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +22 -22
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +12 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +7 -7
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +71 -70
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +17 -17
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +33 -33
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +53 -53
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +7 -6
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +7 -7
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/types/FunctionType.d.ts +2 -2
- package/dist/types/FunctionType.js +3 -3
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +2 -2
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/util.d.ts +27 -1
- package/dist/util.js +96 -29
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +20 -27
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -1
- package/dist/astUtils/index.d.ts +0 -7
- package/dist/astUtils/index.js +0 -26
- package/dist/astUtils/index.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
- package/dist/lexer/index.d.ts +0 -3
- package/dist/lexer/index.js +0 -18
- package/dist/lexer/index.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -16
- package/dist/parser/index.js.map +0 -1
- package/dist/preprocessor/index.d.ts +0 -3
- package/dist/preprocessor/index.js +0 -16
- package/dist/preprocessor/index.js.map +0 -1
|
@@ -13,6 +13,7 @@ const util_1 = require("../util");
|
|
|
13
13
|
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
14
14
|
const ProgramBuilder_1 = require("../ProgramBuilder");
|
|
15
15
|
const Logger_1 = require("../Logger");
|
|
16
|
+
const reflection_1 = require("../astUtils/reflection");
|
|
16
17
|
describe('XmlFile', () => {
|
|
17
18
|
const tempDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp`;
|
|
18
19
|
const rootDir = (0, util_1.standardizePath) `${tempDir}/rootDir`;
|
|
@@ -36,17 +37,18 @@ describe('XmlFile', () => {
|
|
|
36
37
|
describe('parse', () => {
|
|
37
38
|
it('allows modifying the parsed XML model', () => {
|
|
38
39
|
const expected = 'OtherName';
|
|
39
|
-
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
40
40
|
program.plugins.add({
|
|
41
41
|
name: 'allows modifying the parsed XML model',
|
|
42
|
-
afterFileParse: () => {
|
|
43
|
-
|
|
42
|
+
afterFileParse: (file) => {
|
|
43
|
+
var _a, _b, _c;
|
|
44
|
+
if ((0, reflection_1.isXmlFile)(file) && ((_c = (_b = (_a = file.parser.ast.root) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.value)) {
|
|
45
|
+
file.parser.ast.root.attributes[0].value.text = expected;
|
|
46
|
+
}
|
|
44
47
|
}
|
|
45
48
|
});
|
|
46
|
-
file.
|
|
49
|
+
file = program.setFile('components/ChildScene.xml', (0, testHelpers_spec_1.trim) `
|
|
47
50
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
48
51
|
<component name="ChildScene" extends="Scene">
|
|
49
|
-
<script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
|
|
50
52
|
</component>
|
|
51
53
|
`);
|
|
52
54
|
(0, chai_1.expect)(file.componentName.text).to.equal(expected);
|
|
@@ -81,7 +83,7 @@ describe('XmlFile', () => {
|
|
|
81
83
|
`);
|
|
82
84
|
});
|
|
83
85
|
it('supports importing BrighterScript files', () => {
|
|
84
|
-
file = program.
|
|
86
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
85
87
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
86
88
|
<component name="ChildScene" extends="Scene">
|
|
87
89
|
<script type="text/brightscript" uri="ChildScene.bs" />
|
|
@@ -91,7 +93,7 @@ describe('XmlFile', () => {
|
|
|
91
93
|
});
|
|
92
94
|
it('does not include commented-out script imports', () => {
|
|
93
95
|
var _a, _b;
|
|
94
|
-
file = program.
|
|
96
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
95
97
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
96
98
|
<component name="ChildScene" extends="Scene">
|
|
97
99
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
@@ -165,20 +167,21 @@ describe('XmlFile', () => {
|
|
|
165
167
|
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpectedToo')), { range: vscode_languageserver_1.Range.create(5, 5, 5, 18) }));
|
|
166
168
|
});
|
|
167
169
|
it('Adds error when no component is declared in xml', () => {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
(0,
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
program.setFile('components/comp.xml', '<script type="text/brightscript" uri="ChildScene.brs" />');
|
|
171
|
+
program.validate();
|
|
172
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
173
|
+
Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('script')), { range: vscode_languageserver_1.Range.create(0, 1, 0, 7) }),
|
|
174
|
+
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration()
|
|
175
|
+
]);
|
|
173
176
|
});
|
|
174
177
|
it('adds error when component does not declare a name', () => {
|
|
175
|
-
file =
|
|
176
|
-
file.parse((0, testHelpers_spec_1.trim) `
|
|
178
|
+
file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
177
179
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
178
180
|
<component extends="ParentScene">
|
|
179
181
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
180
182
|
</component>
|
|
181
183
|
`);
|
|
184
|
+
program.validate();
|
|
182
185
|
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(1);
|
|
183
186
|
(0, chai_1.expect)(file.diagnostics[0]).to.deep.include({
|
|
184
187
|
message: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute().message,
|
|
@@ -186,12 +189,12 @@ describe('XmlFile', () => {
|
|
|
186
189
|
});
|
|
187
190
|
});
|
|
188
191
|
it('catches xml parse errors', () => {
|
|
189
|
-
file =
|
|
190
|
-
file.parse((0, testHelpers_spec_1.trim) `
|
|
192
|
+
file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
191
193
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
192
194
|
<component 1extends="ParentScene">
|
|
193
195
|
</component>
|
|
194
196
|
`);
|
|
197
|
+
program.validate();
|
|
195
198
|
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(2);
|
|
196
199
|
(0, chai_1.expect)(file.diagnostics[0].code).to.equal(DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code); //unexpected character '1'
|
|
197
200
|
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include({
|
|
@@ -227,7 +230,7 @@ describe('XmlFile', () => {
|
|
|
227
230
|
}
|
|
228
231
|
});
|
|
229
232
|
it('resolves relative paths', () => {
|
|
230
|
-
file = program.
|
|
233
|
+
file = program.setFile({
|
|
231
234
|
src: `${rootDir}/components/comp1.xml`,
|
|
232
235
|
dest: 'components/comp1.xml'
|
|
233
236
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -244,7 +247,7 @@ describe('XmlFile', () => {
|
|
|
244
247
|
});
|
|
245
248
|
it('finds correct position for empty uri in script tag', () => {
|
|
246
249
|
var _a;
|
|
247
|
-
file = program.
|
|
250
|
+
file = program.setFile({
|
|
248
251
|
src: `${rootDir}/components/comp1.xml`,
|
|
249
252
|
dest: 'components/comp1.xml'
|
|
250
253
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -259,7 +262,7 @@ describe('XmlFile', () => {
|
|
|
259
262
|
});
|
|
260
263
|
describe('doesReferenceFile', () => {
|
|
261
264
|
it('compares case insensitive', () => {
|
|
262
|
-
let xmlFile = program.
|
|
265
|
+
let xmlFile = program.setFile({
|
|
263
266
|
src: `${rootDir}/components/comp1.xml`,
|
|
264
267
|
dest: 'components/comp1.xml'
|
|
265
268
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -268,7 +271,7 @@ describe('XmlFile', () => {
|
|
|
268
271
|
<script type="text/brightscript" uri="HeroGrid.brs" />
|
|
269
272
|
</component>
|
|
270
273
|
`);
|
|
271
|
-
let brsFile = program.
|
|
274
|
+
let brsFile = program.setFile({
|
|
272
275
|
src: `${rootDir}/components/HEROGRID.brs`,
|
|
273
276
|
dest: `components/HEROGRID.brs`
|
|
274
277
|
}, ``);
|
|
@@ -277,47 +280,49 @@ describe('XmlFile', () => {
|
|
|
277
280
|
});
|
|
278
281
|
describe('autoImportComponentScript', () => {
|
|
279
282
|
it('is not enabled by default', () => {
|
|
280
|
-
program.
|
|
283
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
281
284
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
282
285
|
<component name="ParentScene" extends="GrandparentScene">
|
|
283
286
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
284
287
|
</component>
|
|
285
288
|
`);
|
|
286
|
-
program.
|
|
289
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
287
290
|
function libFunc()
|
|
288
291
|
end function
|
|
289
292
|
`);
|
|
290
|
-
program.
|
|
293
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
291
294
|
function init()
|
|
292
295
|
libFunc()
|
|
293
296
|
end function
|
|
294
297
|
`);
|
|
295
298
|
program.validate();
|
|
296
|
-
(0,
|
|
299
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
300
|
+
DiagnosticMessages_1.DiagnosticMessages.fileNotReferencedByAnyOtherFile()
|
|
301
|
+
]);
|
|
297
302
|
});
|
|
298
303
|
it('is not enabled by default', () => {
|
|
299
304
|
program = new Program_1.Program({
|
|
300
305
|
rootDir: rootDir,
|
|
301
306
|
autoImportComponentScript: true
|
|
302
307
|
});
|
|
303
|
-
program.
|
|
308
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
304
309
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
305
310
|
<component name="ParentScene" extends="GrandparentScene">
|
|
306
311
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
307
312
|
</component>
|
|
308
313
|
`);
|
|
309
|
-
program.
|
|
314
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
310
315
|
function libFunc()
|
|
311
316
|
end function
|
|
312
317
|
`);
|
|
313
|
-
program.
|
|
318
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
314
319
|
function init()
|
|
315
320
|
libFunc()
|
|
316
321
|
end function
|
|
317
322
|
`);
|
|
318
323
|
program.validate();
|
|
319
324
|
//there should be no errors
|
|
320
|
-
(0,
|
|
325
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
321
326
|
});
|
|
322
327
|
});
|
|
323
328
|
describe('getCompletions', () => {
|
|
@@ -340,13 +345,13 @@ describe('XmlFile', () => {
|
|
|
340
345
|
});
|
|
341
346
|
});
|
|
342
347
|
it('returns empty set when out of range', () => {
|
|
343
|
-
program.
|
|
348
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
344
349
|
(0, chai_1.expect)(file.getCompletions(vscode_languageserver_1.Position.create(99, 99))).to.be.empty;
|
|
345
350
|
});
|
|
346
351
|
//TODO - refine this test once cdata scripts are supported
|
|
347
352
|
it('prevents scope completions entirely', () => {
|
|
348
|
-
program.
|
|
349
|
-
let xmlFile = program.
|
|
353
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
354
|
+
let xmlFile = program.setFile({ src: `${rootDir}/components/Component1.xml`, dest: 'components/component1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
350
355
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
351
356
|
<component name="ParentScene" extends="GrandparentScene">
|
|
352
357
|
<script type="text/brightscript" uri="./Component1.brs" />
|
|
@@ -357,7 +362,7 @@ describe('XmlFile', () => {
|
|
|
357
362
|
});
|
|
358
363
|
describe('getAllDependencies', () => {
|
|
359
364
|
it('returns own imports', () => {
|
|
360
|
-
file = program.
|
|
365
|
+
file = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
361
366
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
362
367
|
<component name="ChildScene" extends="BaseScene">
|
|
363
368
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
@@ -370,7 +375,7 @@ describe('XmlFile', () => {
|
|
|
370
375
|
});
|
|
371
376
|
});
|
|
372
377
|
it('invalidates dependent scopes on change', () => {
|
|
373
|
-
let xmlFile = program.
|
|
378
|
+
let xmlFile = program.setFile({
|
|
374
379
|
src: `${rootDir}/components/comp1.xml`,
|
|
375
380
|
dest: `components/comp1.xml`
|
|
376
381
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -384,7 +389,7 @@ describe('XmlFile', () => {
|
|
|
384
389
|
//scope should be validated
|
|
385
390
|
(0, chai_1.expect)(scope.isValidated);
|
|
386
391
|
//add lib1
|
|
387
|
-
program.
|
|
392
|
+
program.setFile({
|
|
388
393
|
src: `${rootDir}/source/lib.bs`,
|
|
389
394
|
dest: `source/lib.bs`
|
|
390
395
|
}, ``);
|
|
@@ -393,7 +398,7 @@ describe('XmlFile', () => {
|
|
|
393
398
|
program.validate();
|
|
394
399
|
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
395
400
|
//update lib1 to include an import
|
|
396
|
-
program.
|
|
401
|
+
program.setFile({
|
|
397
402
|
src: `${rootDir}/source/lib.bs`,
|
|
398
403
|
dest: `source/lib.bs`
|
|
399
404
|
}, `
|
|
@@ -404,7 +409,7 @@ describe('XmlFile', () => {
|
|
|
404
409
|
program.validate();
|
|
405
410
|
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
406
411
|
//add the lib2 imported from lib
|
|
407
|
-
program.
|
|
412
|
+
program.setFile({
|
|
408
413
|
src: `${rootDir}/source/lib2.bs`,
|
|
409
414
|
dest: `source/lib2.bs`
|
|
410
415
|
}, ``);
|
|
@@ -416,7 +421,7 @@ describe('XmlFile', () => {
|
|
|
416
421
|
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
417
422
|
});
|
|
418
423
|
it('does not invalidate unrelated scopes on change', () => {
|
|
419
|
-
let xmlFile1 = program.
|
|
424
|
+
let xmlFile1 = program.setFile({
|
|
420
425
|
src: `${rootDir}/components/comp1.xml`,
|
|
421
426
|
dest: `components/comp1.xml`
|
|
422
427
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -425,7 +430,7 @@ describe('XmlFile', () => {
|
|
|
425
430
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
426
431
|
</component>
|
|
427
432
|
`);
|
|
428
|
-
let xmlFile2 = program.
|
|
433
|
+
let xmlFile2 = program.setFile({
|
|
429
434
|
src: `${rootDir}/components/comp2.xml`,
|
|
430
435
|
dest: `components/comp2.xml`
|
|
431
436
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -438,7 +443,7 @@ describe('XmlFile', () => {
|
|
|
438
443
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.true;
|
|
439
444
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
440
445
|
//add the lib file
|
|
441
|
-
program.
|
|
446
|
+
program.setFile({
|
|
442
447
|
src: `${rootDir}/source/lib.brs`,
|
|
443
448
|
dest: `source/lib.brs`
|
|
444
449
|
}, ``);
|
|
@@ -452,12 +457,11 @@ describe('XmlFile', () => {
|
|
|
452
457
|
range: undefined
|
|
453
458
|
}];
|
|
454
459
|
file.addDiagnostics(expected);
|
|
455
|
-
|
|
456
|
-
(0, chai_1.expect)(actual).deep.equal(expected);
|
|
460
|
+
(0, testHelpers_spec_1.expectDiagnostics)(file, expected);
|
|
457
461
|
});
|
|
458
462
|
describe('component extends', () => {
|
|
459
463
|
it('works for single-line', () => {
|
|
460
|
-
file = program.
|
|
464
|
+
file = program.setFile({
|
|
461
465
|
src: `${rootDir}/components/comp1.xml`,
|
|
462
466
|
dest: `components/comp1.xml`
|
|
463
467
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -468,7 +472,7 @@ describe('XmlFile', () => {
|
|
|
468
472
|
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(1, 38, 1, 47));
|
|
469
473
|
});
|
|
470
474
|
it('works for multi-line', () => {
|
|
471
|
-
file = program.
|
|
475
|
+
file = program.setFile({
|
|
472
476
|
src: `${rootDir}/components/comp1.xml`,
|
|
473
477
|
dest: `components/comp1.xml`
|
|
474
478
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -480,7 +484,7 @@ describe('XmlFile', () => {
|
|
|
480
484
|
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(2, 13, 2, 22));
|
|
481
485
|
});
|
|
482
486
|
it('does not throw when unable to find extends', () => {
|
|
483
|
-
file = program.
|
|
487
|
+
file = program.setFile({
|
|
484
488
|
src: `${rootDir}/components/comp1.xml`,
|
|
485
489
|
dest: `components/comp1.xml`
|
|
486
490
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -491,7 +495,7 @@ describe('XmlFile', () => {
|
|
|
491
495
|
(0, chai_1.expect)(file.parentComponentName).to.not.exist;
|
|
492
496
|
});
|
|
493
497
|
it('adds warning when no "extends" attribute is found', () => {
|
|
494
|
-
|
|
498
|
+
program.setFile({
|
|
495
499
|
src: `${rootDir}/components/comp1.xml`,
|
|
496
500
|
dest: `components/comp1.xml`
|
|
497
501
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -499,23 +503,22 @@ describe('XmlFile', () => {
|
|
|
499
503
|
<component name="ChildScene">
|
|
500
504
|
</component>
|
|
501
505
|
`);
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
+
program.validate();
|
|
507
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
508
|
+
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
509
|
+
]);
|
|
506
510
|
});
|
|
507
511
|
});
|
|
508
512
|
it('detects when importing the codebehind file unnecessarily', () => {
|
|
509
|
-
var _a;
|
|
510
513
|
program = new Program_1.Program({
|
|
511
514
|
autoImportComponentScript: true,
|
|
512
515
|
rootDir: rootDir
|
|
513
516
|
});
|
|
514
|
-
program.
|
|
517
|
+
program.setFile({
|
|
515
518
|
src: `${rootDir}/components/SimpleScene.bs`,
|
|
516
519
|
dest: `components/SimpleScene.bs`
|
|
517
520
|
}, '');
|
|
518
|
-
program.
|
|
521
|
+
program.setFile({
|
|
519
522
|
src: `${rootDir}/components/SimpleScene.xml`,
|
|
520
523
|
dest: `components/SimpleScene.xml`
|
|
521
524
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -525,7 +528,9 @@ describe('XmlFile', () => {
|
|
|
525
528
|
</component>
|
|
526
529
|
`);
|
|
527
530
|
program.validate();
|
|
528
|
-
(0,
|
|
531
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
532
|
+
DiagnosticMessages_1.DiagnosticMessages.unnecessaryCodebehindScriptImport()
|
|
533
|
+
]);
|
|
529
534
|
});
|
|
530
535
|
describe('transpile', () => {
|
|
531
536
|
it('supports instantresume <customization> elements', async () => {
|
|
@@ -568,7 +573,7 @@ describe('XmlFile', () => {
|
|
|
568
573
|
file.needsTranspiled = true;
|
|
569
574
|
}
|
|
570
575
|
});
|
|
571
|
-
const file = program.
|
|
576
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
572
577
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
573
578
|
<component name="Comp" extends="Group">
|
|
574
579
|
</component>
|
|
@@ -601,8 +606,8 @@ describe('XmlFile', () => {
|
|
|
601
606
|
`, 'none', 'components/child.xml');
|
|
602
607
|
});
|
|
603
608
|
it('does not include bslib script if already there from ropm', () => {
|
|
604
|
-
program.
|
|
605
|
-
program.
|
|
609
|
+
program.setFile('source/roku_modules/bslib/bslib.brs', ``);
|
|
610
|
+
program.setFile('source/lib.bs', ``);
|
|
606
611
|
//include a bs file to force transpile for the xml file
|
|
607
612
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
608
613
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
@@ -619,7 +624,7 @@ describe('XmlFile', () => {
|
|
|
619
624
|
`, 'none', 'components/child.xml');
|
|
620
625
|
});
|
|
621
626
|
it('does not transpile xml file when bslib script is already present', () => {
|
|
622
|
-
const file = program.
|
|
627
|
+
const file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
623
628
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
624
629
|
<component name="Comp" extends="Group">
|
|
625
630
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
@@ -633,8 +638,8 @@ describe('XmlFile', () => {
|
|
|
633
638
|
* There was a bug that would incorrectly replace one of the script paths on the second or third transpile, so this test verifies it doesn't do that anymore
|
|
634
639
|
*/
|
|
635
640
|
it('does not mangle scripts on multiple transpile', async () => {
|
|
636
|
-
program.
|
|
637
|
-
program.
|
|
641
|
+
program.setFile('components/SimpleScene.bs', ``);
|
|
642
|
+
program.setFile(`components/SimpleScene.xml`, (0, testHelpers_spec_1.trim) `
|
|
638
643
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
639
644
|
<component name="SimpleScene" extends="Scene">
|
|
640
645
|
<script type="text/brightscript" uri="SimpleScene.bs" />
|
|
@@ -655,7 +660,7 @@ describe('XmlFile', () => {
|
|
|
655
660
|
(0, chai_1.expect)(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
656
661
|
});
|
|
657
662
|
it('keeps all content of the XML', () => {
|
|
658
|
-
program.
|
|
663
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
659
664
|
sub b()
|
|
660
665
|
end sub
|
|
661
666
|
`);
|
|
@@ -695,10 +700,10 @@ describe('XmlFile', () => {
|
|
|
695
700
|
`, 'none', 'components/SimpleScene.xml');
|
|
696
701
|
});
|
|
697
702
|
it('changes file extensions from bs to brs', () => {
|
|
698
|
-
program.
|
|
703
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
699
704
|
import "pkg:/source/lib.bs"
|
|
700
705
|
`);
|
|
701
|
-
program.
|
|
706
|
+
program.setFile('source/lib.bs', ``);
|
|
702
707
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
703
708
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
704
709
|
<component name="SimpleScene" extends="Scene">
|
|
@@ -714,7 +719,7 @@ describe('XmlFile', () => {
|
|
|
714
719
|
`, 'none', 'components/SimpleScene.xml');
|
|
715
720
|
});
|
|
716
721
|
it('does not fail on missing script type', () => {
|
|
717
|
-
program.
|
|
722
|
+
program.setFile('components/SimpleScene.brs', '');
|
|
718
723
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
719
724
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
720
725
|
<component name="SimpleScene" extends="Scene">
|
|
@@ -729,7 +734,7 @@ describe('XmlFile', () => {
|
|
|
729
734
|
`, null, 'components/comp.xml');
|
|
730
735
|
});
|
|
731
736
|
it('returns the XML unmodified if needsTranspiled is false', () => {
|
|
732
|
-
let file = program.
|
|
737
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
733
738
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
734
739
|
<!-- should stay as-is -->
|
|
735
740
|
<component name="SimpleScene" extends="Scene" >
|
|
@@ -747,7 +752,7 @@ describe('XmlFile', () => {
|
|
|
747
752
|
`);
|
|
748
753
|
});
|
|
749
754
|
it('needsTranspiled is false by default', () => {
|
|
750
|
-
let file = program.
|
|
755
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
751
756
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
752
757
|
<component name="SimpleScene" extends="Scene" >
|
|
753
758
|
</component>
|
|
@@ -755,7 +760,7 @@ describe('XmlFile', () => {
|
|
|
755
760
|
(0, chai_1.expect)(file.needsTranspiled).to.be.false;
|
|
756
761
|
});
|
|
757
762
|
it('needsTranspiled is true if an import is brighterscript', () => {
|
|
758
|
-
let file = program.
|
|
763
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
759
764
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
760
765
|
<component name="SimpleScene" extends="Scene" >
|
|
761
766
|
<script type="text/brightscript" uri="SimpleScene.bs"/>
|
|
@@ -765,7 +770,7 @@ describe('XmlFile', () => {
|
|
|
765
770
|
});
|
|
766
771
|
it('simple source mapping includes sourcemap reference', () => {
|
|
767
772
|
program.options.sourceMap = true;
|
|
768
|
-
let file = program.
|
|
773
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
769
774
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
770
775
|
<component name="SimpleScene" extends="Scene">
|
|
771
776
|
</component>
|
|
@@ -777,7 +782,7 @@ describe('XmlFile', () => {
|
|
|
777
782
|
});
|
|
778
783
|
it('AST-based source mapping includes sourcemap reference', () => {
|
|
779
784
|
program.options.sourceMap = true;
|
|
780
|
-
let file = program.
|
|
785
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
781
786
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
782
787
|
<component name="SimpleScene" extends="Scene">
|
|
783
788
|
</component>
|
|
@@ -793,23 +798,23 @@ describe('XmlFile', () => {
|
|
|
793
798
|
const program = new Program_1.Program({
|
|
794
799
|
rootDir: rootDir
|
|
795
800
|
});
|
|
796
|
-
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
797
801
|
program.plugins.add({
|
|
798
802
|
name: 'Transform plugins',
|
|
799
|
-
afterFileParse:
|
|
803
|
+
afterFileParse: file => validateXml(file)
|
|
800
804
|
});
|
|
801
|
-
file.
|
|
805
|
+
file = program.setFile('components/component.xml', (0, testHelpers_spec_1.trim) `
|
|
802
806
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
803
807
|
<component name="Cmp1" extends="Scene">
|
|
804
808
|
</component>
|
|
805
809
|
`);
|
|
810
|
+
program.validate();
|
|
806
811
|
return file;
|
|
807
812
|
}
|
|
808
813
|
it('Calls XML file validation plugins', () => {
|
|
809
814
|
const validateXml = sinon.spy();
|
|
810
815
|
const file = parseFileWithPlugins(validateXml);
|
|
811
|
-
(0, chai_1.expect)(validateXml.callCount).to.
|
|
812
|
-
(0, chai_1.expect)(validateXml.
|
|
816
|
+
(0, chai_1.expect)(validateXml.callCount).to.be.greaterThan(0);
|
|
817
|
+
(0, chai_1.expect)(validateXml.getCalls().flatMap(x => x.args)).to.include(file);
|
|
813
818
|
});
|
|
814
819
|
});
|
|
815
820
|
it('plugin diagnostics work for xml files', () => {
|
|
@@ -826,61 +831,60 @@ describe('XmlFile', () => {
|
|
|
826
831
|
}
|
|
827
832
|
}
|
|
828
833
|
});
|
|
829
|
-
program.
|
|
834
|
+
program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
830
835
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
831
836
|
<component name="Cmp1" extends="Scene">
|
|
832
837
|
</component>
|
|
833
838
|
`);
|
|
834
839
|
program.validate();
|
|
835
|
-
(0,
|
|
840
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [{
|
|
836
841
|
message: 'Test diagnostic',
|
|
837
842
|
code: 9999
|
|
838
843
|
}]);
|
|
839
844
|
});
|
|
840
845
|
describe('typedef', () => {
|
|
841
846
|
it('loads d.bs files from parent scope', () => {
|
|
842
|
-
|
|
843
|
-
program.addOrReplaceFile('components/ParentComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
847
|
+
program.setFile('components/ParentComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
844
848
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
845
849
|
<component name="ParentComponent" extends="Scene">
|
|
846
850
|
<script uri="ParentComponent.brs" />
|
|
847
851
|
</component>
|
|
848
852
|
`);
|
|
849
|
-
program.
|
|
853
|
+
program.setFile('components/ParentComponent.d.bs', `
|
|
850
854
|
import "Lib.brs"
|
|
851
855
|
namespace Parent
|
|
852
856
|
sub log()
|
|
853
857
|
end sub
|
|
854
858
|
end namespace
|
|
855
859
|
`);
|
|
856
|
-
program.
|
|
860
|
+
program.setFile('components/ParentComponent.brs', `
|
|
857
861
|
sub Parent_log()
|
|
858
862
|
end sub
|
|
859
863
|
`);
|
|
860
|
-
program.
|
|
864
|
+
program.setFile('components/Lib.d.bs', `
|
|
861
865
|
namespace Lib
|
|
862
866
|
sub log()
|
|
863
867
|
end sub
|
|
864
868
|
end namespace
|
|
865
869
|
`);
|
|
866
|
-
program.
|
|
870
|
+
program.setFile('components/Lib.brs', `
|
|
867
871
|
sub Lib_log()
|
|
868
872
|
end sub
|
|
869
873
|
`);
|
|
870
|
-
program.
|
|
874
|
+
program.setFile('components/ChildComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
871
875
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
872
876
|
<component name="ChildComponent" extends="ParentComponent">
|
|
873
877
|
<script uri="ChildComponent.bs" />
|
|
874
878
|
</component>
|
|
875
879
|
`);
|
|
876
|
-
program.
|
|
880
|
+
program.setFile('components/ChildComponent.bs', `
|
|
877
881
|
sub init()
|
|
878
882
|
Parent.log()
|
|
879
883
|
Lib.log()
|
|
880
884
|
end sub
|
|
881
885
|
`);
|
|
882
886
|
program.validate();
|
|
883
|
-
(0,
|
|
887
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
884
888
|
const scope = program.getComponentScope('ChildComponent');
|
|
885
889
|
(0, chai_1.expect)([...scope.namespaceLookup.keys()].sort()).to.eql([
|
|
886
890
|
'lib',
|
|
@@ -888,28 +892,28 @@ describe('XmlFile', () => {
|
|
|
888
892
|
]);
|
|
889
893
|
});
|
|
890
894
|
it('loads `d.bs` files into scope', () => {
|
|
891
|
-
const xmlFile = program.
|
|
895
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
892
896
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
893
897
|
<component name="Component1" extends="Scene">
|
|
894
898
|
<script uri="Component1.brs" />
|
|
895
899
|
</component>
|
|
896
900
|
`);
|
|
897
|
-
program.
|
|
901
|
+
program.setFile('components/Component1.d.bs', `
|
|
898
902
|
sub logInfo()
|
|
899
903
|
end sub
|
|
900
904
|
`);
|
|
901
905
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
|
|
902
906
|
});
|
|
903
907
|
it('does not include `d.bs` script during transpile', () => {
|
|
904
|
-
program.
|
|
908
|
+
program.setFile('source/logger.d.bs', `
|
|
905
909
|
sub logInfo()
|
|
906
910
|
end sub
|
|
907
911
|
`);
|
|
908
|
-
program.
|
|
912
|
+
program.setFile('source/logger.brs', `
|
|
909
913
|
sub logInfo()
|
|
910
914
|
end sub
|
|
911
915
|
`);
|
|
912
|
-
program.
|
|
916
|
+
program.setFile('components/Component1.bs', `
|
|
913
917
|
import "pkg:/source/logger.brs"
|
|
914
918
|
sub init()
|
|
915
919
|
end sub
|
|
@@ -929,7 +933,7 @@ describe('XmlFile', () => {
|
|
|
929
933
|
`, 'none', 'components/Component1.xml');
|
|
930
934
|
});
|
|
931
935
|
it('does not load .brs information into scope if related d.bs is in scope', () => {
|
|
932
|
-
const xmlFile = program.
|
|
936
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
933
937
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
934
938
|
<component name="Component1" extends="Scene">
|
|
935
939
|
<script uri="Component1.brs" />
|
|
@@ -937,7 +941,7 @@ describe('XmlFile', () => {
|
|
|
937
941
|
`);
|
|
938
942
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
939
943
|
//load brs file
|
|
940
|
-
program.
|
|
944
|
+
program.setFile('components/Component1.brs', `
|
|
941
945
|
sub logInfo()
|
|
942
946
|
end sub
|
|
943
947
|
sub logWarning()
|
|
@@ -947,7 +951,7 @@ describe('XmlFile', () => {
|
|
|
947
951
|
(0, chai_1.expect)(functionNames).to.include('logInfo');
|
|
948
952
|
(0, chai_1.expect)(functionNames).to.include('logWarning');
|
|
949
953
|
//load d.bs file, which should shadow out the .brs file
|
|
950
|
-
program.
|
|
954
|
+
program.setFile('components/Component1.d.bs', `
|
|
951
955
|
sub logError()
|
|
952
956
|
end sub
|
|
953
957
|
`);
|
|
@@ -957,7 +961,7 @@ describe('XmlFile', () => {
|
|
|
957
961
|
(0, chai_1.expect)(functionNames).not.to.include('logWarning');
|
|
958
962
|
});
|
|
959
963
|
it('updates xml scope when typedef disappears', () => {
|
|
960
|
-
const xmlFile = program.
|
|
964
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
961
965
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
962
966
|
<component name="Component1" extends="Scene">
|
|
963
967
|
<script uri="Component1.brs" />
|
|
@@ -965,12 +969,12 @@ describe('XmlFile', () => {
|
|
|
965
969
|
`);
|
|
966
970
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
967
971
|
//load brs file
|
|
968
|
-
program.
|
|
972
|
+
program.setFile('components/Component1.brs', `
|
|
969
973
|
sub logBrs()
|
|
970
974
|
end sub
|
|
971
975
|
`);
|
|
972
976
|
//load d.bs file, which should shadow out the .brs file
|
|
973
|
-
const typedef = program.
|
|
977
|
+
const typedef = program.setFile('components/Component1.d.bs', `
|
|
974
978
|
sub logTypedef()
|
|
975
979
|
end sub
|
|
976
980
|
`);
|
|
@@ -988,7 +992,7 @@ describe('XmlFile', () => {
|
|
|
988
992
|
});
|
|
989
993
|
it('finds script imports for single-quoted script tags', () => {
|
|
990
994
|
var _a;
|
|
991
|
-
const file = program.
|
|
995
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
992
996
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
993
997
|
<component name="Cmp1" extends="Scene">
|
|
994
998
|
<script uri='SingleQuotedFile.brs' />
|
|
@@ -999,7 +1003,7 @@ describe('XmlFile', () => {
|
|
|
999
1003
|
describe('commentFlags', () => {
|
|
1000
1004
|
it('ignores warning from previous line comment', () => {
|
|
1001
1005
|
//component without a name attribute
|
|
1002
|
-
program.
|
|
1006
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1003
1007
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1004
1008
|
<!--bs:disable-next-line-->
|
|
1005
1009
|
<component>
|
|
@@ -1010,20 +1014,20 @@ describe('XmlFile', () => {
|
|
|
1010
1014
|
});
|
|
1011
1015
|
it('ignores warning from previous line just for the specified code', () => {
|
|
1012
1016
|
//component without a name attribute
|
|
1013
|
-
program.
|
|
1017
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1014
1018
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1015
1019
|
<!--bs:disable-next-line 1006-->
|
|
1016
1020
|
<component>
|
|
1017
1021
|
</component>
|
|
1018
1022
|
`);
|
|
1019
1023
|
program.validate();
|
|
1020
|
-
(0,
|
|
1021
|
-
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
1024
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1025
|
+
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
1022
1026
|
]);
|
|
1023
1027
|
});
|
|
1024
1028
|
it('ignores warning from previous line comment', () => {
|
|
1025
1029
|
//component without a name attribute
|
|
1026
|
-
program.
|
|
1030
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1027
1031
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1028
1032
|
<component> <!--bs:disable-line-->
|
|
1029
1033
|
</component>
|
|
@@ -1033,50 +1037,50 @@ describe('XmlFile', () => {
|
|
|
1033
1037
|
});
|
|
1034
1038
|
it('ignores warning from previous line just for the specified code', () => {
|
|
1035
1039
|
//component without a name attribute
|
|
1036
|
-
program.
|
|
1040
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1037
1041
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1038
1042
|
<component> <!--bs:disable-line 1006-->
|
|
1039
1043
|
</component>
|
|
1040
1044
|
`);
|
|
1041
1045
|
program.validate();
|
|
1042
|
-
(0,
|
|
1043
|
-
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
1046
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1047
|
+
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
1044
1048
|
]);
|
|
1045
1049
|
});
|
|
1046
1050
|
});
|
|
1047
1051
|
describe('duplicate components', () => {
|
|
1048
1052
|
it('more gracefully handles multiple components with the same name', () => {
|
|
1049
|
-
program.
|
|
1050
|
-
program.
|
|
1053
|
+
program.setFile('components/comp1.brs', ``);
|
|
1054
|
+
program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1051
1055
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1052
1056
|
<component name="comp1" extends="Group">
|
|
1053
1057
|
<script uri="comp1.brs" />
|
|
1054
1058
|
</component>
|
|
1055
1059
|
`);
|
|
1056
1060
|
//add another component with the same name
|
|
1057
|
-
program.
|
|
1058
|
-
program.
|
|
1061
|
+
program.setFile('components/comp2.brs', ``);
|
|
1062
|
+
program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1059
1063
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1060
1064
|
<component name="comp1" extends="Group">
|
|
1061
1065
|
<script uri="comp2.brs" />
|
|
1062
1066
|
</component>
|
|
1063
1067
|
`);
|
|
1064
1068
|
program.validate();
|
|
1065
|
-
(0,
|
|
1066
|
-
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1')
|
|
1067
|
-
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1')
|
|
1069
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1070
|
+
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1'),
|
|
1071
|
+
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1')
|
|
1068
1072
|
]);
|
|
1069
1073
|
});
|
|
1070
1074
|
it('maintains consistent component selection', () => {
|
|
1071
1075
|
//add comp2 first
|
|
1072
|
-
const comp2 = program.
|
|
1076
|
+
const comp2 = program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1073
1077
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1074
1078
|
<component name="comp1">
|
|
1075
1079
|
</component>
|
|
1076
1080
|
`);
|
|
1077
1081
|
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1078
1082
|
//add comp1. it should become the main component with this name
|
|
1079
|
-
const comp1 = program.
|
|
1083
|
+
const comp1 = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1080
1084
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1081
1085
|
<component name="comp1" extends="Group">
|
|
1082
1086
|
</component>
|
|
@@ -1086,7 +1090,7 @@ describe('XmlFile', () => {
|
|
|
1086
1090
|
program.removeFile((0, util_1.standardizePath) `${rootDir}/components/comp1.xml`);
|
|
1087
1091
|
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1088
1092
|
//add comp3
|
|
1089
|
-
program.
|
|
1093
|
+
program.setFile('components/comp3.xml', (0, testHelpers_spec_1.trim) `
|
|
1090
1094
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1091
1095
|
<component name="comp1">
|
|
1092
1096
|
</component>
|