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