brighterscript 0.42.0 → 0.45.0

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.
Files changed (201) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/Cache.d.ts +3 -8
  3. package/dist/Cache.js +9 -14
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/DiagnosticMessages.d.ts +21 -1
  6. package/dist/DiagnosticMessages.js +20 -0
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +1 -6
  9. package/dist/LanguageServer.js +3 -12
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/PluginInterface.d.ts +3 -3
  12. package/dist/PluginInterface.js +3 -0
  13. package/dist/PluginInterface.js.map +1 -1
  14. package/dist/Program.d.ts +68 -25
  15. package/dist/Program.js +169 -76
  16. package/dist/Program.js.map +1 -1
  17. package/dist/ProgramBuilder.js +6 -6
  18. package/dist/ProgramBuilder.js.map +1 -1
  19. package/dist/Scope.d.ts +18 -11
  20. package/dist/Scope.js +41 -14
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/XmlScope.d.ts +3 -3
  23. package/dist/astUtils/AstEditor.d.ts +6 -0
  24. package/dist/astUtils/AstEditor.js +10 -0
  25. package/dist/astUtils/AstEditor.js.map +1 -1
  26. package/dist/astUtils/AstEditor.spec.js +37 -0
  27. package/dist/astUtils/AstEditor.spec.js.map +1 -1
  28. package/dist/astUtils/reflection.d.ts +5 -2
  29. package/dist/astUtils/reflection.js +14 -2
  30. package/dist/astUtils/reflection.js.map +1 -1
  31. package/dist/astUtils/reflection.spec.js +6 -6
  32. package/dist/astUtils/reflection.spec.js.map +1 -1
  33. package/dist/astUtils/visitors.d.ts +3 -1
  34. package/dist/astUtils/visitors.js.map +1 -1
  35. package/dist/astUtils/visitors.spec.js +15 -18
  36. package/dist/astUtils/visitors.spec.js.map +1 -1
  37. package/dist/bscPlugin/BscPlugin.d.ts +4 -1
  38. package/dist/bscPlugin/BscPlugin.js +21 -2
  39. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  40. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
  41. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  42. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +18 -16
  43. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  44. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +9 -0
  45. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +97 -0
  46. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  47. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.d.ts → BrsFileSemanticTokensProcessor.spec.d.ts} +0 -0
  48. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +32 -4
  49. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  50. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
  51. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
  52. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  53. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
  54. package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
  55. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  56. package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
  57. package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
  58. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  59. package/dist/files/BrsFile.Class.spec.js +218 -114
  60. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  61. package/dist/files/BrsFile.d.ts +27 -8
  62. package/dist/files/BrsFile.js +216 -95
  63. package/dist/files/BrsFile.js.map +1 -1
  64. package/dist/files/BrsFile.spec.js +338 -190
  65. package/dist/files/BrsFile.spec.js.map +1 -1
  66. package/dist/files/XmlFile.d.ts +11 -5
  67. package/dist/files/XmlFile.js +15 -9
  68. package/dist/files/XmlFile.js.map +1 -1
  69. package/dist/files/XmlFile.spec.js +118 -114
  70. package/dist/files/XmlFile.spec.js.map +1 -1
  71. package/dist/files/tests/imports.spec.js +29 -27
  72. package/dist/files/tests/imports.spec.js.map +1 -1
  73. package/dist/index.d.ts +12 -3
  74. package/dist/index.js +21 -4
  75. package/dist/index.js.map +1 -1
  76. package/dist/interfaces.d.ts +50 -9
  77. package/dist/lexer/Lexer.js +1 -2
  78. package/dist/lexer/Lexer.js.map +1 -1
  79. package/dist/lexer/Lexer.spec.js +470 -462
  80. package/dist/lexer/Lexer.spec.js.map +1 -1
  81. package/dist/lexer/TokenKind.d.ts +2 -0
  82. package/dist/lexer/TokenKind.js +5 -0
  83. package/dist/lexer/TokenKind.js.map +1 -1
  84. package/dist/parser/Expression.d.ts +1 -1
  85. package/dist/parser/Expression.js +10 -10
  86. package/dist/parser/Expression.js.map +1 -1
  87. package/dist/parser/Parser.Class.spec.js +32 -31
  88. package/dist/parser/Parser.Class.spec.js.map +1 -1
  89. package/dist/parser/Parser.d.ts +23 -2
  90. package/dist/parser/Parser.js +445 -254
  91. package/dist/parser/Parser.js.map +1 -1
  92. package/dist/parser/Parser.spec.js +86 -24
  93. package/dist/parser/Parser.spec.js.map +1 -1
  94. package/dist/parser/SGParser.spec.js +1 -1
  95. package/dist/parser/SGParser.spec.js.map +1 -1
  96. package/dist/parser/Statement.d.ts +54 -2
  97. package/dist/parser/Statement.js +162 -9
  98. package/dist/parser/Statement.js.map +1 -1
  99. package/dist/parser/Statement.spec.js +5 -5
  100. package/dist/parser/Statement.spec.js.map +1 -1
  101. package/dist/parser/tests/Parser.spec.d.ts +3 -3
  102. package/dist/parser/tests/Parser.spec.js +4 -4
  103. package/dist/parser/tests/Parser.spec.js.map +1 -1
  104. package/dist/parser/tests/controlFlow/For.spec.js +40 -40
  105. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  106. package/dist/parser/tests/controlFlow/ForEach.spec.js +22 -21
  107. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  108. package/dist/parser/tests/controlFlow/If.spec.js +100 -99
  109. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  110. package/dist/parser/tests/controlFlow/While.spec.js +25 -25
  111. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  112. package/dist/parser/tests/expression/Additive.spec.js +21 -21
  113. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  114. package/dist/parser/tests/expression/ArrayLiterals.spec.js +91 -91
  115. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  116. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +102 -102
  117. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  118. package/dist/parser/tests/expression/Boolean.spec.js +15 -15
  119. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  120. package/dist/parser/tests/expression/Call.spec.js +22 -21
  121. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  122. package/dist/parser/tests/expression/Exponential.spec.js +11 -11
  123. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  124. package/dist/parser/tests/expression/Function.spec.js +171 -171
  125. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  126. package/dist/parser/tests/expression/Indexing.spec.js +50 -50
  127. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  128. package/dist/parser/tests/expression/Multiplicative.spec.js +25 -25
  129. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  130. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +17 -17
  131. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  132. package/dist/parser/tests/expression/PrefixUnary.spec.js +26 -26
  133. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  134. package/dist/parser/tests/expression/Primary.spec.js +27 -27
  135. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  136. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +4 -3
  137. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  138. package/dist/parser/tests/expression/Relational.spec.js +25 -25
  139. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  140. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +8 -8
  141. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  142. package/dist/parser/tests/expression/TernaryExpression.spec.js +7 -7
  143. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  144. package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
  145. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  146. package/dist/parser/tests/statement/Declaration.spec.js +20 -20
  147. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  148. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  149. package/dist/parser/tests/statement/Enum.spec.js +774 -0
  150. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  151. package/dist/parser/tests/statement/Function.spec.js +121 -120
  152. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  153. package/dist/parser/tests/statement/Goto.spec.js +9 -8
  154. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  155. package/dist/parser/tests/statement/Increment.spec.js +22 -22
  156. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  157. package/dist/parser/tests/statement/InterfaceStatement.spec.js +12 -0
  158. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  159. package/dist/parser/tests/statement/LibraryStatement.spec.js +7 -7
  160. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  161. package/dist/parser/tests/statement/Misc.spec.js +71 -70
  162. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  163. package/dist/parser/tests/statement/PrintStatement.spec.js +17 -17
  164. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  165. package/dist/parser/tests/statement/ReturnStatement.spec.js +33 -33
  166. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  167. package/dist/parser/tests/statement/Set.spec.js +53 -53
  168. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  169. package/dist/parser/tests/statement/Stop.spec.js +7 -6
  170. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  171. package/dist/preprocessor/Chunk.d.ts +1 -1
  172. package/dist/preprocessor/Preprocessor.d.ts +1 -1
  173. package/dist/preprocessor/Preprocessor.js +7 -7
  174. package/dist/preprocessor/Preprocessor.js.map +1 -1
  175. package/dist/types/FunctionType.d.ts +2 -2
  176. package/dist/types/FunctionType.js +3 -3
  177. package/dist/types/FunctionType.js.map +1 -1
  178. package/dist/types/FunctionType.spec.js +2 -2
  179. package/dist/types/FunctionType.spec.js.map +1 -1
  180. package/dist/util.d.ts +27 -1
  181. package/dist/util.js +96 -29
  182. package/dist/util.js.map +1 -1
  183. package/dist/validators/ClassValidator.js +20 -27
  184. package/dist/validators/ClassValidator.js.map +1 -1
  185. package/package.json +2 -1
  186. package/dist/astUtils/index.d.ts +0 -7
  187. package/dist/astUtils/index.js +0 -26
  188. package/dist/astUtils/index.js.map +0 -1
  189. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  190. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  191. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  192. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  193. package/dist/lexer/index.d.ts +0 -3
  194. package/dist/lexer/index.js +0 -18
  195. package/dist/lexer/index.js.map +0 -1
  196. package/dist/parser/index.d.ts +0 -3
  197. package/dist/parser/index.js +0 -16
  198. package/dist/parser/index.js.map +0 -1
  199. package/dist/preprocessor/index.d.ts +0 -3
  200. package/dist/preprocessor/index.js +0 -16
  201. package/dist/preprocessor/index.js.map +0 -1
