@webos-tools/cli 3.0.3 → 3.0.5

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 (159) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +52 -52
  3. package/APIs.js +79 -79
  4. package/CHANGELOG.md +128 -123
  5. package/LICENSE +201 -201
  6. package/README.md +218 -218
  7. package/bin/ares-config.js +199 -199
  8. package/bin/ares-device-info.js +30 -30
  9. package/bin/ares-device.js +219 -219
  10. package/bin/ares-generate.js +270 -270
  11. package/bin/ares-inspect.js +179 -179
  12. package/bin/ares-install.js +223 -223
  13. package/bin/ares-launch.js +318 -318
  14. package/bin/ares-log.js +255 -255
  15. package/bin/ares-novacom.js +223 -223
  16. package/bin/ares-package.js +336 -336
  17. package/bin/ares-pull.js +156 -156
  18. package/bin/ares-push.js +155 -155
  19. package/bin/ares-server.js +174 -174
  20. package/bin/ares-setup-device.js +520 -520
  21. package/bin/ares-shell.js +132 -132
  22. package/bin/ares.js +166 -166
  23. package/files/conf/ares.json +49 -49
  24. package/files/conf/command-service.json +73 -73
  25. package/files/conf/config.json +22 -22
  26. package/files/conf/ipk.json +30 -30
  27. package/files/conf/novacom-devices.json +35 -35
  28. package/files/conf/query/query-app.json +14 -14
  29. package/files/conf/query/query-hosted.json +18 -18
  30. package/files/conf/query/query-package.json +10 -10
  31. package/files/conf/query/query-service.json +6 -6
  32. package/files/conf/sdk.json +8 -8
  33. package/files/conf/template.json +57 -57
  34. package/files/conf/webos_emul +27 -27
  35. package/files/conf-base/env/sdk-ose.json +8 -8
  36. package/files/conf-base/env/sdk-tv.json +8 -8
  37. package/files/conf-base/profile/config-ose.json +21 -21
  38. package/files/conf-base/profile/config-tv.json +22 -22
  39. package/files/conf-base/query/query-app.json +14 -14
  40. package/files/conf-base/query/query-hosted.json +18 -18
  41. package/files/conf-base/query/query-package.json +10 -10
  42. package/files/conf-base/query/query-service.json +6 -6
  43. package/files/conf-base/template-conf/ose-templates.json +67 -67
  44. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
  45. package/files/help/ares-config.help +43 -43
  46. package/files/help/ares-device.help +94 -94
  47. package/files/help/ares-generate.help +65 -65
  48. package/files/help/ares-inspect.help +70 -70
  49. package/files/help/ares-install.help +90 -90
  50. package/files/help/ares-launch.help +100 -100
  51. package/files/help/ares-log-pmlogd.help +84 -84
  52. package/files/help/ares-log.help +101 -101
  53. package/files/help/ares-novacom.help +68 -68
  54. package/files/help/ares-package.help +101 -101
  55. package/files/help/ares-pull.help +38 -38
  56. package/files/help/ares-push.help +38 -38
  57. package/files/help/ares-server.help +39 -39
  58. package/files/help/ares-setup-device.help +75 -75
  59. package/files/help/ares-shell.help +42 -42
  60. package/files/help/ares.help +47 -47
  61. package/files/help/readme.help +23 -23
  62. package/files/schema/ApplicationDescription.schema +319 -319
  63. package/files/schema/NovacomDevices.schema +61 -61
  64. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
  65. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
  66. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
  67. package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
  68. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
  69. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  70. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
  71. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
  72. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
  73. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
  74. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
  75. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
  76. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
  77. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
  78. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
  79. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
  80. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
  81. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
  82. package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
  83. package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
  84. package/lib/base/ares.html +40 -40
  85. package/lib/base/cli-appdata.js +290 -301
  86. package/lib/base/cli-control.js +44 -44
  87. package/lib/base/common-tools.js +29 -29
  88. package/lib/base/error-handler.js +265 -265
  89. package/lib/base/file-watcher.js +155 -155
  90. package/lib/base/help-format.js +147 -147
  91. package/lib/base/luna.js +178 -178
  92. package/lib/base/novacom.js +1191 -1191
  93. package/lib/base/sdkenv.js +59 -59
  94. package/lib/base/server.js +137 -137
  95. package/lib/base/setup-device.js +328 -328
  96. package/lib/base/version-tools.js +79 -79
  97. package/lib/device.js +1419 -1419
  98. package/lib/generator.js +377 -377
  99. package/lib/inspect.js +494 -494
  100. package/lib/install.js +463 -463
  101. package/lib/launch.js +605 -605
  102. package/lib/log.js +584 -584
  103. package/lib/package.js +2129 -2129
  104. package/lib/pull.js +231 -231
  105. package/lib/pusher.js +210 -210
  106. package/lib/session.js +74 -74
  107. package/lib/shell.js +193 -193
  108. package/lib/tar-filter-pack.js +62 -62
  109. package/lib/util/copy.js +31 -31
  110. package/lib/util/createFileName.js +40 -40
  111. package/lib/util/eof.js +30 -30
  112. package/lib/util/json.js +63 -63
  113. package/lib/util/merge.js +14 -14
  114. package/lib/util/objclone.js +40 -40
  115. package/lib/util/spinner.js +37 -37
  116. package/npm-shrinkwrap.json +9115 -9115
  117. package/package.json +100 -97
  118. package/scripts/postinstall.js +24 -0
  119. package/spec/helpers/reporter.js +65 -65
  120. package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
  121. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
  122. package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
  123. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
  124. package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
  125. package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
  126. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
  127. package/spec/jsSpecs/apiTest/server.spec.js +115 -115
  128. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
  129. package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
  130. package/spec/jsSpecs/ares-config.spec.js +78 -78
  131. package/spec/jsSpecs/ares-device.spec.js +443 -443
  132. package/spec/jsSpecs/ares-generate.spec.js +397 -397
  133. package/spec/jsSpecs/ares-inspect.spec.js +252 -252
  134. package/spec/jsSpecs/ares-install.spec.js +150 -150
  135. package/spec/jsSpecs/ares-launch.spec.js +301 -301
  136. package/spec/jsSpecs/ares-log.spec.js +824 -824
  137. package/spec/jsSpecs/ares-novacom.spec.js +149 -149
  138. package/spec/jsSpecs/ares-package.spec.js +1211 -1211
  139. package/spec/jsSpecs/ares-pull.spec.js +157 -157
  140. package/spec/jsSpecs/ares-push.spec.js +146 -146
  141. package/spec/jsSpecs/ares-server.spec.js +160 -160
  142. package/spec/jsSpecs/ares-setup-device.spec.js +281 -281
  143. package/spec/jsSpecs/ares-shell.spec.js +220 -220
  144. package/spec/jsSpecs/ares.spec.js +83 -83
  145. package/spec/jsSpecs/common-spec.js +169 -169
  146. package/spec/support/jasmine.json +22 -22
  147. package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
  148. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
  149. package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
  150. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
  151. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
  152. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
  153. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
  154. package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
  155. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
  156. package/spec/tempFiles/sign/sign.crt +32 -32
  157. package/spec/tempFiles/sign/signPriv.key +52 -52
  158. package/spec/test_data/ares-generate.json +41 -41
  159. package/spec/test_data/ares.json +33 -33
