hotstaq 0.5.3

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 (318) hide show
  1. package/.dockerignore +123 -0
  2. package/.eslintignore +17 -0
  3. package/.eslintrc.js +11 -0
  4. package/.vscode/launch.json +201 -0
  5. package/.vscode/settings.json +2 -0
  6. package/.vscode/tasks.json +88 -0
  7. package/CONTRIBUTING.md +157 -0
  8. package/LICENSE +21 -0
  9. package/README.md +128 -0
  10. package/bin/hotstaq +3 -0
  11. package/bin/hotstaq.cmd +1 -0
  12. package/build/src/Hot.d.ts +167 -0
  13. package/build/src/Hot.d.ts.map +1 -0
  14. package/build/src/Hot.js +365 -0
  15. package/build/src/Hot.js.map +1 -0
  16. package/build/src/HotAPI.d.ts +137 -0
  17. package/build/src/HotAPI.d.ts.map +1 -0
  18. package/build/src/HotAPI.js +353 -0
  19. package/build/src/HotAPI.js.map +1 -0
  20. package/build/src/HotAgentAPI.d.ts +22 -0
  21. package/build/src/HotAgentAPI.d.ts.map +1 -0
  22. package/build/src/HotAgentAPI.js +85 -0
  23. package/build/src/HotAgentAPI.js.map +1 -0
  24. package/build/src/HotAgentRoute.d.ts +17 -0
  25. package/build/src/HotAgentRoute.d.ts.map +1 -0
  26. package/build/src/HotAgentRoute.js +109 -0
  27. package/build/src/HotAgentRoute.js.map +1 -0
  28. package/build/src/HotBuilder.d.ts +52 -0
  29. package/build/src/HotBuilder.d.ts.map +1 -0
  30. package/build/src/HotBuilder.js +242 -0
  31. package/build/src/HotBuilder.js.map +1 -0
  32. package/build/src/HotClient.d.ts +31 -0
  33. package/build/src/HotClient.d.ts.map +1 -0
  34. package/build/src/HotClient.js +19 -0
  35. package/build/src/HotClient.js.map +1 -0
  36. package/build/src/HotComponent.d.ts +118 -0
  37. package/build/src/HotComponent.d.ts.map +1 -0
  38. package/build/src/HotComponent.js +89 -0
  39. package/build/src/HotComponent.js.map +1 -0
  40. package/build/src/HotCreator.d.ts +88 -0
  41. package/build/src/HotCreator.d.ts.map +1 -0
  42. package/build/src/HotCreator.js +445 -0
  43. package/build/src/HotCreator.js.map +1 -0
  44. package/build/src/HotDB.d.ts +69 -0
  45. package/build/src/HotDB.d.ts.map +1 -0
  46. package/build/src/HotDB.js +29 -0
  47. package/build/src/HotDB.js.map +1 -0
  48. package/build/src/HotDBConnectionInterface.d.ts +40 -0
  49. package/build/src/HotDBConnectionInterface.d.ts.map +1 -0
  50. package/build/src/HotDBConnectionInterface.js +3 -0
  51. package/build/src/HotDBConnectionInterface.js.map +1 -0
  52. package/build/src/HotFile.d.ts +134 -0
  53. package/build/src/HotFile.d.ts.map +1 -0
  54. package/build/src/HotFile.js +454 -0
  55. package/build/src/HotFile.js.map +1 -0
  56. package/build/src/HotGenerator.d.ts +80 -0
  57. package/build/src/HotGenerator.d.ts.map +1 -0
  58. package/build/src/HotGenerator.js +342 -0
  59. package/build/src/HotGenerator.js.map +1 -0
  60. package/build/src/HotHTTPServer.d.ts +162 -0
  61. package/build/src/HotHTTPServer.d.ts.map +1 -0
  62. package/build/src/HotHTTPServer.js +863 -0
  63. package/build/src/HotHTTPServer.js.map +1 -0
  64. package/build/src/HotIO.d.ts +47 -0
  65. package/build/src/HotIO.d.ts.map +1 -0
  66. package/build/src/HotIO.js +232 -0
  67. package/build/src/HotIO.js.map +1 -0
  68. package/build/src/HotLog.d.ts +60 -0
  69. package/build/src/HotLog.d.ts.map +1 -0
  70. package/build/src/HotLog.js +126 -0
  71. package/build/src/HotLog.js.map +1 -0
  72. package/build/src/HotPage.d.ts +125 -0
  73. package/build/src/HotPage.d.ts.map +1 -0
  74. package/build/src/HotPage.js +178 -0
  75. package/build/src/HotPage.js.map +1 -0
  76. package/build/src/HotRoute.d.ts +82 -0
  77. package/build/src/HotRoute.d.ts.map +1 -0
  78. package/build/src/HotRoute.js +83 -0
  79. package/build/src/HotRoute.js.map +1 -0
  80. package/build/src/HotRouteMethod.d.ts +129 -0
  81. package/build/src/HotRouteMethod.d.ts.map +1 -0
  82. package/build/src/HotRouteMethod.js +84 -0
  83. package/build/src/HotRouteMethod.js.map +1 -0
  84. package/build/src/HotServer.d.ts +152 -0
  85. package/build/src/HotServer.d.ts.map +1 -0
  86. package/build/src/HotServer.js +109 -0
  87. package/build/src/HotServer.js.map +1 -0
  88. package/build/src/HotSetAsWeb.d.ts +2 -0
  89. package/build/src/HotSetAsWeb.d.ts.map +1 -0
  90. package/build/src/HotSetAsWeb.js +5 -0
  91. package/build/src/HotSetAsWeb.js.map +1 -0
  92. package/build/src/HotStaq.d.ts +603 -0
  93. package/build/src/HotStaq.d.ts.map +1 -0
  94. package/build/src/HotStaq.js +1260 -0
  95. package/build/src/HotStaq.js.map +1 -0
  96. package/build/src/HotStaqWeb.d.ts +18 -0
  97. package/build/src/HotStaqWeb.d.ts.map +1 -0
  98. package/build/src/HotStaqWeb.js +44 -0
  99. package/build/src/HotStaqWeb.js.map +1 -0
  100. package/build/src/HotTestDriver.d.ts +63 -0
  101. package/build/src/HotTestDriver.d.ts.map +1 -0
  102. package/build/src/HotTestDriver.js +187 -0
  103. package/build/src/HotTestDriver.js.map +1 -0
  104. package/build/src/HotTestElement.d.ts +71 -0
  105. package/build/src/HotTestElement.d.ts.map +1 -0
  106. package/build/src/HotTestElement.js +37 -0
  107. package/build/src/HotTestElement.js.map +1 -0
  108. package/build/src/HotTestMap.d.ts +83 -0
  109. package/build/src/HotTestMap.d.ts.map +1 -0
  110. package/build/src/HotTestMap.js +58 -0
  111. package/build/src/HotTestMap.js.map +1 -0
  112. package/build/src/HotTestSeleniumDriver.d.ts +86 -0
  113. package/build/src/HotTestSeleniumDriver.d.ts.map +1 -0
  114. package/build/src/HotTestSeleniumDriver.js +400 -0
  115. package/build/src/HotTestSeleniumDriver.js.map +1 -0
  116. package/build/src/HotTester.d.ts +188 -0
  117. package/build/src/HotTester.d.ts.map +1 -0
  118. package/build/src/HotTester.js +622 -0
  119. package/build/src/HotTester.js.map +1 -0
  120. package/build/src/HotTesterAPI.d.ts +15 -0
  121. package/build/src/HotTesterAPI.d.ts.map +1 -0
  122. package/build/src/HotTesterAPI.js +161 -0
  123. package/build/src/HotTesterAPI.js.map +1 -0
  124. package/build/src/HotTesterMocha.d.ts +50 -0
  125. package/build/src/HotTesterMocha.d.ts.map +1 -0
  126. package/build/src/HotTesterMocha.js +205 -0
  127. package/build/src/HotTesterMocha.js.map +1 -0
  128. package/build/src/HotTesterMochaSelenium.d.ts +70 -0
  129. package/build/src/HotTesterMochaSelenium.d.ts.map +1 -0
  130. package/build/src/HotTesterMochaSelenium.js +257 -0
  131. package/build/src/HotTesterMochaSelenium.js.map +1 -0
  132. package/build/src/HotTesterServer.d.ts +114 -0
  133. package/build/src/HotTesterServer.d.ts.map +1 -0
  134. package/build/src/HotTesterServer.js +575 -0
  135. package/build/src/HotTesterServer.js.map +1 -0
  136. package/build/src/api copy.d.ts +2 -0
  137. package/build/src/api copy.d.ts.map +1 -0
  138. package/build/src/api copy.js +153 -0
  139. package/build/src/api copy.js.map +1 -0
  140. package/build/src/api-web.d.ts +2 -0
  141. package/build/src/api-web.d.ts.map +1 -0
  142. package/build/src/api-web.js +45 -0
  143. package/build/src/api-web.js.map +1 -0
  144. package/build/src/api.d.ts +33 -0
  145. package/build/src/api.d.ts.map +1 -0
  146. package/build/src/api.js +78 -0
  147. package/build/src/api.js.map +1 -0
  148. package/build/src/cli.d.ts +2 -0
  149. package/build/src/cli.d.ts.map +1 -0
  150. package/build/src/cli.js +1040 -0
  151. package/build/src/cli.js.map +1 -0
  152. package/build/src/schemas/HotDBInflux.d.ts +63 -0
  153. package/build/src/schemas/HotDBInflux.d.ts.map +1 -0
  154. package/build/src/schemas/HotDBInflux.js +239 -0
  155. package/build/src/schemas/HotDBInflux.js.map +1 -0
  156. package/build/src/schemas/HotDBMigration.d.ts +19 -0
  157. package/build/src/schemas/HotDBMigration.d.ts.map +1 -0
  158. package/build/src/schemas/HotDBMigration.js +15 -0
  159. package/build/src/schemas/HotDBMigration.js.map +1 -0
  160. package/build/src/schemas/HotDBMySQL.d.ts +65 -0
  161. package/build/src/schemas/HotDBMySQL.d.ts.map +1 -0
  162. package/build/src/schemas/HotDBMySQL.js +387 -0
  163. package/build/src/schemas/HotDBMySQL.js.map +1 -0
  164. package/build/src/schemas/HotDBSchema.d.ts +15 -0
  165. package/build/src/schemas/HotDBSchema.d.ts.map +1 -0
  166. package/build/src/schemas/HotDBSchema.js +19 -0
  167. package/build/src/schemas/HotDBSchema.js.map +1 -0
  168. package/build/src/schemas/influx/InfluxSchema.d.ts +14 -0
  169. package/build/src/schemas/influx/InfluxSchema.d.ts.map +1 -0
  170. package/build/src/schemas/influx/InfluxSchema.js +33 -0
  171. package/build/src/schemas/influx/InfluxSchema.js.map +1 -0
  172. package/build/src/schemas/mysql/MySQLSchema.d.ts +39 -0
  173. package/build/src/schemas/mysql/MySQLSchema.d.ts.map +1 -0
  174. package/build/src/schemas/mysql/MySQLSchema.js +151 -0
  175. package/build/src/schemas/mysql/MySQLSchema.js.map +1 -0
  176. package/build/src/schemas/mysql/MySQLSchemaField.d.ts +168 -0
  177. package/build/src/schemas/mysql/MySQLSchemaField.d.ts.map +1 -0
  178. package/build/src/schemas/mysql/MySQLSchemaField.js +260 -0
  179. package/build/src/schemas/mysql/MySQLSchemaField.js.map +1 -0
  180. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts +49 -0
  181. package/build/src/schemas/mysql/MySQLSchemaTable.d.ts.map +1 -0
  182. package/build/src/schemas/mysql/MySQLSchemaTable.js +310 -0
  183. package/build/src/schemas/mysql/MySQLSchemaTable.js.map +1 -0
  184. package/build-web/HotStaq.js +2 -0
  185. package/build-web/HotStaq.min.js +119 -0
  186. package/build-web/HotStaqTests_HelloWorldAPI.js +133 -0
  187. package/builder/docker/Dockerfile.linux.gen +42 -0
  188. package/builder/docker/README.md +36 -0
  189. package/builder/docker/app/start.sh +8 -0
  190. package/builder/docker/dockerignore +3 -0
  191. package/builder/docker/scripts/build.bat +11 -0
  192. package/builder/docker/scripts/build.sh +11 -0
  193. package/builder/docker/scripts/start-app.bat +7 -0
  194. package/builder/docker/scripts/start-app.sh +7 -0
  195. package/builder/docker/scripts/stop-app.bat +5 -0
  196. package/builder/docker/scripts/stop-app.sh +5 -0
  197. package/builder/docker-compose/docker-compose.gen.yaml +41 -0
  198. package/builder/docker-compose/env-skeleton +4 -0
  199. package/creator/project/.vscode/launch.json +59 -0
  200. package/creator/project/README.md +20 -0
  201. package/creator/project/gitignore +118 -0
  202. package/creator/project/npmignore +118 -0
  203. package/creator/public/api-test.hott +28 -0
  204. package/creator/public/index.hott +12 -0
  205. package/creator/ts/src/AppAPI.ts +30 -0
  206. package/creator/ts/src/HelloWorld.ts +39 -0
  207. package/creator/ts/src/WebExport.ts +7 -0
  208. package/creator/ts/tsconfig-web.json +73 -0
  209. package/creator/ts/tsconfig.json +73 -0
  210. package/creator/ts/webpack-api.config.js +57 -0
  211. package/dbstart.sh +19 -0
  212. package/dbstop.sh +4 -0
  213. package/docs/.nojekyll +1 -0
  214. package/docs/README.md +130 -0
  215. package/docs/classes/Hot.md +477 -0
  216. package/docs/classes/HotAPI.md +369 -0
  217. package/docs/classes/HotClient.md +95 -0
  218. package/docs/classes/HotComponent.md +279 -0
  219. package/docs/classes/HotDB.md +247 -0
  220. package/docs/classes/HotDBInflux.md +404 -0
  221. package/docs/classes/HotDBMigration.md +80 -0
  222. package/docs/classes/HotDBMySQL.md +310 -0
  223. package/docs/classes/HotDBSchema.md +51 -0
  224. package/docs/classes/HotFile.md +353 -0
  225. package/docs/classes/HotHTTPServer.md +700 -0
  226. package/docs/classes/HotLog.md +162 -0
  227. package/docs/classes/HotPage.md +357 -0
  228. package/docs/classes/HotRoute.md +312 -0
  229. package/docs/classes/HotRouteMethod.md +271 -0
  230. package/docs/classes/HotServer.md +311 -0
  231. package/docs/classes/HotStaq.md +1155 -0
  232. package/docs/classes/HotTestDestination.md +58 -0
  233. package/docs/classes/HotTestDriver.md +332 -0
  234. package/docs/classes/HotTestElement.md +88 -0
  235. package/docs/classes/HotTestElementOptions.md +71 -0
  236. package/docs/classes/HotTestMap.md +92 -0
  237. package/docs/classes/HotTestSeleniumDriver.md +542 -0
  238. package/docs/classes/HotTester.md +653 -0
  239. package/docs/classes/HotTesterAPI.md +493 -0
  240. package/docs/classes/HotTesterMocha.md +843 -0
  241. package/docs/classes/HotTesterMochaSelenium.md +896 -0
  242. package/docs/classes/HotTesterServer.md +633 -0
  243. package/docs/classes/InfluxSchema.md +74 -0
  244. package/docs/classes/MySQLSchema.md +199 -0
  245. package/docs/classes/MySQLSchemaField.md +330 -0
  246. package/docs/classes/MySQLSchemaTable.md +176 -0
  247. package/docs/enums/ConnectionStatus.md +43 -0
  248. package/docs/enums/DeveloperMode.md +38 -0
  249. package/docs/enums/EventExecutionType.md +43 -0
  250. package/docs/enums/HTTPMethod.md +32 -0
  251. package/docs/enums/HotDBGenerationType.md +30 -0
  252. package/docs/enums/HotLogLevel.md +88 -0
  253. package/docs/interfaces/HotDBConnectionInterface.md +116 -0
  254. package/docs/interfaces/HotDestination.md +62 -0
  255. package/docs/interfaces/HotSite.md +187 -0
  256. package/docs/interfaces/HotSiteMapPath.md +37 -0
  257. package/docs/interfaces/HotSiteRoute.md +79 -0
  258. package/docs/interfaces/HotStartOptions.md +115 -0
  259. package/docs/interfaces/HotTestPage.md +44 -0
  260. package/docs/interfaces/HotTestStop.md +62 -0
  261. package/docs/interfaces/IHotComponent.md +135 -0
  262. package/docs/interfaces/IHotStaq.md +118 -0
  263. package/docs/interfaces/IHotTestElement.md +54 -0
  264. package/docs/interfaces/IHotTestElementOptions.md +43 -0
  265. package/docs/interfaces/MySQLResults.md +43 -0
  266. package/docs/interfaces/MySQLSchemaFieldResult.md +75 -0
  267. package/docs/modules.md +182 -0
  268. package/package.json +65 -0
  269. package/selenium-start.sh +7 -0
  270. package/selenium-stop.sh +3 -0
  271. package/src/Hot.ts +319 -0
  272. package/src/HotAPI.ts +386 -0
  273. package/src/HotAgentAPI.ts +43 -0
  274. package/src/HotAgentRoute.ts +44 -0
  275. package/src/HotBuilder.ts +221 -0
  276. package/src/HotClient.ts +40 -0
  277. package/src/HotComponent.ts +158 -0
  278. package/src/HotCreator.ts +470 -0
  279. package/src/HotDB.ts +79 -0
  280. package/src/HotDBConnectionInterface.ts +40 -0
  281. package/src/HotFile.ts +617 -0
  282. package/src/HotGenerator.ts +446 -0
  283. package/src/HotHTTPServer.ts +954 -0
  284. package/src/HotIO.ts +160 -0
  285. package/src/HotLog.ts +158 -0
  286. package/src/HotPage.ts +206 -0
  287. package/src/HotRoute.ts +137 -0
  288. package/src/HotRouteMethod.ts +216 -0
  289. package/src/HotServer.ts +211 -0
  290. package/src/HotSetAsWeb.ts +3 -0
  291. package/src/HotStaq.ts +1881 -0
  292. package/src/HotTestDriver.ts +171 -0
  293. package/src/HotTestElement.ts +97 -0
  294. package/src/HotTestMap.ts +130 -0
  295. package/src/HotTestSeleniumDriver.ts +381 -0
  296. package/src/HotTester.ts +696 -0
  297. package/src/HotTesterAPI.ts +126 -0
  298. package/src/HotTesterMocha.ts +133 -0
  299. package/src/HotTesterMochaSelenium.ts +189 -0
  300. package/src/HotTesterServer.ts +551 -0
  301. package/src/api-web.ts +48 -0
  302. package/src/api.ts +103 -0
  303. package/src/cli.ts +1225 -0
  304. package/src/schemas/HotDBInflux.ts +211 -0
  305. package/src/schemas/HotDBMigration.ts +24 -0
  306. package/src/schemas/HotDBMySQL.ts +312 -0
  307. package/src/schemas/HotDBSchema.ts +21 -0
  308. package/src/schemas/influx/InfluxSchema.ts +19 -0
  309. package/src/schemas/mysql/MySQLSchema.ts +90 -0
  310. package/src/schemas/mysql/MySQLSchemaField.ts +408 -0
  311. package/src/schemas/mysql/MySQLSchemaTable.ts +353 -0
  312. package/temp/HotStaqWeb.ts +59 -0
  313. package/tsconfig-generator.json +17 -0
  314. package/tsconfig-web.json +74 -0
  315. package/tsconfig.json +73 -0
  316. package/webpack.config.generator.js +41 -0
  317. package/webpack.config.js +53 -0
  318. package/webpack.config.tests.js +56 -0
