brighterscript 0.72.1 → 0.72.2
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/package.json +17 -14
- package/dist/astUtils/AstEditor.spec.d.ts +0 -1
- package/dist/astUtils/AstEditor.spec.js +0 -254
- package/dist/astUtils/AstEditor.spec.js.map +0 -1
- package/dist/astUtils/creators.spec.d.ts +0 -1
- package/dist/astUtils/creators.spec.js +0 -21
- package/dist/astUtils/creators.spec.js.map +0 -1
- package/dist/astUtils/reflection.spec.d.ts +0 -1
- package/dist/astUtils/reflection.spec.js +0 -308
- package/dist/astUtils/reflection.spec.js.map +0 -1
- package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
- package/dist/astUtils/stackedVisitor.spec.js +0 -79
- package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
- package/dist/astUtils/visitors.spec.d.ts +0 -1
- package/dist/astUtils/visitors.spec.js +0 -1197
- package/dist/astUtils/visitors.spec.js.map +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -1237
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
- package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -171
- package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -201
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
- package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
- package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +0 -298
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -399
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -290
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -46
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -702
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
- package/dist/common/Sequencer.spec.d.ts +0 -1
- package/dist/common/Sequencer.spec.js +0 -75
- package/dist/common/Sequencer.spec.js.map +0 -1
- package/dist/files/BrsFile.Class.spec.d.ts +0 -1
- package/dist/files/BrsFile.Class.spec.js +0 -1805
- package/dist/files/BrsFile.Class.spec.js.map +0 -1
- package/dist/files/BrsFile.spec.d.ts +0 -1
- package/dist/files/BrsFile.spec.js +0 -4611
- package/dist/files/BrsFile.spec.js.map +0 -1
- package/dist/files/XmlFile.spec.d.ts +0 -1
- package/dist/files/XmlFile.spec.js +0 -1219
- package/dist/files/XmlFile.spec.js.map +0 -1
- package/dist/files/tests/imports.spec.d.ts +0 -1
- package/dist/files/tests/imports.spec.js +0 -241
- package/dist/files/tests/imports.spec.js.map +0 -1
- package/dist/files/tests/optionalChaning.spec.d.ts +0 -1
- package/dist/files/tests/optionalChaning.spec.js +0 -152
- package/dist/files/tests/optionalChaning.spec.js.map +0 -1
- package/dist/lexer/Character.spec.d.ts +0 -1
- package/dist/lexer/Character.spec.js +0 -27
- package/dist/lexer/Character.spec.js.map +0 -1
- package/dist/lexer/Lexer.spec.d.ts +0 -1
- package/dist/lexer/Lexer.spec.js +0 -1300
- package/dist/lexer/Lexer.spec.js.map +0 -1
- package/dist/lsp/ActionQueue.spec.d.ts +0 -1
- package/dist/lsp/ActionQueue.spec.js +0 -80
- package/dist/lsp/ActionQueue.spec.js.map +0 -1
- package/dist/lsp/DocumentManager.spec.d.ts +0 -1
- package/dist/lsp/DocumentManager.spec.js +0 -103
- package/dist/lsp/DocumentManager.spec.js.map +0 -1
- package/dist/lsp/PathFilterer.spec.d.ts +0 -1
- package/dist/lsp/PathFilterer.spec.js +0 -182
- package/dist/lsp/PathFilterer.spec.js.map +0 -1
- package/dist/lsp/Project.spec.d.ts +0 -1
- package/dist/lsp/Project.spec.js +0 -400
- package/dist/lsp/Project.spec.js.map +0 -1
- package/dist/lsp/ProjectManager.spec.d.ts +0 -1
- package/dist/lsp/ProjectManager.spec.js +0 -1183
- package/dist/lsp/ProjectManager.spec.js.map +0 -1
- package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
- package/dist/lsp/worker/MessageHandler.spec.js +0 -64
- package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
- package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
- package/dist/lsp/worker/WorkerPool.spec.js +0 -59
- package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
- package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
- package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -72
- package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
- package/dist/parser/AstNode.spec.d.ts +0 -1
- package/dist/parser/AstNode.spec.js +0 -1452
- package/dist/parser/AstNode.spec.js.map +0 -1
- package/dist/parser/Expression.spec.d.ts +0 -1
- package/dist/parser/Expression.spec.js +0 -40
- package/dist/parser/Expression.spec.js.map +0 -1
- package/dist/parser/Parser.Class.spec.d.ts +0 -1
- package/dist/parser/Parser.Class.spec.js +0 -495
- package/dist/parser/Parser.Class.spec.js.map +0 -1
- package/dist/parser/Parser.spec.d.ts +0 -4
- package/dist/parser/Parser.spec.js +0 -1985
- package/dist/parser/Parser.spec.js.map +0 -1
- package/dist/parser/SGParser.spec.d.ts +0 -1
- package/dist/parser/SGParser.spec.js +0 -131
- package/dist/parser/SGParser.spec.js.map +0 -1
- package/dist/parser/Statement.spec.d.ts +0 -1
- package/dist/parser/Statement.spec.js +0 -118
- package/dist/parser/Statement.spec.js.map +0 -1
- package/dist/parser/tests/Parser.spec.d.ts +0 -19
- package/dist/parser/tests/Parser.spec.js +0 -38
- package/dist/parser/tests/Parser.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/For.spec.js +0 -208
- package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -143
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/If.spec.js +0 -570
- package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/While.spec.js +0 -156
- package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
- package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Additive.spec.js +0 -99
- package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -291
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -401
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Boolean.spec.js +0 -83
- package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
- package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Call.spec.js +0 -242
- package/dist/parser/tests/expression/Call.spec.js.map +0 -1
- package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Exponential.spec.js +0 -37
- package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
- package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Function.spec.js +0 -403
- package/dist/parser/tests/expression/Function.spec.js.map +0 -1
- package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Indexing.spec.js +0 -289
- package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -346
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
- package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Primary.spec.js +0 -149
- package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Relational.spec.js +0 -83
- package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -389
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -876
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
- package/dist/parser/tests/expression/UnaryExpression.spec.js.map +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
- package/dist/parser/tests/statement/ConstStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +0 -708
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Continue.spec.js +0 -119
- package/dist/parser/tests/statement/Continue.spec.js.map +0 -1
- package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Declaration.spec.js +0 -108
- package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
- package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Dim.spec.js +0 -73
- package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
- package/dist/parser/tests/statement/Enum.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Enum.spec.js +0 -1307
- package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
- package/dist/parser/tests/statement/For.spec.d.ts +0 -1
- package/dist/parser/tests/statement/For.spec.js +0 -45
- package/dist/parser/tests/statement/For.spec.js.map +0 -1
- package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ForEach.spec.js +0 -36
- package/dist/parser/tests/statement/ForEach.spec.js.map +0 -1
- package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Function.spec.js +0 -342
- package/dist/parser/tests/statement/Function.spec.js.map +0 -1
- package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Goto.spec.js +0 -51
- package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
- package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Increment.spec.js +0 -117
- package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -102
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Misc.spec.js +0 -335
- package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +0 -195
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Set.spec.js +0 -218
- package/dist/parser/tests/statement/Set.spec.js.map +0 -1
- package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Stop.spec.js +0 -38
- package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
- package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Throw.spec.js +0 -35
- package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +0 -142
- package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
- package/dist/preprocessor/Manifest.spec.d.ts +0 -1
- package/dist/preprocessor/Manifest.spec.js +0 -80
- package/dist/preprocessor/Manifest.spec.js.map +0 -1
- package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
- package/dist/preprocessor/Preprocessor.spec.js +0 -152
- package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
- package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
- package/dist/types/ArrayType.spec.d.ts +0 -1
- package/dist/types/ArrayType.spec.js +0 -30
- package/dist/types/ArrayType.spec.js.map +0 -1
- package/dist/types/BooleanType.spec.d.ts +0 -1
- package/dist/types/BooleanType.spec.js +0 -12
- package/dist/types/BooleanType.spec.js.map +0 -1
- package/dist/types/DoubleType.spec.d.ts +0 -1
- package/dist/types/DoubleType.spec.js +0 -12
- package/dist/types/DoubleType.spec.js.map +0 -1
- package/dist/types/DynamicType.spec.d.ts +0 -1
- package/dist/types/DynamicType.spec.js +0 -12
- package/dist/types/DynamicType.spec.js.map +0 -1
- package/dist/types/FloatType.spec.d.ts +0 -1
- package/dist/types/FloatType.spec.js +0 -12
- package/dist/types/FloatType.spec.js.map +0 -1
- package/dist/types/FunctionType.spec.d.ts +0 -1
- package/dist/types/FunctionType.spec.js +0 -23
- package/dist/types/FunctionType.spec.js.map +0 -1
- package/dist/types/IntegerType.spec.d.ts +0 -1
- package/dist/types/IntegerType.spec.js +0 -12
- package/dist/types/IntegerType.spec.js.map +0 -1
- package/dist/types/InterfaceType.spec.d.ts +0 -1
- package/dist/types/InterfaceType.spec.js +0 -175
- package/dist/types/InterfaceType.spec.js.map +0 -1
- package/dist/types/InvalidType.spec.d.ts +0 -1
- package/dist/types/InvalidType.spec.js +0 -12
- package/dist/types/InvalidType.spec.js.map +0 -1
- package/dist/types/LongIntegerType.spec.d.ts +0 -1
- package/dist/types/LongIntegerType.spec.js +0 -12
- package/dist/types/LongIntegerType.spec.js.map +0 -1
- package/dist/types/ObjectType.spec.d.ts +0 -1
- package/dist/types/ObjectType.spec.js +0 -12
- package/dist/types/ObjectType.spec.js.map +0 -1
- package/dist/types/StringType.spec.d.ts +0 -1
- package/dist/types/StringType.spec.js +0 -12
- package/dist/types/StringType.spec.js.map +0 -1
- package/dist/types/VoidType.spec.d.ts +0 -1
- package/dist/types/VoidType.spec.js +0 -12
- package/dist/types/VoidType.spec.js.map +0 -1
|
@@ -1,876 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-for-in-array */
|
|
4
|
-
const chai_config_spec_1 = require("../../../chai-config.spec");
|
|
5
|
-
const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
|
|
6
|
-
const TokenKind_1 = require("../../../lexer/TokenKind");
|
|
7
|
-
const Parser_1 = require("../../Parser");
|
|
8
|
-
const Parser_spec_1 = require("../Parser.spec");
|
|
9
|
-
const Statement_1 = require("../../Statement");
|
|
10
|
-
const Expression_1 = require("../../Expression");
|
|
11
|
-
const Program_1 = require("../../../Program");
|
|
12
|
-
const testHelpers_spec_1 = require("../../../testHelpers.spec");
|
|
13
|
-
describe('ternary expressions', () => {
|
|
14
|
-
it('throws exception when used in brightscript scope', () => {
|
|
15
|
-
var _a;
|
|
16
|
-
let { diagnostics } = Parser_1.Parser.parse(`a = true ? "human" : "Zombie"`, { mode: Parser_1.ParseMode.BrightScript });
|
|
17
|
-
(0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('ternary operator').message);
|
|
18
|
-
});
|
|
19
|
-
it('cannot be used as a statement', () => {
|
|
20
|
-
let { diagnostics } = Parser_1.Parser.parse([
|
|
21
|
-
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
|
|
22
|
-
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.Question, '?'),
|
|
23
|
-
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.StringLiteral, 'Human'),
|
|
24
|
-
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.Colon, ':'),
|
|
25
|
-
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.StringLiteral, 'Zombie'),
|
|
26
|
-
Parser_spec_1.EOF
|
|
27
|
-
], { mode: Parser_1.ParseMode.BrighterScript });
|
|
28
|
-
(0, chai_config_spec_1.expect)(diagnostics).not.to.be.empty;
|
|
29
|
-
});
|
|
30
|
-
it(`cannot be used as a statement`, () => {
|
|
31
|
-
(0, chai_config_spec_1.expect)(parseBs(`true ? true : "zombie"`).diagnostics).not.to.be.empty;
|
|
32
|
-
(0, chai_config_spec_1.expect)(parseBs(`false ? true : "zombie"`).diagnostics).not.to.be.empty;
|
|
33
|
-
(0, chai_config_spec_1.expect)(parseBs(`len("person") = 10 ? true : "zombie"`).diagnostics).not.to.be.empty;
|
|
34
|
-
(0, chai_config_spec_1.expect)(parseBs(`m.getResponse() ? true : "zombie"`).diagnostics).not.to.be.empty;
|
|
35
|
-
});
|
|
36
|
-
it(`supports boolean expression condition`, () => {
|
|
37
|
-
let { statements, diagnostics } = parseBs(`being = isZombie = false ? "human" : "zombie"`);
|
|
38
|
-
(0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
|
|
39
|
-
(0, chai_config_spec_1.expect)(statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
|
|
40
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
41
|
-
});
|
|
42
|
-
it(`supports function condition`, () => {
|
|
43
|
-
let { statements, diagnostics } = parseBs(`a = user.getAccount() ? "logged in" : "not logged in"`);
|
|
44
|
-
(0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
|
|
45
|
-
(0, chai_config_spec_1.expect)(statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
|
|
46
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
47
|
-
});
|
|
48
|
-
it(`supports various tests with primitive values:`, () => {
|
|
49
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "human" : "zombie"`));
|
|
50
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = false ? "human" : "zombie"`));
|
|
51
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = len("person") = 10 ? "human" : "zombie"`));
|
|
52
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = m.getResponse() ? "human" : "zombie"`));
|
|
53
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = m.myZombies[3].hasEaten = true ? "human" : "zombie"`));
|
|
54
|
-
});
|
|
55
|
-
it(`supports simple consequents`, () => {
|
|
56
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? true : "zombie"`));
|
|
57
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? false : "zombie"`));
|
|
58
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? len("person") = 10 : "zombie"`));
|
|
59
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? m.getResponse() : "zombie"`));
|
|
60
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? m.myZombies[3].hasEaten = true : "zombie"`));
|
|
61
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? getZombieName : "zombie"`));
|
|
62
|
-
});
|
|
63
|
-
it(`supports simple alternates`, () => {
|
|
64
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": true`));
|
|
65
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": false`));
|
|
66
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": len("person") = 10`));
|
|
67
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": m.getResponse()`));
|
|
68
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": m.myZombies[3].hasEaten = true`));
|
|
69
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": getZombieName`));
|
|
70
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": true`));
|
|
71
|
-
});
|
|
72
|
-
it('supports multi-line and comments', () => {
|
|
73
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie"\n: \ntrue`));
|
|
74
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie"\n: \ntrue`));
|
|
75
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie": \ntrue`));
|
|
76
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie"\n: true`));
|
|
77
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie"\n: \ntrue`));
|
|
78
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": \ntrue`));
|
|
79
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n\n\n"zombie": \n\n\n\ntrue`));
|
|
80
|
-
//with comments
|
|
81
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ?'comment\n"zombie"'comment\n:'comment\nntrue`));
|
|
82
|
-
});
|
|
83
|
-
describe('in assignment', () => {
|
|
84
|
-
it(`simple case`, () => {
|
|
85
|
-
let { statements, diagnostics } = parseBs(`a = true ? "human" : "zombie"`);
|
|
86
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
87
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
88
|
-
});
|
|
89
|
-
it(`multi line arrays case`, () => {
|
|
90
|
-
let { statements, diagnostics } = parseBs(`
|
|
91
|
-
a = true ? [
|
|
92
|
-
"one"
|
|
93
|
-
"two"
|
|
94
|
-
"three"
|
|
95
|
-
] : [
|
|
96
|
-
"one"
|
|
97
|
-
"two"
|
|
98
|
-
"three"
|
|
99
|
-
]
|
|
100
|
-
`);
|
|
101
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
102
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
103
|
-
});
|
|
104
|
-
it(`single line assoc array`, () => {
|
|
105
|
-
let { statements, diagnostics } = parseBs(`a = true ? {"a":"a"} : {}`);
|
|
106
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
107
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
108
|
-
});
|
|
109
|
-
it(`multi line assoc array`, () => {
|
|
110
|
-
let { statements, diagnostics } = parseBs(`
|
|
111
|
-
a = true ? {"a":"a"} : {
|
|
112
|
-
"b": "test"
|
|
113
|
-
}`);
|
|
114
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
115
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
116
|
-
});
|
|
117
|
-
it(`multi line assoc array - both sides`, () => {
|
|
118
|
-
let { statements, diagnostics } = parseBs(`
|
|
119
|
-
a = true ? {
|
|
120
|
-
"a":"a"
|
|
121
|
-
"b":"b"
|
|
122
|
-
} : {
|
|
123
|
-
"b": "test"
|
|
124
|
-
}
|
|
125
|
-
`);
|
|
126
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
127
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
128
|
-
});
|
|
129
|
-
it(`in func call with array args`, () => {
|
|
130
|
-
let { statements, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? ["a","B"] : ["c", "d"])`);
|
|
131
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
132
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ExpressionStatement);
|
|
133
|
-
(0, chai_config_spec_1.expect)(statements[0].expression).instanceof(Expression_1.CallExpression);
|
|
134
|
-
let callExpression = statements[0].expression;
|
|
135
|
-
(0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
|
|
136
|
-
(0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
|
|
137
|
-
});
|
|
138
|
-
it(`in func call with aa args`, () => {
|
|
139
|
-
let { statements, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? {"a":1} : {"b": ["c", "d"]})`);
|
|
140
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
141
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ExpressionStatement);
|
|
142
|
-
(0, chai_config_spec_1.expect)(statements[0].expression).instanceof(Expression_1.CallExpression);
|
|
143
|
-
let callExpression = statements[0].expression;
|
|
144
|
-
(0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
|
|
145
|
-
(0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
|
|
146
|
-
});
|
|
147
|
-
it(`in simple func call`, () => {
|
|
148
|
-
let { statements, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b")`);
|
|
149
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
150
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ExpressionStatement);
|
|
151
|
-
(0, chai_config_spec_1.expect)(statements[0].expression).instanceof(Expression_1.CallExpression);
|
|
152
|
-
let callExpression = statements[0].expression;
|
|
153
|
-
(0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
|
|
154
|
-
(0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
|
|
155
|
-
});
|
|
156
|
-
it(`in func call with more args`, () => {
|
|
157
|
-
let { statements, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b", true, 12)`);
|
|
158
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
159
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ExpressionStatement);
|
|
160
|
-
(0, chai_config_spec_1.expect)(statements[0].expression).instanceof(Expression_1.CallExpression);
|
|
161
|
-
let callExpression = statements[0].expression;
|
|
162
|
-
(0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(3);
|
|
163
|
-
(0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
|
|
164
|
-
});
|
|
165
|
-
it(`in func call with more args, and comparing value`, () => {
|
|
166
|
-
let { statements, diagnostics } = parseBs(`m.eatBrains((a = true ? "a" : "b").count() = 3, true, 12)`);
|
|
167
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
168
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ExpressionStatement);
|
|
169
|
-
(0, chai_config_spec_1.expect)(statements[0].expression).instanceof(Expression_1.CallExpression);
|
|
170
|
-
let callExpression = statements[0].expression;
|
|
171
|
-
(0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(3);
|
|
172
|
-
});
|
|
173
|
-
it(`in array`, () => {
|
|
174
|
-
let { statements, diagnostics } = parseBs(`a = [a = true ? {"a":"a"} : {"b":"b"}, "c"]`);
|
|
175
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
176
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
177
|
-
(0, chai_config_spec_1.expect)(statements[0].value).instanceof(Expression_1.ArrayLiteralExpression);
|
|
178
|
-
let literalExpression = statements[0].value;
|
|
179
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[0]).instanceOf(Expression_1.TernaryExpression);
|
|
180
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[1]).instanceOf(Expression_1.LiteralExpression);
|
|
181
|
-
});
|
|
182
|
-
it(`in aa`, () => {
|
|
183
|
-
let { statements, diagnostics } = parseBs(`a = {"v1": a = true ? {"a":"a"} : {"b":"b"}, "v2": "c"}`);
|
|
184
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
185
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.AssignmentStatement);
|
|
186
|
-
(0, chai_config_spec_1.expect)(statements[0].value).instanceof(Expression_1.AALiteralExpression);
|
|
187
|
-
let literalExpression = statements[0].value;
|
|
188
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[0].keyToken.text).is.equal('"v1"');
|
|
189
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[0].value).instanceOf(Expression_1.TernaryExpression);
|
|
190
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[1].keyToken.text).is.equal('"v2"');
|
|
191
|
-
(0, chai_config_spec_1.expect)(literalExpression.elements[1].value).instanceOf(Expression_1.LiteralExpression);
|
|
192
|
-
});
|
|
193
|
-
it(`in for each`, () => {
|
|
194
|
-
let { statements, diagnostics } = parseBs(`for each person in isZombieMode ? zombies : humans
|
|
195
|
-
? "person is " ; person
|
|
196
|
-
end for
|
|
197
|
-
`);
|
|
198
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
199
|
-
(0, chai_config_spec_1.expect)(statements[0]).instanceof(Statement_1.ForEachStatement);
|
|
200
|
-
(0, chai_config_spec_1.expect)(statements[0].target).instanceof(Expression_1.TernaryExpression);
|
|
201
|
-
});
|
|
202
|
-
it('creates TernaryExpression with missing alternate', () => {
|
|
203
|
-
const { statements } = parseBs(`
|
|
204
|
-
print name = "bob" ? "human":
|
|
205
|
-
`);
|
|
206
|
-
const expr = statements[0].expressions[0];
|
|
207
|
-
(0, chai_config_spec_1.expect)(expr).to.be.instanceof(Expression_1.TernaryExpression);
|
|
208
|
-
(0, chai_config_spec_1.expect)(expr).property('alternate').to.be.undefined;
|
|
209
|
-
(0, chai_config_spec_1.expect)(expr).property('consequent').not.to.be.undefined;
|
|
210
|
-
});
|
|
211
|
-
it('creates TernaryExpression with missing consequent', () => {
|
|
212
|
-
const { statements } = parseBs(`
|
|
213
|
-
print name = "bob" ? : "human"
|
|
214
|
-
`);
|
|
215
|
-
const expr = statements[0].expressions[0];
|
|
216
|
-
(0, chai_config_spec_1.expect)(expr).to.be.instanceof(Expression_1.TernaryExpression);
|
|
217
|
-
(0, chai_config_spec_1.expect)(expr).property('consequent').to.be.undefined;
|
|
218
|
-
(0, chai_config_spec_1.expect)(expr).property('alternate').not.to.be.undefined;
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
describe('transpile', () => {
|
|
222
|
-
let rootDir = process.cwd();
|
|
223
|
-
let program;
|
|
224
|
-
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
|
|
225
|
-
beforeEach(() => {
|
|
226
|
-
program = new Program_1.Program({ rootDir: rootDir });
|
|
227
|
-
});
|
|
228
|
-
afterEach(() => {
|
|
229
|
-
program.dispose();
|
|
230
|
-
});
|
|
231
|
-
it('transpiles top-level ternary expression', () => {
|
|
232
|
-
testTranspile(`
|
|
233
|
-
a += true ? 1 : 2
|
|
234
|
-
`, `
|
|
235
|
-
if true then
|
|
236
|
-
a += 1
|
|
237
|
-
else
|
|
238
|
-
a += 2
|
|
239
|
-
end if
|
|
240
|
-
`, undefined, undefined, false);
|
|
241
|
-
});
|
|
242
|
-
it('transpiles ternary in RHS of AssignmentStatement to IfStatement', () => {
|
|
243
|
-
testTranspile(`
|
|
244
|
-
sub main()
|
|
245
|
-
a = true ? 1 : 2
|
|
246
|
-
end sub
|
|
247
|
-
`, `
|
|
248
|
-
sub main()
|
|
249
|
-
if true then
|
|
250
|
-
a = 1
|
|
251
|
-
else
|
|
252
|
-
a = 2
|
|
253
|
-
end if
|
|
254
|
-
end sub
|
|
255
|
-
`);
|
|
256
|
-
});
|
|
257
|
-
it('transpiles ternary in RHS of incrementor AssignmentStatement to IfStatement', () => {
|
|
258
|
-
testTranspile(`
|
|
259
|
-
sub main()
|
|
260
|
-
a += true ? 1 : 2
|
|
261
|
-
end sub
|
|
262
|
-
`, `
|
|
263
|
-
sub main()
|
|
264
|
-
if true then
|
|
265
|
-
a += 1
|
|
266
|
-
else
|
|
267
|
-
a += 2
|
|
268
|
-
end if
|
|
269
|
-
end sub
|
|
270
|
-
`);
|
|
271
|
-
});
|
|
272
|
-
it('transpiles ternary in RHS of DottedSetStatement to IfStatement', () => {
|
|
273
|
-
testTranspile(`
|
|
274
|
-
sub main()
|
|
275
|
-
m.a = true ? 1 : 2
|
|
276
|
-
end sub
|
|
277
|
-
`, `
|
|
278
|
-
sub main()
|
|
279
|
-
if true then
|
|
280
|
-
m.a = 1
|
|
281
|
-
else
|
|
282
|
-
m.a = 2
|
|
283
|
-
end if
|
|
284
|
-
end sub
|
|
285
|
-
`);
|
|
286
|
-
});
|
|
287
|
-
it('transpiles ternary in RHS of incrementor DottedSetStatement to IfStatement', () => {
|
|
288
|
-
testTranspile(`
|
|
289
|
-
sub main()
|
|
290
|
-
m.a += true ? 1 : 2
|
|
291
|
-
end sub
|
|
292
|
-
`, `
|
|
293
|
-
sub main()
|
|
294
|
-
if true then
|
|
295
|
-
m.a += 1
|
|
296
|
-
else
|
|
297
|
-
m.a += 2
|
|
298
|
-
end if
|
|
299
|
-
end sub
|
|
300
|
-
`);
|
|
301
|
-
});
|
|
302
|
-
it('transpiles ternary in RHS of IndexedSetStatement to IfStatement', () => {
|
|
303
|
-
testTranspile(`
|
|
304
|
-
sub main()
|
|
305
|
-
m["a"] = true ? 1 : 2
|
|
306
|
-
end sub
|
|
307
|
-
`, `
|
|
308
|
-
sub main()
|
|
309
|
-
if true then
|
|
310
|
-
m["a"] = 1
|
|
311
|
-
else
|
|
312
|
-
m["a"] = 2
|
|
313
|
-
end if
|
|
314
|
-
end sub
|
|
315
|
-
`);
|
|
316
|
-
});
|
|
317
|
-
it('transpiles ternary in RHS of incrementor IndexedSetStatement to IfStatement', () => {
|
|
318
|
-
testTranspile(`
|
|
319
|
-
sub main()
|
|
320
|
-
m["a"] += true ? 1 : 2
|
|
321
|
-
end sub
|
|
322
|
-
`, `
|
|
323
|
-
sub main()
|
|
324
|
-
if true then
|
|
325
|
-
m["a"] += 1
|
|
326
|
-
else
|
|
327
|
-
m["a"] += 2
|
|
328
|
-
end if
|
|
329
|
-
end sub
|
|
330
|
-
`);
|
|
331
|
-
});
|
|
332
|
-
it('uses the proper prefix when aliased package is installed', () => {
|
|
333
|
-
program.setFile('source/roku_modules/rokucommunity_bslib/bslib.brs', '');
|
|
334
|
-
testTranspile(`
|
|
335
|
-
sub main()
|
|
336
|
-
user = {}
|
|
337
|
-
result = [
|
|
338
|
-
user = invalid ? "no user" : "logged in"
|
|
339
|
-
]
|
|
340
|
-
end sub
|
|
341
|
-
`, `
|
|
342
|
-
sub main()
|
|
343
|
-
user = {}
|
|
344
|
-
result = [
|
|
345
|
-
rokucommunity_bslib_ternary(user = invalid, "no user", "logged in")
|
|
346
|
-
]
|
|
347
|
-
end sub
|
|
348
|
-
`);
|
|
349
|
-
});
|
|
350
|
-
it('simple consequents', () => {
|
|
351
|
-
testTranspile(`
|
|
352
|
-
sub main()
|
|
353
|
-
user = {}
|
|
354
|
-
a = user = invalid ? "no user" : "logged in"
|
|
355
|
-
end sub
|
|
356
|
-
`, `
|
|
357
|
-
sub main()
|
|
358
|
-
user = {}
|
|
359
|
-
if user = invalid then
|
|
360
|
-
a = "no user"
|
|
361
|
-
else
|
|
362
|
-
a = "logged in"
|
|
363
|
-
end if
|
|
364
|
-
end sub
|
|
365
|
-
`);
|
|
366
|
-
testTranspile(`
|
|
367
|
-
sub main()
|
|
368
|
-
user = {}
|
|
369
|
-
a = user = invalid ? 1 : "logged in"
|
|
370
|
-
end sub
|
|
371
|
-
`, `
|
|
372
|
-
sub main()
|
|
373
|
-
user = {}
|
|
374
|
-
if user = invalid then
|
|
375
|
-
a = 1
|
|
376
|
-
else
|
|
377
|
-
a = "logged in"
|
|
378
|
-
end if
|
|
379
|
-
end sub
|
|
380
|
-
`);
|
|
381
|
-
testTranspile(`
|
|
382
|
-
sub main()
|
|
383
|
-
user = {}
|
|
384
|
-
a = user = invalid ? 1.2 : "logged in"
|
|
385
|
-
end sub
|
|
386
|
-
`, `
|
|
387
|
-
sub main()
|
|
388
|
-
user = {}
|
|
389
|
-
if user = invalid then
|
|
390
|
-
a = 1.2
|
|
391
|
-
else
|
|
392
|
-
a = "logged in"
|
|
393
|
-
end if
|
|
394
|
-
end sub
|
|
395
|
-
`);
|
|
396
|
-
testTranspile(`
|
|
397
|
-
sub main()
|
|
398
|
-
user = {}
|
|
399
|
-
a = user = invalid ? {} : "logged in"
|
|
400
|
-
end sub
|
|
401
|
-
`, `
|
|
402
|
-
sub main()
|
|
403
|
-
user = {}
|
|
404
|
-
if user = invalid then
|
|
405
|
-
a = {}
|
|
406
|
-
else
|
|
407
|
-
a = "logged in"
|
|
408
|
-
end if
|
|
409
|
-
end sub
|
|
410
|
-
`);
|
|
411
|
-
testTranspile(`
|
|
412
|
-
sub main()
|
|
413
|
-
user = {}
|
|
414
|
-
a = user = invalid ? [] : "logged in"
|
|
415
|
-
end sub
|
|
416
|
-
`, `
|
|
417
|
-
sub main()
|
|
418
|
-
user = {}
|
|
419
|
-
if user = invalid then
|
|
420
|
-
a = []
|
|
421
|
-
else
|
|
422
|
-
a = "logged in"
|
|
423
|
-
end if
|
|
424
|
-
end sub
|
|
425
|
-
`);
|
|
426
|
-
});
|
|
427
|
-
it('simple alternates', () => {
|
|
428
|
-
testTranspile(`
|
|
429
|
-
sub main()
|
|
430
|
-
user = {}
|
|
431
|
-
a = user = invalid ? "logged in" : "no user"
|
|
432
|
-
end sub
|
|
433
|
-
`, `
|
|
434
|
-
sub main()
|
|
435
|
-
user = {}
|
|
436
|
-
if user = invalid then
|
|
437
|
-
a = "logged in"
|
|
438
|
-
else
|
|
439
|
-
a = "no user"
|
|
440
|
-
end if
|
|
441
|
-
end sub
|
|
442
|
-
`);
|
|
443
|
-
testTranspile(`
|
|
444
|
-
sub main()
|
|
445
|
-
user = {}
|
|
446
|
-
a = user = invalid ? "logged in" : 1
|
|
447
|
-
end sub
|
|
448
|
-
`, `
|
|
449
|
-
sub main()
|
|
450
|
-
user = {}
|
|
451
|
-
if user = invalid then
|
|
452
|
-
a = "logged in"
|
|
453
|
-
else
|
|
454
|
-
a = 1
|
|
455
|
-
end if
|
|
456
|
-
end sub
|
|
457
|
-
`);
|
|
458
|
-
testTranspile(`
|
|
459
|
-
sub main()
|
|
460
|
-
user = {}
|
|
461
|
-
a = user = invalid ? "logged in" : 1.2
|
|
462
|
-
end sub
|
|
463
|
-
`, `
|
|
464
|
-
sub main()
|
|
465
|
-
user = {}
|
|
466
|
-
if user = invalid then
|
|
467
|
-
a = "logged in"
|
|
468
|
-
else
|
|
469
|
-
a = 1.2
|
|
470
|
-
end if
|
|
471
|
-
end sub
|
|
472
|
-
`);
|
|
473
|
-
testTranspile(`
|
|
474
|
-
sub main()
|
|
475
|
-
user = {}
|
|
476
|
-
a = user = invalid ? "logged in" : []
|
|
477
|
-
end sub
|
|
478
|
-
`, `
|
|
479
|
-
sub main()
|
|
480
|
-
user = {}
|
|
481
|
-
if user = invalid then
|
|
482
|
-
a = "logged in"
|
|
483
|
-
else
|
|
484
|
-
a = []
|
|
485
|
-
end if
|
|
486
|
-
end sub
|
|
487
|
-
`);
|
|
488
|
-
testTranspile(`
|
|
489
|
-
sub main()
|
|
490
|
-
user = {}
|
|
491
|
-
a = user = invalid ? "logged in" : {}
|
|
492
|
-
end sub
|
|
493
|
-
`, `
|
|
494
|
-
sub main()
|
|
495
|
-
user = {}
|
|
496
|
-
if user = invalid then
|
|
497
|
-
a = "logged in"
|
|
498
|
-
else
|
|
499
|
-
a = {}
|
|
500
|
-
end if
|
|
501
|
-
end sub
|
|
502
|
-
`);
|
|
503
|
-
});
|
|
504
|
-
it('does not capture restricted OS functions', () => {
|
|
505
|
-
testTranspile(`
|
|
506
|
-
sub main()
|
|
507
|
-
test(true ? invalid : [
|
|
508
|
-
createObject("roDeviceInfo")
|
|
509
|
-
type(true)
|
|
510
|
-
GetGlobalAA()
|
|
511
|
-
box(1)
|
|
512
|
-
run("file.brs", invalid)
|
|
513
|
-
eval("print 1")
|
|
514
|
-
GetLastRunCompileError()
|
|
515
|
-
GetLastRunRuntimeError()
|
|
516
|
-
Tab(1)
|
|
517
|
-
Pos(0)
|
|
518
|
-
])
|
|
519
|
-
end sub
|
|
520
|
-
sub test(p1)
|
|
521
|
-
end sub
|
|
522
|
-
`, `
|
|
523
|
-
sub main()
|
|
524
|
-
test((function(__bsCondition)
|
|
525
|
-
if __bsCondition then
|
|
526
|
-
return invalid
|
|
527
|
-
else
|
|
528
|
-
return [
|
|
529
|
-
createObject("roDeviceInfo")
|
|
530
|
-
type(true)
|
|
531
|
-
GetGlobalAA()
|
|
532
|
-
box(1)
|
|
533
|
-
run("file.brs", invalid)
|
|
534
|
-
eval("print 1")
|
|
535
|
-
GetLastRunCompileError()
|
|
536
|
-
GetLastRunRuntimeError()
|
|
537
|
-
Tab(1)
|
|
538
|
-
Pos(0)
|
|
539
|
-
]
|
|
540
|
-
end if
|
|
541
|
-
end function)(true))
|
|
542
|
-
end sub
|
|
543
|
-
|
|
544
|
-
sub test(p1)
|
|
545
|
-
end sub
|
|
546
|
-
`);
|
|
547
|
-
});
|
|
548
|
-
it('complex conditions do not cause scope capture', () => {
|
|
549
|
-
testTranspile(`
|
|
550
|
-
sub main()
|
|
551
|
-
a = str("true") = "true" ? true : false
|
|
552
|
-
end sub
|
|
553
|
-
`, `
|
|
554
|
-
sub main()
|
|
555
|
-
if str("true") = "true" then
|
|
556
|
-
a = true
|
|
557
|
-
else
|
|
558
|
-
a = false
|
|
559
|
-
end if
|
|
560
|
-
end sub
|
|
561
|
-
`);
|
|
562
|
-
testTranspile(`
|
|
563
|
-
sub main()
|
|
564
|
-
a = m.top.service.IsTrue() ? true : false
|
|
565
|
-
end sub
|
|
566
|
-
`, `
|
|
567
|
-
sub main()
|
|
568
|
-
if m.top.service.IsTrue() then
|
|
569
|
-
a = true
|
|
570
|
-
else
|
|
571
|
-
a = false
|
|
572
|
-
end if
|
|
573
|
-
end sub
|
|
574
|
-
`);
|
|
575
|
-
testTranspile(`
|
|
576
|
-
sub test(param1)
|
|
577
|
-
end sub
|
|
578
|
-
|
|
579
|
-
sub main()
|
|
580
|
-
a = test(test(test(test(m.fifth()[123].truthy(1))))) ? true : false
|
|
581
|
-
end sub
|
|
582
|
-
`, `
|
|
583
|
-
sub test(param1)
|
|
584
|
-
end sub
|
|
585
|
-
|
|
586
|
-
sub main()
|
|
587
|
-
if test(test(test(test(m.fifth()[123].truthy(1))))) then
|
|
588
|
-
a = true
|
|
589
|
-
else
|
|
590
|
-
a = false
|
|
591
|
-
end if
|
|
592
|
-
end sub
|
|
593
|
-
`);
|
|
594
|
-
});
|
|
595
|
-
it('captures scope for function call conseqent', () => {
|
|
596
|
-
testTranspile(`
|
|
597
|
-
sub main()
|
|
598
|
-
zombie = {}
|
|
599
|
-
result = [
|
|
600
|
-
zombie.getName() <> invalid ? zombie.GetName() : "zombie"
|
|
601
|
-
]
|
|
602
|
-
end sub
|
|
603
|
-
`, `
|
|
604
|
-
sub main()
|
|
605
|
-
zombie = {}
|
|
606
|
-
result = [
|
|
607
|
-
(function(__bsCondition, zombie)
|
|
608
|
-
if __bsCondition then
|
|
609
|
-
return zombie.GetName()
|
|
610
|
-
else
|
|
611
|
-
return "zombie"
|
|
612
|
-
end if
|
|
613
|
-
end function)(zombie.getName() <> invalid, zombie)
|
|
614
|
-
]
|
|
615
|
-
end sub
|
|
616
|
-
`);
|
|
617
|
-
});
|
|
618
|
-
it('captures scope for function call alternate', () => {
|
|
619
|
-
testTranspile(`
|
|
620
|
-
sub main()
|
|
621
|
-
zombie = {}
|
|
622
|
-
result = [
|
|
623
|
-
zombie.getName() = invalid ? "zombie" : zombie.GetName()
|
|
624
|
-
]
|
|
625
|
-
end sub
|
|
626
|
-
`, `
|
|
627
|
-
sub main()
|
|
628
|
-
zombie = {}
|
|
629
|
-
result = [
|
|
630
|
-
(function(__bsCondition, zombie)
|
|
631
|
-
if __bsCondition then
|
|
632
|
-
return "zombie"
|
|
633
|
-
else
|
|
634
|
-
return zombie.GetName()
|
|
635
|
-
end if
|
|
636
|
-
end function)(zombie.getName() = invalid, zombie)
|
|
637
|
-
]
|
|
638
|
-
end sub
|
|
639
|
-
`);
|
|
640
|
-
});
|
|
641
|
-
it('captures scope for complex consequent', () => {
|
|
642
|
-
testTranspile(`
|
|
643
|
-
sub main()
|
|
644
|
-
settings = {}
|
|
645
|
-
result = [
|
|
646
|
-
{} ? m.defaults.getAccount(settings.name) : "no"
|
|
647
|
-
]
|
|
648
|
-
end sub
|
|
649
|
-
`, `
|
|
650
|
-
sub main()
|
|
651
|
-
settings = {}
|
|
652
|
-
result = [
|
|
653
|
-
(function(__bsCondition, m, settings)
|
|
654
|
-
if __bsCondition then
|
|
655
|
-
return m.defaults.getAccount(settings.name)
|
|
656
|
-
else
|
|
657
|
-
return "no"
|
|
658
|
-
end if
|
|
659
|
-
end function)({}, m, settings)
|
|
660
|
-
]
|
|
661
|
-
end sub
|
|
662
|
-
`);
|
|
663
|
-
});
|
|
664
|
-
it('ignores enum variable names for scope capturing', () => {
|
|
665
|
-
testTranspile(`
|
|
666
|
-
enum Direction
|
|
667
|
-
up = "up"
|
|
668
|
-
down = "down"
|
|
669
|
-
end enum
|
|
670
|
-
sub main()
|
|
671
|
-
d = Direction.up
|
|
672
|
-
result = [
|
|
673
|
-
d = Direction.up ? Direction.up : false
|
|
674
|
-
]
|
|
675
|
-
end sub
|
|
676
|
-
`, `
|
|
677
|
-
sub main()
|
|
678
|
-
d = "up"
|
|
679
|
-
result = [
|
|
680
|
-
(function(__bsCondition)
|
|
681
|
-
if __bsCondition then
|
|
682
|
-
return "up"
|
|
683
|
-
else
|
|
684
|
-
return false
|
|
685
|
-
end if
|
|
686
|
-
end function)(d = "up")
|
|
687
|
-
]
|
|
688
|
-
end sub
|
|
689
|
-
`);
|
|
690
|
-
});
|
|
691
|
-
it('ignores const variable names for scope capturing', () => {
|
|
692
|
-
testTranspile(`
|
|
693
|
-
enum Direction
|
|
694
|
-
up = "up"
|
|
695
|
-
down = "down"
|
|
696
|
-
end enum
|
|
697
|
-
const UP = "up"
|
|
698
|
-
sub main()
|
|
699
|
-
d = Direction.up
|
|
700
|
-
result = [
|
|
701
|
-
d = Direction.up ? UP : Direction.down
|
|
702
|
-
]
|
|
703
|
-
end sub
|
|
704
|
-
`, `
|
|
705
|
-
sub main()
|
|
706
|
-
d = "up"
|
|
707
|
-
result = [
|
|
708
|
-
(function(__bsCondition)
|
|
709
|
-
if __bsCondition then
|
|
710
|
-
return "up"
|
|
711
|
-
else
|
|
712
|
-
return "down"
|
|
713
|
-
end if
|
|
714
|
-
end function)(d = "up")
|
|
715
|
-
]
|
|
716
|
-
end sub
|
|
717
|
-
`);
|
|
718
|
-
});
|
|
719
|
-
it('supports scope-captured outer, and simple inner', () => {
|
|
720
|
-
testTranspile(`
|
|
721
|
-
sub main()
|
|
722
|
-
zombie = {}
|
|
723
|
-
human = {}
|
|
724
|
-
result = zombie <> invalid ? zombie.Attack(human <> invalid ? human: zombie) : "zombie"
|
|
725
|
-
end sub
|
|
726
|
-
`, `
|
|
727
|
-
sub main()
|
|
728
|
-
zombie = {}
|
|
729
|
-
human = {}
|
|
730
|
-
if zombie <> invalid then
|
|
731
|
-
result = zombie.Attack(bslib_ternary(human <> invalid, human, zombie))
|
|
732
|
-
else
|
|
733
|
-
result = "zombie"
|
|
734
|
-
end if
|
|
735
|
-
end sub
|
|
736
|
-
`);
|
|
737
|
-
});
|
|
738
|
-
it('supports nested ternary in assignment', () => {
|
|
739
|
-
testTranspile(`
|
|
740
|
-
sub main()
|
|
741
|
-
result = true ? (false ? "one" : "two") : "three"
|
|
742
|
-
end sub
|
|
743
|
-
`, `
|
|
744
|
-
sub main()
|
|
745
|
-
if true then
|
|
746
|
-
if false then
|
|
747
|
-
result = "one"
|
|
748
|
-
else
|
|
749
|
-
result = "two"
|
|
750
|
-
end if
|
|
751
|
-
else
|
|
752
|
-
result = "three"
|
|
753
|
-
end if
|
|
754
|
-
end sub
|
|
755
|
-
`);
|
|
756
|
-
});
|
|
757
|
-
it('supports nested ternary in DottedSet', () => {
|
|
758
|
-
testTranspile(`
|
|
759
|
-
sub main()
|
|
760
|
-
m.result = true ? (false ? "one" : "two") : "three"
|
|
761
|
-
end sub
|
|
762
|
-
`, `
|
|
763
|
-
sub main()
|
|
764
|
-
if true then
|
|
765
|
-
if false then
|
|
766
|
-
m.result = "one"
|
|
767
|
-
else
|
|
768
|
-
m.result = "two"
|
|
769
|
-
end if
|
|
770
|
-
else
|
|
771
|
-
m.result = "three"
|
|
772
|
-
end if
|
|
773
|
-
end sub
|
|
774
|
-
`);
|
|
775
|
-
});
|
|
776
|
-
it('supports nested ternary in IndexedSet', () => {
|
|
777
|
-
testTranspile(`
|
|
778
|
-
sub main()
|
|
779
|
-
m["result"] = true ? (false ? "one" : "two") : "three"
|
|
780
|
-
end sub
|
|
781
|
-
`, `
|
|
782
|
-
sub main()
|
|
783
|
-
if true then
|
|
784
|
-
if false then
|
|
785
|
-
m["result"] = "one"
|
|
786
|
-
else
|
|
787
|
-
m["result"] = "two"
|
|
788
|
-
end if
|
|
789
|
-
else
|
|
790
|
-
m["result"] = "three"
|
|
791
|
-
end if
|
|
792
|
-
end sub
|
|
793
|
-
`);
|
|
794
|
-
});
|
|
795
|
-
it('supports ternary in indexedSet key', () => {
|
|
796
|
-
testTranspile(`
|
|
797
|
-
sub main()
|
|
798
|
-
m[m.isShiftPressed ? "a" : "b"] = 0
|
|
799
|
-
m[m.useAltKey ? m.altKey : m.key] = 1
|
|
800
|
-
end sub
|
|
801
|
-
`, `
|
|
802
|
-
sub main()
|
|
803
|
-
m[bslib_ternary(m.isShiftPressed, "a", "b")] = 0
|
|
804
|
-
m[(function(__bsCondition, m)
|
|
805
|
-
if __bsCondition then
|
|
806
|
-
return m.altKey
|
|
807
|
-
else
|
|
808
|
-
return m.key
|
|
809
|
-
end if
|
|
810
|
-
end function)(m.useAltKey, m)] = 1
|
|
811
|
-
end sub
|
|
812
|
-
`);
|
|
813
|
-
});
|
|
814
|
-
it('supports scope-captured outer, and simple inner', () => {
|
|
815
|
-
testTranspile(`
|
|
816
|
-
sub main()
|
|
817
|
-
zombie = {}
|
|
818
|
-
human = {}
|
|
819
|
-
result = [
|
|
820
|
-
zombie <> invalid ? zombie.Attack(human <> invalid ? human: zombie) : "zombie"
|
|
821
|
-
]
|
|
822
|
-
end sub
|
|
823
|
-
`, `
|
|
824
|
-
sub main()
|
|
825
|
-
zombie = {}
|
|
826
|
-
human = {}
|
|
827
|
-
result = [
|
|
828
|
-
(function(__bsCondition, human, zombie)
|
|
829
|
-
if __bsCondition then
|
|
830
|
-
return zombie.Attack(bslib_ternary(human <> invalid, human, zombie))
|
|
831
|
-
else
|
|
832
|
-
return "zombie"
|
|
833
|
-
end if
|
|
834
|
-
end function)(zombie <> invalid, human, zombie)
|
|
835
|
-
]
|
|
836
|
-
end sub
|
|
837
|
-
`);
|
|
838
|
-
});
|
|
839
|
-
it('uses scope capture for property access', () => {
|
|
840
|
-
testTranspile(`
|
|
841
|
-
sub main()
|
|
842
|
-
person = {}
|
|
843
|
-
result = [
|
|
844
|
-
person <> invalid ? person.name : "John Doe"
|
|
845
|
-
]
|
|
846
|
-
end sub
|
|
847
|
-
`, `
|
|
848
|
-
sub main()
|
|
849
|
-
person = {}
|
|
850
|
-
result = [
|
|
851
|
-
(function(__bsCondition, person)
|
|
852
|
-
if __bsCondition then
|
|
853
|
-
return person.name
|
|
854
|
-
else
|
|
855
|
-
return "John Doe"
|
|
856
|
-
end if
|
|
857
|
-
end function)(person <> invalid, person)
|
|
858
|
-
]
|
|
859
|
-
end sub
|
|
860
|
-
`);
|
|
861
|
-
});
|
|
862
|
-
it('uses `invalid` in place of missing consequent ', () => {
|
|
863
|
-
testTranspile(`print name = "bob" ? :"zombie"`, `print bslib_ternary(name = "bob", invalid, "zombie")`, 'none', undefined, false);
|
|
864
|
-
});
|
|
865
|
-
it('uses `invalid` in place of missing alternate ', () => {
|
|
866
|
-
testTranspile(`print name = "bob" ? "human"`, `print bslib_ternary(name = "bob", "human", invalid)`, 'none', undefined, false);
|
|
867
|
-
});
|
|
868
|
-
it('uses `invalid` in place of missing alternate and consequent ', () => {
|
|
869
|
-
testTranspile(`print name = "bob" ?:`, `print bslib_ternary(name = "bob", invalid, invalid)`, 'none', undefined, false);
|
|
870
|
-
});
|
|
871
|
-
});
|
|
872
|
-
});
|
|
873
|
-
function parseBs(text) {
|
|
874
|
-
return Parser_1.Parser.parse(text, { mode: Parser_1.ParseMode.BrighterScript });
|
|
875
|
-
}
|
|
876
|
-
//# sourceMappingURL=TernaryExpression.spec.js.map
|