You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2019/12/11 12:04:53 UTC

[incubator-echarts] branch ut-ci created (now 8eb624b)

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a change to branch ut-ci
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git.


      at 8eb624b  fix(test): fix Component unit test

This branch includes the following new commits:

     new d435fa6  fix(test): optimize unit test cases
     new c759239  fix(interval): optimize number rounding on minor ticks.
     new 8eb624b  fix(test): fix Component unit test

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


[incubator-echarts] 03/03: fix(test): fix Component unit test

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch ut-ci
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit 8eb624bc87d1422c7a6dceaf8440d192b5f52f77
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Dec 11 20:04:32 2019 +0800

    fix(test): fix Component unit test
---
 test/ut/jest.config.js               |   3 +-
 test/ut/spec/model/Component.test.js | 124 ++++++++++++++++++++---------------
 2 files changed, 72 insertions(+), 55 deletions(-)

diff --git a/test/ut/jest.config.js b/test/ut/jest.config.js
index c4338be..5ba7fea 100644
--- a/test/ut/jest.config.js
+++ b/test/ut/jest.config.js
@@ -38,7 +38,6 @@ module.exports = {
         '**/spec/scale/*.test.js',
         '**/spec/util/*.test.js',
         '!**/spec/api/containPixel.test.js',
-        '!**/spec/component/graphic/setOption.test.js',
-        '!**/spec/model/Component.test.js'
+        '!**/spec/component/graphic/setOption.test.js'
     ]
 };
diff --git a/test/ut/spec/model/Component.test.js b/test/ut/spec/model/Component.test.js
index e932be7..f06c6e1 100755
--- a/test/ut/spec/model/Component.test.js
+++ b/test/ut/spec/model/Component.test.js
@@ -21,36 +21,48 @@ const ComponentModel = require('../../../../lib/model/Component');
 
 describe('Component', function () {
 
+    let idx = 0;
+
+    function makeTypes(count) {
+        let arr = [];
+        for (let i = 0; i < count; i++) {
+            arr.push('type_' + idx++);
+        }
+        return arr;
+    }
 
     describe('topologicalTravel', function () {
 
         it('topologicalTravel_base', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a1'});
-            ComponentModel.extend({type: 'a2'});
+            var [m1, a1, a2] = makeTypes(3);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a1});
+            ComponentModel.extend({type: a2});
             var result = [];
             var allList = ComponentModel.getAllClassMainTypes();
-            ComponentModel.topologicalTravel(['m1', 'a1', 'a2'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a1, a2], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a2', ['dataset']], ['a1', ['dataset']], ['m1', ['dataset','a1', 'a2']]]);
+            expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
         });
 
         it('topologicalTravel_a1IsAbsent', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a2'});
+            var [m1, a1, a2] = makeTypes(3);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a2});
             var allList = ComponentModel.getAllClassMainTypes();
             var result = [];
-            ComponentModel.topologicalTravel(['m1', 'a2'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a2], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a2', ['dataset']], ['m1', ['dataset', 'a1', 'a2']]]);
+            expect(result).toEqual([[a2, ['dataset']], [m1, ['dataset', a1, a2]]]);
         });
 
         it('topologicalTravel_empty', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a1'});
-            ComponentModel.extend({type: 'a2'});
+            var [m1, a1, a2] = makeTypes(3);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a1});
+            ComponentModel.extend({type: a2});
             var allList = ComponentModel.getAllClassMainTypes();
             var result = [];
             ComponentModel.topologicalTravel([], allList, function (componentType, dependencies) {
@@ -60,94 +72,100 @@ describe('Component', function () {
         });
 
         it('topologicalTravel_isolate', function () {
-            ComponentModel.extend({type: 'a2'});
-            ComponentModel.extend({type: 'a1'});
-            ComponentModel.extend({type: 'm1', dependencies: ['a2']});
+            var [m1, a1, a2] = makeTypes(3);
+            ComponentModel.extend({type: a2});
+            ComponentModel.extend({type: a1});
+            ComponentModel.extend({type: m1, dependencies: [a2]});
             var allList = ComponentModel.getAllClassMainTypes();
             var result = [];
-            ComponentModel.topologicalTravel(['a1', 'a2', 'm1'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([a1, a2, m1], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a1', ['dataset']], ['a2', ['dataset']], ['m1', ['dataset','a2']]]);
+            expect(result).toEqual([[a1, ['dataset']], [a2, ['dataset']], [m1, ['dataset',a2]]]);
         });
 
         it('topologicalTravel_diamond', function () {
-            ComponentModel.extend({type: 'a1', dependencies: []});
-            ComponentModel.extend({type: 'a2', dependencies: ['a1']});
-            ComponentModel.extend({type: 'a3', dependencies: ['a1']});
-            ComponentModel.extend({type: 'm1', dependencies: ['a2', 'a3']});
+            var [m1, a1, a2, a3] = makeTypes(4);
+            ComponentModel.extend({type: a1, dependencies: []});
+            ComponentModel.extend({type: a2, dependencies: [a1]});
+            ComponentModel.extend({type: a3, dependencies: [a1]});
+            ComponentModel.extend({type: m1, dependencies: [a2, a3]});
             var allList = ComponentModel.getAllClassMainTypes();
             var result = [];
-            ComponentModel.topologicalTravel(['m1', 'a1', 'a2', 'a3'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a1, a2, a3], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a1', ['dataset']], ['a3', ['dataset', 'a1']], ['a2', ['dataset', 'a1']], ['m1', ['dataset', 'a2', 'a3']]]);
+            expect(result).toEqual([[a1, ['dataset']], [a3, ['dataset', a1]], [a2, ['dataset', a1]], [m1, ['dataset', a2, a3]]]);
         });
 
         it('topologicalTravel_loop', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'm2', dependencies: ['m1', 'a2']});
-            ComponentModel.extend({type: 'a1', dependencies: ['m2', 'a2', 'a3']});
-            ComponentModel.extend({type: 'a2'});
-            ComponentModel.extend({type: 'a3'});
+            var [m1, m2, a1, a2, a3] = makeTypes(5);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: m2, dependencies: [m1, a2]});
+            ComponentModel.extend({type: a1, dependencies: [m2, a2, a3]});
+            ComponentModel.extend({type: a2});
+            ComponentModel.extend({type: a3});
             var allList = ComponentModel.getAllClassMainTypes();
             expect(function () {
-                ComponentModel.topologicalTravel(['m1', 'm2', 'a1'], allList);
+                ComponentModel.topologicalTravel([m1, m2, a1], allList);
             }).toThrowError(/Circl/);
         });
 
         it('topologicalTravel_multipleEchartsInstance', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a1'});
-            ComponentModel.extend({type: 'a2'});
+            var [m1, m2, a1, a2] = makeTypes(4);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a1});
+            ComponentModel.extend({type: a2});
             var allList = ComponentModel.getAllClassMainTypes();
             var result = [];
