brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13
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 +362 -248
- package/README.md +2 -2
- package/bsconfig.schema.json +1 -1
- package/dist/CodeActionUtil.d.ts +11 -2
- package/dist/CodeActionUtil.js +17 -3
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +4 -4
- package/dist/CommentFlagProcessor.js +5 -3
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.js +2 -2
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.js +3 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +15 -5
- package/dist/DiagnosticMessages.js +19 -9
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +11 -10
- package/dist/LanguageServer.js +87 -58
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +2 -0
- package/dist/Logger.js +5 -3
- package/dist/Logger.js.map +1 -1
- package/dist/Program.d.ts +76 -46
- package/dist/Program.js +254 -180
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +7 -7
- package/dist/ProgramBuilder.js +37 -43
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +33 -23
- package/dist/Scope.js +222 -147
- package/dist/Scope.js.map +1 -1
- package/dist/SemanticTokenUtils.d.ts +14 -0
- package/dist/SemanticTokenUtils.js +81 -0
- package/dist/SemanticTokenUtils.js.map +1 -0
- package/dist/SymbolTable.d.ts +9 -3
- package/dist/SymbolTable.js +40 -13
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.d.ts +7 -2
- package/dist/XmlScope.js +67 -29
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +27 -0
- package/dist/astUtils/AstEditor.js +97 -0
- package/dist/astUtils/AstEditor.js.map +1 -0
- package/dist/astUtils/AstEditor.spec.d.ts +1 -0
- package/dist/astUtils/AstEditor.spec.js +133 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +15 -1
- package/dist/astUtils/creators.js +39 -9
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +4 -4
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/index.js +1 -1
- package/dist/astUtils/reflection.d.ts +20 -8
- package/dist/astUtils/reflection.js +42 -1
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +115 -115
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/stackedVisitor.js.map +1 -1
- package/dist/astUtils/stackedVisitor.spec.js +13 -13
- package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
- package/dist/astUtils/visitors.js +1 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +28 -28
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +4 -3
- package/dist/astUtils/xml.js +8 -3
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +2 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +5 -6
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +30 -30
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +7 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +63 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +45 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +1 -0
- package/dist/diagnosticUtils.d.ts +1 -0
- package/dist/diagnosticUtils.js +14 -7
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +2 -2
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +486 -71
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +48 -23
- package/dist/files/BrsFile.js +403 -233
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +367 -316
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +13 -6
- package/dist/files/XmlFile.js +27 -21
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +274 -228
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +49 -49
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/globalCallables.d.ts +3 -1
- package/dist/globalCallables.js +359 -87
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +51 -14
- package/dist/lexer/Lexer.d.ts +14 -1
- package/dist/lexer/Lexer.js +91 -21
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +187 -132
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +2 -2
- package/dist/lexer/TokenKind.d.ts +7 -1
- package/dist/lexer/TokenKind.js +51 -3
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/lexer/index.js +2 -1
- package/dist/lexer/index.js.map +1 -1
- package/dist/parser/BrsTranspileState.d.ts +7 -0
- package/dist/parser/BrsTranspileState.js +10 -1
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +23 -5
- package/dist/parser/Expression.js +124 -75
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +159 -60
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +114 -26
- package/dist/parser/Parser.js +471 -126
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +396 -235
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +41 -4
- package/dist/parser/SGParser.js +186 -175
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +35 -22
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +206 -38
- package/dist/parser/SGTypes.js +470 -161
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/SGTypes.spec.d.ts +1 -0
- package/dist/parser/SGTypes.spec.js +351 -0
- package/dist/parser/SGTypes.spec.js.map +1 -0
- package/dist/parser/Statement.d.ts +92 -18
- package/dist/parser/Statement.js +287 -58
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +11 -11
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +15 -7
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/index.js +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +8 -7
- package/dist/parser/tests/Parser.spec.js +12 -8
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +50 -50
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +31 -31
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +174 -156
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +32 -32
- 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 +105 -105
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +148 -124
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +17 -17
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +30 -30
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +16 -16
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +247 -247
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +73 -73
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +36 -36
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -47
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +35 -35
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +26 -26
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +170 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
- package/dist/parser/tests/expression/Relational.spec.js +42 -42
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +8 -8
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +12 -12
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +35 -35
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +39 -39
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +21 -21
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Function.spec.js +192 -192
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +11 -11
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +46 -46
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +61 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
- package/dist/parser/tests/statement/LibraryStatement.spec.js +10 -10
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +37 -36
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +30 -30
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +43 -43
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +69 -69
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +9 -9
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/parser/tests/statement/Throw.spec.js +5 -5
- package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +1 -1
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/preprocessor/Preprocessor.spec.js +49 -49
- package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
- package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
- package/dist/preprocessor/index.js +1 -1
- package/dist/types/ArrayType.js +5 -4
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +8 -8
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BooleanType.js +3 -3
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +2 -2
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +19 -5
- package/dist/types/BscType.js +9 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/CustomType.d.ts +8 -5
- package/dist/types/CustomType.js +17 -6
- package/dist/types/CustomType.js.map +1 -1
- package/dist/types/DoubleType.js +8 -8
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +2 -2
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.js +1 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +2 -2
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/FloatType.d.ts +1 -1
- package/dist/types/FloatType.js +8 -8
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +2 -2
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +5 -11
- package/dist/types/FunctionType.js +24 -13
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +11 -5
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/IntegerType.d.ts +1 -1
- package/dist/types/IntegerType.js +8 -8
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +2 -2
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +8 -2
- package/dist/types/InterfaceType.js +42 -6
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.d.ts +1 -0
- package/dist/types/InterfaceType.spec.js +174 -0
- package/dist/types/InterfaceType.spec.js.map +1 -0
- package/dist/types/InvalidType.js +4 -4
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +2 -2
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LazyType.d.ts +9 -7
- package/dist/types/LazyType.js +22 -10
- package/dist/types/LazyType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +1 -1
- package/dist/types/LongIntegerType.js +8 -8
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +2 -2
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/ObjectType.d.ts +7 -4
- package/dist/types/ObjectType.js +6 -3
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +2 -2
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/StringType.js +3 -3
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +2 -2
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/UninitializedType.js +3 -3
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/VoidType.js +3 -3
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +2 -2
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helpers.d.ts +42 -0
- package/dist/types/helpers.js +113 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/util.d.ts +77 -17
- package/dist/util.js +247 -59
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +5 -1
- package/dist/validators/ClassValidator.js +59 -24
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const chai_1 = require("chai");
|
|
4
|
-
const path = require("path");
|
|
5
4
|
const sinonImport = require("sinon");
|
|
6
5
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
7
6
|
const fsExtra = require("fs-extra");
|
|
8
7
|
const DiagnosticMessages_1 = require("../DiagnosticMessages");
|
|
9
8
|
const Program_1 = require("../Program");
|
|
10
|
-
const BrsFile_1 = require("./BrsFile");
|
|
11
9
|
const XmlFile_1 = require("./XmlFile");
|
|
12
10
|
const util_1 = require("../util");
|
|
13
11
|
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
12
|
+
const ProgramBuilder_1 = require("../ProgramBuilder");
|
|
13
|
+
const Logger_1 = require("../Logger");
|
|
14
14
|
describe('XmlFile', () => {
|
|
15
|
-
const tempDir = util_1.standardizePath `${process.cwd()}/.tmp`;
|
|
16
|
-
const rootDir = util_1.standardizePath `${tempDir}/rootDir`;
|
|
17
|
-
const stagingDir = util_1.standardizePath `${tempDir}/stagingDir`;
|
|
15
|
+
const tempDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp`;
|
|
16
|
+
const rootDir = (0, util_1.standardizePath) `${tempDir}/rootDir`;
|
|
17
|
+
const stagingDir = (0, util_1.standardizePath) `${tempDir}/stagingDir`;
|
|
18
18
|
let program;
|
|
19
19
|
let sinon = sinonImport.createSandbox();
|
|
20
20
|
let file;
|
|
21
|
-
let testTranspile = testHelpers_spec_1.getTestTranspile(() => [program, rootDir]);
|
|
21
|
+
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
|
|
22
22
|
beforeEach(() => {
|
|
23
23
|
fsExtra.ensureDirSync(tempDir);
|
|
24
24
|
fsExtra.emptyDirSync(tempDir);
|
|
@@ -37,33 +37,33 @@ describe('XmlFile', () => {
|
|
|
37
37
|
program.plugins.add({
|
|
38
38
|
name: 'allows modifying the parsed XML model',
|
|
39
39
|
afterFileParse: (event) => {
|
|
40
|
-
event.file.parser.ast.root.attributes[0].value.text = expected;
|
|
40
|
+
event.file.parser.ast.root.attributes[0].tokens.value.text = expected;
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
-
file = program.
|
|
43
|
+
file = program.setFile('components/ChildScene.xml', (0, testHelpers_spec_1.trim) `
|
|
44
44
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
45
45
|
<component name="ChildScene" extends="Scene">
|
|
46
46
|
<script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
|
|
47
47
|
</component>
|
|
48
48
|
`);
|
|
49
|
-
chai_1.expect(file.componentName.text).to.equal(expected);
|
|
49
|
+
(0, chai_1.expect)(file.componentName.text).to.equal(expected);
|
|
50
50
|
});
|
|
51
51
|
it('only removes specified attribute when calling setAttribute', () => {
|
|
52
52
|
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
53
53
|
program.plugins.add({
|
|
54
54
|
name: 'allows modifying the parsed XML model',
|
|
55
55
|
afterFileParse: () => {
|
|
56
|
-
let child = file.parser.ast.component.children.
|
|
57
|
-
chai_1.expect(child.attributes).to.have.lengthOf(4);
|
|
58
|
-
child.
|
|
59
|
-
chai_1.expect(child.
|
|
60
|
-
chai_1.expect(child.attributes).to.have.lengthOf(3);
|
|
61
|
-
child.
|
|
62
|
-
chai_1.expect(child.
|
|
63
|
-
chai_1.expect(child.attributes).to.have.lengthOf(2);
|
|
56
|
+
let child = file.parser.ast.component.children.childNodes[0];
|
|
57
|
+
(0, chai_1.expect)(child.attributes).to.have.lengthOf(4);
|
|
58
|
+
child.setAttributeValue('text', undefined);
|
|
59
|
+
(0, chai_1.expect)(child.id).to.equal('one');
|
|
60
|
+
(0, chai_1.expect)(child.attributes).to.have.lengthOf(3);
|
|
61
|
+
child.setAttributeValue('text3', undefined);
|
|
62
|
+
(0, chai_1.expect)(child.id).to.equal('one');
|
|
63
|
+
(0, chai_1.expect)(child.attributes).to.have.lengthOf(2);
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
|
-
file.parse(testHelpers_spec_1.trim `
|
|
66
|
+
file.parse((0, testHelpers_spec_1.trim) `
|
|
67
67
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
68
68
|
<component name="ChildScene" extends="Scene">
|
|
69
69
|
<script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
|
|
@@ -78,17 +78,17 @@ describe('XmlFile', () => {
|
|
|
78
78
|
`);
|
|
79
79
|
});
|
|
80
80
|
it('supports importing BrighterScript files', () => {
|
|
81
|
-
file = program.
|
|
81
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
82
82
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
83
83
|
<component name="ChildScene" extends="Scene">
|
|
84
84
|
<script type="text/brightscript" uri="ChildScene.bs" />
|
|
85
85
|
</component>
|
|
86
86
|
`);
|
|
87
|
-
chai_1.expect(file.scriptTagImports.map(x => x.pkgPath)[0]).to.equal(
|
|
87
|
+
(0, chai_1.expect)(file.scriptTagImports.map(x => x.pkgPath)[0]).to.equal('pkg:/components/ChildScene.bs');
|
|
88
88
|
});
|
|
89
89
|
it('does not include commented-out script imports', () => {
|
|
90
90
|
var _a, _b;
|
|
91
|
-
file = program.
|
|
91
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
92
92
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
93
93
|
<component name="ChildScene" extends="Scene">
|
|
94
94
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
@@ -97,40 +97,40 @@ describe('XmlFile', () => {
|
|
|
97
97
|
-->
|
|
98
98
|
</component>
|
|
99
99
|
`);
|
|
100
|
-
chai_1.expect((_b = (_a = file.scriptTagImports) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.pkgPath).to.eql(
|
|
100
|
+
(0, chai_1.expect)((_b = (_a = file.scriptTagImports) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.pkgPath).to.eql('pkg:/components/ChildScene.brs');
|
|
101
101
|
});
|
|
102
102
|
it('finds scripts when more than one per line', () => {
|
|
103
103
|
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
104
|
-
file.parse(testHelpers_spec_1.trim `
|
|
104
|
+
file.parse((0, testHelpers_spec_1.trim) `
|
|
105
105
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
106
106
|
<component name="ChildScene" extends="Scene">
|
|
107
107
|
<script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
|
|
108
108
|
</component>
|
|
109
109
|
`);
|
|
110
|
-
chai_1.expect(file.scriptTagImports).to.be.lengthOf(3);
|
|
111
|
-
chai_1.expect(file.scriptTagImports[0]).to.deep.include({
|
|
110
|
+
(0, chai_1.expect)(file.scriptTagImports).to.be.lengthOf(3);
|
|
111
|
+
(0, chai_1.expect)(file.scriptTagImports[0]).to.deep.include({
|
|
112
112
|
text: 'ChildScene1.brs',
|
|
113
113
|
filePathRange: vscode_languageserver_1.Range.create(2, 42, 2, 57)
|
|
114
114
|
});
|
|
115
|
-
chai_1.expect(file.scriptTagImports[1]).to.deep.include({
|
|
115
|
+
(0, chai_1.expect)(file.scriptTagImports[1]).to.deep.include({
|
|
116
116
|
text: 'ChildScene2.brs',
|
|
117
117
|
filePathRange: vscode_languageserver_1.Range.create(2, 100, 2, 115)
|
|
118
118
|
});
|
|
119
|
-
chai_1.expect(file.scriptTagImports[2]).to.deep.include({
|
|
119
|
+
(0, chai_1.expect)(file.scriptTagImports[2]).to.deep.include({
|
|
120
120
|
text: 'ChildScene3.brs',
|
|
121
121
|
filePathRange: vscode_languageserver_1.Range.create(2, 158, 2, 173)
|
|
122
122
|
});
|
|
123
123
|
});
|
|
124
124
|
it('finds component names', () => {
|
|
125
125
|
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
126
|
-
file.parse(testHelpers_spec_1.trim `
|
|
126
|
+
file.parse((0, testHelpers_spec_1.trim) `
|
|
127
127
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
128
128
|
<component name="ChildScene" extends="ParentScene">
|
|
129
129
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
130
130
|
</component>
|
|
131
131
|
`);
|
|
132
|
-
chai_1.expect(file.parentComponentName.text).to.equal('ParentScene');
|
|
133
|
-
chai_1.expect(file.componentName.text).to.equal('ChildScene');
|
|
132
|
+
(0, chai_1.expect)(file.parentComponentName.text).to.equal('ParentScene');
|
|
133
|
+
(0, chai_1.expect)(file.componentName.text).to.equal('ChildScene');
|
|
134
134
|
});
|
|
135
135
|
it('Adds error when whitespace appears before the prolog', () => {
|
|
136
136
|
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
@@ -139,16 +139,16 @@ describe('XmlFile', () => {
|
|
|
139
139
|
<component name="ChildScene" extends="ParentScene">
|
|
140
140
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
141
141
|
</component>`);
|
|
142
|
-
chai_1.expect(file.diagnostics).to.be.lengthOf(2);
|
|
143
|
-
chai_1.expect(file.diagnostics[0]).to.deep.include({
|
|
142
|
+
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(2);
|
|
143
|
+
(0, chai_1.expect)(file.diagnostics[0]).to.deep.include({
|
|
144
144
|
code: DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code,
|
|
145
145
|
range: vscode_languageserver_1.Range.create(1, 16, 1, 22)
|
|
146
146
|
});
|
|
147
|
-
chai_1.expect(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('Syntax error: whitespace found before the XML prolog')), { range: vscode_languageserver_1.Range.create(0, 0, 1, 16) }));
|
|
147
|
+
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('Syntax error: whitespace found before the XML prolog')), { range: vscode_languageserver_1.Range.create(0, 0, 1, 16) }));
|
|
148
148
|
});
|
|
149
149
|
it('Adds error when an unknown tag is found in xml', () => {
|
|
150
150
|
file = new XmlFile_1.XmlFile('abs', 'rel', program);
|
|
151
|
-
file.parse(testHelpers_spec_1.trim `
|
|
151
|
+
file.parse((0, testHelpers_spec_1.trim) `
|
|
152
152
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
153
153
|
<component name="ChildScene" extends="ParentScene">
|
|
154
154
|
<interface>
|
|
@@ -157,58 +157,58 @@ describe('XmlFile', () => {
|
|
|
157
157
|
<unexpectedToo />
|
|
158
158
|
</component>
|
|
159
159
|
`);
|
|
160
|
-
chai_1.expect(file.diagnostics).to.be.lengthOf(2);
|
|
161
|
-
chai_1.expect(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpected')), { range: vscode_languageserver_1.Range.create(3, 9, 3, 19) }));
|
|
162
|
-
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) }));
|
|
160
|
+
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(2);
|
|
161
|
+
(0, chai_1.expect)(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpected')), { range: vscode_languageserver_1.Range.create(3, 9, 3, 19) }));
|
|
162
|
+
(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) }));
|
|
163
163
|
});
|
|
164
164
|
it('Adds error when no component is declared in xml', () => {
|
|
165
|
-
file = program.
|
|
165
|
+
file = program.setFile('components/file.xml', '<script type="text/brightscript" uri="ChildScene.brs" />');
|
|
166
166
|
program.validate();
|
|
167
|
-
chai_1.expect(file.diagnostics).to.be.lengthOf(2);
|
|
168
|
-
chai_1.expect(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('script')), { range: vscode_languageserver_1.Range.create(0, 1, 0, 7) }));
|
|
169
|
-
chai_1.expect(file.diagnostics[1]).to.deep.include(DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration());
|
|
167
|
+
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(2);
|
|
168
|
+
(0, chai_1.expect)(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('script')), { range: vscode_languageserver_1.Range.create(0, 1, 0, 7) }));
|
|
169
|
+
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include(DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration());
|
|
170
170
|
});
|
|
171
171
|
it('adds error when component does not declare a name', () => {
|
|
172
|
-
file = program.
|
|
172
|
+
file = program.setFile('components/ParentScene.xml', (0, testHelpers_spec_1.trim) `
|
|
173
173
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
174
174
|
<component extends="ParentScene">
|
|
175
175
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
176
176
|
</component>
|
|
177
177
|
`);
|
|
178
178
|
program.validate();
|
|
179
|
-
chai_1.expect(file.diagnostics).to.be.lengthOf(1);
|
|
180
|
-
chai_1.expect(file.diagnostics[0]).to.deep.include({
|
|
179
|
+
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(1);
|
|
180
|
+
(0, chai_1.expect)(file.diagnostics[0]).to.deep.include({
|
|
181
181
|
message: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute().message,
|
|
182
182
|
range: vscode_languageserver_1.Range.create(1, 1, 1, 10)
|
|
183
183
|
});
|
|
184
184
|
});
|
|
185
185
|
it('catches xml parse errors', () => {
|
|
186
|
-
file = program.
|
|
186
|
+
file = program.setFile('components/ParentScene.xml', (0, testHelpers_spec_1.trim) `
|
|
187
187
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
188
188
|
<component 1extends="ParentScene">
|
|
189
189
|
</component>
|
|
190
190
|
`);
|
|
191
191
|
program.validate();
|
|
192
|
-
chai_1.expect(file.diagnostics).to.be.lengthOf(2);
|
|
193
|
-
chai_1.expect(file.diagnostics[0].code).to.equal(DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code); //unexpected character '1'
|
|
194
|
-
chai_1.expect(file.diagnostics[1]).to.deep.include({
|
|
192
|
+
(0, chai_1.expect)(file.diagnostics).to.be.lengthOf(2);
|
|
193
|
+
(0, chai_1.expect)(file.diagnostics[0].code).to.equal(DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code); //unexpected character '1'
|
|
194
|
+
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include({
|
|
195
195
|
code: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute().code,
|
|
196
196
|
range: vscode_languageserver_1.Range.create(1, 1, 1, 10)
|
|
197
197
|
});
|
|
198
198
|
});
|
|
199
199
|
it('finds script imports', () => {
|
|
200
200
|
file = new XmlFile_1.XmlFile('abspath/components/cmp1.xml', 'components/cmp1.xml', program);
|
|
201
|
-
file.parse(testHelpers_spec_1.trim `
|
|
201
|
+
file.parse((0, testHelpers_spec_1.trim) `
|
|
202
202
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
203
203
|
<component name="Cmp1" extends="Scene">
|
|
204
204
|
<script type="text/brightscript" uri="pkg:/components/cmp1.brs" />
|
|
205
205
|
</component>
|
|
206
206
|
`);
|
|
207
|
-
chai_1.expect(file.scriptTagImports.length).to.equal(1);
|
|
208
|
-
chai_1.expect(file.scriptTagImports[0]).to.deep.include({
|
|
207
|
+
(0, chai_1.expect)(file.scriptTagImports.length).to.equal(1);
|
|
208
|
+
(0, chai_1.expect)(file.scriptTagImports[0]).to.deep.include({
|
|
209
209
|
sourceFile: file,
|
|
210
210
|
text: 'pkg:/components/cmp1.brs',
|
|
211
|
-
pkgPath: `components
|
|
211
|
+
pkgPath: `pkg:/components/cmp1.brs`,
|
|
212
212
|
filePathRange: vscode_languageserver_1.Range.create(2, 42, 2, 66)
|
|
213
213
|
});
|
|
214
214
|
});
|
|
@@ -224,153 +224,156 @@ describe('XmlFile', () => {
|
|
|
224
224
|
}
|
|
225
225
|
});
|
|
226
226
|
it('resolves relative paths', () => {
|
|
227
|
-
file = program.
|
|
227
|
+
file = program.setFile({
|
|
228
228
|
src: `${rootDir}/components/comp1.xml`,
|
|
229
229
|
dest: 'components/comp1.xml'
|
|
230
|
-
}, testHelpers_spec_1.trim `
|
|
230
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
231
231
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
232
232
|
<component name="Cmp1" extends="Scene">
|
|
233
233
|
<script type="text/brightscript" uri="cmp1.brs" />
|
|
234
234
|
</component>
|
|
235
235
|
`);
|
|
236
|
-
chai_1.expect(file.scriptTagImports.length).to.equal(1);
|
|
237
|
-
chai_1.expect(file.scriptTagImports[0]).to.deep.include({
|
|
236
|
+
(0, chai_1.expect)(file.scriptTagImports.length).to.equal(1);
|
|
237
|
+
(0, chai_1.expect)(file.scriptTagImports[0]).to.deep.include({
|
|
238
238
|
text: 'cmp1.brs',
|
|
239
|
-
pkgPath: `components
|
|
239
|
+
pkgPath: `pkg:/components/cmp1.brs`
|
|
240
240
|
});
|
|
241
241
|
});
|
|
242
242
|
it('finds correct position for empty uri in script tag', () => {
|
|
243
243
|
var _a;
|
|
244
|
-
file = program.
|
|
244
|
+
file = program.setFile({
|
|
245
245
|
src: `${rootDir}/components/comp1.xml`,
|
|
246
246
|
dest: 'components/comp1.xml'
|
|
247
|
-
}, testHelpers_spec_1.trim `
|
|
247
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
248
248
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
249
249
|
<component name="Cmp1" extends="Scene">
|
|
250
250
|
<script type="text/brightscript" uri="" />
|
|
251
251
|
</component>
|
|
252
252
|
`);
|
|
253
|
-
chai_1.expect(file.scriptTagImports.length).to.equal(1);
|
|
254
|
-
chai_1.expect((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.filePathRange).to.eql(vscode_languageserver_1.Range.create(2, 42, 2, 42));
|
|
253
|
+
(0, chai_1.expect)(file.scriptTagImports.length).to.equal(1);
|
|
254
|
+
(0, chai_1.expect)((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.filePathRange).to.eql(vscode_languageserver_1.Range.create(2, 42, 2, 42));
|
|
255
255
|
});
|
|
256
256
|
});
|
|
257
257
|
describe('doesReferenceFile', () => {
|
|
258
258
|
it('compares case insensitive', () => {
|
|
259
|
-
let xmlFile = program.
|
|
259
|
+
let xmlFile = program.setFile({
|
|
260
260
|
src: `${rootDir}/components/comp1.xml`,
|
|
261
261
|
dest: 'components/comp1.xml'
|
|
262
|
-
}, testHelpers_spec_1.trim `
|
|
262
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
263
263
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
264
264
|
<component name="Cmp1" extends="Scene">
|
|
265
265
|
<script type="text/brightscript" uri="HeroGrid.brs" />
|
|
266
266
|
</component>
|
|
267
267
|
`);
|
|
268
|
-
let brsFile = program.
|
|
268
|
+
let brsFile = program.setFile({
|
|
269
269
|
src: `${rootDir}/components/HEROGRID.brs`,
|
|
270
270
|
dest: `components/HEROGRID.brs`
|
|
271
271
|
}, ``);
|
|
272
|
-
chai_1.expect(xmlFile.doesReferenceFile(brsFile)).to.be.true;
|
|
272
|
+
(0, chai_1.expect)(xmlFile.doesReferenceFile(brsFile)).to.be.true;
|
|
273
273
|
});
|
|
274
274
|
});
|
|
275
275
|
describe('autoImportComponentScript', () => {
|
|
276
276
|
it('is not enabled by default', () => {
|
|
277
|
-
program.
|
|
277
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
278
278
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
279
279
|
<component name="ParentScene" extends="GrandparentScene">
|
|
280
280
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
281
281
|
</component>
|
|
282
282
|
`);
|
|
283
|
-
program.
|
|
283
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
284
284
|
function libFunc()
|
|
285
285
|
end function
|
|
286
286
|
`);
|
|
287
|
-
program.
|
|
287
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
288
288
|
function init()
|
|
289
289
|
libFunc()
|
|
290
290
|
end function
|
|
291
291
|
`);
|
|
292
292
|
program.validate();
|
|
293
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message)).to.include(DiagnosticMessages_1.DiagnosticMessages.fileNotReferencedByAnyOtherFile().message);
|
|
293
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => x.message)).to.include(DiagnosticMessages_1.DiagnosticMessages.fileNotReferencedByAnyOtherFile().message);
|
|
294
294
|
});
|
|
295
295
|
it('is not enabled by default', () => {
|
|
296
296
|
program = new Program_1.Program({
|
|
297
297
|
rootDir: rootDir,
|
|
298
298
|
autoImportComponentScript: true
|
|
299
299
|
});
|
|
300
|
-
program.
|
|
300
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
301
301
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
302
302
|
<component name="ParentScene" extends="GrandparentScene">
|
|
303
303
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
304
304
|
</component>
|
|
305
305
|
`);
|
|
306
|
-
program.
|
|
306
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
307
307
|
function libFunc()
|
|
308
308
|
end function
|
|
309
309
|
`);
|
|
310
|
-
program.
|
|
310
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
311
311
|
function init()
|
|
312
312
|
libFunc()
|
|
313
313
|
end function
|
|
314
314
|
`);
|
|
315
315
|
program.validate();
|
|
316
316
|
//there should be no errors
|
|
317
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message)[0]).not.to.exist;
|
|
317
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => x.message)[0]).not.to.exist;
|
|
318
318
|
});
|
|
319
319
|
});
|
|
320
320
|
describe('getCompletions', () => {
|
|
321
321
|
it('formats completion paths with proper slashes', () => {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
322
|
+
program.setFile('pkg:/components/component1/component1.brs', '');
|
|
323
|
+
const xmlFile = program.setFile('components/component1/component1.xml', (0, testHelpers_spec_1.trim) `
|
|
324
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
325
|
+
<component name="Component1" extends="Group">
|
|
326
|
+
</component
|
|
327
|
+
`);
|
|
325
328
|
xmlFile.parser.references.scriptTagImports.push({
|
|
326
|
-
pkgPath:
|
|
329
|
+
pkgPath: 'pkg:/components/component1/component1.brs',
|
|
327
330
|
text: 'component1.brs',
|
|
328
331
|
filePathRange: vscode_languageserver_1.Range.create(1, 1, 1, 1)
|
|
329
332
|
});
|
|
330
|
-
chai_1.expect(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[0]).to.include({
|
|
333
|
+
(0, chai_1.expect)(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[0]).to.include({
|
|
331
334
|
label: 'component1.brs',
|
|
332
335
|
kind: vscode_languageserver_1.CompletionItemKind.File
|
|
333
336
|
});
|
|
334
|
-
chai_1.expect(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[1]).to.include({
|
|
337
|
+
(0, chai_1.expect)(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[1]).to.include({
|
|
335
338
|
label: 'pkg:/components/component1/component1.brs',
|
|
336
339
|
kind: vscode_languageserver_1.CompletionItemKind.File
|
|
337
340
|
});
|
|
338
341
|
});
|
|
339
342
|
it('returns empty set when out of range', () => {
|
|
340
|
-
program.
|
|
341
|
-
chai_1.expect(file.getCompletions(vscode_languageserver_1.Position.create(99, 99))).to.be.empty;
|
|
343
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
344
|
+
(0, chai_1.expect)(file.getCompletions(vscode_languageserver_1.Position.create(99, 99))).to.be.empty;
|
|
342
345
|
});
|
|
343
346
|
//TODO - refine this test once cdata scripts are supported
|
|
344
347
|
it('prevents scope completions entirely', () => {
|
|
345
|
-
program.
|
|
346
|
-
let xmlFile = program.
|
|
348
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
349
|
+
let xmlFile = program.setFile({ src: `${rootDir}/components/Component1.xml`, dest: 'components/component1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
347
350
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
348
351
|
<component name="ParentScene" extends="GrandparentScene">
|
|
349
352
|
<script type="text/brightscript" uri="./Component1.brs" />
|
|
350
353
|
</component>
|
|
351
354
|
`);
|
|
352
|
-
chai_1.expect(program.getCompletions(xmlFile.
|
|
355
|
+
(0, chai_1.expect)(program.getCompletions(xmlFile.srcPath, vscode_languageserver_1.Position.create(1, 1))).to.be.empty;
|
|
353
356
|
});
|
|
354
357
|
});
|
|
355
358
|
describe('getAllDependencies', () => {
|
|
356
359
|
it('returns own imports', () => {
|
|
357
|
-
file = program.
|
|
360
|
+
file = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
358
361
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
359
362
|
<component name="ChildScene" extends="BaseScene">
|
|
360
363
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
361
364
|
</component>
|
|
362
365
|
`);
|
|
363
|
-
chai_1.expect(file.getOwnDependencies().sort()).to.eql([
|
|
364
|
-
|
|
365
|
-
|
|
366
|
+
(0, chai_1.expect)(file.getOwnDependencies().sort()).to.eql([
|
|
367
|
+
'pkg:/source/lib.brs',
|
|
368
|
+
'pkg:/source/lib.d.bs'
|
|
366
369
|
]);
|
|
367
370
|
});
|
|
368
371
|
});
|
|
369
372
|
it('invalidates dependent scopes on change', () => {
|
|
370
|
-
let xmlFile = program.
|
|
373
|
+
let xmlFile = program.setFile({
|
|
371
374
|
src: `${rootDir}/components/comp1.xml`,
|
|
372
375
|
dest: `components/comp1.xml`
|
|
373
|
-
}, testHelpers_spec_1.trim `
|
|
376
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
374
377
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
375
378
|
<component name="ChildScene" extends="BaseScene">
|
|
376
379
|
<script type="text/brightscript" uri="pkg:/source/lib.bs" />
|
|
@@ -379,68 +382,68 @@ describe('XmlFile', () => {
|
|
|
379
382
|
program.validate();
|
|
380
383
|
let scope = program.getScopesForFile(xmlFile)[0];
|
|
381
384
|
//scope should be validated
|
|
382
|
-
chai_1.expect(scope.isValidated);
|
|
385
|
+
(0, chai_1.expect)(scope.isValidated);
|
|
383
386
|
//add lib1
|
|
384
|
-
program.
|
|
387
|
+
program.setFile({
|
|
385
388
|
src: `${rootDir}/source/lib.bs`,
|
|
386
389
|
dest: `source/lib.bs`
|
|
387
390
|
}, ``);
|
|
388
391
|
//adding a dependent file should have invalidated the scope
|
|
389
|
-
chai_1.expect(scope.isValidated).to.be.false;
|
|
392
|
+
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
390
393
|
program.validate();
|
|
391
|
-
chai_1.expect(scope.isValidated).to.be.true;
|
|
394
|
+
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
392
395
|
//update lib1 to include an import
|
|
393
|
-
program.
|
|
396
|
+
program.setFile({
|
|
394
397
|
src: `${rootDir}/source/lib.bs`,
|
|
395
398
|
dest: `source/lib.bs`
|
|
396
399
|
}, `
|
|
397
400
|
import "lib2.bs"
|
|
398
401
|
`);
|
|
399
402
|
//scope should have been invalidated again
|
|
400
|
-
chai_1.expect(scope.isValidated).to.be.false;
|
|
403
|
+
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
401
404
|
program.validate();
|
|
402
|
-
chai_1.expect(scope.isValidated).to.be.true;
|
|
405
|
+
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
403
406
|
//add the lib2 imported from lib
|
|
404
|
-
program.
|
|
407
|
+
program.setFile({
|
|
405
408
|
src: `${rootDir}/source/lib2.bs`,
|
|
406
409
|
dest: `source/lib2.bs`
|
|
407
410
|
}, ``);
|
|
408
411
|
//scope should have been invalidated again because of chained dependency
|
|
409
|
-
chai_1.expect(scope.isValidated).to.be.false;
|
|
412
|
+
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
410
413
|
program.validate();
|
|
411
|
-
chai_1.expect(scope.isValidated).to.be.true;
|
|
414
|
+
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
412
415
|
program.removeFile(`${rootDir}/source/lib.bs`);
|
|
413
|
-
chai_1.expect(scope.isValidated).to.be.false;
|
|
416
|
+
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
414
417
|
});
|
|
415
418
|
it('does not invalidate unrelated scopes on change', () => {
|
|
416
|
-
let xmlFile1 = program.
|
|
419
|
+
let xmlFile1 = program.setFile({
|
|
417
420
|
src: `${rootDir}/components/comp1.xml`,
|
|
418
421
|
dest: `components/comp1.xml`
|
|
419
|
-
}, testHelpers_spec_1.trim `
|
|
422
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
420
423
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
421
424
|
<component name="ChildScene1" extends="BaseScene">
|
|
422
425
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
423
426
|
</component>
|
|
424
427
|
`);
|
|
425
|
-
let xmlFile2 = program.
|
|
428
|
+
let xmlFile2 = program.setFile({
|
|
426
429
|
src: `${rootDir}/components/comp2.xml`,
|
|
427
430
|
dest: `components/comp2.xml`
|
|
428
|
-
}, testHelpers_spec_1.trim `
|
|
431
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
429
432
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
430
433
|
<component name="ChildScene2" extends="BaseScene">
|
|
431
434
|
</component>
|
|
432
435
|
`);
|
|
433
436
|
program.validate();
|
|
434
437
|
//scope should be validated
|
|
435
|
-
chai_1.expect(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.true;
|
|
436
|
-
chai_1.expect(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
438
|
+
(0, chai_1.expect)(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.true;
|
|
439
|
+
(0, chai_1.expect)(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
437
440
|
//add the lib file
|
|
438
|
-
program.
|
|
441
|
+
program.setFile({
|
|
439
442
|
src: `${rootDir}/source/lib.brs`,
|
|
440
443
|
dest: `source/lib.brs`
|
|
441
444
|
}, ``);
|
|
442
|
-
chai_1.expect(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.false;
|
|
443
|
-
chai_1.expect(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
445
|
+
(0, chai_1.expect)(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.false;
|
|
446
|
+
(0, chai_1.expect)(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
444
447
|
});
|
|
445
448
|
it('allows adding diagnostics', () => {
|
|
446
449
|
const expected = [{
|
|
@@ -450,54 +453,54 @@ describe('XmlFile', () => {
|
|
|
450
453
|
}];
|
|
451
454
|
file.addDiagnostics(expected);
|
|
452
455
|
const actual = file.getDiagnostics();
|
|
453
|
-
chai_1.expect(actual).deep.equal(expected);
|
|
456
|
+
(0, chai_1.expect)(actual).deep.equal(expected);
|
|
454
457
|
});
|
|
455
458
|
describe('component extends', () => {
|
|
456
459
|
it('works for single-line', () => {
|
|
457
|
-
file = program.
|
|
460
|
+
file = program.setFile({
|
|
458
461
|
src: `${rootDir}/components/comp1.xml`,
|
|
459
462
|
dest: `components/comp1.xml`
|
|
460
|
-
}, testHelpers_spec_1.trim `
|
|
463
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
461
464
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
462
465
|
<component name="ChildScene" extends="BaseScene">
|
|
463
466
|
</component>
|
|
464
467
|
`);
|
|
465
|
-
chai_1.expect(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(1, 38, 1, 47));
|
|
468
|
+
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(1, 38, 1, 47));
|
|
466
469
|
});
|
|
467
470
|
it('works for multi-line', () => {
|
|
468
|
-
file = program.
|
|
471
|
+
file = program.setFile({
|
|
469
472
|
src: `${rootDir}/components/comp1.xml`,
|
|
470
473
|
dest: `components/comp1.xml`
|
|
471
|
-
}, testHelpers_spec_1.trim `
|
|
474
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
472
475
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
473
476
|
<component name="ChildScene"
|
|
474
477
|
extends="BaseScene">
|
|
475
478
|
</component>
|
|
476
479
|
`);
|
|
477
|
-
chai_1.expect(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(2, 13, 2, 22));
|
|
480
|
+
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(2, 13, 2, 22));
|
|
478
481
|
});
|
|
479
482
|
it('does not throw when unable to find extends', () => {
|
|
480
|
-
file = program.
|
|
483
|
+
file = program.setFile({
|
|
481
484
|
src: `${rootDir}/components/comp1.xml`,
|
|
482
485
|
dest: `components/comp1.xml`
|
|
483
|
-
}, testHelpers_spec_1.trim `
|
|
486
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
484
487
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
485
488
|
<component name="ChildScene">
|
|
486
489
|
</component>
|
|
487
490
|
`);
|
|
488
|
-
chai_1.expect(file.parentComponentName).to.not.exist;
|
|
491
|
+
(0, chai_1.expect)(file.parentComponentName).to.not.exist;
|
|
489
492
|
});
|
|
490
493
|
it('adds warning when no "extends" attribute is found', () => {
|
|
491
|
-
file = program.
|
|
494
|
+
file = program.setFile({
|
|
492
495
|
src: `${rootDir}/components/comp1.xml`,
|
|
493
496
|
dest: `components/comp1.xml`
|
|
494
|
-
}, testHelpers_spec_1.trim `
|
|
497
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
495
498
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
496
499
|
<component name="ChildScene">
|
|
497
500
|
</component>
|
|
498
501
|
`);
|
|
499
502
|
program.validate();
|
|
500
|
-
chai_1.expect(file.getDiagnostics()[0]).to.include({
|
|
503
|
+
(0, chai_1.expect)(file.getDiagnostics()[0]).to.include({
|
|
501
504
|
severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
|
|
502
505
|
message: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
|
|
503
506
|
});
|
|
@@ -509,23 +512,55 @@ describe('XmlFile', () => {
|
|
|
509
512
|
autoImportComponentScript: true,
|
|
510
513
|
rootDir: rootDir
|
|
511
514
|
});
|
|
512
|
-
program.
|
|
515
|
+
program.setFile({
|
|
513
516
|
src: `${rootDir}/components/SimpleScene.bs`,
|
|
514
517
|
dest: `components/SimpleScene.bs`
|
|
515
518
|
}, '');
|
|
516
|
-
program.
|
|
519
|
+
program.setFile({
|
|
517
520
|
src: `${rootDir}/components/SimpleScene.xml`,
|
|
518
521
|
dest: `components/SimpleScene.xml`
|
|
519
|
-
}, testHelpers_spec_1.trim `
|
|
522
|
+
}, (0, testHelpers_spec_1.trim) `
|
|
520
523
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
521
524
|
<component name="SimpleScene" extends="Scene">
|
|
522
525
|
<script type="text/brighterscript" uri="SimpleScene.bs" />
|
|
523
526
|
</component>
|
|
524
527
|
`);
|
|
525
528
|
program.validate();
|
|
526
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unnecessaryCodebehindScriptImport().message);
|
|
529
|
+
(0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unnecessaryCodebehindScriptImport().message);
|
|
527
530
|
});
|
|
528
531
|
describe('transpile', () => {
|
|
532
|
+
it('supports instantresume <customization> elements', async () => {
|
|
533
|
+
fsExtra.outputFileSync(`${rootDir}/manifest`, '');
|
|
534
|
+
fsExtra.outputFileSync(`${rootDir}/source/main.brs`, `sub main()\nend sub`);
|
|
535
|
+
fsExtra.outputFileSync(`${rootDir}/components/MainScene.xml`, (0, testHelpers_spec_1.trim) `
|
|
536
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
537
|
+
<component name="MainScene" extends="Scene">
|
|
538
|
+
<customization resumehandler="customResume" />
|
|
539
|
+
<customization suspendhandler="customSuspend" />
|
|
540
|
+
<children>
|
|
541
|
+
<Rectangle width="1920" height="1080" />
|
|
542
|
+
</children>
|
|
543
|
+
</component>
|
|
544
|
+
`);
|
|
545
|
+
const builder = new ProgramBuilder_1.ProgramBuilder();
|
|
546
|
+
await builder.run({
|
|
547
|
+
cwd: rootDir,
|
|
548
|
+
retainStagingFolder: true,
|
|
549
|
+
stagingFolderPath: stagingDir,
|
|
550
|
+
logLevel: Logger_1.LogLevel.off
|
|
551
|
+
});
|
|
552
|
+
(0, chai_1.expect)(fsExtra.readFileSync(`${stagingDir}/components/MainScene.xml`).toString()).to.eql((0, testHelpers_spec_1.trim) `
|
|
553
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
554
|
+
<component name="MainScene" extends="Scene">
|
|
555
|
+
<customization resumehandler="customResume" />
|
|
556
|
+
<customization suspendhandler="customSuspend" />
|
|
557
|
+
<children>
|
|
558
|
+
<Rectangle width="1920" height="1080" />
|
|
559
|
+
</children>
|
|
560
|
+
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
561
|
+
</component>
|
|
562
|
+
`);
|
|
563
|
+
});
|
|
529
564
|
it(`honors the 'needsTranspiled' flag when set in 'afterFileParse'`, () => {
|
|
530
565
|
program.plugins.add({
|
|
531
566
|
name: 'test',
|
|
@@ -534,19 +569,19 @@ describe('XmlFile', () => {
|
|
|
534
569
|
event.file.needsTranspiled = true;
|
|
535
570
|
}
|
|
536
571
|
});
|
|
537
|
-
const file = program.
|
|
572
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
538
573
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
539
574
|
<component name="Comp" extends="Group">
|
|
540
575
|
</component>
|
|
541
576
|
`);
|
|
542
|
-
chai_1.expect(file.needsTranspiled).to.be.true;
|
|
577
|
+
(0, chai_1.expect)(file.needsTranspiled).to.be.true;
|
|
543
578
|
});
|
|
544
579
|
it('includes bslib script', () => {
|
|
545
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
580
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
546
581
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
547
582
|
<component name="Comp" extends="Group">
|
|
548
583
|
</component>
|
|
549
|
-
`, testHelpers_spec_1.trim `
|
|
584
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
550
585
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
551
586
|
<component name="Comp" extends="Group">
|
|
552
587
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
@@ -554,12 +589,12 @@ describe('XmlFile', () => {
|
|
|
554
589
|
`, 'none', 'components/Comp.xml');
|
|
555
590
|
});
|
|
556
591
|
it('does not include additional bslib script if already there ', () => {
|
|
557
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
592
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
558
593
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
559
594
|
<component name="Comp" extends="Group">
|
|
560
595
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
561
596
|
</component>
|
|
562
|
-
`, testHelpers_spec_1.trim `
|
|
597
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
563
598
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
564
599
|
<component name="Comp" extends="Group">
|
|
565
600
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
@@ -567,16 +602,16 @@ describe('XmlFile', () => {
|
|
|
567
602
|
`, 'none', 'components/child.xml');
|
|
568
603
|
});
|
|
569
604
|
it('does not include bslib script if already there from ropm', () => {
|
|
570
|
-
program.
|
|
571
|
-
program.
|
|
605
|
+
program.setFile('source/roku_modules/bslib/bslib.brs', ``);
|
|
606
|
+
program.setFile('source/lib.bs', ``);
|
|
572
607
|
//include a bs file to force transpile for the xml file
|
|
573
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
608
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
574
609
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
575
610
|
<component name="Comp" extends="Group">
|
|
576
611
|
<script type="text/brightscript" uri="pkg:/source/lib.bs" />
|
|
577
612
|
<script type="text/brightscript" uri="pkg:/source/roku_modules/bslib/bslib.brs" />
|
|
578
613
|
</component>
|
|
579
|
-
`, testHelpers_spec_1.trim `
|
|
614
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
580
615
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
581
616
|
<component name="Comp" extends="Group">
|
|
582
617
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
@@ -585,28 +620,28 @@ describe('XmlFile', () => {
|
|
|
585
620
|
`, 'none', 'components/child.xml');
|
|
586
621
|
});
|
|
587
622
|
it('does not transpile xml file when bslib script is already present', () => {
|
|
588
|
-
const file = program.
|
|
623
|
+
const file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
589
624
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
590
625
|
<component name="Comp" extends="Group">
|
|
591
626
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
592
627
|
</component>
|
|
593
628
|
`);
|
|
594
629
|
program.validate();
|
|
595
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
596
|
-
chai_1.expect(file.needsTranspiled).to.be.false;
|
|
630
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
631
|
+
(0, chai_1.expect)(file.needsTranspiled).to.be.false;
|
|
597
632
|
});
|
|
598
633
|
/**
|
|
599
634
|
* 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
|
|
600
635
|
*/
|
|
601
636
|
it('does not mangle scripts on multiple transpile', async () => {
|
|
602
|
-
program.
|
|
603
|
-
program.
|
|
637
|
+
program.setFile('components/SimpleScene.bs', ``);
|
|
638
|
+
program.setFile(`components/SimpleScene.xml`, (0, testHelpers_spec_1.trim) `
|
|
604
639
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
605
640
|
<component name="SimpleScene" extends="Scene">
|
|
606
641
|
<script type="text/brightscript" uri="SimpleScene.bs" />
|
|
607
642
|
</component>
|
|
608
643
|
`);
|
|
609
|
-
const expected = testHelpers_spec_1.trim `
|
|
644
|
+
const expected = (0, testHelpers_spec_1.trim) `
|
|
610
645
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
611
646
|
<component name="SimpleScene" extends="Scene">
|
|
612
647
|
<script type="text/brightscript" uri="SimpleScene.brs" />
|
|
@@ -614,18 +649,18 @@ describe('XmlFile', () => {
|
|
|
614
649
|
</component>
|
|
615
650
|
`;
|
|
616
651
|
await program.transpile([], stagingDir);
|
|
617
|
-
chai_1.expect(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
652
|
+
(0, chai_1.expect)(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
618
653
|
//clear the output folder
|
|
619
654
|
fsExtra.emptyDirSync(stagingDir);
|
|
620
655
|
await program.transpile([], stagingDir);
|
|
621
|
-
chai_1.expect(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
656
|
+
(0, chai_1.expect)(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
622
657
|
});
|
|
623
658
|
it('keeps all content of the XML', () => {
|
|
624
|
-
program.
|
|
659
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
625
660
|
sub b()
|
|
626
661
|
end sub
|
|
627
662
|
`);
|
|
628
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
663
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
629
664
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
630
665
|
<component
|
|
631
666
|
name="SimpleScene" extends="Scene"
|
|
@@ -643,7 +678,7 @@ describe('XmlFile', () => {
|
|
|
643
678
|
</aa>
|
|
644
679
|
</children>
|
|
645
680
|
</component>
|
|
646
|
-
`, testHelpers_spec_1.trim `
|
|
681
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
647
682
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
648
683
|
<component name="SimpleScene" extends="Scene" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd">
|
|
649
684
|
<interface>
|
|
@@ -651,26 +686,26 @@ describe('XmlFile', () => {
|
|
|
651
686
|
<function name="b" />
|
|
652
687
|
</interface>
|
|
653
688
|
<script type="text/brightscript" uri="SimpleScene.brs" />
|
|
654
|
-
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
655
689
|
<children>
|
|
656
690
|
<aa id="aa">
|
|
657
691
|
<bb id="bb" />
|
|
658
692
|
</aa>
|
|
659
693
|
</children>
|
|
694
|
+
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
660
695
|
</component>
|
|
661
696
|
`, 'none', 'components/SimpleScene.xml');
|
|
662
697
|
});
|
|
663
698
|
it('changes file extensions from bs to brs', () => {
|
|
664
|
-
program.
|
|
699
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
665
700
|
import "pkg:/source/lib.bs"
|
|
666
701
|
`);
|
|
667
|
-
program.
|
|
668
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
702
|
+
program.setFile('source/lib.bs', ``);
|
|
703
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
669
704
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
670
705
|
<component name="SimpleScene" extends="Scene">
|
|
671
706
|
<script type="text/brighterscript" uri="SimpleScene.bs"/>
|
|
672
707
|
</component>
|
|
673
|
-
`, testHelpers_spec_1.trim `
|
|
708
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
674
709
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
675
710
|
<component name="SimpleScene" extends="Scene">
|
|
676
711
|
<script type="text/brightscript" uri="SimpleScene.brs" />
|
|
@@ -680,13 +715,13 @@ describe('XmlFile', () => {
|
|
|
680
715
|
`, 'none', 'components/SimpleScene.xml');
|
|
681
716
|
});
|
|
682
717
|
it('does not fail on missing script type', () => {
|
|
683
|
-
program.
|
|
684
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
718
|
+
program.setFile('components/SimpleScene.brs', '');
|
|
719
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
685
720
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
686
721
|
<component name="SimpleScene" extends="Scene">
|
|
687
722
|
<script uri="SimpleScene.brs"/>
|
|
688
723
|
</component>
|
|
689
|
-
`, testHelpers_spec_1.trim `
|
|
724
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
690
725
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
691
726
|
<component name="SimpleScene" extends="Scene">
|
|
692
727
|
<script uri="SimpleScene.brs" type="text/brightscript" />
|
|
@@ -695,7 +730,7 @@ describe('XmlFile', () => {
|
|
|
695
730
|
`, null, 'components/comp.xml');
|
|
696
731
|
});
|
|
697
732
|
it('returns the XML unmodified if needsTranspiled is false', () => {
|
|
698
|
-
let file = program.
|
|
733
|
+
let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
|
|
699
734
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
700
735
|
<!-- should stay as-is -->
|
|
701
736
|
<component name="SimpleScene" extends="Scene" >
|
|
@@ -704,7 +739,7 @@ describe('XmlFile', () => {
|
|
|
704
739
|
`);
|
|
705
740
|
//prevent the default auto-imports to ensure no transpilation from AST
|
|
706
741
|
file.getMissingImportsForTranspile = () => [];
|
|
707
|
-
chai_1.expect(testHelpers_spec_1.trimMap(file.transpile().code)).to.equal(testHelpers_spec_1.trim `
|
|
742
|
+
(0, chai_1.expect)((0, testHelpers_spec_1.trimMap)(file.transpile().code)).to.equal((0, testHelpers_spec_1.trim) `
|
|
708
743
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
709
744
|
<!-- should stay as-is -->
|
|
710
745
|
<component name="SimpleScene" extends="Scene" >
|
|
@@ -713,26 +748,26 @@ describe('XmlFile', () => {
|
|
|
713
748
|
`);
|
|
714
749
|
});
|
|
715
750
|
it('needsTranspiled is false by default', () => {
|
|
716
|
-
let file = program.
|
|
751
|
+
let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
|
|
717
752
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
718
753
|
<component name="SimpleScene" extends="Scene" >
|
|
719
754
|
</component>
|
|
720
755
|
`);
|
|
721
|
-
chai_1.expect(file.needsTranspiled).to.be.false;
|
|
756
|
+
(0, chai_1.expect)(file.needsTranspiled).to.be.false;
|
|
722
757
|
});
|
|
723
758
|
it('needsTranspiled is true if an import is brighterscript', () => {
|
|
724
|
-
let file = program.
|
|
759
|
+
let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
|
|
725
760
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
726
761
|
<component name="SimpleScene" extends="Scene" >
|
|
727
762
|
<script type="text/brightscript" uri="SimpleScene.bs"/>
|
|
728
763
|
</component>
|
|
729
764
|
`);
|
|
730
765
|
program.validate();
|
|
731
|
-
chai_1.expect(file.needsTranspiled).to.be.true;
|
|
766
|
+
(0, chai_1.expect)(file.needsTranspiled).to.be.true;
|
|
732
767
|
});
|
|
733
768
|
it('simple source mapping includes sourcemap reference', () => {
|
|
734
769
|
program.options.sourceMap = true;
|
|
735
|
-
let file = program.
|
|
770
|
+
let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
|
|
736
771
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
737
772
|
<component name="SimpleScene" extends="Scene">
|
|
738
773
|
</component>
|
|
@@ -740,18 +775,18 @@ describe('XmlFile', () => {
|
|
|
740
775
|
//prevent the default auto-imports to ensure no transpilation from AST
|
|
741
776
|
file.getMissingImportsForTranspile = () => [];
|
|
742
777
|
const code = file.transpile().code;
|
|
743
|
-
chai_1.expect(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
|
|
778
|
+
(0, chai_1.expect)(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
|
|
744
779
|
});
|
|
745
780
|
it('AST-based source mapping includes sourcemap reference', () => {
|
|
746
781
|
program.options.sourceMap = true;
|
|
747
|
-
let file = program.
|
|
782
|
+
let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
|
|
748
783
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
749
784
|
<component name="SimpleScene" extends="Scene">
|
|
750
785
|
</component>
|
|
751
786
|
`);
|
|
752
787
|
file.needsTranspiled = true;
|
|
753
788
|
const code = file.transpile().code;
|
|
754
|
-
chai_1.expect(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
|
|
789
|
+
(0, chai_1.expect)(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
|
|
755
790
|
});
|
|
756
791
|
});
|
|
757
792
|
describe('Transform plugins', () => {
|
|
@@ -764,7 +799,7 @@ describe('XmlFile', () => {
|
|
|
764
799
|
name: 'Transform plugins',
|
|
765
800
|
afterFileParse: (event) => validateXml(event.file)
|
|
766
801
|
});
|
|
767
|
-
return program.
|
|
802
|
+
return program.setFile('components/Cmp1.xml', (0, testHelpers_spec_1.trim) `
|
|
768
803
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
769
804
|
<component name="Cmp1" extends="Scene">
|
|
770
805
|
</component>
|
|
@@ -773,15 +808,15 @@ describe('XmlFile', () => {
|
|
|
773
808
|
it('Calls XML file validation plugins', () => {
|
|
774
809
|
const validateXml = sinon.spy();
|
|
775
810
|
const file = parseFileWithPlugins(validateXml);
|
|
776
|
-
chai_1.expect(validateXml.callCount).to.equal(1);
|
|
777
|
-
chai_1.expect(validateXml.calledWith(file)).to.be.true;
|
|
811
|
+
(0, chai_1.expect)(validateXml.callCount).to.equal(1);
|
|
812
|
+
(0, chai_1.expect)(validateXml.calledWith(file)).to.be.true;
|
|
778
813
|
});
|
|
779
814
|
});
|
|
780
815
|
it('plugin diagnostics work for xml files', () => {
|
|
781
816
|
program.plugins.add({
|
|
782
817
|
name: 'Xml diagnostic test',
|
|
783
818
|
afterFileParse: ({ file }) => {
|
|
784
|
-
if (file.
|
|
819
|
+
if (file.srcPath.endsWith('.xml')) {
|
|
785
820
|
file.addDiagnostics([{
|
|
786
821
|
file: file,
|
|
787
822
|
message: 'Test diagnostic',
|
|
@@ -791,13 +826,13 @@ describe('XmlFile', () => {
|
|
|
791
826
|
}
|
|
792
827
|
}
|
|
793
828
|
});
|
|
794
|
-
program.
|
|
829
|
+
program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
795
830
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
796
831
|
<component name="Cmp1" extends="Scene">
|
|
797
832
|
</component>
|
|
798
833
|
`);
|
|
799
834
|
program.validate();
|
|
800
|
-
chai_1.expect(program.getDiagnostics().map(x => ({ message: x.message, code: x.code }))).to.eql([{
|
|
835
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => ({ message: x.message, code: x.code }))).to.eql([{
|
|
801
836
|
message: 'Test diagnostic',
|
|
802
837
|
code: 9999
|
|
803
838
|
}]);
|
|
@@ -805,86 +840,86 @@ describe('XmlFile', () => {
|
|
|
805
840
|
describe('typedef', () => {
|
|
806
841
|
it('loads d.bs files from parent scope', () => {
|
|
807
842
|
var _a;
|
|
808
|
-
program.
|
|
843
|
+
program.setFile('components/ParentComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
809
844
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
810
845
|
<component name="ParentComponent" extends="Scene">
|
|
811
846
|
<script uri="ParentComponent.brs" />
|
|
812
847
|
</component>
|
|
813
848
|
`);
|
|
814
|
-
program.
|
|
849
|
+
program.setFile('components/ParentComponent.d.bs', `
|
|
815
850
|
import "Lib.brs"
|
|
816
851
|
namespace Parent
|
|
817
852
|
sub log()
|
|
818
853
|
end sub
|
|
819
854
|
end namespace
|
|
820
855
|
`);
|
|
821
|
-
program.
|
|
856
|
+
program.setFile('components/ParentComponent.brs', `
|
|
822
857
|
sub Parent_log()
|
|
823
858
|
end sub
|
|
824
859
|
`);
|
|
825
|
-
program.
|
|
860
|
+
program.setFile('components/Lib.d.bs', `
|
|
826
861
|
namespace Lib
|
|
827
862
|
sub log()
|
|
828
863
|
end sub
|
|
829
864
|
end namespace
|
|
830
865
|
`);
|
|
831
|
-
program.
|
|
866
|
+
program.setFile('components/Lib.brs', `
|
|
832
867
|
sub Lib_log()
|
|
833
868
|
end sub
|
|
834
869
|
`);
|
|
835
|
-
program.
|
|
870
|
+
program.setFile('components/ChildComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
836
871
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
837
872
|
<component name="ChildComponent" extends="ParentComponent">
|
|
838
873
|
<script uri="ChildComponent.bs" />
|
|
839
874
|
</component>
|
|
840
875
|
`);
|
|
841
|
-
program.
|
|
876
|
+
program.setFile('components/ChildComponent.bs', `
|
|
842
877
|
sub init()
|
|
843
878
|
Parent.log()
|
|
844
879
|
Lib.log()
|
|
845
880
|
end sub
|
|
846
881
|
`);
|
|
847
882
|
program.validate();
|
|
848
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
883
|
+
(0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
849
884
|
const scope = program.getComponentScope('ChildComponent');
|
|
850
|
-
chai_1.expect(
|
|
885
|
+
(0, chai_1.expect)([...scope.namespaceLookup.keys()].sort()).to.eql([
|
|
851
886
|
'lib',
|
|
852
887
|
'parent'
|
|
853
888
|
]);
|
|
854
889
|
});
|
|
855
890
|
it('loads `d.bs` files into scope', () => {
|
|
856
|
-
const xmlFile = program.
|
|
891
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
857
892
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
858
893
|
<component name="Component1" extends="Scene">
|
|
859
894
|
<script uri="Component1.brs" />
|
|
860
895
|
</component>
|
|
861
896
|
`);
|
|
862
|
-
program.
|
|
897
|
+
program.setFile('components/Component1.d.bs', `
|
|
863
898
|
sub logInfo()
|
|
864
899
|
end sub
|
|
865
900
|
`);
|
|
866
|
-
chai_1.expect(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
|
|
901
|
+
(0, chai_1.expect)(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
|
|
867
902
|
});
|
|
868
903
|
it('does not include `d.bs` script during transpile', () => {
|
|
869
|
-
program.
|
|
904
|
+
program.setFile('source/logger.d.bs', `
|
|
870
905
|
sub logInfo()
|
|
871
906
|
end sub
|
|
872
907
|
`);
|
|
873
|
-
program.
|
|
908
|
+
program.setFile('source/logger.brs', `
|
|
874
909
|
sub logInfo()
|
|
875
910
|
end sub
|
|
876
911
|
`);
|
|
877
|
-
program.
|
|
912
|
+
program.setFile('components/Component1.bs', `
|
|
878
913
|
import "pkg:/source/logger.brs"
|
|
879
914
|
sub init()
|
|
880
915
|
end sub
|
|
881
916
|
`);
|
|
882
|
-
testTranspile(testHelpers_spec_1.trim `
|
|
917
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
883
918
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
884
919
|
<component name="Component1" extends="Scene">
|
|
885
920
|
<script type="text/brighterscript" uri="Component1.bs" />
|
|
886
921
|
</component>
|
|
887
|
-
`, testHelpers_spec_1.trim `
|
|
922
|
+
`, (0, testHelpers_spec_1.trim) `
|
|
888
923
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
889
924
|
<component name="Component1" extends="Scene">
|
|
890
925
|
<script type="text/brightscript" uri="Component1.brs" />
|
|
@@ -894,7 +929,7 @@ describe('XmlFile', () => {
|
|
|
894
929
|
`, 'none', 'components/Component1.xml');
|
|
895
930
|
});
|
|
896
931
|
it('does not load .brs information into scope if related d.bs is in scope', () => {
|
|
897
|
-
const xmlFile = program.
|
|
932
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
898
933
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
899
934
|
<component name="Component1" extends="Scene">
|
|
900
935
|
<script uri="Component1.brs" />
|
|
@@ -902,27 +937,27 @@ describe('XmlFile', () => {
|
|
|
902
937
|
`);
|
|
903
938
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
904
939
|
//load brs file
|
|
905
|
-
program.
|
|
940
|
+
program.setFile('components/Component1.brs', `
|
|
906
941
|
sub logInfo()
|
|
907
942
|
end sub
|
|
908
943
|
sub logWarning()
|
|
909
944
|
end sub
|
|
910
945
|
`);
|
|
911
946
|
let functionNames = scope.getAllCallables().map(x => x.callable.name);
|
|
912
|
-
chai_1.expect(functionNames).to.include('logInfo');
|
|
913
|
-
chai_1.expect(functionNames).to.include('logWarning');
|
|
947
|
+
(0, chai_1.expect)(functionNames).to.include('logInfo');
|
|
948
|
+
(0, chai_1.expect)(functionNames).to.include('logWarning');
|
|
914
949
|
//load d.bs file, which should shadow out the .brs file
|
|
915
|
-
program.
|
|
950
|
+
program.setFile('components/Component1.d.bs', `
|
|
916
951
|
sub logError()
|
|
917
952
|
end sub
|
|
918
953
|
`);
|
|
919
954
|
functionNames = scope.getAllCallables().map(x => x.callable.name);
|
|
920
|
-
chai_1.expect(functionNames).to.include('logError');
|
|
921
|
-
chai_1.expect(functionNames).not.to.include('logInfo');
|
|
922
|
-
chai_1.expect(functionNames).not.to.include('logWarning');
|
|
955
|
+
(0, chai_1.expect)(functionNames).to.include('logError');
|
|
956
|
+
(0, chai_1.expect)(functionNames).not.to.include('logInfo');
|
|
957
|
+
(0, chai_1.expect)(functionNames).not.to.include('logWarning');
|
|
923
958
|
});
|
|
924
959
|
it('updates xml scope when typedef disappears', () => {
|
|
925
|
-
const xmlFile = program.
|
|
960
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
926
961
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
927
962
|
<component name="Component1" extends="Scene">
|
|
928
963
|
<script uri="Component1.brs" />
|
|
@@ -930,134 +965,145 @@ describe('XmlFile', () => {
|
|
|
930
965
|
`);
|
|
931
966
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
932
967
|
//load brs file
|
|
933
|
-
program.
|
|
968
|
+
program.setFile('components/Component1.brs', `
|
|
934
969
|
sub logBrs()
|
|
935
970
|
end sub
|
|
936
971
|
`);
|
|
937
972
|
//load d.bs file, which should shadow out the .brs file
|
|
938
|
-
const typedef = program.
|
|
973
|
+
const typedef = program.setFile('components/Component1.d.bs', `
|
|
939
974
|
sub logTypedef()
|
|
940
975
|
end sub
|
|
941
976
|
`);
|
|
942
977
|
program.validate();
|
|
943
978
|
let functionNames = scope.getOwnCallables().map(x => x.callable.name);
|
|
944
|
-
chai_1.expect(functionNames).to.include('logTypedef');
|
|
945
|
-
chai_1.expect(functionNames).not.to.include('logBrs');
|
|
979
|
+
(0, chai_1.expect)(functionNames).to.include('logTypedef');
|
|
980
|
+
(0, chai_1.expect)(functionNames).not.to.include('logBrs');
|
|
946
981
|
//remove the typdef file
|
|
947
|
-
program.removeFile(typedef.
|
|
982
|
+
program.removeFile(typedef.srcPath);
|
|
948
983
|
program.validate();
|
|
949
984
|
functionNames = scope.getOwnCallables().map(x => x.callable.name);
|
|
950
|
-
chai_1.expect(functionNames).not.to.include('logTypedef');
|
|
951
|
-
chai_1.expect(functionNames).to.include('logBrs');
|
|
985
|
+
(0, chai_1.expect)(functionNames).not.to.include('logTypedef');
|
|
986
|
+
(0, chai_1.expect)(functionNames).to.include('logBrs');
|
|
952
987
|
});
|
|
953
988
|
});
|
|
954
989
|
it('finds script imports for single-quoted script tags', () => {
|
|
955
990
|
var _a;
|
|
956
|
-
const file = program.
|
|
991
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
957
992
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
958
993
|
<component name="Cmp1" extends="Scene">
|
|
959
994
|
<script uri='SingleQuotedFile.brs' />
|
|
960
995
|
</component>
|
|
961
996
|
`);
|
|
962
|
-
chai_1.expect((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.text).to.eql('SingleQuotedFile.brs');
|
|
997
|
+
(0, chai_1.expect)((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.text).to.eql('SingleQuotedFile.brs');
|
|
963
998
|
});
|
|
964
999
|
describe('commentFlags', () => {
|
|
965
1000
|
it('ignores warning from previous line comment', () => {
|
|
966
1001
|
//component without a name attribute
|
|
967
|
-
program.
|
|
1002
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
968
1003
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
969
1004
|
<!--bs:disable-next-line-->
|
|
970
1005
|
<component>
|
|
971
1006
|
</component>
|
|
972
1007
|
`);
|
|
973
1008
|
program.validate();
|
|
974
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
1009
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
975
1010
|
});
|
|
976
1011
|
it('ignores warning from previous line just for the specified code', () => {
|
|
977
1012
|
//component without a name attribute
|
|
978
|
-
program.
|
|
1013
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
979
1014
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
980
1015
|
<!--bs:disable-next-line 1006-->
|
|
981
1016
|
<component>
|
|
982
1017
|
</component>
|
|
983
1018
|
`);
|
|
984
1019
|
program.validate();
|
|
985
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message)).to.eql([
|
|
1020
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => x.message)).to.eql([
|
|
986
1021
|
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
|
|
987
1022
|
]);
|
|
988
1023
|
});
|
|
989
1024
|
it('ignores warning from previous line comment', () => {
|
|
990
1025
|
//component without a name attribute
|
|
991
|
-
program.
|
|
1026
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
992
1027
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
993
1028
|
<component> <!--bs:disable-line-->
|
|
994
1029
|
</component>
|
|
995
1030
|
`);
|
|
996
1031
|
program.validate();
|
|
997
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
1032
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
998
1033
|
});
|
|
999
1034
|
it('ignores warning from previous line just for the specified code', () => {
|
|
1000
1035
|
//component without a name attribute
|
|
1001
|
-
program.
|
|
1036
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1002
1037
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1003
1038
|
<component> <!--bs:disable-line 1006-->
|
|
1004
1039
|
</component>
|
|
1005
1040
|
`);
|
|
1006
1041
|
program.validate();
|
|
1007
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message)).to.eql([
|
|
1042
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => x.message)).to.eql([
|
|
1008
1043
|
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
|
|
1009
1044
|
]);
|
|
1010
1045
|
});
|
|
1011
1046
|
});
|
|
1047
|
+
it('includes single quotes in transpiled output', () => {
|
|
1048
|
+
testTranspile((0, testHelpers_spec_1.trim) `
|
|
1049
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
1050
|
+
<component name="Cmp1" extends="Scene">
|
|
1051
|
+
<interface>
|
|
1052
|
+
<field id="test" type="assocarray" value='{"testA":"testA"}' />
|
|
1053
|
+
</interface>
|
|
1054
|
+
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
1055
|
+
</component>
|
|
1056
|
+
`, undefined, 'none', 'components/file.xml');
|
|
1057
|
+
});
|
|
1012
1058
|
describe('duplicate components', () => {
|
|
1013
1059
|
it('more gracefully handles multiple components with the same name', () => {
|
|
1014
|
-
program.
|
|
1015
|
-
program.
|
|
1060
|
+
program.setFile('components/comp1.brs', ``);
|
|
1061
|
+
program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1016
1062
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1017
1063
|
<component name="comp1" extends="Group">
|
|
1018
1064
|
<script uri="comp1.brs" />
|
|
1019
1065
|
</component>
|
|
1020
1066
|
`);
|
|
1021
1067
|
//add another component with the same name
|
|
1022
|
-
program.
|
|
1023
|
-
program.
|
|
1068
|
+
program.setFile('components/comp2.brs', ``);
|
|
1069
|
+
program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1024
1070
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1025
1071
|
<component name="comp1" extends="Group">
|
|
1026
1072
|
<script uri="comp2.brs" />
|
|
1027
1073
|
</component>
|
|
1028
1074
|
`);
|
|
1029
1075
|
program.validate();
|
|
1030
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message).sort()).to.eql([
|
|
1076
|
+
(0, chai_1.expect)(program.getDiagnostics().map(x => x.message).sort()).to.eql([
|
|
1031
1077
|
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1').message,
|
|
1032
1078
|
DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1').message
|
|
1033
1079
|
]);
|
|
1034
1080
|
});
|
|
1035
1081
|
it('maintains consistent component selection', () => {
|
|
1036
1082
|
//add comp2 first
|
|
1037
|
-
const comp2 = program.
|
|
1083
|
+
const comp2 = program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1038
1084
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1039
1085
|
<component name="comp1">
|
|
1040
1086
|
</component>
|
|
1041
1087
|
`);
|
|
1042
|
-
chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1088
|
+
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1043
1089
|
//add comp1. it should become the main component with this name
|
|
1044
|
-
const comp1 = program.
|
|
1090
|
+
const comp1 = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1045
1091
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1046
1092
|
<component name="comp1" extends="Group">
|
|
1047
1093
|
</component>
|
|
1048
1094
|
`);
|
|
1049
|
-
chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp1.pkgPath);
|
|
1095
|
+
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp1.pkgPath);
|
|
1050
1096
|
//remove comp1, comp2 should be the primary again
|
|
1051
|
-
program.removeFile(util_1.standardizePath `${rootDir}/components/comp1.xml`);
|
|
1052
|
-
chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1097
|
+
program.removeFile((0, util_1.standardizePath) `${rootDir}/components/comp1.xml`);
|
|
1098
|
+
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1053
1099
|
//add comp3
|
|
1054
|
-
program.
|
|
1100
|
+
program.setFile('components/comp3.xml', (0, testHelpers_spec_1.trim) `
|
|
1055
1101
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1056
1102
|
<component name="comp1">
|
|
1057
1103
|
</component>
|
|
1058
1104
|
`);
|
|
1059
1105
|
//...the 2nd file should still be main
|
|
1060
|
-
chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1106
|
+
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1061
1107
|
});
|
|
1062
1108
|
});
|
|
1063
1109
|
});
|