@webos-tools/cli 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc.js +52 -0
  3. package/APIs.js +79 -0
  4. package/CHANGELOG.md +110 -0
  5. package/LICENSE +201 -0
  6. package/README.md +218 -0
  7. package/bin/ares-config.js +199 -0
  8. package/bin/ares-device-info.js +30 -0
  9. package/bin/ares-device.js +219 -0
  10. package/bin/ares-generate.js +270 -0
  11. package/bin/ares-inspect.js +179 -0
  12. package/bin/ares-install.js +223 -0
  13. package/bin/ares-launch.js +318 -0
  14. package/bin/ares-log.js +255 -0
  15. package/bin/ares-novacom.js +223 -0
  16. package/bin/ares-package.js +336 -0
  17. package/bin/ares-pull.js +156 -0
  18. package/bin/ares-push.js +155 -0
  19. package/bin/ares-server.js +174 -0
  20. package/bin/ares-setup-device.js +520 -0
  21. package/bin/ares-shell.js +132 -0
  22. package/bin/ares.js +166 -0
  23. package/files/conf/ares.json +49 -0
  24. package/files/conf/command-service.json +73 -0
  25. package/files/conf/config.json +22 -0
  26. package/files/conf/ipk.json +30 -0
  27. package/files/conf/novacom-devices.json +35 -0
  28. package/files/conf/query/query-app.json +14 -0
  29. package/files/conf/query/query-hosted.json +18 -0
  30. package/files/conf/query/query-package.json +10 -0
  31. package/files/conf/query/query-service.json +6 -0
  32. package/files/conf/sdk.json +8 -0
  33. package/files/conf/template.json +57 -0
  34. package/files/conf/webos_emul +27 -0
  35. package/files/conf-base/env/sdk-ose.json +8 -0
  36. package/files/conf-base/env/sdk-tv.json +8 -0
  37. package/files/conf-base/profile/config-ose.json +21 -0
  38. package/files/conf-base/profile/config-tv.json +22 -0
  39. package/files/conf-base/query/query-app.json +14 -0
  40. package/files/conf-base/query/query-hosted.json +18 -0
  41. package/files/conf-base/query/query-package.json +10 -0
  42. package/files/conf-base/query/query-service.json +6 -0
  43. package/files/conf-base/template-conf/ose-templates.json +67 -0
  44. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -0
  45. package/files/help/ares-config.help +43 -0
  46. package/files/help/ares-device.help +94 -0
  47. package/files/help/ares-generate.help +65 -0
  48. package/files/help/ares-inspect.help +70 -0
  49. package/files/help/ares-install.help +90 -0
  50. package/files/help/ares-launch.help +100 -0
  51. package/files/help/ares-log-pmlogd.help +84 -0
  52. package/files/help/ares-log.help +101 -0
  53. package/files/help/ares-novacom.help +68 -0
  54. package/files/help/ares-package.help +101 -0
  55. package/files/help/ares-pull.help +38 -0
  56. package/files/help/ares-push.help +38 -0
  57. package/files/help/ares-server.help +39 -0
  58. package/files/help/ares-setup-device.help +75 -0
  59. package/files/help/ares-shell.help +42 -0
  60. package/files/help/ares.help +47 -0
  61. package/files/help/readme.help +23 -0
  62. package/files/schema/ApplicationDescription.schema +319 -0
  63. package/files/schema/NovacomDevices.schema +61 -0
  64. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -0
  65. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -0
  66. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +14 -0
  67. package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
  68. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -0
  69. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -0
  70. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -0
  71. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -0
  72. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -0
  73. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -0
  74. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -0
  75. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -0
  76. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/LICENSE-2.0.txt +202 -0
  77. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/webOSTV-dev.js +1 -0
  78. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/webOSTV.js +1 -0
  79. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -0
  80. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +37 -0
  81. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +4 -0
  82. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -0
  83. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -0
  84. package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
  85. package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
  86. package/lib/base/ares.html +40 -0
  87. package/lib/base/cli-appdata.js +289 -0
  88. package/lib/base/cli-control.js +44 -0
  89. package/lib/base/common-tools.js +29 -0
  90. package/lib/base/error-handler.js +265 -0
  91. package/lib/base/file-watcher.js +155 -0
  92. package/lib/base/help-format.js +147 -0
  93. package/lib/base/luna.js +178 -0
  94. package/lib/base/novacom.js +1191 -0
  95. package/lib/base/sdkenv.js +59 -0
  96. package/lib/base/server.js +137 -0
  97. package/lib/base/setup-device.js +324 -0
  98. package/lib/base/version-tools.js +79 -0
  99. package/lib/com.sdk.ares.hostedapp.ipk +0 -0
  100. package/lib/device.js +1419 -0
  101. package/lib/generator.js +377 -0
  102. package/lib/inspect.js +494 -0
  103. package/lib/install.js +463 -0
  104. package/lib/launch.js +605 -0
  105. package/lib/log.js +584 -0
  106. package/lib/package.js +2129 -0
  107. package/lib/pull.js +231 -0
  108. package/lib/pusher.js +210 -0
  109. package/lib/session.js +74 -0
  110. package/lib/shell.js +193 -0
  111. package/lib/tar-filter-pack.js +62 -0
  112. package/lib/util/copy.js +31 -0
  113. package/lib/util/createFileName.js +40 -0
  114. package/lib/util/eof.js +30 -0
  115. package/lib/util/json.js +63 -0
  116. package/lib/util/merge.js +14 -0
  117. package/lib/util/objclone.js +40 -0
  118. package/lib/util/spinner.js +37 -0
  119. package/npm-shrinkwrap.json +85 -0
  120. package/package.json +98 -0
  121. package/spec/helpers/reporter.js +65 -0
  122. package/spec/jsSpecs/apiTest/generator.spec.js +372 -0
  123. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -0
  124. package/spec/jsSpecs/apiTest/installer.spec.js +67 -0
  125. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -0
  126. package/spec/jsSpecs/apiTest/packager.spec.js +194 -0
  127. package/spec/jsSpecs/apiTest/puller.spec.js +101 -0
  128. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -0
  129. package/spec/jsSpecs/apiTest/server.spec.js +115 -0
  130. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -0
  131. package/spec/jsSpecs/apiTest/shell.spec.js +49 -0
  132. package/spec/jsSpecs/ares-config.spec.js +78 -0
  133. package/spec/jsSpecs/ares-device.spec.js +443 -0
  134. package/spec/jsSpecs/ares-generate.spec.js +397 -0
  135. package/spec/jsSpecs/ares-inspect.spec.js +252 -0
  136. package/spec/jsSpecs/ares-install.spec.js +150 -0
  137. package/spec/jsSpecs/ares-launch.spec.js +301 -0
  138. package/spec/jsSpecs/ares-log.spec.js +824 -0
  139. package/spec/jsSpecs/ares-novacom.spec.js +149 -0
  140. package/spec/jsSpecs/ares-package.spec.js +1211 -0
  141. package/spec/jsSpecs/ares-pull.spec.js +157 -0
  142. package/spec/jsSpecs/ares-push.spec.js +146 -0
  143. package/spec/jsSpecs/ares-server.spec.js +160 -0
  144. package/spec/jsSpecs/ares-setup-device.spec.js +281 -0
  145. package/spec/jsSpecs/ares-shell.spec.js +220 -0
  146. package/spec/jsSpecs/ares.spec.js +83 -0
  147. package/spec/jsSpecs/common-spec.js +169 -0
  148. package/spec/support/jasmine.json +22 -0
  149. package/spec/tempFiles/com.jasmine.native.app_0.0.1_arm.ipk +0 -0
  150. package/spec/tempFiles/com.jasmine.native.app_0.0.1_x86.ipk +0 -0
  151. package/spec/tempFiles/com.jasmine.web.app_0.0.1_all.ipk +0 -0
  152. package/spec/tempFiles/com.logtest.web.app_1.0.0_all.ipk +0 -0
  153. package/spec/tempFiles/copyFiles/helloFile.txt +1 -0
  154. package/spec/tempFiles/copyFiles/testFile.txt +1 -0
  155. package/spec/tempFiles/ipks/com.sample.echo_0.0.1_all.ipk +0 -0
  156. package/spec/tempFiles/ipks/com.web.app_1.0.0_all.ipk +0 -0
  157. package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
  158. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -0
  159. package/spec/tempFiles/nativeApp/auto/pkg_arm64/icon.png +0 -0
  160. package/spec/tempFiles/nativeApp/auto/pkg_arm64/largeIcon.png +0 -0
  161. package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
  162. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +9 -0
  163. package/spec/tempFiles/nativeApp/ose/pkg_arm/icon.png +0 -0
  164. package/spec/tempFiles/nativeApp/ose/pkg_arm/largeIcon.png +0 -0
  165. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -0
  166. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
  167. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -0
  168. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/icon.png +0 -0
  169. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/largeIcon.png +0 -0
  170. package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
  171. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -0
  172. package/spec/tempFiles/nativeApp/rsi/pkg_x86/icon.png +0 -0
  173. package/spec/tempFiles/nativeApp/rsi/pkg_x86/largeIcon.png +0 -0
  174. package/spec/tempFiles/sign/sign.crt +32 -0
  175. package/spec/tempFiles/sign/signPriv.key +52 -0
  176. package/spec/test_data/ares-generate.json +41 -0
  177. package/spec/test_data/ares.json +33 -0
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "@webos-tools/cli",
3
+ "version": "3.0.0",
4
+ "description": "Command Line Interface for development webOS application and service",
5
+ "main": "APIs.js",
6
+ "author": "ye.kim",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/webos-tools/cli.git"
10
+ },
11
+ "license": "Apache-2.0",
12
+ "bin": {
13
+ "ares": "bin/ares.js",
14
+ "ares-config": "bin/ares-config.js",
15
+ "ares-device": "bin/ares-device.js",
16
+ "ares-device-info": "bin/ares-device-info.js",
17
+ "ares-generate": "bin/ares-generate.js",
18
+ "ares-inspect": "bin/ares-inspect.js",
19
+ "ares-install": "bin/ares-install.js",
20
+ "ares-launch": "bin/ares-launch.js",
21
+ "ares-log": "bin/ares-log.js",
22
+ "ares-novacom": "bin/ares-novacom.js",
23
+ "ares-package": "bin/ares-package.js",
24
+ "ares-push": "bin/ares-push.js",
25
+ "ares-pull": "bin/ares-pull.js",
26
+ "ares-server": "bin/ares-server.js",
27
+ "ares-setup-device": "bin/ares-setup-device.js",
28
+ "ares-shell": "bin/ares-shell.js"
29
+ },
30
+ "engines": {
31
+ "node": ">=14.15.1"
32
+ },
33
+ "engineStrict": true,
34
+ "os": [
35
+ "darwin",
36
+ "linux",
37
+ "win32"
38
+ ],
39
+ "dependencies": {
40
+ "ar-async": "0.1.4",
41
+ "async": "0.2.10",
42
+ "bluebird": "3.7.2",
43
+ "body-parser": "1.19.0",
44
+ "chalk": "1.1.3",
45
+ "chardet": "0.8.0",
46
+ "chokidar": "3.5.2",
47
+ "combined-stream": "1.0.8",
48
+ "csv-writer": "1.6.0",
49
+ "decompress": "4.2.1",
50
+ "easy-table": "1.1.1",
51
+ "elfy": "1.0.0",
52
+ "encoding": "0.1.13",
53
+ "express": "4.17.1",
54
+ "extract-zip": "1.7.0",
55
+ "fs-extra": "8.1.0",
56
+ "fstream": "1.0.12",
57
+ "graceful-fs": "4.2.4",
58
+ "inherits": "1.0.2",
59
+ "inquirer": "7.0.0",
60
+ "jsonschema": "1.2.6",
61
+ "mkdirp": "0.5.5",
62
+ "nopt": "2.1.2",
63
+ "npmlog": "4.1.2",
64
+ "ora": "5.4.0",
65
+ "request": "2.88.2",
66
+ "rimraf": "3.0.2",
67
+ "semver": "7.3.2",
68
+ "shelljs": "0.8.4",
69
+ "sprintf-js": "1.1.2",
70
+ "ssdp-js": "1.0.1",
71
+ "ssh2": "0.8.9",
72
+ "stream-buffers": "3.0.2",
73
+ "strip-bom": "1.0.0",
74
+ "tar": "2.2.2",
75
+ "temp": "0.9.1",
76
+ "terser": "4.8.0"
77
+ },
78
+ "devDependencies": {
79
+ "eslint": "6.8.0",
80
+ "eslint-plugin-import": "2.22.0",
81
+ "jasmine": "3.8.0",
82
+ "jasmine-pretty-html-reporter-jasmine3.8": "0.2.5",
83
+ "jasmine-spec-reporter": "4.2.1"
84
+ },
85
+ "keywords": [
86
+ "ares-cli",
87
+ "webOS",
88
+ "webOS OSE",
89
+ "webOS TV",
90
+ "webOS CLI",
91
+ "webOS SDK",
92
+ "LG"
93
+ ],
94
+ "bugs": {
95
+ "url": "https://github.com/webos-tools/cli/issues"
96
+ },
97
+ "homepage": "https://github.com/webos-tools/cli#readme"
98
+ }
@@ -0,0 +1,65 @@
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
+ const SpecReporter = require('jasmine-spec-reporter').SpecReporter;
9
+ const HtmlReporter = require('jasmine-pretty-html-reporter-jasmine3.8').Reporter;
10
+
11
+ jasmine.getEnv().configure({
12
+ random: false,
13
+ oneFailurePerSpec: false
14
+ });
15
+
16
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 25000;
17
+ jasmine.getEnv().clearReporters(); // remove default reporter logs
18
+ jasmine.getEnv().addReporter(new SpecReporter({ // add jasmine-spec-reporter
19
+ suite: {
20
+ // display each suite number (hierarchical)
21
+ displayNumber: true
22
+ },
23
+ spec: {
24
+ // display error messages for each failed assertion
25
+ displayErrorMessages: true,
26
+
27
+ // display stacktrace for each failed assertion
28
+ displayStacktrace: true,
29
+
30
+ // display each successful spec
31
+ displaySuccessful: true,
32
+
33
+ // display each failed spec
34
+ displayFailed: true,
35
+
36
+ // display each pending spec
37
+ displayPending: true,
38
+
39
+ // display each spec duration
40
+ displayDuration: false
41
+ },
42
+ summary: {
43
+ // display error messages for each failed assertion
44
+ displayErrorMessages: false,
45
+
46
+ // display stacktrace for each failed assertion
47
+ displayStacktrace: false,
48
+
49
+ // display summary of all successes after execution
50
+ displaySuccessful: true,
51
+
52
+ // display summary of all failures after execution
53
+ displayFailed: true,
54
+
55
+ // display summary of all pending specs after execution
56
+ displayPending: true,
57
+
58
+ // display execution duration
59
+ displayDuration: false
60
+ }
61
+ }));
62
+
63
+ jasmine.getEnv().addReporter(new HtmlReporter({
64
+ path: path.join(__dirname, '../../')
65
+ }));
@@ -0,0 +1,372 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ fs = require('fs'),
9
+ common = require('../common-spec'),
10
+ Generator = require('../../../lib/generator');
11
+
12
+ const generator = new Generator(),
13
+ aresCmd = 'Generator',
14
+ outputPath = path.resolve(__dirname, "../..", "tempFiles"),
15
+ sampleAppPath = path.resolve(outputPath, "sampleApp"),
16
+ sampleServicePath = path.resolve(outputPath, "sampleService");
17
+
18
+ let expectedTemplate,
19
+ expectedList;
20
+
21
+ beforeAll(function(done) {
22
+ common.getOptions()
23
+ .then(function() {
24
+ return common.getExpectedResult("ares-generate");
25
+ }).then(function(result) {
26
+ expectedTemplate = result.template;
27
+ expectedList = result.list;
28
+ done();
29
+ });
30
+ });
31
+
32
+ afterAll(function(done) {
33
+ common.removeOutDir(sampleAppPath); // can be in afterAll
34
+ common.removeOutDir(sampleServicePath); // can be in afterAll
35
+ done();
36
+ });
37
+
38
+ describe(aresCmd + ' --list', function() {
39
+ it('List the available templates', function(done) {
40
+ generator.showTemplates(false, function(err, value) {
41
+ expectedList = expectedList.join('\n'); // multi string in array. need to join
42
+ value.msg = value.msg.trim().replace(/\s+['\n']/g, '\n');
43
+ expect(value.msg).toContain(expectedList);
44
+ done();
45
+ });
46
+ });
47
+ });
48
+
49
+ describe(aresCmd +' --property', function() {
50
+ beforeEach(function(done) {
51
+ common.removeOutDir(sampleAppPath);
52
+ done();
53
+ });
54
+ afterEach(function(done) {
55
+ setTimeout(() => {
56
+ common.removeOutDir(sampleAppPath);
57
+ done();
58
+ }, 3000);
59
+ });
60
+
61
+ it('Set the properties of appinfo.json', function(done) {
62
+ const id = "com.sample.app",
63
+ version = "2.0.0",
64
+ title = "First App",
65
+ options = {
66
+ tmplName: "webappinfo",
67
+ props: ['id='+`${id}`, 'version='+`${version}` , 'title='+`${title}`],
68
+ out:sampleAppPath
69
+ };
70
+
71
+ let outputTxt = "", text, outputObj;
72
+ generator.generate(options, function(err, value) {
73
+ outputTxt += value.msg;
74
+ setTimeout(() => {
75
+ expect(outputTxt).toContain("Generating webappinfo");
76
+ expect(outputTxt).toContain("Success");
77
+ expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
78
+ try {
79
+ text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
80
+ outputObj = JSON.parse(text);
81
+ } catch (error) {
82
+ console.error(error);
83
+ }
84
+ expect(outputObj.id).toBe(id);
85
+ expect(outputObj.version).toBe(version);
86
+ expect(outputObj.title).toBe(title);
87
+ done();
88
+ }, 5000);
89
+ });
90
+ });
91
+
92
+ it('Set the properties of services.json', function(done) {
93
+ const id = "com.sample.app.service",
94
+ version = "1.1.1",
95
+ options = {
96
+ tmplName :"jsserviceinfo",
97
+ props: ['id='+`${id}`, 'version='+`${version}`],
98
+ out:sampleAppPath
99
+ };
100
+
101
+ let outputTxt = "", text, outputObj;
102
+ generator.generate(options, function(err, value) {
103
+ outputTxt += value.msg;
104
+ setTimeout(() => {
105
+ expect(outputTxt).toContain("Generating jsserviceinfo");
106
+ expect(outputTxt).toContain("Success");
107
+ expect(fs.existsSync(path.join(sampleAppPath, "services.json"))).toBe(true);
108
+ try {
109
+ text = fs.readFileSync(path.join(sampleAppPath, "services.json"));
110
+ outputObj = JSON.parse(text);
111
+ } catch (error) {
112
+ console.error(error);
113
+ }
114
+ expect(outputObj.id).toBe(id);
115
+ done();
116
+ }, 5000);
117
+ });
118
+ });
119
+
120
+ it('Set the properties of qmlappinfo.json', function(done) {
121
+ const id = "com.qml.app",
122
+ version = "2.0.0",
123
+ options = {
124
+ tmplName :"qmlappinfo",
125
+ props: ['id='+`${id}`, 'version='+`${version}`],
126
+ out:sampleAppPath
127
+ };
128
+
129
+ let outputTxt = "", text, outputObj;
130
+ generator.generate(options, function(err, value) {
131
+ outputTxt += value.msg;
132
+ setTimeout(() => {
133
+ expect(outputTxt).toContain("Generating qmlappinfo");
134
+ expect(outputTxt).toContain("Success");
135
+ expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
136
+ try {
137
+ text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
138
+ outputObj = JSON.parse(text);
139
+ } catch (error) {
140
+ console.error(error);
141
+ }
142
+ expect(outputObj.id).toBe(id);
143
+ done();
144
+ }, 5000);
145
+ });
146
+ });
147
+ });
148
+
149
+ describe(aresCmd + ' --template', function() {
150
+ beforeEach(function(done) {
151
+ common.removeOutDir(sampleAppPath);
152
+ done();
153
+ });
154
+ afterEach(function(done) {
155
+ setTimeout(() => {
156
+ common.removeOutDir(sampleAppPath);
157
+ done();
158
+ }, 5000);
159
+ });
160
+
161
+
162
+ it('webapp : appinfo.json for web app', function(done) {
163
+ const options = {
164
+ tmplName: "webapp",
165
+ out:sampleAppPath
166
+ };
167
+
168
+ let outputTxt = "", fileList;
169
+ generator.generate(options, function(err, value) {
170
+ outputTxt += value.msg;
171
+ setTimeout(() => {
172
+ expect(outputTxt).toContain("Generating webapp");
173
+ expect(outputTxt).toContain("Success");
174
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
175
+ try {
176
+ fileList = fs.readdirSync(sampleAppPath);
177
+ } catch (error) {
178
+ console.error(error);
179
+ }
180
+ expect(fileList.toString()).toContain(expectedTemplate.webappinfo.toString());
181
+ done();
182
+ }, 5000);
183
+ });
184
+ });
185
+
186
+ it('hosted_webapp : generate hosted template app', function(done) {
187
+ const url = "http://www.google.com",
188
+ options = {
189
+ tmplName: "hosted_webapp",
190
+ props: ['url='+`${url}`],
191
+ out:sampleAppPath
192
+ };
193
+
194
+ let outputTxt = "", text;
195
+ generator.generate(options, function(err, value) {
196
+ outputTxt += value.msg;
197
+ setTimeout(() => {
198
+ expect(outputTxt).toContain("Generating hosted_webapp");
199
+ expect(outputTxt).toContain("Success");
200
+ expect(fs.existsSync(path.join(sampleAppPath, "index.html"))).toBe(true);
201
+ try {
202
+ text = fs.readFileSync(path.join(sampleAppPath,"index.html"));
203
+ } catch (error) {
204
+ console.error(error);
205
+ }
206
+ expect(text.toString()).toContain(url);
207
+ done();
208
+ }, 5000);
209
+ });
210
+ });
211
+
212
+ it('qmlapp : generate qml template app', function(done) {
213
+ const id = "com.qml.app",
214
+ title = "First App",
215
+ options = {
216
+ tmplName: "qmlapp",
217
+ props: ['id='+`${id}`, 'title='+`${title}`],
218
+ out:sampleAppPath
219
+ };
220
+
221
+ let outputTxt = "", text;
222
+ generator.generate(options, function(err, value) {
223
+ outputTxt += value.msg;
224
+ setTimeout(() => {
225
+ expect(outputTxt).toContain("Generating qmlapp");
226
+ expect(outputTxt).toContain("Success");
227
+ expect(fs.existsSync(path.join(sampleAppPath, "main.qml"))).toBe(true);
228
+ try {
229
+ text = fs.readFileSync(path.join(sampleAppPath,"main.qml"), 'utf8');
230
+ } catch (error) {
231
+ console.error(error);
232
+ }
233
+ expect(text).toContain("com.qml.app");
234
+ done();
235
+ }, 5000);
236
+ });
237
+ });
238
+
239
+ it('js_service : generate js_service template', function(done) {
240
+ const id = "com.sample.app.service'",
241
+ options = {
242
+ tmplName: "js_service",
243
+ svcinfo: {id:`${id}`},
244
+ out:sampleAppPath
245
+ };
246
+
247
+ let outputTxt = "", text;
248
+ generator.generate(options, function(err, value) {
249
+ outputTxt += value.msg;
250
+ setTimeout(() => {
251
+ expect(outputTxt).toContain("Generating js_service");
252
+ expect(outputTxt).toContain("Success");
253
+ expect(fs.existsSync(path.join(sampleAppPath, "services.json"))).toBe(true);
254
+ try {
255
+ text = fs.readFileSync(path.join(sampleAppPath,"services.json"));
256
+ } catch (error) {
257
+ console.error(error);
258
+ }
259
+ expect(text.toString()).toContain(id);
260
+ done();
261
+ }, 5000);
262
+ });
263
+ });
264
+ });
265
+
266
+ describe(aresCmd + ' --overwrite(-f)', function() {
267
+ afterEach(function(done) {
268
+ setTimeout(() => {
269
+ common.removeOutDir(sampleAppPath);
270
+ done();
271
+ }, 5000);
272
+ });
273
+
274
+ it('webappinfo : appinfo.json for web app', function(done) {
275
+ const options = {
276
+ tmplName: "webappinfo",
277
+ out:sampleAppPath
278
+ };
279
+
280
+ let outputTxt = "", fileList;
281
+ generator.generate(options, function(err, value) {
282
+ outputTxt += value.msg;
283
+ setTimeout(() => {
284
+ expect(outputTxt).toContain("Generating webappinfo");
285
+ expect(outputTxt).toContain("Success");
286
+ expect(fs.existsSync(path.join(sampleAppPath))).toBe(true);
287
+
288
+ try {
289
+ fileList = fs.readdirSync(sampleAppPath);
290
+ } catch (error) {
291
+ console.error(error);
292
+ }
293
+ expect(JSON.stringify(fileList)).toBe(JSON.stringify(expectedTemplate.webappinfo));
294
+ done();
295
+ }, 3000);
296
+ });
297
+ });
298
+
299
+ it('Overwirte existing files', function(done) {
300
+ const id = "com.domain.app",
301
+ version = "2.0.0",
302
+ title = "First App",
303
+ options = {
304
+ tmplName: "webappinfo",
305
+ props: ['id='+`${id}`, 'version='+`${version}`, 'title='+`${title}`],
306
+ out:sampleAppPath,
307
+ overwrite:true
308
+ };
309
+
310
+ let outputTxt = "", text, outputObj;
311
+ generator.generate(options, function(err, value) {
312
+ outputTxt += value.msg;
313
+ setTimeout(() => {
314
+ expect(outputTxt).toContain("Generating webapp");
315
+ expect(outputTxt).toContain("Success");
316
+ expect(fs.existsSync(path.join(sampleAppPath, "appinfo.json"))).toBe(true);
317
+
318
+ try {
319
+ text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
320
+ outputObj = JSON.parse(text);
321
+ } catch (error) {
322
+ console.error(error);
323
+ }
324
+ expect(outputObj.id).toBe(id);
325
+ expect(outputObj.version).toBe(version);
326
+ expect(outputObj.title).toBe(title);
327
+ done();
328
+ }, 3000);
329
+ });
330
+ });
331
+ });
332
+
333
+ describe(aresCmd + ' --servicename', function() {
334
+ beforeEach(function(done) {
335
+ common.removeOutDir(sampleServicePath);
336
+ done();
337
+ });
338
+ afterEach(function(done) {
339
+ setTimeout(() => {
340
+ common.removeOutDir(sampleServicePath);
341
+ done();
342
+ }, 5000);
343
+ });
344
+
345
+ it('Set the servicename for webOS service.', function(done) {
346
+ const id = "com.test.app.service",
347
+ options = {
348
+ tmplName: "jsserviceinfo",
349
+ svcName: id,
350
+ out:sampleServicePath
351
+ };
352
+
353
+ let outputTxt = "", text, outputObj;
354
+ generator.generate(options, function(err, value) {
355
+ outputTxt += value.msg;
356
+ setTimeout(() => {
357
+ expect(outputTxt).toContain("Generating jsserviceinfo");
358
+ expect(outputTxt).toContain("Success");
359
+ expect(fs.existsSync(path.join(sampleServicePath, "services.json"))).toBe(true);
360
+
361
+ try {
362
+ text = fs.readFileSync(path.join(sampleServicePath, "services.json"));
363
+ outputObj = JSON.parse(text);
364
+ } catch (error) {
365
+ console.error(error);
366
+ }
367
+ expect(outputObj.id).toBe(id);
368
+ done();
369
+ }, 3000);
370
+ });
371
+ });
372
+ });
@@ -0,0 +1,89 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const exec = require('child_process').exec,
8
+ common = require('../common-spec'),
9
+ inspector = require('../../../lib/inspect'),
10
+ async = require('async');
11
+
12
+ const aresCmd = 'Inspector',
13
+ inspectOptions = {
14
+ open: true,
15
+ };
16
+
17
+ let options;
18
+
19
+ beforeAll(function(done) {
20
+ common.getOptions()
21
+ .then(function(result) {
22
+ options = result;
23
+ done();
24
+ });
25
+ });
26
+
27
+ describe("Test setting", function() {
28
+ it("Add device with ares-setup-device", function(done) {
29
+ common.resetDeviceList()
30
+ .then(function() {
31
+ return common.addDeviceInfo();
32
+ }).then(function(result) {
33
+ expect(result).toContain(options.device);
34
+ done();
35
+ }).catch(function(err) {
36
+ expect(err).toContain("The specified value already exist");
37
+ done();
38
+ });
39
+ });
40
+
41
+ it('Install sample ipk to device', function(done) {
42
+ const installCmd = common.makeCmd('ares-install');
43
+ exec(installCmd + ` ${options.ipkPath}`, function(error, stdout, stderr) {
44
+ if (stderr && stderr.length > 0) {
45
+ common.detectNodeMessage(stderr);
46
+ }
47
+ expect(stdout).toContain("Success");
48
+ done();
49
+ });
50
+ });
51
+ });
52
+
53
+ describe(aresCmd + '.inspect()', function() {
54
+ it('Run web inspector for sample app', function(done) {
55
+ inspectOptions.appId = options.pkgId;
56
+ async.waterfall([
57
+ inspector.inspect.bind(inspector, inspectOptions),
58
+ function(inspectInfo, next) {
59
+ expect(inspectInfo.msg).toContain('Application Debugging - http://localhost');
60
+ setTimeout(() => {
61
+ inspector.stop(inspectInfo.session, next);
62
+ }, 5000);
63
+ }
64
+ ], function(err, results) {
65
+ expect(results.msg).toContain('This inspection has stopped');
66
+ done();
67
+ delete inspectOptions.appId;
68
+ });
69
+ });
70
+ });
71
+
72
+ describe(aresCmd + '.inspect()', function() {
73
+ it('Run service inspector for sample service', function(done) {
74
+ inspectOptions.serviceId = options.pkgService;
75
+ async.waterfall([
76
+ inspector.inspect.bind(inspector, inspectOptions),
77
+ function(inspectInfo, next) {
78
+ expect(inspectInfo.msg).toContain('To debug your service, set');
79
+ expect(inspectInfo.msg).toContain("Cannot support \"--open option\" on platform node version 8 and later");
80
+ setTimeout(() => {
81
+ inspector.stop(inspectInfo.session, next);
82
+ }, 7000);
83
+ }
84
+ ], function(err, results) {
85
+ expect(results.msg).toContain('This inspection has stopped');
86
+ done();
87
+ });
88
+ });
89
+ });
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const common = require('../common-spec'),
8
+ installer = require('../../../lib/install');
9
+
10
+ const aresCmd = 'Installer',
11
+ installOptions = {
12
+ opkg: false
13
+ };
14
+
15
+ let options;
16
+
17
+ beforeAll(function(done) {
18
+ common.getOptions()
19
+ .then(function(result) {
20
+ options = result;
21
+ done();
22
+ });
23
+ });
24
+
25
+ describe("Test setting", function() {
26
+ it("Add device with ares-setup-device", function(done) {
27
+ common.resetDeviceList()
28
+ .then(function() {
29
+ return common.addDeviceInfo();
30
+ }).then(function(result) {
31
+ expect(result).toContain(options.device);
32
+ done();
33
+ }).catch(function(err) {
34
+ expect(err).toContain("The specified value already exist");
35
+ done();
36
+ });
37
+ });
38
+ });
39
+
40
+ describe(aresCmd + '.install()', function() {
41
+ it('Install sample ipk to device', function(done) {
42
+ installer.install(installOptions, `${options.ipkPath}`, function(err, value) {
43
+ expect(value.msg).toContain("Success");
44
+ done();
45
+ }, function(data) {
46
+ expect(data).toContain("Installing package");
47
+ });
48
+ });
49
+ });
50
+
51
+ describe(aresCmd + '.list()', function() {
52
+ it('List the installed apps on device', function(done) {
53
+ installer.list(installOptions, function(err, value) {
54
+ expect(JSON.stringify(value)).toContain(`${options.pkgId}`);
55
+ done();
56
+ });
57
+ });
58
+ });
59
+
60
+ describe(aresCmd + '.remove()', function() {
61
+ it('Install sample ipk to device', function(done) {
62
+ installer.remove(installOptions, `${options.pkgId}`, function(err, value) {
63
+ expect(value.msg).toContain(`Removed package ${options.pkgId}`);
64
+ done();
65
+ });
66
+ });
67
+ });