-            ComponentModel.topologicalTravel(['m1', 'a1', 'a2'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a1, a2], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a2', ['dataset']], ['a1', ['dataset']], ['m1', ['dataset', 'a1', 'a2']]]);
+            expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
 
             result = [];
-            ComponentModel.extend({type: 'm2', dependencies: ['a1', 'm1']});
+            ComponentModel.extend({type: m2, dependencies: [a1, m1]});
             var allList = ComponentModel.getAllClassMainTypes();
-            ComponentModel.topologicalTravel(['m2', 'm1', 'a1', 'a2'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m2, m1, a1, a2], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a2', ['dataset']], ['a1', ['dataset']], ['m1', ['dataset', 'a1', 'a2']], ['m2', ['dataset', 'a1', 'm1']]]);
+            expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]], [m2, ['dataset', a1, m1]]]);
         });
 
         it('topologicalTravel_missingSomeNodeButHasDependencies', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a2', dependencies: ['a3']});
-            ComponentModel.extend({type: 'a3'});
-            ComponentModel.extend({type: 'a4'});
+            var [m1, a1, a2, a3, a4] = makeTypes(5);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a2, dependencies: [a3]});
+            ComponentModel.extend({type: a3});
+            ComponentModel.extend({type: a4});
             var result = [];
             var allList = ComponentModel.getAllClassMainTypes();
