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