@@ -29,10 +29,10 @@ describe('BrsFile BrighterScript classes', () => {
29
29
  fsExtra.emptyDirSync(tmpPath);
30
30
  });
31
31
  function addFile(relativePath, text) {
32
- return program.addOrReplaceFile({ src: `${rootDir}/${relativePath}`, dest: relativePath }, text);
32
+ return program.setFile({ src: `${rootDir}/${relativePath}`, dest: relativePath }, text);
33
33
  }
34
34
  it('detects all classes after parse', () => {
35
- let file = program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
35
+ let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
36
36
  class Animal
37
37
  end class
38
38
  class Duck
@@ -43,15 +43,14 @@ describe('BrsFile BrighterScript classes', () => {
43
43
  (0, chai_1.expect)(file.parser.references.classStatements.map(x => x.getName(Parser_1.ParseMode.BrighterScript)).sort()).to.eql(['Animal', 'Duck']);
44
44
  });
45
45
  it('does not cause errors with incomplete class statement', () => {
46
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
46
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
47
47
  class
48
48
  `);
49
49
  program.validate();
50
50
  //if no exception was thrown, this test passes
51
51
  });
52
52
  it('catches child class missing super call in constructor', () => {
53
- var _a;
54
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
53
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
55
54
  class Person
56
55
  sub new()
57
56
  end sub
@@ -62,11 +61,12 @@ describe('BrsFile BrighterScript classes', () => {
62
61
  end class
63
62
  `);
64
63
  program.validate();
65
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
64
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
65
+ DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
66
+ ]);
66
67
  });
