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