You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2019/09/18 08:09:13 UTC
[incubator-echarts] 01/02: feat(test): support `npm run mktest
some-test-file`.
This is an automated email from the ASF dual-hosted git repository.
sushuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit 004dfecfeafd050b51ebf7629bbefdbcf277bce8
Author: sushuang <su...@gmail.com>
AuthorDate: Wed Sep 18 01:25:06 2019 +0800
feat(test): support `npm run mktest some-test-file`.
---
package.json | 1 +
test/build/mktest-tpl.html | 80 +++++++++++++++++++++++
test/build/mktest.js | 154 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 235 insertions(+)
diff --git a/package.json b/package.json
index 2dbadba..10fb6f6 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"prepublish": "node build/build.js --prepublish",
"test:visual": "node test/runTest/server.js",
"test": "node build/build.js",
+ "mktest": "node test/build/mktest.js",
"lint": "./node_modules/.bin/eslint src extension-src",
"lint:dist": "echo 'It might take a while. Please wait ...' && ./node_modules/.bin/jshint --config .jshintrc-dist dist/echarts.js"
},
diff --git a/test/build/mktest-tpl.html b/test/build/mktest-tpl.html
new file mode 100644
index 0000000..15836ef
--- /dev/null
+++ b/test/build/mktest-tpl.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <script src="lib/esl.js"></script>
+ <script src="lib/config.js"></script>
+ <script src="lib/jquery.min.js"></script>
+ <script src="lib/facePrint.js"></script>
+ <script src="lib/testHelper.js"></script>
+ <!-- <script src="ut/lib/canteen.js"></script> -->
+ <link rel="stylesheet" href="lib/reset.css" />
+ </head>
+ <body>
+ <style>
+ </style>
+
+
+<!-- TPL_DOM_PLACE -->
+
+<!-- TPL_JS_PLACE -->
+
+ </body>
+</html>
+
+<!-- TPL_SEGMENT_DELIMITER -->
+ <div id="{{TPL_DOM_ID}}"></div>
+<!-- TPL_SEGMENT_DELIMITER -->
+
+
+
+
+
+
+ <script>
+ require(['echarts'/*, 'map/js/china' */], function (echarts) {
+ var option;
+ // $.getJSON('./data/nutrients.json', function (data) {});
+
+ option = {
+ xAxis: {},
+ yAxis: {},
+ series: {
+ type: 'line',
+ data: [[11, 22], [33, 44]]
+ }
+ };
+
+ var chart = testHelper.create(echarts, '{{TPL_DOM_ID}}', {
+ title: [
+ 'Test Case Description of {{TPL_DOM_ID}}',
+ '(Muliple lines and **emphasis** are supported in description)'
+ ],
+ option: option
+ // height: 300,
+ // buttons: [{text: 'btn-txt', onclick: function () {}}],
+ // recordCanvas: true,
+ });
+ });
+ </script>
diff --git a/test/build/mktest.js b/test/build/mktest.js
new file mode 100755
index 0000000..c71403a
--- /dev/null
+++ b/test/build/mktest.js
@@ -0,0 +1,154 @@
+#!/usr/bin/env node
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+const nodeFS = require('fs');
+const assert = require('assert');
+const nodePath = require('path');
+const commander = require('commander');
+const {color} = require('zrender/build/helper');
+
+const colorFgCyanDim = color('fgCyan', 'dim');
+const colorFgGreen = color('fgGreen');
+const colorFgRed = color('fgRed');
+
+const testDir = nodePath.resolve(__dirname, '..');
+const testTplPath = nodePath.resolve(__dirname, 'mktest-tpl.html');
+const tplSegmentDelimiter = '<!-- TPL_SEGMENT_DELIMITER -->';
+const tagDomId = /{{TPL_DOM_ID}}/g;
+const tagDomPlace = '<!-- TPL_DOM_PLACE -->';
+const tagJSPlace = '<!-- TPL_JS_PLACE -->';
+
+const manualText = `
+ ${colorFgCyanDim('Usage:')}
+
+ # Make a file named "bar-action.html" in directory "echarts/test" with 1 initial chart.
+ ${colorFgGreen('npm run mktest bar-action')}
+ # or
+ ${colorFgGreen('npm run mktest bar-action.html')}
+ # or
+ ${colorFgGreen('node ./test/build/mktest bar-action')}
+
+ # Make a file named "bar-action.html" in directory "echarts/test" with 5 initial charts.
+ ${colorFgGreen('npm run mktest bar-action 5')}
+ # or
+ ${colorFgGreen('node ./test/build/mktest bar-action 5')}
+`;
+
+function run() {
+ let opt = prepareOpt();
+
+ if (!opt) {
+ return;
+ }
+
+ if (nodeFS.existsSync(opt.testFilePath)) {
+ printError(`The file ${opt.testFilePath} exists! Please chose another name.`);
+ printError('Please chose another name.');
+ return;
+ }
+
+ const testTplContent = nodeFS.readFileSync(testTplPath, {encoding: 'utf8'});
+
+ const testFileContent = makeTestFileContent(opt, testTplContent);
+
+ nodeFS.writeFileSync(opt.testFilePath, testFileContent, {encoding: 'utf8'});
+
+ console.log(`A test file has been added in: \n${colorFgGreen(opt.testFilePath)}`);
+ console.log();
+}
+
+function prepareOpt() {
+ commander
+ .usage('test-file-name [chart-number]')
+ .description(manualText)
+ .parse(process.argv);
+
+ let args = commander.args || [];
+
+ let testFileName = args[0];
+ let testCaseNumber = args[1];
+ if (isNaN(testCaseNumber)) {
+ testCaseNumber = 1;
+ }
+
+ if (!testFileName) {
+ printError('Must input a file name!');
+ return;
+ }
+
+ testFileName = normalizeInputExt(testFileName);
+ let testFilePath = nodePath.resolve(testDir, testFileName);
+
+ return {
+ testFileName: testFileName,
+ testFilePath: testFilePath,
+ testCaseNumber: testCaseNumber
+ };
+}
+
+function makeTestFileContent(opt, testTplContent) {
+ const testTplSegments = testTplContent.split(tplSegmentDelimiter);
+
+ const tplSegMain = testTplSegments[0];
+ const tplSegDom = testTplSegments[1];
+ const tplSegJS = testTplSegments[2];
+
+ assert(tplSegMain && tplSegDom && tplSegJS);
+
+ let segDomList = [];
+ let segJSList = [];
+
+ for (let i = 0; i < opt.testCaseNumber; i++) {
+ let domId = 'main' + i;
+ segDomList.push(tplSegDom.replace(tagDomId, domId));
+ segJSList.push(tplSegJS.replace(tagDomId, domId));
+ }
+
+ let htmlContent = tplSegMain
+ .replace(tagDomPlace, segDomList.join('\n'))
+ .replace(tagJSPlace, segJSList.join('\n'));
+
+ return htmlContent;
+}
+
+function normalizeInputExt(testFileName) {
+ if (hasExt(testFileName, '.html')) {
+ return testFileName;
+ }
+ else if (hasExt(testFileName, '.htm')) {
+ return testFileName + 'l';
+ }
+ else {
+ return testFileName + '.html';
+ }
+
+ function hasExt(fileName, ext) {
+ let idx = fileName.lastIndexOf(ext);
+ return idx >= 0 && idx === fileName.length - ext.length;
+ }
+}
+
+function printError(msg) {
+ console.error(colorFgRed('[ERROR]: ' + msg));
+}
+
+run();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org