67
68
  it('access modifier is option for override', () => {
68
- var _a;
69
- let file = program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
69
+ let file = program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
70
70
  class Animal
71
71
  sub move()
72
72
  end sub
@@ -78,14 +78,13 @@ describe('BrsFile BrighterScript classes', () => {
78
78
  end class
79
79
  `);
80
80
  program.validate();
81
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
81
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
82
82
  let duckClass = file.parser.references.classStatements.find(x => x.name.text.toLowerCase() === 'duck');
83
83
  (0, chai_1.expect)(duckClass).to.exist;
84
84
  (0, chai_1.expect)(duckClass.memberMap['move']).to.exist;
85
85
  });
86
86
  it('supports various namespace configurations', () => {
87
- var _a;
88
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
87
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
89
88
  class Animal
90
89
  sub new()
91
90
  bigBird = new Birds.Bird()
@@ -105,12 +104,11 @@ describe('BrsFile BrighterScript classes', () => {
105
104
  end namespace
106
105
  `);
107
106
  program.validate();
108
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
107
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
109
108
  });
110
109
  describe('super', () => {
111
110
  it('always requires super call in child constructor', () => {
112
- var _a;
113
- program.addOrReplaceFile('source/main.bs', `
111
+ program.setFile('source/main.bs', `
114
112
  class Bird
115
113
  end class
116
114
  class Duck extends Bird
@@ -119,11 +117,12 @@ describe('BrsFile BrighterScript classes', () => {
119
117
  end class
120
118
  `);
121
119
  program.validate();
122
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
120
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
121
+ DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
122
+ ]);
123
123
  });
124
124
  it('requires super call in child when parent has own `new` method', () => {
125
- var _a;
126
- program.addOrReplaceFile('source/main.bs', `
125
+ program.setFile('source/main.bs', `
127
126
  class Bird
128
127
  sub new()
129
128
  end sub
@@ -134,11 +133,12 @@ describe('BrsFile BrighterScript classes', () => {
134
133
  end class
135
134
  `);
136
135
  program.validate();
137
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
136
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
137
+ DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
138
+ ]);
138
139
  });
139
140
  it('allows non-`m` expressions and statements before the super call', () => {
140
- var _a;
141
- program.addOrReplaceFile('source/main.bs', `
141
+ program.setFile('source/main.bs', `
142
142
  class Bird
143
143
  sub new(name)
144
144
  end sub
@@ -153,10 +153,10 @@ describe('BrsFile BrighterScript classes', () => {
153
153
  end class
154
154
  `);
155
155
  program.validate();
156
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.be.undefined;
156
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
157
157
  });
158
158
  it('allows non-`m` expressions and statements before the super call', () => {
159
- program.addOrReplaceFile('source/main.bs', `
159
+ program.setFile('source/main.bs', `
160
160
  class Bird
161
161
  sub new(name)
162
162
  end sub
@@ -169,13 +169,7 @@ describe('BrsFile BrighterScript classes', () => {
169
169
  end class
170
170
  `);
171
171
  program.validate();
172
- (0, chai_1.expect)(program.getDiagnostics().map(x => ({ message: x.message, range: x.range }))).to.eql([{
173
- message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
174
- range: vscode_languageserver_1.Range.create(7, 24, 7, 25)
175
- }, {
176
- message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
177
- range: vscode_languageserver_1.Range.create(7, 33, 7, 34)
178
- }]);
172
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall()), { range: vscode_languageserver_1.Range.create(7, 24, 7, 25) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall()), { range: vscode_languageserver_1.Range.create(7, 33, 7, 34) })]);
179
173
  });
180
174
  });
181
175
  describe('transpile', () => {
@@ -660,8 +654,7 @@ describe('BrsFile BrighterScript classes', () => {
660
654
  });
661
655
  });
662
656
  it('detects using `new` keyword on non-classes', () => {
663
- var _a;
664
- program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
657
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
665
658
  sub quack()
666
659
  end sub
667
660
  sub main()
@@ -669,11 +662,12 @@ describe('BrsFile BrighterScript classes', () => {
669
662
  end sub
670
663
  `);
671
664
  program.validate();
672
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expressionIsNotConstructable('sub').message);
665
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
666
+ DiagnosticMessages_1.DiagnosticMessages.expressionIsNotConstructable('sub')
667
+ ]);
673
668
  });
674
669
  it('detects missing call to super', () => {
675
- var _a;
676
- program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
670
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
677
671
  class Animal
678
672
  sub new()
679
673
  end sub
@@ -684,11 +678,12 @@ describe('BrsFile BrighterScript classes', () => {
684
678
  end class
685
679
  `);
686
680
  program.validate();
687
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
681
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
682
+ DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
683
+ ]);
688
684
  });