@@ -1,397 +1,397 @@
1
- /*
2
- * Copyright (c) 2020-2024 LG Electronics Inc.
3
- *
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- const path = require('path'),
8
- fs = require('fs'),
9
- exec = require('child_process').exec,
10
- common = require('./common-spec');
11
-
12
- const aresCmd = 'ares-generate',
13
- outputPath = path.resolve(__dirname, "..", "tempFiles"),
14
- sampleAppPath = path.resolve(outputPath, "sampleApp"),
15
- sampleServicePath = path.resolve(outputPath, "sampleService");
16
-
17
- let cmd,
18
- options,
19
- expectedTemplate,
20
- expectedList;
21
-
22
- beforeAll(function(done) {
23
- cmd = common.makeCmd(aresCmd);
24
- common.getOptions()
25
- .then(function(result) {
26
- options = result;
27
- return common.getExpectedResult(aresCmd);
28
- }).then(function(result) {
29
- expectedTemplate = result.template;
30
- expectedList = result.list;
31
- done();
32
- });
33
- });
34
-
35
- describe(aresCmd + ' -v', function() {
36
- it('Print help message with verbose log', function(done) {
37
- exec(cmd + ' -v', function(error, stdout, stderr) {
38
- if (stderr && stderr.length > 0) {
39
- common.detectNodeMessage(stderr);
40
- expect(stderr).toContain("verb argv");
41
- }
42
- expect(stdout).toContain("SYNOPSIS");
43
- expect(error).toBeNull();
44
- done();
45
- });
46
- });
47
- });
48
-
49
- describe(aresCmd + ' --list', function() {
50
- it('List the available templates', function(done) {
51
- exec(cmd + ' --list', function(error, stdout, stderr) {
52
- if (stderr && stderr.length > 0) {
53
- common.detectNodeMessage(stderr);
54
- }
55
-
56
- expectedList = expectedList.join('\n'); // multi string in array. need to join
57
- stdout = stdout.trim().replace(/\s+['\n']/g, '\n');
58
- expect(stdout).toContain(expectedList);
59
- expect(error).toBeNull();
60
- done();
61
- });
62
- });
63
- });
64
-
65
- describe(aresCmd +' --property', function() {
66
- beforeEach(function(done) {
67
- common.removeOutDir(sampleAppPath);
68
- done();
69
- });
70
- afterEach(function(done) {
71
- common.removeOutDir(sampleAppPath);
72
- done();
73
- });
74
-
75
- it('Set the properties of appinfo.json', function(done) {
76
- const id = "com.sample.app";
77
- const version = "2.0.0";
78
- const title = "First App";
79
-
80
- exec(cmd + ` -t ${expectedTemplate.webapp} -p "id=${id}" -p "version=${version}" -p "title=${title}" ${sampleAppPath}`, function(error, stdout, stderr) {
81
- if (stderr && stderr.length > 0) {
82
- common.detectNodeMessage(stderr);
83
- }
84
-
85
- let text, outputObj;
86
- expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
87
- try {
88
- text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
89
- outputObj = JSON.parse(text);
90
- } catch (err) {
91
- console.error(err);
92
- }
93
-
94
- expect(outputObj.id).toBe(id);
95
- expect(outputObj.version).toBe(version);
96
- expect(outputObj.title).toBe(title);
97
- expect(error).toBeNull();
98
- done();
99
- });
100
- });
101
-
102
- it('Set the properties of packageinfo.json', function(done) {
103
- if (options.profile === "ose") {
104
- pending(options.skipTxt);
105
- }
106
-
107
- const id = "com.sample.pkg";
108
- const version = "1.1.1";
109
- const test = "testData";
110
-
111
- exec(cmd + ` -t packageinfo -p "id=${id}" -p "version=${version}" -p "test=${test}" ${sampleAppPath}`, function(error, stdout, stderr) {
112
- if (stderr && stderr.length > 0) {
113
- common.detectNodeMessage(stderr);
114
- }
115
-
116
- let text, outputObj;
117
- expect(fs.existsSync(path.join(sampleAppPath, "packageinfo.json"))).toBe(true);
118
- try {
119
- text = fs.readFileSync(path.join(sampleAppPath, "packageinfo.json"));
120
- outputObj = JSON.parse(text);
121
- } catch (err) {
122
- console.error(err);
123
- }
124
-
125
- expect(outputObj.id).toBe(id);
126
- expect(outputObj.version).toBe(version);
127
- expect(outputObj.test).toBe(test);
128
- expect(error).toBeNull();
129
- done();
130
- });
131
- });
132
-
133
- it('Set the properties of services.json', function(done) {
134
- const id = "com.sample.app.service";
135
- const version = "1.1.1";
136
-
137
- exec(cmd + ` -t jsserviceinfo -p "id=${id}" -p "version=${version}" ${sampleAppPath}`, function(error, stdout, stderr) {
138
- if (stderr && stderr.length > 0) {
139
- common.detectNodeMessage(stderr);
140
- }
141
-
142
- let text, outputObj;
143
- expect(fs.existsSync(path.join(sampleAppPath, "services.json"))).toBe(true);
144
- try {
145
- text = fs.readFileSync(path.join(sampleAppPath, "services.json"));
146
- outputObj = JSON.parse(text);
147
- } catch (err) {
148
- console.error(err);
149
- }
150
-
151
- expect(outputObj.id).toBe(id);
152
- expect(outputObj.version).toBe(version);
153
- expect(outputObj.services[0].name).toBe(id);
154
- expect(error).toBeNull();
155
- done();
156
- });
157
- });
158
-
159
- it('Set the properties of qmlappinfo.json', function(done) {
160
- if (options.profile === "tv") {
161
- pending(options.skipTxt);
162
- }
163
-
164
- const id = "com.qml.app";
165
- const version = "2.0.0";
166
- const title = "First App";
167
-
168
- exec(cmd + ` -t ${expectedTemplate.qmlappinfo} -p "id=${id}" -p "version=${version}" -p "title=${title}" ${sampleAppPath}`, function(error, stdout, stderr) {
169
- if (stderr && stderr.length > 0) {
170
- common.detectNodeMessage(stderr);
171
- }
172
-
173
- let text, outputObj;
174
- expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
175
- try {
176
- text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
177
- outputObj = JSON.parse(text);
178
- } catch (err) {
179
- console.error(err);
180
- }
181
-
182
- expect(outputObj.id).toBe(id);
183
- expect(outputObj.version).toBe(version);
184
- expect(outputObj.title).toBe(title);
185
- expect(error).toBeNull();
186
- done();
187
- });
188
- });
189
- });
190
-
191
- describe(aresCmd + ' --template', function() {
192
- beforeEach(function(done) {
193
- common.removeOutDir(sampleAppPath);
194
- done();
195
- });
196
- afterEach(function(done) {
197
- common.removeOutDir(sampleAppPath);
198
- done();
199
- });
200
-
201
- it('webappinfo : appinfo.json for web app', function(done) {
202
- exec(cmd + ` -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
203
- if (stderr && stderr.length > 0) {
204
- common.detectNodeMessage(stderr);
205
- }
206
-
207
- const fileList = [];
208
-
209
- expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
210
- try {
211
- fs.readdirSync(sampleAppPath).forEach(file => {
212
- fileList.push(file);
213
- });
214
- } catch (err) {
215
- console.error(err);
216
- }
217
-
218
- expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
219
- expect(error).toBeNull();
220
- done();
221
- });
222
- });
223
-
224
- it('packageinfo : packageinfo.json for webOS package', function(done) {
225
- if (options.profile === "ose") {
226
- pending(options.skipTxt);
227
- }
228
-
229
- exec(cmd + ` -t packageinfo -p "id=com.domain" ${sampleAppPath}`, function(error, stdout, stderr) {
230
- if (stderr && stderr.length > 0) {
231
- common.detectNodeMessage(stderr);
232
- }
233
-
234
- const fileList= [];
235
-
236
- expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
237
- try {
238
- fs.readdirSync(sampleAppPath).forEach(file => {
239
- fileList.push(file);
240
- });
241
- } catch(err) {
242
- console.error(err);
243
- }
244
-
245
- expect(JSON.stringify(fileList)).toContain(JSON.stringify(expectedTemplate.packageinfo));
246
- expect(error).toBeNull();
247
- done();
248
- });
249
- });
250
-
251
- it('hosted_webapp : generate hosted template app', function(done) {
252
- const url = "http://www.google.com";
253
- exec(cmd + ` -t hosted_webapp -p "url=${url}" ${sampleAppPath}`, function(error, stdout, stderr) {
254
- if (stderr && stderr.length > 0) {
255
- common.detectNodeMessage(stderr);
256
- }
257
-
258
- let text;
259
- expect(fs.existsSync(path.join(sampleAppPath, "index.html"))).toBe(true);
260
- try {
261
- text = fs.readFileSync(path.join(sampleAppPath,"index.html"));
262
- } catch (err) {
263
- console.error(err);
264
- }
265
-
266
- expect(text.toString()).toContain(url);
267
- expect(error).toBeNull();
268
- done();
269
- });
270
- });
271
-
272
- it('qmlapp : generate qml template app', function(done) {
273
- if (options.profile === "tv") {
274
- pending(options.skipTxt);
275
- }
276
-
277
- exec(cmd + ` -t qmlapp -p "id=com.qml.app" ${sampleAppPath}`, function(error, stdout, stderr) {
278
- if (stderr && stderr.length > 0) {
279
- common.detectNodeMessage(stderr);
280
- }
281
-
282
- let text;
283
- expect(fs.existsSync(path.join(sampleAppPath, "main.qml"))).toBe(true);
284
- try {
285
- text = fs.readFileSync(path.join(sampleAppPath,"main.qml"),'utf8');
286
- } catch (err) {
287
- console.error(err);
288
- }
289
-
290
- expect(text).toContain("com.qml.app");
291
- expect(error).toBeNull();
292
- done();
293
- });
294
- });
295
- });
296
-
297
- describe(aresCmd + ' --overwrite(-f)', function() {
298
- beforeAll(function(done) {
299
- common.removeOutDir(sampleAppPath);
300
- done();
301
- });
302
-
303
- afterAll(function(done) {
304
- common.removeOutDir(sampleAppPath);
305
- done();
306
- });
307
-
308
- it('generate sample app', function(done) {
309
- exec(cmd + ` -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
310
- if (stderr && stderr.length > 0) {
311
- common.detectNodeMessage(stderr);
312
- }
313
-
314
- const fileList = [];
315
-
316
- expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
317
- try {
318
- fs.readdirSync(sampleAppPath).forEach(file => {
319
- fileList.push(file);
320
- });
321
- } catch (err) {
322
- console.error(err);
323
- }
324
-
325
- expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
326
- expect(error).toBeNull();
327
- done();
328
- });
329
- });
330
-
331
- it('Overwirte existing files', function(done) {
332
- exec(cmd + ` -f -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
333
- if (stderr && stderr.length > 0) {
334
- common.detectNodeMessage(stderr);
335
- }
336
-
337
- const fileList = [];
338
-
339
- expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
340
- try {
341
- fs.readdirSync(sampleAppPath).forEach(file => {
342
- fileList.push(file);
343
- });
344
- } catch (err) {
345
- console.error(err);
346
- }
347
-
348
- expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
349
- expect(error).toBeNull();
350
- done();
351
- });
352
- });
353
- });
354
-
355
- describe(aresCmd + ' --servicename', function() {
356
- beforeEach(function(done) {
357
- common.removeOutDir(sampleServicePath);
358
- done();
359
- });
360
- afterEach(function(done) {
361
- common.removeOutDir(sampleServicePath);
362
- done();
363
- });
364
-
365
- it('Set the servicename for webOS service.', function(done) {
366
- const serviceid = "com.domain.app.service";
367
- exec(cmd + ` -t ${expectedTemplate.jsservice} -s ${serviceid} ${sampleServicePath}`, function(error, stdout, stderr) {
368
- if (stderr && stderr.length > 0) {
369
- common.detectNodeMessage(stderr);
370
- }
371
-
372
- let text, outputObj;
373
- expect(fs.existsSync(path.join(sampleServicePath, "services.json"))).toBe(true);
374
- try {
375
- text = fs.readFileSync(path.join(sampleServicePath, "services.json"));
376
- outputObj = JSON.parse(text);
377
- } catch (err) {
378
- console.error(err);
379
- }
380
- expect(outputObj.id).toBe(serviceid);
381
- expect(error).toBeNull();
382
- done();
383
- });
384
- });
385
- });
386
-
387
- describe(aresCmd + ' negative TC', function() {
388
- it("Set invalid template type", function(done) {
389
- exec(cmd + ' -t invalidType sampleApp', function(error, stdout, stderr) {
390
- if (stderr && stderr.length > 0) {
391
- common.detectNodeMessage(stderr);
392
- expect(stderr).toContain("ares-generate ERR! [Tips]: Invalid value <TEMPLATE> : invalidType", error);
393
- }
394
- done();
395
- });
396
- });
397
- });
1
+ /*
2
+ * Copyright (c) 2020-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ fs = require('fs'),
9
+ exec = require('child_process').exec,
10
+ common = require('./common-spec');
11
+
12
+ const aresCmd = 'ares-generate',
13
+ outputPath = path.resolve(__dirname, "..", "tempFiles"),
14
+ sampleAppPath = path.resolve(outputPath, "sampleApp"),
15
+ sampleServicePath = path.resolve(outputPath, "sampleService");
16
+
17
+ let cmd,
18
+ options,
19
+ expectedTemplate,
20
+ expectedList;
21
+
22
+ beforeAll(function(done) {
23
+ cmd = common.makeCmd(aresCmd);
24
+ common.getOptions()
25
+ .then(function(result) {
26
+ options = result;
27
+ return common.getExpectedResult(aresCmd);
28
+ }).then(function(result) {
29
+ expectedTemplate = result.template;
30
+ expectedList = result.list;
31
+ done();
32
+ });
33
+ });
34
+
35
+ describe(aresCmd + ' -v', function() {
36
+ it('Print help message with verbose log', function(done) {
37
+ exec(cmd + ' -v', function(error, stdout, stderr) {
38
+ if (stderr && stderr.length > 0) {
39
+ common.detectNodeMessage(stderr);
40
+ expect(stderr).toContain("verb argv");
41
+ }
42
+ expect(stdout).toContain("SYNOPSIS");
43
+ expect(error).toBeNull();
44
+ done();
45
+ });
46
+ });
47
+ });
48
+
49
+ describe(aresCmd + ' --list', function() {
50
+ it('List the available templates', function(done) {
51
+ exec(cmd + ' --list', function(error, stdout, stderr) {
52
+ if (stderr && stderr.length > 0) {
53
+ common.detectNodeMessage(stderr);
54
+ }
55
+
56
+ expectedList = expectedList.join('\n'); // multi string in array. need to join
57
+ stdout = stdout.trim().replace(/\s+['\n']/g, '\n');
58
+ expect(stdout).toContain(expectedList);
59
+ expect(error).toBeNull();
60
+ done();
61
+ });
62
+ });
63
+ });
64
+
65
+ describe(aresCmd +' --property', function() {
66
+ beforeEach(function(done) {
67
+ common.removeOutDir(sampleAppPath);
68
+ done();
69
+ });
70
+ afterEach(function(done) {
71
+ common.removeOutDir(sampleAppPath);
72
+ done();
73
+ });
74
+
75
+ it('Set the properties of appinfo.json', function(done) {
76
+ const id = "com.sample.app";
77
+ const version = "2.0.0";
78
+ const title = "First App";
79
+
80
+ exec(cmd + ` -t ${expectedTemplate.webapp} -p "id=${id}" -p "version=${version}" -p "title=${title}" ${sampleAppPath}`, function(error, stdout, stderr) {
81
+ if (stderr && stderr.length > 0) {
82
+ common.detectNodeMessage(stderr);
83
+ }
84
+
85
+ let text, outputObj;
86
+ expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
87
+ try {
88
+ text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
89
+ outputObj = JSON.parse(text);
90
+ } catch (err) {
91
+ console.error(err);
92
+ }
93
+
94
+ expect(outputObj.id).toBe(id);
95
+ expect(outputObj.version).toBe(version);
96
+ expect(outputObj.title).toBe(title);
97
+ expect(error).toBeNull();
98
+ done();
99
+ });
100
+ });
101
+
102
+ it('Set the properties of packageinfo.json', function(done) {
103
+ if (options.profile === "ose") {
104
+ pending(options.skipTxt);
105
+ }
106
+
107
+ const id = "com.sample.pkg";
108
+ const version = "1.1.1";
109
+ const test = "testData";
110
+
111
+ exec(cmd + ` -t packageinfo -p "id=${id}" -p "version=${version}" -p "test=${test}" ${sampleAppPath}`, function(error, stdout, stderr) {
112
+ if (stderr && stderr.length > 0) {
113
+ common.detectNodeMessage(stderr);
114
+ }
115
+
116
+ let text, outputObj;
117
+ expect(fs.existsSync(path.join(sampleAppPath, "packageinfo.json"))).toBe(true);
118
+ try {
119
+ text = fs.readFileSync(path.join(sampleAppPath, "packageinfo.json"));
120
+ outputObj = JSON.parse(text);
121
+ } catch (err) {
122
+ console.error(err);
123
+ }
124
+
125
+ expect(outputObj.id).toBe(id);
126
+ expect(outputObj.version).toBe(version);
127
+ expect(outputObj.test).toBe(test);
128
+ expect(error).toBeNull();
129
+ done();
130
+ });
131
+ });
132
+
133
+ it('Set the properties of services.json', function(done) {
134
+ const id = "com.sample.app.service";
135
+ const version = "1.1.1";
136
+
137
+ exec(cmd + ` -t jsserviceinfo -p "id=${id}" -p "version=${version}" ${sampleAppPath}`, function(error, stdout, stderr) {
138
+ if (stderr && stderr.length > 0) {
139
+ common.detectNodeMessage(stderr);
140
+ }
141
+
142
+ let text, outputObj;
143
+ expect(fs.existsSync(path.join(sampleAppPath, "services.json"))).toBe(true);
144
+ try {
145
+ text = fs.readFileSync(path.join(sampleAppPath, "services.json"));
146
+ outputObj = JSON.parse(text);
147
+ } catch (err) {
148
+ console.error(err);
149
+ }
150
+
151
+ expect(outputObj.id).toBe(id);
152
+ expect(outputObj.version).toBe(version);
153
+ expect(outputObj.services[0].name).toBe(id);
154
+ expect(error).toBeNull();
155
+ done();
156
+ });
157
+ });
158
+
159
+ it('Set the properties of qmlappinfo.json', function(done) {
160
+ if (options.profile === "tv") {
161
+ pending(options.skipTxt);
162
+ }
163
+
164
+ const id = "com.qml.app";
165
+ const version = "2.0.0";
166
+ const title = "First App";
167
+
168
+ exec(cmd + ` -t ${expectedTemplate.qmlappinfo} -p "id=${id}" -p "version=${version}" -p "title=${title}" ${sampleAppPath}`, function(error, stdout, stderr) {
169
+ if (stderr && stderr.length > 0) {
170
+ common.detectNodeMessage(stderr);
171
+ }
172
+
173
+ let text, outputObj;
174
+ expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
175
+ try {
176
+ text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
177
+ outputObj = JSON.parse(text);
178
+ } catch (err) {
179
+ console.error(err);
180
+ }
181
+
182
+ expect(outputObj.id).toBe(id);
183
+ expect(outputObj.version).toBe(version);
184
+ expect(outputObj.title).toBe(title);
185
+ expect(error).toBeNull();
186
+ done();
187
+ });
188
+ });
189
+ });
190
+
191
+ describe(aresCmd + ' --template', function() {
192
+ beforeEach(function(done) {
193
+ common.removeOutDir(sampleAppPath);
194
+ done();
195
+ });
196
+ afterEach(function(done) {
197
+ common.removeOutDir(sampleAppPath);
198
+ done();
199
+ });
200
+
201
+ it('webappinfo : appinfo.json for web app', function(done) {
202
+ exec(cmd + ` -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
203
+ if (stderr && stderr.length > 0) {
204
+ common.detectNodeMessage(stderr);
205
+ }
206
+
207
+ const fileList = [];
208
+
209
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
210
+ try {
211
+ fs.readdirSync(sampleAppPath).forEach(file => {
212
+ fileList.push(file);
213
+ });
214
+ } catch (err) {
215
+ console.error(err);
216
+ }
217
+
218
+ expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
219
+ expect(error).toBeNull();
220
+ done();
221
+ });
222
+ });
223
+
224
+ it('packageinfo : packageinfo.json for webOS package', function(done) {
225
+ if (options.profile === "ose") {
226
+ pending(options.skipTxt);
227
+ }
228
+
229
+ exec(cmd + ` -t packageinfo -p "id=com.domain" ${sampleAppPath}`, function(error, stdout, stderr) {
230
+ if (stderr && stderr.length > 0) {
231
+ common.detectNodeMessage(stderr);
232
+ }
233
+
234
+ const fileList= [];
235
+
236
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
237
+ try {
238
+ fs.readdirSync(sampleAppPath).forEach(file => {
239
+ fileList.push(file);
240
+ });
241
+ } catch(err) {
242
+ console.error(err);
243
+ }
244
+
245
+ expect(JSON.stringify(fileList)).toContain(JSON.stringify(expectedTemplate.packageinfo));
246
+ expect(error).toBeNull();
247
+ done();
248
+ });
249
+ });
250
+
251
+ it('hosted_webapp : generate hosted template app', function(done) {
252
+ const url = "http://www.google.com";
253
+ exec(cmd + ` -t hosted_webapp -p "url=${url}" ${sampleAppPath}`, function(error, stdout, stderr) {
254
+ if (stderr && stderr.length > 0) {
255
+ common.detectNodeMessage(stderr);
256
+ }
257
+
258
+ let text;
259
+ expect(fs.existsSync(path.join(sampleAppPath, "index.html"))).toBe(true);
260
+ try {
261
+ text = fs.readFileSync(path.join(sampleAppPath,"index.html"));
262
+ } catch (err) {
263
+ console.error(err);
264
+ }
265
+
266
+ expect(text.toString()).toContain(url);
267
+ expect(error).toBeNull();
268
+ done();
269
+ });
270
+ });
271
+
272
+ it('qmlapp : generate qml template app', function(done) {
273
+ if (options.profile === "tv") {
274
+ pending(options.skipTxt);
275
+ }
276
+
277
+ exec(cmd + ` -t qmlapp -p "id=com.qml.app" ${sampleAppPath}`, function(error, stdout, stderr) {
278
+ if (stderr && stderr.length > 0) {
279
+ common.detectNodeMessage(stderr);
280
+ }
281
+
282
+ let text;
283
+ expect(fs.existsSync(path.join(sampleAppPath, "main.qml"))).toBe(true);
284
+ try {
285
+ text = fs.readFileSync(path.join(sampleAppPath,"main.qml"),'utf8');
286
+ } catch (err) {
287
+ console.error(err);
288
+ }
289
+
290
+ expect(text).toContain("com.qml.app");
291
+ expect(error).toBeNull();
292
+ done();
293
+ });
294
+ });
295
+ });
296
+
297
+ describe(aresCmd + ' --overwrite(-f)', function() {
298
+ beforeAll(function(done) {
299
+ common.removeOutDir(sampleAppPath);
300
+ done();
301
+ });
302
+
303
+ afterAll(function(done) {
304
+ common.removeOutDir(sampleAppPath);
305
+ done();
306
+ });
307
+
308
+ it('generate sample app', function(done) {
309
+ exec(cmd + ` -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
310
+ if (stderr && stderr.length > 0) {
311
+ common.detectNodeMessage(stderr);
312
+ }
313
+
314
+ const fileList = [];
315
+
316
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
317
+ try {
318
+ fs.readdirSync(sampleAppPath).forEach(file => {
319
+ fileList.push(file);
320
+ });
321
+ } catch (err) {
322
+ console.error(err);
323
+ }
324
+
325
+ expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
326
+ expect(error).toBeNull();
327
+ done();
328
+ });
329
+ });
330
+
331
+ it('Overwirte existing files', function(done) {
332
+ exec(cmd + ` -f -t webappinfo -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
333
+ if (stderr && stderr.length > 0) {
334
+ common.detectNodeMessage(stderr);
335
+ }
336
+
337
+ const fileList = [];
338
+
339
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
340
+ try {
341
+ fs.readdirSync(sampleAppPath).forEach(file => {
342
+ fileList.push(file);
343
+ });
344
+ } catch (err) {
345
+ console.error(err);
346
+ }
347
+
348
+ expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
349
+ expect(error).toBeNull();
350
+ done();
351
+ });
352
+ });
353
+ });
354
+
355
+ describe(aresCmd + ' --servicename', function() {
356
+ beforeEach(function(done) {
357
+ common.removeOutDir(sampleServicePath);
358
+ done();
359
+ });
360
+ afterEach(function(done) {
361
+ common.removeOutDir(sampleServicePath);
362
+ done();
363
+ });
364
+
365
+ it('Set the servicename for webOS service.', function(done) {
366
+ const serviceid = "com.domain.app.service";
367
+ exec(cmd + ` -t ${expectedTemplate.jsservice} -s ${serviceid} ${sampleServicePath}`, function(error, stdout, stderr) {
368
+ if (stderr && stderr.length > 0) {
369
+ common.detectNodeMessage(stderr);
370
+ }
371
+
372
+ let text, outputObj;
373
+ expect(fs.existsSync(path.join(sampleServicePath, "services.json"))).toBe(true);
374
+ try {
375
+ text = fs.readFileSync(path.join(sampleServicePath, "services.json"));
376
+ outputObj = JSON.parse(text);
377
+ } catch (err) {
378
+ console.error(err);
379
+ }
380
+ expect(outputObj.id).toBe(serviceid);
381
+ expect(error).toBeNull();
382
+ done();
383
+ });
384
+ });
385
+ });
386
+
387
+ describe(aresCmd + ' negative TC', function() {
388
+ it("Set invalid template type", function(done) {
389
+ exec(cmd + ' -t invalidType sampleApp', function(error, stdout, stderr) {
390
+ if (stderr && stderr.length > 0) {
391
+ common.detectNodeMessage(stderr);
392
+ expect(stderr).toContain("ares-generate ERR! [Tips]: Invalid value <TEMPLATE> : invalidType", error);
393
+ }
394
+ done();
395
+ });
396
+ });
397
+ });