brighterscript 1.0.0-alpha.24 → 1.0.0-alpha.26

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