689
685
  it.skip('detects calls to unknown m methods', () => {
690
- var _a;
691
- program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
686
+ program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
692
687
  class Animal
693
688
  sub new()
694
689
  m.methodThatDoesNotExist()
@@ -696,10 +691,12 @@ describe('BrsFile BrighterScript classes', () => {
696
691
  end class
697
692
  `);
698
693
  program.validate();
699
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.methodDoesNotExistOnType('methodThatDoesNotExist', 'Animal'));
694
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
695
+ DiagnosticMessages_1.DiagnosticMessages.methodDoesNotExistOnType('methodThatDoesNotExist', 'Animal')
696
+ ]);
700
697
  });
701
698
  it('detects duplicate member names', () => {
702
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
699
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
703
700
  class Animal
704
701
  public name
705
702
  public name
@@ -713,32 +710,26 @@ describe('BrsFile BrighterScript classes', () => {
713
710
  end class
714
711
  `);
715
712
  program.validate();
716
- let diagnostics = program.getDiagnostics().map(x => {
717
- return {
718
- code: x.code,
719
- message: x.message,
720
- range: x.range,
721
- severity: vscode_languageserver_1.DiagnosticSeverity.Error
722
- };
723
- });
724
- (0, chai_1.expect)(diagnostics).to.eql([Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
713
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
725
714
  });
726
715
  it('detects mismatched member type in child class', () => {
727
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
716
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
728
717
  class Animal
729
718
  public name
730
719
  end class
731
720
  class Duck extends Animal
732
- public function name()
721
+ public override function name()
733
722
  return "Donald"
734
723
  end function
735
724
  end class
736
725
  `);
737
726
  program.validate();
738
- (0, chai_1.expect)(program.getDiagnostics().map(x => x.message).sort()[0]).to.eql(DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor('method', 'field', 'Animal').message);
727
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
728
+ DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor('method', 'field', 'Animal')
729
+ ]);
739
730
  });
740
731
  it('allows untyped overridden field in child class', () => {
741
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
732
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
742
733
  class Animal
743
734
  public name
744
735
  end class
@@ -750,7 +741,7 @@ describe('BrsFile BrighterScript classes', () => {
750
741
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
751
742
  });
752
743
  it('allows overridden property name in child class', () => {
753
- program.addOrReplaceFile('source/main.bs', `
744
+ program.setFile('source/main.bs', `
754
745
  class Bird
755
746
  public name = "bird"
756
747
  end class
@@ -762,7 +753,7 @@ describe('BrsFile BrighterScript classes', () => {
762
753
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
763
754
  });
764
755
  it('flags incompatible child field type changes', () => {
765
- program.addOrReplaceFile('source/main.bs', `
756
+ program.setFile('source/main.bs', `
766
757
  class Bird
767
758
  public age = 12
768
759
  public name = "bird"
@@ -775,15 +766,15 @@ describe('BrsFile BrighterScript classes', () => {
775
766
  end class
776
767
  `);
777
768
  program.validate();
778
- (0, chai_1.expect)(program.getDiagnostics().map(x => x.message).sort()).to.eql([
779
- DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person').message,
780
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer').message,
781
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string').message,
782
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person').message
769
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
770
+ DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person'),
771
+ DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer'),
772
+ DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string'),
773
+ DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person')
783
774
  ]);
784
775
  });
785
776
  it('detects overridden methods without override keyword', () => {
786
- program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
777
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
787
778
  class Animal
788
779
  sub speak()
789
780
  end sub
@@ -794,10 +785,12 @@ describe('BrsFile BrighterScript classes', () => {
794
785
  end class
795
786
  `);
796
787
  program.validate();
797
- (0, chai_1.expect)(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword('Animal')));
788
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
789
+ DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword('Animal')
790
+ ]);
798
791
  });
799
792
  it('detects overridden methods with different visibility', () => {
800
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
793
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
801
794
  class Animal
802
795
  sub speakInPublic()
803
796
  end sub
@@ -816,12 +809,14 @@ describe('BrsFile BrighterScript classes', () => {
816
809
  end class
817
810
  `);
818
811
  program.validate();
819
- (0, chai_1.expect)(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakInPublic', 'private', 'public', 'Animal')));
820
- (0, chai_1.expect)(program.getDiagnostics()[1]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFriends', 'public', 'protected', 'Animal')));
821
- (0, chai_1.expect)(program.getDiagnostics()[2]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFamily', 'public', 'private', 'Animal')));
812
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
813
+ DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakInPublic', 'private', 'public', 'Animal'),
814
+ DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFriends', 'public', 'protected', 'Animal'),
815
+ DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFamily', 'public', 'private', 'Animal')
816
+ ]);
822
817
  });
823
818
  it('allows overridden methods with matching visibility', () => {
824
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
819
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
825
820
  class Animal
826
821
  sub speakInPublic()
827
822
  end sub
@@ -840,21 +835,96 @@ describe('BrsFile BrighterScript classes', () => {
840
835
  end class
841
836
  `);
842
837
  program.validate();
843
- (0, chai_1.expect)(program.getDiagnostics()).to.be.empty;
838
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
844
839
  });
845
- it('detects extending unknown parent class', () => {
846
- program.addOrReplaceFile('source/main.brs', `
847
- class Duck extends Animal
848
- sub speak()
849
- end sub
850
- end class
851
- `);
852
- program.validate();
853
- (0, chai_1.expect)(program.getDiagnostics()[0]).to.exist.and.to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')), { range: vscode_languageserver_1.Range.create(1, 31, 1, 37) }));
840
+ describe('detects unknown parent class', () => {
841
+ it('non-namespaced parent from outside namespace', () => {
842
+ program.setFile('source/main.bs', `
843
+ class Duck extends Animal
844
+ sub speak()
845
+ end sub
846
+ end class
847
+
848
+ namespace Vertibrates
849
+ class Animal
850
+ end class
851
+ end namespace
852
+ `);
853
+ program.validate();
854
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')), { range: vscode_languageserver_1.Range.create(1, 35, 1, 41) })]);
855
+ });
856
+ it('non-namespaced parent from within namespace', () => {
857
+ program.setFile('source/main.bs', `
858
+ namespace Vertibrates
859
+ class Duck extends Animal
860
+ sub speak()
861
+ end sub
862
+ end class
863
+ end namespace
864
+ `);
865
+ program.validate();
866
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
867
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')
868
+ ]);
869
+ });
870
+ it('non-namespaced name from outside namespace alongside existing namespace', () => {
871
+ program.setFile('source/main.bs', `
872
+ namespace Vertibrates
873
+ class Animal
874
+ end class
875
+ end namespace
876
+
877
+ class Duck extends Animal
878
+ sub speak()
879
+ end sub
880
+ end class
881
+ `);
882
+ program.validate();
883
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
884
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')
885
+ ]);
886
+ });
887
+ it('namespaced parent class from outside namespace', () => {
888
+ program.setFile('source/vertibrates.bs', `
889
+ namespace Vertibrates
890
+ class Bird
891
+ end class
892
+ end namespace
893
+ `);
894
+ program.setFile('source/Duck.bs', `
895
+ class Duck extends Vertibrates.GroundedBird
896
+ sub speak()
897
+ end sub
898
+ end class
899
+ `);
900
+ program.validate();
901
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
902
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Vertibrates.GroundedBird', 'source')
903
+ ]);
904
+ });
905
+ it('namespaced parent class from inside namespace', () => {
906
+ program.setFile('source/vertibrates.bs', `
907
+ namespace Vertibrates
908
+ class Bird
909
+ end class
910
+ end namespace
911
+ `);
912
+ program.setFile('source/Duck.bs', `
913
+ namespace Birdies
914
+ class Duck extends Vertibrates.GroundedBird
915
+ sub speak()
916
+ end sub
917
+ end class
918
+ end namespace
919
+ `);
920
+ program.validate();
921
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
922
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Vertibrates.GroundedBird', 'source')
923
+ ]);
924
+ });
854
925
  });
855
926
  it('catches newable class without namespace name', () => {
856
- var _a;
857
- program.addOrReplaceFile('source/main.bs', `
927
+ program.setFile('source/main.bs', `
858
928
  namespace NameA.NameB
859
929
  class Duck
860
930
  end class
@@ -865,11 +935,12 @@ describe('BrsFile BrighterScript classes', () => {
865
935
  end sub
866
936
  `);
867
937
  program.validate();
868
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Duck', 'source').message);
938
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
939
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Duck', 'source')
940
+ ]);
869
941
  });
870
942
  it('supports newable class namespace inference', () => {
871
- var _a;
872
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
943
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
873
944
  namespace NameA.NameB
874
945
  class Duck
875
946
  end class
@@ -879,11 +950,10 @@ describe('BrsFile BrighterScript classes', () => {
879
950
  end namespace
880
951
  `);
881
952
  program.validate();
882
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
953
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
883
954
  });
884
955
  it('catches extending unknown namespaced class', () => {
885
- var _a;
886
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
956
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
887
957
  namespace NameA.NameB
888
958
  class Animal
889
959
  end class
@@ -892,11 +962,12 @@ describe('BrsFile BrighterScript classes', () => {
892
962
  end namespace
893
963
  `);
894
964
  program.validate();
895
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('NameA.NameB.Animal1', 'source').message);
965
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
966
+ DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('NameA.NameB.Animal1', 'source')
967
+ ]);
896
968
  });
897
969
  it('supports omitting namespace prefix for items in same namespace', () => {
898
- var _a;
899
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
970
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
900
971
  namespace NameA.NameB
901
972
  class Animal
902
973
  end class
@@ -905,33 +976,36 @@ describe('BrsFile BrighterScript classes', () => {
905
976
  end namespace
906
977
  `);
907
978
  program.validate();
908
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
979
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
909
980
  });
910
981
  it('catches duplicate root-level class declarations', () => {
911
- var _a;
912
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
982
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
913
983
  class Animal
914
984
  end class
915
985
  class Animal
986
+ end class
916
987
  `);
917
988
  program.validate();
918
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'Animal').message);
989
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
990
+ DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'Animal')
991
+ ]);
919
992
  });
