brighterscript 1.0.0-alpha.10 → 1.0.0-alpha.14

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