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