920
993
  it('catches duplicate namespace-level class declarations', () => {
921
- var _a;
922
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
994
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
923
995
  namespace NameA.NameB
924
996
  class Animal
925
997
  end class
926
998
  class Animal
999
+ end class
927
1000
  end namespace
928
1001
  `);
929
1002
  program.validate();
930
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'NameA.NameB.Animal').message);
1003
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1004
+ DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'NameA.NameB.Animal')
1005
+ ]);
931
1006
  });
932
1007
  it('catches namespaced class name which is the same as a global class', () => {
933
- var _a;
934
- program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
1008
+ program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
935
1009
  namespace NameA.NameB
936
1010
  class Animal
937
1011
  end class
@@ -940,33 +1014,36 @@ describe('BrsFile BrighterScript classes', () => {
940
1014
  end class
941
1015
  `);
942
1016
  program.validate();
943
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass('Animal').message);
1017
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1018
+ DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass('Animal').message
1019
+ ]);
944
1020
  });
945
1021
  it('catches class with same name as function', () => {
946
- var _a;
947
- program.addOrReplaceFile('source/main.bs', `
1022
+ program.setFile('source/main.bs', `
948
1023
  class Animal
949
1024
  end class
950
1025
  sub Animal()
951
1026
  end sub
952
1027
  `);
953
1028
  program.validate();
954
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('Animal').message);
1029
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1030
+ DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('Animal').message
1031
+ ]);
955
1032
  });
956
1033
  it('catches class with same name (but different case) as function', () => {
957
- var _a;
958
- program.addOrReplaceFile('source/main.bs', `
1034
+ program.setFile('source/main.bs', `
959
1035
  class ANIMAL
960
1036
  end class
961
1037
  sub animal()
962
1038
  end sub
963
1039
  `);
964
1040
  program.validate();
965
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('animal').message);
1041
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1042
+ DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('animal').message
1043
+ ]);
966
1044
  });