@@ -0,0 +1,171 @@
1
+ import { HotTestElement, HotTestElementOptions } from "./HotTestElement";
2
+ import { HotTestPage } from "./HotTestMap";
3
+
4
+ /**
5
+ * This actually executes the tests.
6
+ */
7
+ export abstract class HotTestDriver
8
+ {
9
+ /**
10
+ * The current page.
11
+ */
12
+ page: HotTestPage;
13
+
14
+ constructor (page: HotTestPage = null)
15
+ {
16
+ this.page = page;
17
+ }
18
+
19
+ /**
20
+ * Get a test object by it's name. If a * is used, it will be used as a
21
+ * wildcard for the object's name. If a > is used, then the name will
22
+ * be treated as a CSS selector.
23
+ */
24
+ parseTestObject (name: string): string
25
+ {
26
+ let pos: number = name.indexOf ("*");
27
+ let wildcard: string = "";
28
+
29
+ if (pos > -1)
30
+ {
31
+ name = name.replace (/\*/, "");
32
+ wildcard = "*";
33
+ }
34
+
35
+ let selector: string = `[data-test-object-name${wildcard}='${name}']`;
36
+ pos = name.indexOf (">");
37
+
38
+ if (pos > -1)
39
+ {
40
+ name = name.replace (/\>/, "");
41
+ selector = name;
42
+ }
43
+
44
+ return (selector);
45
+ }
46
+
47
+ /**
48
+ * Wait for a number of milliseconds.
49
+ */
50
+ async wait (numMilliseconds: number): Promise<void>
51
+ {
52
+ return (await new Promise ((resolve, reject) =>
53
+ {
54
+ setTimeout (() =>
55
+ {
56
+ resolve ();
57
+ }, numMilliseconds);
58
+ }));
59
+ }
60
+
61
+ /**
62
+ * Print a message.
63
+ */
64
+ async print (message: string): Promise<void>
65
+ {
66
+ process.stdout.write (message);
67
+ }
68
+
69
+ /**
70
+ * Print a message line.
71
+ */
72
+ async println (message: string): Promise<void>
73
+ {
74
+ await this.print (`${message}\n`);
75
+ }
76
+
77
+ /**
78
+ * Disconnect this server or destroy anything associated with this HotTestDriver.
79
+ */
80
+ abstract destroy (): Promise<void>;
81
+
82
+ /**
83
+ * Navigate to a url.
84
+ */
85
+ abstract navigateToUrl (url: string): Promise<void>;
86
+ /**
87
+ * Wait for a HotTestElement to load.
88
+ */
89
+ abstract waitForTestElement (name: string | HotTestElement, options?: HotTestElementOptions): Promise<any>;
90
+ /**
91
+ * Find a HotTestElement to utilize.
92
+ */
93
+ abstract findTestElement (name: string | HotTestElement, options?: HotTestElementOptions): Promise<any>;
94
+ /**
95
+ * Run a HotTestElement command.
96
+ */
97
+ abstract runCommand (testElm: string | HotTestElement, funcName?: string, valueStr?: string): Promise<any>;
98
+ /**
99
+ * An expression to test.
100
+ */
101
+ abstract assertElementValue (name: string | HotTestElement, value: any,
102
+ errorMessage?: string, options?: HotTestElementOptions): Promise<any>;
103
+ /**
104
+ * An expression to test.
105
+ */
106
+ async assert (value: any, errorMessage: string = ""): Promise<any>
107
+ {
108
+ if (! (value))
109
+ throw new Error (errorMessage);
110
+ }
111
+
112
+ /**
113
+ * Run a series of test elements.
114
+ */
115
+ async run (executions: string[] | string[][]): Promise<any[]>
116
+ {
117
+ let results: any[] = [];
118
+
119
+ for (let iIdx = 0; iIdx < executions.length; iIdx++)
120
+ {
121
+ let execution: any = executions[iIdx];
122
+ let testElm: HotTestElement = null;
123
+ let func: string = "";
124
+ let value: string = "";
125
+
126
+ if (typeof (execution) === "string")
127
+ {
128
+ testElm = this.page.testElements[execution];
129
+
130
+ /// @fixme This is going to wreck selecting test elements by wildcards.
131
+ if (testElm == null)
132
+ throw new Error (`HotTestDriver: Unable to find test element ${execution}`);
133
+
134
+ func = testElm.func;
135
+ value = testElm.value;
136
+ }
137
+
138
+ if (execution instanceof Array)
139
+ {
140
+ let name: string = execution[0];
141
+ testElm = this.page.testElements[name];
142
+
143
+ // This null catch is specifically to help find wildcard test elements.
144
+ if (testElm == null)
145
+ {
146
+ testElm = new HotTestElement (name);
147
+ func = execution[1];
148
+ value = execution[2];
149
+ }
150
+ else
151
+ {
152
+ func = testElm.func;
153
+ value = testElm.value;
154
+
155
+ if (execution.length > 1)
156
+ func = execution[1];
157
+
158
+ if (execution.length > 2)
159
+ value = execution[2];
160
+ }
161
+ }
162
+
163
+ testElm.func = func;
164
+ testElm.value = value;
165
+
166
+ results.push (await this.runCommand (testElm));
167
+ }
168
+
169
+ return (results);
170
+ }
171
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Hot test element options.
3
+ */
4
+ export interface IHotTestElementOptions
5
+ {
6
+ /**
7
+ * Indicates that the test element must be visible in
8
+ * order to select it.
9
+ */
10
+ mustBeVisible?: boolean;
11
+ /**
12
+ * If the test element is missing, ignore the error. This
13
+ * will cause the rest of the function to return immediately
14
+ * without any exceptions being thrown.
15
+ */
16
+ ignoreMissingElementError?: boolean;
17
+ }
18
+
19
+ /**
20
+ * Hot test element options.
21
+ */
22
+ export class HotTestElementOptions implements IHotTestElementOptions
23
+ {
24
+ /**
25
+ * Indicates that the test element must be visible in
26
+ * order to select it.
27
+ */
28
+ mustBeVisible: boolean;
29
+ /**
30
+ * If the test element is missing, ignore the error. This
31
+ * will cause the rest of the function to return immediately
32
+ * without any exceptions being thrown.
33
+ */
34
+ ignoreMissingElementError: boolean;
35
+
36
+ constructor (copy: IHotTestElementOptions = {})
37
+ {
38
+ this.mustBeVisible = copy.mustBeVisible || true;
39
+ this.ignoreMissingElementError = copy.ignoreMissingElementError || false;
40
+ }
41
+ }
42
+
43
+ /**
44
+ * A test element.
45
+ */
46
+ export interface IHotTestElement
47
+ {
48
+ /**
49
+ * The name of the element.
50
+ */
51
+ name: string;
52
+ /**
53
+ * The name of the function to execute
54
+ * while executing the test.
55
+ */
56
+ func?: string;
57
+ /**
58
+ * The value to use.
59
+ */
60
+ value?: any;
61
+ }
62
+
63
+ /**
64
+ * A test element.
65
+ */
66
+ export class HotTestElement implements IHotTestElement
67
+ {
68
+ /**
69
+ * The name of the element.
70
+ */
71
+ name: string;
72
+ /**
73
+ * The name of the function to execute
74
+ * while executing the test.
75
+ */
76
+ func: string;
77
+ /**
78
+ * The value to use.
79
+ */
80
+ value: any;
81
+
82
+ constructor (name: string | IHotTestElement, func: string = "", value: any = null)
83
+ {
84
+ if (typeof (name) === "string")
85
+ {
86
+ this.name = name;
87
+ this.func = func;
88
+ this.value = value;
89
+ }
90
+ else
91
+ {
92
+ this.name = name.name;
93
+ this.func = name.func || func;
94
+ this.value = name.value || value;
95
+ }
96
+ }
97
+ }
@@ -0,0 +1,130 @@
1
+ import { HotTestElement } from "./HotTestElement";
2
+ import { HotTestDriver } from "./HotTestDriver";
3
+ import { HotSiteMapPath } from "./HotStaq";
4
+
5
+ /**
6
+ * Create a test path for later execution.
7
+ */
8
+ export type HotTestPath = (driver: HotTestDriver, ...args: any) => Promise<any>;
9
+
10
+ /**
11
+ * The destination to take in a map.
12
+ */
13
+ export class HotTestDestination
14
+ {
15
+ /**
16
+ * The destination to take.
17
+ */
18
+ destination: string;
19
+ /**
20
+ * If set to true, this will automatically start executing it's
21
+ * tests when it's time.
22
+ */
23
+ autoStart: boolean;
24
+
25
+ constructor (destination: string | HotTestDestination | HotSiteMapPath = "", autoStart: boolean = true)
26
+ {
27
+ if (typeof (destination) === "string")
28
+ {
29
+ this.destination = destination;
30
+ this.autoStart = autoStart;
31
+ }
32
+ else
33
+ {
34
+ if (destination instanceof HotTestDestination)
35
+ {
36
+ this.destination = destination.destination;
37
+ this.autoStart = destination.autoStart;
38
+ }
39
+ else
40
+ {
41
+ this.destination = destination.path;
42
+ this.autoStart = destination.autoStart;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ /**
49
+ * A page containing only test related info.
50
+ */
51
+ export interface HotTestPage
52
+ {
53
+ /**
54
+ * The elements to test on this map.
55
+ */
56
+ testElements: { [name: string]: HotTestElement; };
57
+ /**
58
+ * The test paths to test on this map.
59
+ */
60
+ testPaths: { [name: string]: HotTestPath; };
61
+ }
62
+
63
+ /**
64
+ * Maps the paths that are taken to complete a test.
65
+ */
66
+ export class HotTestMap
67
+ {
68
+ /**
69
+ * The order in which paths are to be taken. Each destination is a string
70
+ * in a type -> path order. The type could be either a page or api route.
71
+ * For example:
72
+ * ```
73
+ * [
74
+ * "page:signin_page -> signin_path",
75
+ * "page:account_page -> change_username_path",
76
+ * "page:account_page -> change_password_path",
77
+ * "page:account_page -> change_name_path -> change_address_path",
78
+ * "page:account_page -> signout_path",
79
+ * "api:account_api_route -> signout_route_method -> signout_test_path"
80
+ * ]
81
+ * ```
82
+ *
83
+ * The first string to the left of the -> will always be the type, such as a
84
+ * page or an api route. Any strings to the right of the -> will be a path, even
85
+ * when chaining addtional ->'s.
86
+ */
87
+ destinations: HotTestDestination[] | { [name: string]: HotTestDestination; };
88
+ /**
89
+ * The order in which destinations are supposed to execute. This is
90
+ * ignored if the destinations are an array.
91
+ */
92
+ destinationOrder: string[];
93
+ /**
94
+ * The test pages to execute.
95
+ */
96
+ pages: {
97
+ [name: string]: HotTestPage
98
+ };
99
+
100
+ constructor (destinations: string[] | HotTestDestination[] | { [name: string]: string | HotTestDestination; } = [],
101
+ pages: { [name: string]: HotTestPage } = {}, destinationOrder: string[] = [])
102
+ {
103
+ // Go through and convert any strings into HotTestDestinations.
104
+ if (destinations instanceof Array)
105
+ {
106
+ this.destinations = [];
107
+
108
+ for (let iIdx = 0; iIdx < destinations.length; iIdx++)
109
+ {
110
+ let dest = destinations[iIdx];
111
+
112
+ this.destinations.push (new HotTestDestination (dest));
113
+ }
114
+ }
115
+ else
116
+ {
117
+ this.destinations = {};
118
+
119
+ for (let key in destinations)
120
+ {
121
+ let dest = destinations[key];
122
+
123
+ this.destinations[key] = new HotTestDestination (dest);
124
+ }
125
+ }
126
+
127
+ this.destinationOrder = destinationOrder;
128
+ this.pages = pages;
129
+ }
130
+ }