-            ComponentModel.topologicalTravel(['a3', 'm1'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([a3, m1], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a3', ['dataset']], ['a2', ['dataset', 'a3']], ['m1', ['dataset', 'a1', 'a2']]]);
+            expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
             var result = [];
             var allList = ComponentModel.getAllClassMainTypes();
-            ComponentModel.topologicalTravel(['m1', 'a3'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a3], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a3', ['dataset']], ['a2', ['dataset', 'a3']], ['m1', ['dataset', 'a1', 'a2']]]);
+            expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
         });
 
         it('topologicalTravel_subType', function () {
-            ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
-            ComponentModel.extend({type: 'a1.aaa', dependencies: ['a2']});
-            ComponentModel.extend({type: 'a1.bbb', dependencies: ['a3', 'a4']});
-            ComponentModel.extend({type: 'a2'});
-            ComponentModel.extend({type: 'a3'});
-            ComponentModel.extend({type: 'a4'});
+            var [m1, a1, a2, a3, a4] = makeTypes(5);
+            ComponentModel.extend({type: m1, dependencies: [a1, a2]});
+            ComponentModel.extend({type: a1 + '.aaa', dependencies: [a2]});
+            ComponentModel.extend({type: a1 + '.bbb', dependencies: [a3, a4]});
+            ComponentModel.extend({type: a2});
+            ComponentModel.extend({type: a3});
+            ComponentModel.extend({type: a4});
             var result = [];
             var allList = ComponentModel.getAllClassMainTypes();
-            ComponentModel.topologicalTravel(['m1', 'a1', 'a2', 'a4'], allList, function (componentType, dependencies) {
+            ComponentModel.topologicalTravel([m1, a1, a2, a4], allList, function (componentType, dependencies) {
                 result.push([componentType, dependencies]);
             });
-            expect(result).toEqual([['a4', ['dataset']], ['a2', ['dataset']], ['a1', ['dataset', 'a2','a3','a4']], ['m1', ['dataset', 'a1', 'a2']]]);
+            expect(result).toEqual([[a4, ['dataset']], [a2, ['dataset']], [a1, ['dataset', a2, a3, a4]], [m1, ['dataset', a1, a2]]]);
         });
     });
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


[incubator-echarts] 01/03: fix(test): optimize unit test cases

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch ut-ci
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit d435fa6969e96e423dfba368554d194d40a108c6
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Dec 11 19:31:08 2019 +0800

    fix(test): optimize unit test cases
---
 test/ut/.eslintrc.yaml                             | 190 +++++++++++++++++++++
 test/ut/.jshintrc                                  |  61 -------
 test/ut/core/extendExpect.js                       |  47 +++++
 test/ut/core/utHelper.js                           | 150 ++--------------
 test/ut/jest.config.js                             |   3 +
 test/ut/spec/api/containPixel.test.js              |  14 --
 test/ut/spec/api/converter.test.js                 |  53 ++----
 test/ut/spec/api/getVisual.test.js                 |  28 +--
 test/ut/spec/component/graphic/setOption.test.js   |  34 ++--
 test/ut/spec/component/visualMap/setOption.test.js |  24 +--
 test/ut/spec/model/Component.test.js               |   2 +-
 test/ut/spec/model/Global.test.js                  |  24 +--
 test/ut/spec/model/timelineOptions.test.js         |  23 +--
 test/ut/spec/scale/interval.test.js                |  79 +++------
 test/ut/spec/util/model.test.js                    |   4 +-
 test/ut/ut.js                                      |  42 -----
 16 files changed, 331 insertions(+), 447 deletions(-)

diff --git a/test/ut/.eslintrc.yaml b/test/ut/.eslintrc.yaml
new file mode 100644
index 0000000..2f25b76
--- /dev/null
+++ b/test/ut/.eslintrc.yaml
@@ -0,0 +1,190 @@
+parserOptions:
+    # If using ES Module, ecmaVersion have to be set as `2015`.
+    ecmaVersion: 2015
+    sourceType: "module"
+env:
+    browser: true
+    node: true
+    jest: true
+    es6: false
+globals:
+    jQuery: true
+    Promise: true
+rules:
+    no-console:
+        - 2
+        -
+            allow:
+                - "warn"
+                - "error"
+    no-constant-condition: 0
+    comma-dangle: 2
+    no-debugger: 2
+    no-dupe-keys: 2
+    no-empty-character-class: 2
+    no-ex-assign: 2
+    no-extra-boolean-cast: 0
+    no-func-assign: 2
+    no-inner-declarations: 2
+    no-invalid-regexp: 2
+    no-negated-in-lhs: 2
+    no-obj-calls: 2
+    no-sparse-arrays: 2
+    no-unreachable: 2
+    use-isnan: 2
+    valid-typeof: 2
+    block-scoped-var: 0
+    curly:
+        - 2
+        - "all"
+    eqeqeq:
+        - 2
+        - "allow-null"
+    guard-for-in: 2
+    no-else-return: 0
+    no-labels:
+        - 2
+        -
+            allowLoop: true
+    no-eval: 2
+    no-extend-native: 2
+    no-extra-bind: 0
+    no-implied-eval: 2
+    no-iterator: 2
+    no-irregular-whitespace: 2
+    no-lone-blocks: 2
+    no-loop-func: 2
+    no-multi-str: 2
+    no-native-reassign: 2
+    no-new-wrappers: 2
+    no-octal: 2
+    no-octal-escape: 2
+    no-proto: 2
+    no-redeclare: 0
+    no-self-compare: 2
+    no-unneeded-ternary: 2
+    no-with: 2
+    radix: 2
+    wrap-iife:
+        - 2
+        - "any"
+    no-delete-var: 2
+    no-dupe-args: 2
+    no-duplicate-case: 2
+    no-label-var: 2
+    no-shadow-restricted-names: 2
+    no-undef: 2
+    no-undef-init: 2
+    no-unused-vars:
+        - 2
+        -
+            vars: "local"
+            args: "none"
+    no-use-before-define: 0
+    brace-style:
+        - 2
+        - "stroustrup"
+        - {}
+    comma-spacing:
+        - 2
+        -
+            before: false
+            after: true
+    comma-style:
+        - 2
+        - "last"
+    new-parens: 2
+    no-array-constructor: 2
+    no-multi-spaces:
+        - 2
+        -
+            ignoreEOLComments: true
+            exceptions:
+                Property: true
+    no-new-object: 2
+    no-spaced-func: 2
+    no-trailing-spaces: 2
+    no-extra-parens:
+        - 2
+        - "functions"
+    no-mixed-spaces-and-tabs: 2
+    one-var:
+        - 2
+        - "never"
+    operator-linebreak:
+        - 2
+        - "before"
+        -
+            overrides:
+                "=": "after"
+    quotes:
+        - 2
+        - "single"
+    semi:
+        - 2
+        - "always"
+    semi-spacing: 2
+    keyword-spacing: 2
+    key-spacing:
+        - 2
+        -
+            beforeColon: false
+            afterColon: true
+    space-before-function-paren:
+        - 2
+        -
+            anonymous: "always"
+            named: "never"
+    space-before-blocks:
+        - 2
+        - "always"
+    computed-property-spacing:
+        - 2
+        - "never"
+    space-in-parens:
+        - 2
+        - "never"
+    space-unary-ops: 2
+    spaced-comment: 0
+
+    max-nested-callbacks:
+        - 1
+        - 5
+    max-depth:
+        - 1
+        - 6
+    max-len:
+        - 2
+        - 120
+        - 4
+        -
+            ignoreUrls: true
+            ignoreComments: true
+    max-params:
+        - 1
+        - 15
+
+    space-infix-ops: 2
+    dot-notation:
+        - 2
+        -
+            allowKeywords: true
+            allowPattern: "^catch$"
+
+    arrow-spacing: 2
+    constructor-super: 2
+    no-confusing-arrow:
+        - 2
+        -
+            allowParens: true
+    no-class-assign: 2
+    no-const-assign: 2
+    no-dupe-class-members: 2
+    no-this-before-super: 0
+    no-var: 0
+    no-duplicate-imports: 2
+    prefer-rest-params: 0
+    unicode-bom: 2
+    max-statements-per-line: 2
+
+    no-useless-constructor: 0
\ No newline at end of file
diff --git a/test/ut/.jshintrc b/test/ut/.jshintrc
deleted file mode 100644
index 2413cda..0000000
--- a/test/ut/.jshintrc
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-    "bitwise": false,
-    "camelcase": true,
-    "curly": true,
-    "es3": true,
-    "eqeqeq": true,
-    "forin": true,
-    "freeze": true,
-    "immed": true,
-    "latedef": "nofunc",
-    "newcap": true,
-    "noarg": true,
-    "noempty": true,
-    "nonbsp": true,
-    "nonew": true,
-    "plusplus": false,
-    "quotmark": "single",
-    "undef": true,
-    "predef": ["define", "require", "requireES", "describe", "expect", "beforeEach", "it"],
-    "unused": "vars",
-    "strict": false,
-    "maxparams": 20,
-    "maxdepth": 6,
-    "maxlen": 120,
-
-    "asi": false,
-    "boss": true,
-    "debug": false,
-    "eqnull": true,
-    "esnext": false,
-    "evil": false,
-    "expr": true,
-    "funcscope": false,
-    "globalstrict": false,
-    "iterator": false,
-    "lastsemic": false,
-    "laxbreak": true,
-    "laxcomma": false,
-    "loopfunc": false,
-    "multistr": false,
-    "notypeof": false,
-    "proto": false,
-    "scripturl": false,
-    "shadow": true,
-    "sub": true,
-    "supernew": false,
-    "validthis": true,
-
-    "browser": true,
-    "jasmine": true,
-    "couch": false,
-    "devel": true,
-    "dojo": false,
-    "jquery": false,
-    "mootools": false,
-    "node": true,
-    "nonstandard": true,
-    "prototypejs": false,
-    "rhino": false,
-    "wsh": true
-}
diff --git a/test/ut/core/extendExpect.js b/test/ut/core/extendExpect.js
new file mode 100644
index 0000000..ae5a4a7
--- /dev/null
+++ b/test/ut/core/extendExpect.js
@@ -0,0 +1,47 @@
+
+const utHelper = require('./utHelper');
+
+// Setup expectes
+expect.extend({
+    toBeFinite(received) {
+        const passed = utHelper.isValueFinite(received);
+        return {
+            message: passed
+                ? () => `expected ${received} not to be finite`
+                : () => `expected ${received} to be finite`,
+            pass: passed
+        };
+    },
+
+    // Greater than or equal
+    toBeGeaterThanOrEqualTo(received, bound) {
+        const passed = received >= bound;
+        return {
+            message: passed
+                ? () => `expected ${received} to be less than or equal to ${bound}`
+                : () => `expected ${received} to be greater than or equal to ${bound}`,
+            pass: passed
+        };
+    },
+
+    // Greater than
+    toBeGreaterThan(received, bound) {
+        const passed = received > bound;
+        return {
+            message: passed
+                ? () => `expected ${received} to be less than ${bound}`
+                : () => `expected ${received} to be greater than ${bound}`,
+            pass: passed
+        };
+    },
+
+    toBeEmptyArray(received) {
+        const passed = received.length === 0;
+        return {
+            message: passed
+                ? () => `expected ${received} not to be an empty array`
+                : () => `expected ${received} to be an empty array`,
+            pass: passed
+        };
+    }
+});
diff --git a/test/ut/core/utHelper.js b/test/ut/core/utHelper.js
index d5364cc..3e10126 100755
--- a/test/ut/core/utHelper.js
+++ b/test/ut/core/utHelper.js
@@ -21,68 +21,31 @@
  * @public
  * @type {Object}
  */
+var echarts = require('../../../index');
+
 var utHelper = {};
 
 var nativeSlice = Array.prototype.slice;
 
-/**
- * @public
- */
-utHelper.genContext = function (props, originalContext) {
-    var context = {};
-    if (originalContext) {
-        for (var key in originalContext) {
-            if (originalContext.hasOwnProperty(key)) {
-                context[key] = originalContext[key];
-            }
-        }
-    }
-    if (props) {
-        for (var key in props) {
-            if (props.hasOwnProperty(key)) {
-                context[key] = props[key];
-            }
-        }
-    }
-    return context;
+utHelper.createChart = function (width, height, theme, opts) {
+    var el = document.createElement('div');
+    el.style.cssText = [
+        'visibility:hidden',
+        'width:' + (width || '500') + 'px',
+        'height:' + (height || '400') + 'px',
+        'position:absolute',
+        'bottom:0',
+        'right:0'
+    ].join(';');
+    var chart = echarts.init(el, theme, opts);
+    return chart;
 };
 
 /**
  * @public
  */
-utHelper.createChart = function (context, echarts) {
-    context.chartCount || (context.chartCount = 1);
-    var els = [];
-    var charts = [];
-    for (var i = 0; i < context.chartCount; i++) {
-        var el = document.createElement('div');
-        document.body.appendChild(el);
-        el.style.cssText = [
-            'visibility:hidden',
-            'width:' + (context.width || '500') + 'px',
-            'height:' + (context.height || '400') + 'px',
-            'position:absolute',
-            'bottom:0',
-            'right:0'
-        ].join(';');
-        els.push(el);
-        charts.push(echarts.init(el, null, {}));
-    }
-    return {charts: charts, els: els};
-};
-
-/**
- * @public
- */
-utHelper.removeChart = function (createResult) {
-    for (var i = 0; i < createResult.charts.length; i++) {
-        var chart = createResult.charts[i];
-        chart && chart.dispose();
-    }
-    for (var i = 0; i < createResult.els.length; i++) {
-        var el = createResult.els[i];
-        el && document.body.removeChild(el);
-    }
+utHelper.removeChart = function (chart) {
+    chart.dispose();
 };
 
 /**
@@ -153,66 +116,6 @@ utHelper.bind = function (func, context) {
 };
 
 /**
- * Load javascript script
- *
- * @param {string} resource Like 'xx/xx/xx.js';
- */
-utHelper.loadScript = function (url, id, callback) {
-    var head = utHelper.getHeadEl();
-
-    var script = document.createElement('script');
-    script.setAttribute('type', 'text/javascript');
-    script.setAttribute('charset', 'utf-8');
-    if (id) {
-        script.setAttribute('id', id);
-    }
-    script.setAttribute('src', url);
-
-    // @see jquery
-    // Attach handlers for all browsers
-    script.onload = script.onreadystatechange = function () {
-
-        if (!script.readyState || /loaded|complete/.test(script.readyState)) {
-            // Handle memory leak in IE
-            script.onload = script.onreadystatechange = null;
-            // Dereference the script
-            script = undefined;
-            callback && callback();
-        }
-    };
-
-    // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-    // This arises when a base node is used (jquery #2709 and #4378).
-    head.insertBefore(script, head.firstChild);
-};
-
-/**
- * Reset package loader, where esl is cleaned and reloaded.
- *
- * @public
- */
-// utHelper.resetAMDLoader = function (then) {
-//     // Clean esl
-//     var eslEl = utHelper.g('esl');
-//     if (eslEl) {
-//         utHelper.removeEl(eslEl);
-//     }
-//     var eslConfig = utHelper.g('esl');
-//     if (eslConfig) {
-//         utHelper.removeEl(eslConfig);
-//     }
-//     context.define = null;
-//     context.require = null;
-
-//     // Import esl.
-//     utHelper.loadScript('../lib/esl.js', 'esl', function () {
-//         utHelper.loadScript('lib/config.js', 'config', function () {
-//             then();
-//         });
-//     });
-// };
-
-/**
  * @public
  */
 utHelper.isValueFinite = function (val) {
@@ -271,25 +174,4 @@ utHelper.getViewGroup = function (chart, mainType, index) {
     ][component.__viewId].group : null;
 };
 
-/**
- * @public
- */
-utHelper.printElement = function (el) {
-    var result = {};
-    var props = ['position', 'scale', 'rotation', 'style', 'shape'];
-    for (var i = 0; i < props.length; i++) {
-        result[props[i]] = el[props[i]];
-    }
-    return global.JSON.stringify(result, null, 4);
-};
-
-/**
- * @public
- */
-utHelper.print = function (str) {
-    if (typeof console !== 'undefined') {
-        console.log(str);
-    }
-};
-
 module.exports = utHelper;
diff --git a/test/ut/jest.config.js b/test/ut/jest.config.js
index f488683..c4338be 100644
--- a/test/ut/jest.config.js
+++ b/test/ut/jest.config.js
@@ -27,6 +27,9 @@ module.exports = {
         'jest-canvas-mock',
         '<rootDir>/test/ut/core/setup.js'
     ],
+    setupFilesAfterEnv: [
+        '<rootDir>/test/ut/core/extendExpect.js'
+    ],
     testMatch: [
         '**/spec/api/*.test.js',
         '**/spec/component/**/*.test.js',
diff --git a/test/ut/spec/api/containPixel.test.js b/test/ut/spec/api/containPixel.test.js
index 0d4f933..c0c03ad 100755
--- a/test/ut/spec/api/containPixel.test.js
+++ b/test/ut/spec/api/containPixel.test.js
@@ -21,23 +21,9 @@
 /* jshint maxlen:200 */
 
 const echarts = require('../../../../lib/echarts');
-const gridComponent = require('../../../../lib/component/grid');
-const geoComponent = require('../../../../lib/component/geo');
-const polarComponent = require('../../../../lib/component/polar');
-const map = require('../../../../lib/chart/map');
-const pie = require('../../../../lib/chart/pie');
-const scatter = require('../../../../lib/chart/scatter');
-const graph = require('../../../../lib/chart/graph');
 const utHelper = require('../../core/utHelper');
 
 describe('api/containPixel', function () {
-    var requireItems = [echarts, gridComponent, geoComponent, polarComponent, map, pie, scatter, graph];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
-
     var testGeoJson1 = {
         'type': 'FeatureCollection',
         'features': [
diff --git a/test/ut/spec/api/converter.test.js b/test/ut/spec/api/converter.test.js
index 55f6800..946dd61 100755
--- a/test/ut/spec/api/converter.test.js
+++ b/test/ut/spec/api/converter.test.js
@@ -19,27 +19,14 @@
 */
 
 /* jshint maxlen:200 */
-const echarts = require('../../../../lib/echarts');
-const gridComponent = require('../../../../lib/component/grid');
-const geoComponent = require('../../../../lib/component/geo');
-const map = require('../../../../lib/chart/map');
-const scatter = require('../../../../lib/chart/scatter');
-const graph = require('../../../../lib/chart/graph');
-const utHelper = require('../../core/utHelper');
+var utHelper = require('../../core/utHelper');
+var echarts = require('../../../../index');
 
 describe('api/converter', function () {
 
-    var requireItems = [echarts, gridComponent, geoComponent, map, scatter, graph];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
-
     var DELTA = 1E-3;
 
     function pointEquals(p1, p2) {
-        console.log(p1, p2);
         if (p1 instanceof Array && p2 instanceof Array) {
             return Math.abs(p1[0] - p2[0]) < DELTA && Math.abs(p1[1] - p2[1]) < DELTA;
         }
@@ -117,23 +104,21 @@ describe('api/converter', function () {
             }
         ]
     };
+    echarts.registerMap('converter_test_geo_1', testGeoJson1);
+    echarts.registerMap('converter_test_geo_2', testGeoJson2);
 
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
 
     it('geo', function () {
-        echarts.registerMap('test1', testGeoJson1);
-        echarts.registerMap('test2', testGeoJson2);
-
+        // TODO Needs namespace
         chart.setOption({
             geo: [
                 {
@@ -142,7 +127,7 @@ describe('api/converter', function () {
                     right: 20,
                     top: 30,
                     bottom: 40,
-                    map: 'test1'
+                    map: 'converter_test_geo_1'
                 },
                 {
                     id: 'bb',
@@ -150,7 +135,7 @@ describe('api/converter', function () {
                     right: 20,
                     top: 30,
                     bottom: 40,
-                    map: 'test2'
+                    map: 'converter_test_geo_2'
                 }
             ],
             series: [
@@ -159,7 +144,7 @@ describe('api/converter', function () {
                 { // Should not be affected by map.
                     id: 'm1',
                     type: 'map',
-                    map: 'test1',
+                    map: 'converter_test_geo_1',
                     left: 10,
                     right: 20,
                     top: 30,
@@ -189,9 +174,6 @@ describe('api/converter', function () {
 
 
     it('map', function () {
-        echarts.registerMap('test1', testGeoJson1);
-        echarts.registerMap('test2', testGeoJson2);
-
         chart.setOption({
             geo: [ // Should not be affected by geo
                 {
@@ -200,14 +182,14 @@ describe('api/converter', function () {
                     right: 20,
                     top: 30,
                     bottom: 40,
-                    map: 'test1'
+                    map: 'converter_test_geo_1'
                 }
             ],
             series: [
                 {
                     id: 'k1',
                     type: 'map',
-                    map: 'test1',
+                    map: 'converter_test_geo_1',
                     left: 10,
                     right: 20,
                     top: 30,
@@ -216,7 +198,7 @@ describe('api/converter', function () {
                 {
                     id: 'k2',
                     type: 'map',
-                    map: 'test2',
+                    map: 'converter_test_geo_2',
                     left: 10,
                     right: 20,
                     top: 30,
@@ -234,12 +216,11 @@ describe('api/converter', function () {
 
 
     it('cartesian', function () {
-        echarts.registerMap('test1', testGeoJson1);
 
         chart.setOption({
             geo: [ // Should not affect grid converter.
                 {
-                    map: 'test1'
+                    map: 'converter_test_geo_1'
                 }
             ],
             grid: [
@@ -365,12 +346,10 @@ describe('api/converter', function () {
 
 
     it('graph', function () {
-        echarts.registerMap('test1', testGeoJson1);
-
         chart.setOption({
             geo: [ // Should not affect graph converter.
                 {
-                    map: 'test1'
+                    map: 'converter_test_geo_1'
                 }
             ],
             series: [
diff --git a/test/ut/spec/api/getVisual.test.js b/test/ut/spec/api/getVisual.test.js
index 34c0464..1214b06 100755
--- a/test/ut/spec/api/getVisual.test.js
+++ b/test/ut/spec/api/getVisual.test.js
@@ -18,15 +18,6 @@
 * under the License.
 */
 
-const echarts = require('../../../../lib/echarts');
-const gridComponent = require('../../../../lib/component/grid');
-const geoComponent = require('../../../../lib/component/geo');
-const polarComponent = require('../../../../lib/component/polar');
-const visuleMapComponent = require('../../../../lib/component/visualMap');
-const dataZoomComponent = require('../../../../lib/component/dataZoom');
-const pie = require('../../../../lib/chart/pie');
-const scatter = require('../../../../lib/chart/scatter');
-const graph = require('../../../../lib/chart/graph');
 const utHelper = require('../../core/utHelper');
 
 /* jshint maxlen:200 */
@@ -38,24 +29,15 @@ describe('api/getVisual', function () {
     // each of which should test visual map.
     // symbol and symbolSize should be tested.
 
-    var requireItems = [echarts, gridComponent, geoComponent, polarComponent, visuleMapComponent, dataZoomComponent, pie, scatter, graph];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
     it('scatter', function () {
-
         chart.setOption({
             xAxis: {},
             yAxis: {},
@@ -128,8 +110,6 @@ describe('api/getVisual', function () {
             ]
         });
 
-        var width = chart.getWidth();
-
         expect(chart.getVisual({dataIndex: 1}, 'color')).toEqual('#000');
 
         expect(chart.getVisual({dataIndex: 0, seriesIndex: 1}, 'color')).toEqual('#fff');
@@ -180,8 +160,6 @@ describe('api/getVisual', function () {
             ]
         });
 
-        var width = chart.getWidth();
-
         expect(chart.getVisual({dataIndex: 4, seriesId: 'k2'}, 'color')).toEqual('#ff0');
         expect(chart.getVisual({dataIndexInside: 0, seriesId: 'k2'}, 'color')).toEqual('#ff0');
         expect(chart.getVisual({dataIndex: 1, seriesId: 'k2'}, 'color')).toEqual('#eee');
diff --git a/test/ut/spec/component/graphic/setOption.test.js b/test/ut/spec/component/graphic/setOption.test.js
index c279388..870ace8 100755
--- a/test/ut/spec/component/graphic/setOption.test.js
+++ b/test/ut/spec/component/graphic/setOption.test.js
@@ -17,20 +17,10 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const echarts = require('../../../../../lib/echarts');
-const gridComponent = require('../../../../../lib/component/grid');
-const graphicComponent = require('../../../../../lib/component/graphic');
-const line = require('../../../../../lib/chart/line');
 const utHelper = require('../../../core/utHelper');
 
 describe('graphic_setOption', function () {
 
-    var requireItems = [echarts, gridComponent, graphicComponent, line];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
     var NUMBER_PRECISION = 6;
 
     function propHasAll(els, propsObjList) {
@@ -82,15 +72,13 @@ describe('graphic_setOption', function () {
 
     var imageURI = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCADfANEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZm [...]
 
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
     describe('option', function () {
@@ -266,7 +254,7 @@ describe('graphic_setOption', function () {
 
 
         it('onlyOneGraphicComponentAvailable', function () {
-            
+
 
             chart.setOption({
                 graphic: [
@@ -311,7 +299,7 @@ describe('graphic_setOption', function () {
 
 
         it('replace', function () {
-            
+
 
             chart.setOption({
                 graphic: {
@@ -412,7 +400,7 @@ describe('graphic_setOption', function () {
         }
 
         it('deleteBy$action', function () {
-            
+
 
             chart.setOption(getDeleteSourceOption());
 
@@ -432,7 +420,7 @@ describe('graphic_setOption', function () {
         });
 
         it('deleteBySetOptionNotMerge', function () {
-            
+
 
             chart.setOption(getDeleteSourceOption());
 
@@ -460,7 +448,7 @@ describe('graphic_setOption', function () {
         });
 
         it('deleteByClear', function () {
-            
+
 
             chart.setOption(getDeleteSourceOption());
 
@@ -533,7 +521,7 @@ describe('graphic_setOption', function () {
         }
 
         it('mergeTroughFlatForamt', function () {
-            
+
 
             chart.setOption({
                 graphic: [
@@ -907,7 +895,7 @@ describe('graphic_setOption', function () {
             context.height = 150;
             createResult = utHelper.createChart(context, echarts);
             chart = createResult.charts[0];
-            
+
             chart.setOption(getOption());
 
             checkLocations(chart);
@@ -1212,7 +1200,7 @@ describe('graphic_setOption', function () {
         }
 
         it('bounding', function () {
-            
+
 
             chart.setOption(getOption());
 
diff --git a/test/ut/spec/component/visualMap/setOption.test.js b/test/ut/spec/component/visualMap/setOption.test.js
index 9a9bffc..fe91478 100755
--- a/test/ut/spec/component/visualMap/setOption.test.js
+++ b/test/ut/spec/component/visualMap/setOption.test.js
@@ -17,28 +17,16 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const echarts = require('../../../../../lib/echarts');
-const gridComponent = require('../../../../../lib/component/grid');
-const scatter = require('../../../../../lib/chart/scatter');
-const visualMap = require('../../../../../lib/component/visualMap');
 const utHelper = require('../../../core/utHelper');
 
 describe('vsiaulMap_setOption', function () {
-    var requireItems = [echarts, gridComponent, scatter, visualMap];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
     it('defaultTargetController', function (done) {
@@ -241,9 +229,7 @@ describe('vsiaulMap_setOption', function () {
     });
 
     it('normalizeVisualRange', function (done) {
-        createResult = utHelper.createChart(context, echarts, 2);
-        var charts = createResult.charts;
-        charts[0].setOption({
+        chart.setOption({
             xAxis: {},
             yAxis: {},
             series: [{type: 'scatter', data: [[12, 223]]}],
@@ -259,7 +245,7 @@ describe('vsiaulMap_setOption', function () {
             ]
         });
 
-        var ecModel = charts[0].getModel();
+        var ecModel = chart.getModel();
 
         function getVisual(idx, visualType) {
             return ecModel.getComponent('visualMap', idx)
diff --git a/test/ut/spec/model/Component.test.js b/test/ut/spec/model/Component.test.js
index 37843cb..e932be7 100755
--- a/test/ut/spec/model/Component.test.js
+++ b/test/ut/spec/model/Component.test.js
@@ -19,7 +19,7 @@
 */
 const ComponentModel = require('../../../../lib/model/Component');
 
-describe('Component', function() {
+describe('Component', function () {
 
 
     describe('topologicalTravel', function () {
diff --git a/test/ut/spec/model/Global.test.js b/test/ut/spec/model/Global.test.js
index 3c4f431..63ae4f9 100755
--- a/test/ut/spec/model/Global.test.js
+++ b/test/ut/spec/model/Global.test.js
@@ -17,22 +17,10 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const echarts = require('../../../../lib/echarts');
-const gridComponent = require('../../../../lib/component/grid');
-const toolboxComponent = require('../../../../lib/component/toolbox');
-const dataZoomComponent = require('../../../../lib/component/dataZoom')
-const line = require('../../../../lib/chart/line');
-const bar = require('../../../../lib/chart/bar');
-const pie = require('../../../../lib/chart/pie');
-const utHelper = require('../../core/utHelper');
-
-describe('modelAndOptionMapping', function() {
 
-    var requireItems = [echarts, gridComponent, toolboxComponent, dataZoomComponent, line, bar, pie];
+const utHelper = require('../../core/utHelper');
 
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
+describe('modelAndOptionMapping', function () {
 
     function getData0(chart, seriesIndex) {
         return getSeries(chart, seriesIndex).getData().get('y', 0);
@@ -94,15 +82,13 @@ describe('modelAndOptionMapping', function() {
     }
 
 
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
     describe('idNoNameNo', function () {
diff --git a/test/ut/spec/model/timelineOptions.test.js b/test/ut/spec/model/timelineOptions.test.js
index f56f859..b85afab 100755
--- a/test/ut/spec/model/timelineOptions.test.js
+++ b/test/ut/spec/model/timelineOptions.test.js
@@ -17,22 +17,9 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const echarts = require('../../../../lib/echarts');
-const gridComponent = require('../../../../lib/component/grid');
-const timelineComponent = require('../../../../lib/component/timeline');
-const line = require('../../../../lib/chart/line');
-const bar = require('../../../../lib/chart/bar');
-const pie = require('../../../../lib/chart/pie');
 const utHelper = require('../../core/utHelper');
 
-describe('timelineOptions', function() {
-
-    var requireItems = [echarts, timelineComponent, gridComponent, line, bar, pie];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
+describe('timelineOptions', function () {
     function getData0(chart, seriesIndex) {
         return getSeries(chart, seriesIndex).getData().get('y', 0);
     }
@@ -41,15 +28,13 @@ describe('timelineOptions', function() {
         return chart.getModel().getComponent('series', seriesIndex);
     }
 
-    var chart = '';
-    var createResult = '';
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
     it('timeline_setOptionOnceMore_baseOption', function () {
diff --git a/test/ut/spec/scale/interval.test.js b/test/ut/spec/scale/interval.test.js
index fce22f3..e663306 100755
--- a/test/ut/spec/scale/interval.test.js
+++ b/test/ut/spec/scale/interval.test.js
@@ -18,30 +18,19 @@
 * under the License.
 */
 
-const echarts = require('../../../../lib/echarts');
 const scaleHelper = require('../../../../lib/scale/helper');
 const numberUtil = require('../../../../lib/util/number');
-const gridComponent = require('../../../../lib/component/grid');
-const line = require('../../../../lib/chart/line');
-const bar = require('../../../../lib/chart/bar');
+const IntervalScale = require('../../../../lib/scale/Interval');
 const utHelper = require('../../core/utHelper');
 
-describe('scale_interval', function() {
-    var requireItems = [echarts, scaleHelper, numberUtil, gridComponent, line, bar];
-
-    var context = utHelper.genContext({
-        requireItems: requireItems
-    });
-
-    var chart = '';
-    var createResult = '';
+describe('scale_interval', function () {
+    var chart;
     beforeEach(function () {
-        createResult = utHelper.createChart(context, echarts);
-        chart = createResult.charts[0];
+        chart = utHelper.createChart();
     });
 
     afterEach(function () {
-        utHelper.removeChart(createResult);
+        chart.dispose();
     });
 
 
@@ -121,58 +110,46 @@ describe('scale_interval', function() {
 
     describe('ticks', function () {
 
-        // testCase.createChart()('randomCover', function (scaleHelper) {
-        //     doRandomTest(scaleHelper, 10, 5);
-        // });
-
         function randomNumber(quantity) {
             return (Math.random() - 0.5) * Math.pow(10, (Math.random() - 0.5) * quantity);
         }
 
-        function check(cond) {
-            expect(cond).toEqual(true);
-            return +cond;
-        }
-
         function doSingleTest(extent, splitNumber) {
             var result = scaleHelper.intervalScaleNiceTicks(extent, splitNumber);
             var intervalPrecision = result.intervalPrecision;
             var interval = result.interval;
             var niceTickExtent = result.niceTickExtent;
 
-            var fails = [];
-
-            !check(utHelper.isValueFinite(interval)) && fails.push(0);
-            !check(utHelper.isValueFinite(intervalPrecision)) && fails.push(1);
-            !check(utHelper.isValueFinite(niceTickExtent[0])) && fails.push(2);
-            !check(utHelper.isValueFinite(niceTickExtent[1])) && fails.push(3);
-            !check(niceTickExtent[0] >= extent[0]) && fails.push(4);
-            !check(niceTickExtent[1] <= extent[1]) && fails.push(5);
-            !check(niceTickExtent[1] >= niceTickExtent[0]) && fails.push(6);
+            expect(interval).toBeFinite();
+            expect(intervalPrecision).toBeFinite();
+            expect(niceTickExtent[0]).toBeFinite();
+            expect(niceTickExtent[1]).toBeFinite();
+
+            expect(niceTickExtent[0]).toBeGeaterThanOrEqualTo(extent[0]);
+            expect(niceTickExtent[1]).not.toBeGreaterThan(extent[1]);
+            expect(niceTickExtent[1]).toBeGeaterThanOrEqualTo(niceTickExtent[1]);
+
+            var interval = new IntervalScale();
+            interval.setExtent(extent[0], extent[1]);
+            interval.niceExtent({
+                fixMin: true,
+                fixMax: true,
+                splitNumber
+            });
+            var ticks = interval.getTicks();
 
-            var ticks = scaleHelper.intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision);
-            !check(ticks.length > 0) && fails.push(7);
-            !check(ticks[0] === extent[0] && ticks[ticks.length - 1] === extent[1]) && fails.push(8);
+            expect(ticks).not.toBeEmptyArray();
+            expect(ticks[0]).toEqual(extent[0]);
+            expect(ticks[ticks.length - 1]).toEqual(extent[1]);
 
-            var ticksOK = 1;
             for (var i = 1; i < ticks.length; i++) {
-                ticksOK &= check(ticks[i - 1] < ticks[i]);
+                expect(ticks[i - 1]).not.toBeGeaterThanOrEqualTo(ticks[i]);
+
                 if (ticks[i] !== extent[0] && ticks[i] !== extent[1]) {
                     var tickPrecision = numberUtil.getPrecisionSafe(ticks[i]);
-                    ticksOK &= check(tickPrecision <= intervalPrecision);
+                    expect(tickPrecision).not.toBeGreaterThan(intervalPrecision);
                 }
             }
-            !ticksOK && fails.push(9);
-
-            // check precision rounding error ????????????
-
-            if (fails.length) {
-                print(
-                    'FAIL:[' + fails
-                    + ']  extent:[' + extent + '] niceTickExtent:[' + niceTickExtent + '] ticks:['
-                    + ticks + '] '
-                );
-            }
         }
 
         function doRandomTest(count, splitNumber, quantity) {
diff --git a/test/ut/spec/util/model.test.js b/test/ut/spec/util/model.test.js
index ccaf1dd..8decb98 100755
--- a/test/ut/spec/util/model.test.js
+++ b/test/ut/spec/util/model.test.js
@@ -20,13 +20,13 @@
 
 const modelUtil = require('../../../../lib/util/model');
 
-describe('util/model', function() {
+describe('util/model', function () {
 
 
     describe('compressBatches', function () {
 
         function item(seriesId, dataIndex) {
-            return {seriesId: seriesId, dataIndex: dataIndex};
+            return {seriesId, dataIndex};
         }
 
         it('base', function () {
diff --git a/test/ut/ut.js b/test/ut/ut.js
deleted file mode 100755
index 1107a5c..0000000
--- a/test/ut/ut.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-* 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.
-*/
-
-document.write('<script src="core/utHelper.js"><\/script>');
-
-// Specs ...
-
-document.write('<script src="spec/util/graphic.js"><\/script>');
-document.write('<script src="spec/util/model.js"><\/script>');
-document.write('<script src="spec/util/number.js"><\/script>');
-document.write('<script src="spec/util/layout.js"><\/script>');
-document.write('<script src="spec/model/Component.js"><\/script>');
-document.write('<script src="spec/model/Global.js"><\/script>');
-document.write('<script src="spec/model/timelineOptions.js"><\/script>');
-document.write('<script src="spec/api/converter.js"><\/script>');
-document.write('<script src="spec/api/containPixel.js"><\/script>');
-document.write('<script src="spec/api/getVisual.js"><\/script>');
-document.write('<script src="spec/scale/interval.js"><\/script>');
-
-document.write('<script src="spec/data/List.js"><\/script>');
-document.write('<script src="spec/data/completeDimensions.js"><\/script>');
-
-document.write('<script src="spec/component/visualMap/setOption.js"><\/script>');
-document.write('<script src="spec/component/dataZoom/helper.js"><\/script>');
-document.write('<script src="spec/component/graphic/setOption.js"><\/script>');
-document.write('<script src="spec/component/helper/sliderMove.js"><\/script>');


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org


[incubator-echarts] 02/03: fix(interval): optimize number rounding on minor ticks.

Posted by sh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch ut-ci
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git

commit c7592395da803983936d2551ffb57b7ae491fda9
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Dec 11 19:37:56 2019 +0800

    fix(interval): optimize number rounding on minor ticks.
---
 src/scale/Interval.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/scale/Interval.js b/src/scale/Interval.js
index 286d820..afe54e0 100644
--- a/src/scale/Interval.js
+++ b/src/scale/Interval.js
@@ -101,7 +101,7 @@ var IntervalScale = Scale.extend({
 
         if (extent[0] < niceTickExtent[0]) {
             if (expandToNicedExtent) {
-                ticks.push(roundNumber(niceTickExtent[0] - interval));
+                ticks.push(roundNumber(niceTickExtent[0] - interval, intervalPrecision));
             }
             else {
                 ticks.push(extent[0]);
@@ -127,7 +127,7 @@ var IntervalScale = Scale.extend({
         var lastNiceTick = ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1];
         if (extent[1] > lastNiceTick) {
             if (expandToNicedExtent) {
-                ticks.push(lastNiceTick + interval);
+                ticks.push(roundNumber(lastNiceTick + interval, intervalPrecision));
             }
             else {
                 ticks.push(extent[1]);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org