967
1045
  it('catches variable with same name as class', () => {
968
- var _a;
969
- program.addOrReplaceFile('source/main.bs', `
1046
+ program.setFile('source/main.bs', `
970
1047
  class Animal
971
1048
  end class
972
1049
  sub main()
@@ -974,10 +1051,12 @@ describe('BrsFile BrighterScript classes', () => {
974
1051
  end sub
975
1052
  `);
976
1053
  program.validate();
977
- (0, chai_1.expect)((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.localVarSameNameAsClass('Animal').message);
1054
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1055
+ DiagnosticMessages_1.DiagnosticMessages.localVarSameNameAsClass('Animal').message
1056
+ ]);
978
1057
  });
979
1058
  it('allows extending classes with more than one dot in the filename', () => {
980
- program.addOrReplaceFile('source/testclass.bs', `
1059
+ program.setFile('source/testclass.bs', `
981
1060
  class Foo
982
1061
  end class
983
1062
 
@@ -987,14 +1066,14 @@ describe('BrsFile BrighterScript classes', () => {
987
1066
  end sub
988
1067
  end class
989
1068
  `);
990
- program.addOrReplaceFile('source/testclass_no_testdot.bs', `
1069
+ program.setFile('source/testclass_no_testdot.bs', `
991
1070
  class BarNoDot extends Foo
992
1071
  sub new()
993
1072
  super()
994
1073
  end sub
995
1074
  end class
996
1075
  `);
997
- program.addOrReplaceFile('source/testclass.dot.bs', `
1076
+ program.setFile('source/testclass.dot.bs', `
998
1077
  class BarDot extends Foo
999
1078
  sub new()
1000
1079
  super()
@@ -1005,7 +1084,7 @@ describe('BrsFile BrighterScript classes', () => {
1005
1084
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1006
1085
  });
1007
1086
  it('computes correct super index for grandchild class', () => {
1008
- program.addOrReplaceFile('source/main.bs', `
1087
+ program.setFile('source/main.bs', `
1009
1088
  sub Main()
1010
1089
  c = new App.ClassC()
1011
1090
  end sub
@@ -1043,7 +1122,7 @@ describe('BrsFile BrighterScript classes', () => {
1043
1122
  `, 'trim', 'source/App.ClassC.bs');
1044
1123
  });
1045
1124
  it('computes correct super index for namespaced child class and global parent class', () => {
1046
- program.addOrReplaceFile('source/ClassA.bs', `
1125
+ program.setFile('source/ClassA.bs', `
1047
1126
  class ClassA
1048
1127
  end class
1049
1128
  `);
@@ -1069,7 +1148,7 @@ describe('BrsFile BrighterScript classes', () => {
1069
1148
  `, 'trim', 'source/App.ClassB.bs');
1070
1149
  });
1071
1150
  it('does not crash when parent class is missing', () => {
1072
- const file = program.addOrReplaceFile('source/ClassB.bs', `
1151
+ const file = program.setFile('source/ClassB.bs', `
1073
1152
  class ClassB extends ClassA
1074
1153
  end class
1075
1154
  `);
@@ -1078,7 +1157,7 @@ describe('BrsFile BrighterScript classes', () => {
1078
1157
  });
1079
1158
  });
1080
1159
  it('does not crash when child has field with same name as sub in parent', () => {
1081
- program.addOrReplaceFile('source/main.bs', `
1160
+ program.setFile('source/main.bs', `
1082
1161
  class Parent
1083
1162
  public function helloWorld()
1084
1163
  end function
@@ -1090,7 +1169,7 @@ describe('BrsFile BrighterScript classes', () => {
1090
1169
  program.validate();
1091
1170
  });
1092
1171
  it('does not crash when child has method with same name as field in parent', () => {
1093
- program.addOrReplaceFile('source/main.bs', `
1172
+ program.setFile('source/main.bs', `
1094
1173
  class Parent
1095
1174
  public helloWorld as string
1096
1175
  end class
@@ -1101,5 +1180,30 @@ describe('BrsFile BrighterScript classes', () => {
1101
1180
  `);
1102
1181
  program.validate();
1103
1182
  });
1183
+ it.skip('detects calling class constructors with too many parameters', () => {
1184
+ program.setFile('source/main.bs', `
1185
+ class Parameterless
1186
+ sub new()
1187
+ end sub
1188
+ end class
1189
+
1190
+ class OneParam
1191
+ sub new(param1)
1192
+ end sub
1193
+ end class
1194
+
1195
+ sub main()
1196
+ c1 = new Parameterless(1)
1197
+ c2 = new OneParam(1, 2)
1198
+ c2 = new OneParam()
1199
+ end sub
1200
+ `);
1201
+ program.validate();
1202
+ (0, testHelpers_spec_1.expectDiagnostics)(program, [
1203
+ DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(0, 1),
1204
+ DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(1, 2),
1205
+ DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(1, 0)
1206
+ ]);
1207
+ });
1104
1208
  });
1105
1209
  //# sourceMappingURL=BrsFile.Class.spec.js.map