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 2020/10/15 16:48:39 UTC

[incubator-echarts] 08/08: test: update ut for 5.0.

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

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

commit c6eecfe2c6730345f9fce25b78cf4186f487dd5d
Author: 100pah <su...@gmail.com>
AuthorDate: Fri Oct 16 00:47:36 2020 +0800

    test: update ut for 5.0.
---
 test/ut/jest.config.js                          |   1 -
 test/ut/spec/model/Global.test.ts               | 239 +++++++------
 test/ut/spec/model/timelineMediaOptions.test.ts |  59 ++--
 test/ut/spec/scale/interval.test.ts             |  94 ++---
 test/ut/spec/util/graphic.test.ts               |  97 +++---
 test/ut/spec/util/layout.test.ts                |  44 ++-
 test/ut/spec/util/model.test.ts                 |  19 +-
 test/ut/spec/util/number.test.ts                | 434 +++++++++++++-----------
 8 files changed, 523 insertions(+), 464 deletions(-)

diff --git a/test/ut/jest.config.js b/test/ut/jest.config.js
index a5fc425..8e61d79 100644
--- a/test/ut/jest.config.js
+++ b/test/ut/jest.config.js
@@ -39,7 +39,6 @@ module.exports = {
         '**/spec/model/*.test.ts',
         '**/spec/scale/*.test.ts',
         '**/spec/util/*.test.ts',
-        '!**/spec/api/containPixel.test.ts',
         '!**/spec/component/graphic/setOption.test.ts'
     ]
 };
diff --git a/test/ut/spec/model/Global.test.ts b/test/ut/spec/model/Global.test.ts
index 63ae4f9..399f653 100755
--- a/test/ut/spec/model/Global.test.ts
+++ b/test/ut/spec/model/Global.test.ts
@@ -18,45 +18,60 @@
 * under the License.
 */
 
-const utHelper = require('../../core/utHelper');
+import { EChartsType } from '../../../../src/echarts';
+import { createChart } from '../../core/utHelper';
+import { ComponentMainType, ParsedValue } from '../../../../src/util/types';
+import SeriesModel from '../../../../src/model/Series';
+import ComponentModel from '../../../../src/model/Component';
+import ChartView from '../../../../src/view/Chart';
+import { EChartsFullOption } from '../../../../src/option';
+
+type OriginModelView = {
+    model: SeriesModel;
+    view: ChartView;
+};
+
 
 describe('modelAndOptionMapping', function () {
 
-    function getData0(chart, seriesIndex) {
+    function getData0(chart: EChartsType, seriesIndex: number): ParsedValue {
         return getSeries(chart, seriesIndex).getData().get('y', 0);
     }
 
-    function getSeries(chart, seriesIndex) {
-        return chart.getModel().getComponent('series', seriesIndex);
+    function getSeries(chart: EChartsType, seriesIndex: number): SeriesModel {
+        return chart.getModel().getComponent('series', seriesIndex) as SeriesModel;
     }
 
-    function getModel(chart, type, index) {
+    function getModel(chart: EChartsType, type: ComponentMainType, index: number): ComponentModel {
         return chart.getModel().getComponent(type, index);
     }
 
-    function countSeries(chart) {
+    function countSeries(chart: EChartsType): number {
         return countModel(chart, 'series');
     }
 
-    function countModel(chart, type) {
+    function countModel(chart: EChartsType, type: ComponentMainType): number {
         // FIXME
         // access private
+        // @ts-ignore
         return chart.getModel()._componentsMap.get(type).length;
     }
 
-    function getChartView(chart, series) {
+    function getChartView(chart: EChartsType, series: SeriesModel): ChartView {
+        // @ts-ignore
         return chart._chartsMap[series.__viewId];
     }
 
-    function countChartViews(chart) {
+    function countChartViews(chart: EChartsType): number {
+        // @ts-ignore
         return chart._chartsViews.length;
     }
 
-    function saveOrigins(chart) {
-        var count = countSeries(chart);
-        var origins = [];
-        for (var i = 0; i < count; i++) {
-            var series = getSeries(chart, i);
+    function saveOrigins(chart: EChartsType): OriginModelView[] {
+        const count = countSeries(chart);
+        const origins = [];
+        for (let i = 0; i < count; i++) {
+            const series = getSeries(chart, i);
             origins.push({
                 model: series,
                 view: getChartView(chart, series)
@@ -65,16 +80,26 @@ describe('modelAndOptionMapping', function () {
         return origins;
     }
 
-    function modelEqualsToOrigin(chart, idxList, origins, boolResult) {
-        for (var i = 0; i < idxList.length; i++) {
-            var idx = idxList[i];
+    function modelEqualsToOrigin(
+        chart: EChartsType,
+        idxList: number[],
+        origins: OriginModelView[],
+        boolResult: boolean
+    ): void {
+        for (let i = 0; i < idxList.length; i++) {
+            const idx = idxList[i];
             expect(origins[idx].model === getSeries(chart, idx)).toEqual(boolResult);
         }
     }
 
-    function viewEqualsToOrigin(chart, idxList, origins, boolResult) {
-        for (var i = 0; i < idxList.length; i++) {
-            var idx = idxList[i];
+    function viewEqualsToOrigin(
+        chart: EChartsType,
+        idxList: number[],
+        origins: OriginModelView[],
+        boolResult: boolean
+    ): void {
+        for (let i = 0; i < idxList.length; i++) {
+            const idx = idxList[i];
             expect(
                 origins[idx].view === getChartView(chart, getSeries(chart, idx))
             ).toEqual(boolResult);
@@ -82,9 +107,9 @@ describe('modelAndOptionMapping', function () {
     }
 
 
-    var chart;
+    let chart: EChartsType;
     beforeEach(function () {
-        chart = utHelper.createChart();
+        chart = createChart();
     });
 
     afterEach(function () {
@@ -94,7 +119,7 @@ describe('modelAndOptionMapping', function () {
     describe('idNoNameNo', function () {
 
         it('sameTypeNotMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -106,7 +131,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             // Not merge
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption(option, true);
             expect(countChartViews(chart)).toEqual(3);
             expect(countSeries(chart)).toEqual(3);
@@ -115,7 +140,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMergeFull', function () {
-            var option = {
+            chart.setOption({
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -123,11 +148,10 @@ describe('modelAndOptionMapping', function () {
                     {type: 'line', data: [22]},
                     {type: 'line', data: [33]}
                 ]
-            };
-            chart.setOption(option);
+            });
 
             // Merge
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption({
                 series: [
                     {type: 'line', data: [111]},
@@ -146,7 +170,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMergePartial', function () {
-            var option = {
+            chart.setOption({
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -154,11 +178,10 @@ describe('modelAndOptionMapping', function () {
                     {type: 'line', data: [22]},
                     {type: 'line', data: [33]}
                 ]
-            };
-            chart.setOption(option);
+            });
 
             // Merge
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption({
                 series: [
                     {data: [22222]}
@@ -175,7 +198,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMerge', function () {
-            var option = {
+            chart.setOption({
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -183,11 +206,10 @@ describe('modelAndOptionMapping', function () {
                     {type: 'line', data: [22]},
                     {type: 'line', data: [33]}
                 ]
-            };
-            chart.setOption(option);
+            });
 
             // Merge
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption({
                 series: [
                     {type: 'line', data: [111]},
@@ -217,7 +239,7 @@ describe('modelAndOptionMapping', function () {
     describe('idSpecified', function () {
 
         it('sameTypeNotMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -238,7 +260,7 @@ describe('modelAndOptionMapping', function () {
             expect(getData0(chart, 3)).toEqual(44);
             expect(getData0(chart, 4)).toEqual(55);
 
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption(option, true);
             expect(countChartViews(chart)).toEqual(5);
             expect(countSeries(chart)).toEqual(5);
@@ -248,7 +270,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -261,7 +283,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption(option);
             expect(countChartViews(chart)).toEqual(5);
             expect(countSeries(chart)).toEqual(5);
@@ -271,7 +293,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeNotMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -284,8 +306,8 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
-            var option2 = {
+            const origins = saveOrigins(chart);
+            const option2: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -306,7 +328,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergeFull', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -319,8 +341,8 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
-            var option2 = {
+            const origins = saveOrigins(chart);
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'line', data: [11]},
                     {type: 'bar', data: [22], id: 20, name: 'a'},
@@ -340,7 +362,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartial1', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -353,8 +375,8 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
-            var option2 = {
+            const origins = saveOrigins(chart);
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -377,7 +399,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartial2', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -387,7 +409,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var option2 = {
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -407,7 +429,7 @@ describe('modelAndOptionMapping', function () {
 
 
         it('mergePartialDoNotMapToOtherId', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -417,7 +439,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var option2 = {
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40}
                 ]
@@ -433,7 +455,7 @@ describe('modelAndOptionMapping', function () {
 
 
         it('idDuplicate', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -451,7 +473,7 @@ describe('modelAndOptionMapping', function () {
 
         it('nameTheSameButIdNotTheSame', function () {
 
-            var option = {
+            const option = {
                 grid: {},
                 xAxis: [
                     {id: 'x1', name: 'a', xxxx: 'x1_a'},
@@ -462,13 +484,16 @@ describe('modelAndOptionMapping', function () {
 
             chart.setOption(option);
 
-            var xAxisModel0 = getModel(chart, 'xAxis', 0);
-            var xAxisModel1 = getModel(chart, 'xAxis', 1);
-            expect(xAxisModel0.option.xxxx).toEqual('x1_a');
-            expect(xAxisModel1.option.xxxx).toEqual('x2_b');
+            let xAxisModel0;
+            let xAxisModel1;
+
+            xAxisModel0 = getModel(chart, 'xAxis', 0);
+            xAxisModel1 = getModel(chart, 'xAxis', 1);
+            expect((xAxisModel0.option as any).xxxx).toEqual('x1_a');
+            expect((xAxisModel1.option as any).xxxx).toEqual('x2_b');
             expect(xAxisModel1.option.name).toEqual('b');
 
-            var option2 = {
+            const option2 = {
                 xAxis: [
                     {id: 'k1', name: 'a', xxxx: 'k1_a'},
                     {id: 'x2', name: 'a', xxxx: 'x2_a'}
@@ -476,13 +501,13 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option2);
 
-            var xAxisModel0 = getModel(chart, 'xAxis', 0);
-            var xAxisModel1 = getModel(chart, 'xAxis', 1);
-            var xAxisModel2 = getModel(chart, 'xAxis', 2);
-            expect(xAxisModel0.option.xxxx).toEqual('x1_a');
-            expect(xAxisModel1.option.xxxx).toEqual('x2_a');
+            xAxisModel0 = getModel(chart, 'xAxis', 0);
+            xAxisModel1 = getModel(chart, 'xAxis', 1);
+            const xAxisModel2 = getModel(chart, 'xAxis', 2);
+            expect((xAxisModel0.option as any).xxxx).toEqual('x1_a');
+            expect((xAxisModel1.option as any).xxxx).toEqual('x2_a');
             expect(xAxisModel1.option.name).toEqual('a');
-            expect(xAxisModel2.option.xxxx).toEqual('k1_a');
+            expect((xAxisModel2.option as any).xxxx).toEqual('k1_a');
         });
 
     });
@@ -499,7 +524,7 @@ describe('modelAndOptionMapping', function () {
     describe('noIdButNameExists', function () {
 
         it('sameTypeNotMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -523,7 +548,7 @@ describe('modelAndOptionMapping', function () {
             expect(getData0(chart, 3)).toEqual(44);
             expect(getData0(chart, 4)).toEqual(55);
 
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption(option, true);
             expect(countChartViews(chart)).toEqual(5);
             expect(countSeries(chart)).toEqual(5);
@@ -533,7 +558,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -546,7 +571,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
+            const origins = saveOrigins(chart);
             chart.setOption(option);
             expect(countChartViews(chart)).toEqual(5);
             expect(countSeries(chart)).toEqual(5);
@@ -556,7 +581,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeNotMerge', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -569,8 +594,8 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
-            var option2 = {
+            const origins = saveOrigins(chart);
+            const option2: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -591,7 +616,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartialOneMapTwo', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -604,8 +629,8 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var origins = saveOrigins(chart);
-            var option2 = {
+            const origins = saveOrigins(chart);
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -629,7 +654,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartialTwoMapOne', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -639,7 +664,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var option2 = {
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], name: 'a'},
                     {type: 'line', data: [333]},
@@ -659,7 +684,7 @@ describe('modelAndOptionMapping', function () {
 
         it('mergePartialCanMapToOtherName', function () {
             // Consider case: axis.name = 'some label', which can be overwritten.
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -669,7 +694,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            var option2 = {
+            const option2: EChartsFullOption = {
                 series: [
                     {type: 'bar', data: [444], name: 40},
                     {type: 'bar', data: [999], name: 40},
@@ -695,24 +720,22 @@ describe('modelAndOptionMapping', function () {
     describe('ohters', function () {
 
         it('aBugCase', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 series: [
                     {
                         type: 'pie',
                         radius: ['20%', '25%'],
                         center: ['20%', '20%'],
                         avoidLabelOverlap: true,
-                        hoverAnimation: false,
                         label: {
-                            normal: {
-                                show: true,
-                                position: 'center',
-                                textStyle: {
-                                    fontSize: '30',
-                                    fontWeight: 'bold'
-                                }
-                            },
-                            emphasis: {
+                            show: true,
+                            position: 'center',
+                            fontSize: '30',
+                            fontWeight: 'bold'
+                        },
+                        emphasis: {
+                            scale: false,
+                            label: {
                                 show: true
                             }
                         },
@@ -732,16 +755,11 @@ describe('modelAndOptionMapping', function () {
                         radius: ['20%', '25%'],
                         center: ['20%', '20%'],
                         avoidLabelOverlap: true,
-                        hoverAnimation: false,
                         label: {
-                            normal: {
-                                show: true,
-                                position: 'center',
-                                textStyle: {
-                                    fontSize: '30',
-                                    fontWeight: 'bold'
-                                }
-                            }
+                            show: true,
+                            position: 'center',
+                            fontSize: '30',
+                            fontWeight: 'bold'
                         },
                         data: [
                             {value: 135, name: '视频广告'},
@@ -753,16 +771,11 @@ describe('modelAndOptionMapping', function () {
                         radius: ['20%', '25%'],
                         center: ['60%', '20%'],
                         avoidLabelOverlap: true,
-                        hoverAnimation: false,
                         label: {
-                            normal: {
-                                show: true,
-                                position: 'center',
-                                textStyle: {
-                                    fontSize: '30',
-                                    fontWeight: 'bold'
-                                }
-                            }
+                            show: true,
+                            position: 'center',
+                            fontSize: '30',
+                            fontWeight: 'bold'
                         },
                         data: [
                             {value: 135, name: '视频广告'},
@@ -777,7 +790,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('color', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 backgroundColor: 'rgba(1,1,1,1)',
                 xAxis: {data: ['a']},
                 yAxis: {},
@@ -788,18 +801,18 @@ describe('modelAndOptionMapping', function () {
                 ]
             };
             chart.setOption(option);
-            expect(chart._model.option.backgroundColor).toEqual('rgba(1,1,1,1)');
+            expect(chart.getModel().option.backgroundColor).toEqual('rgba(1,1,1,1)');
 
             // Not merge
             chart.setOption({
                 backgroundColor: '#fff'
             }, true);
 
-            expect(chart._model.option.backgroundColor).toEqual('#fff');
+            expect(chart.getModel().option.backgroundColor).toEqual('#fff');
         });
 
         it('innerId', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 toolbox: {
diff --git a/test/ut/spec/model/timelineMediaOptions.test.ts b/test/ut/spec/model/timelineMediaOptions.test.ts
index 07db6bf..2751a14 100755
--- a/test/ut/spec/model/timelineMediaOptions.test.ts
+++ b/test/ut/spec/model/timelineMediaOptions.test.ts
@@ -17,26 +17,37 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const utHelper = require('../../core/utHelper');
+
+import { EChartsType } from '../../../../src/echarts';
+import SeriesModel from '../../../../src/model/Series';
+import { ParsedValue } from '../../../../src/util/types';
+import { LegendOption } from '../../../../src/component/legend/LegendModel';
+import TimelineModel from '../../../../src/component/timeline/TimelineModel';
+import { createChart } from '../../core/utHelper';
+import { EChartsFullOption } from '../../../../src/option';
+
 
 describe('timelineMediaOptions', function () {
 
-    function getData0(chart, seriesIndex) {
+    function getData0(chart: EChartsType, seriesIndex: number): ParsedValue {
         return getSeries(chart, seriesIndex).getData().get('y', 0);
     }
-    function getSeries(chart, seriesIndex) {
-        return chart.getModel().getComponent('series', seriesIndex);
+    function getSeries(chart: EChartsType, seriesIndex: number): SeriesModel {
+        return chart.getModel().getComponent('series', seriesIndex) as SeriesModel;
     }
-    function getLegendOption(chart) {
+    function getLegendOption(chart: EChartsType): LegendOption {
         return chart.getModel().getComponent('legend', 0).option;
     }
-    function getTimelineComponent(chart) {
-        return chart.getModel().getComponent('timeline', 0);
+    function getTimelineComponent(chart: EChartsType): TimelineModel {
+        return chart.getModel().getComponent('timeline', 0) as TimelineModel;
     }
 
-    var chart;
+    let chart: EChartsType;
     beforeEach(function () {
-        chart = utHelper.createChart(10, 10);
+        chart = createChart({
+            width: 10,
+            height: 10
+        });
     });
 
     afterEach(function () {
@@ -49,7 +60,7 @@ describe('timelineMediaOptions', function () {
     describe('parse_timeline_media_option', function () {
 
         it('parse_media_has_baseOption_has_default', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 baseOption: {
                     xAxis: { data: ['a'] },
                     yAxis: {},
@@ -77,7 +88,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_media_no_baseOption_has_default', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: { data: ['a'] },
                 yAxis: {},
                 legend: { left: 10 },
@@ -101,7 +112,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_media_no_baseOption_no_default', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 xAxis: { data: ['a'] },
                 yAxis: {},
                 legend: { left: 10 },
@@ -121,7 +132,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_media_has_baseOption', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 baseOption: {
                     timeline: { axisType: 'category' },
                     xAxis: { data: ['a'] },
@@ -161,7 +172,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_media_no_baseOption', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 timeline: { axisType: 'category' },
                 xAxis: { data: ['a'] },
                 yAxis: {},
@@ -197,7 +208,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_has_baseOption', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 baseOption: {
                     timeline: { axisType: 'category' },
                     xAxis: { data: ['a'] },
@@ -221,7 +232,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_has_baseOption_compat', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 timeline: { axisType: 'category' },
                 baseOption: {
                     xAxis: { data: ['a'] },
@@ -245,7 +256,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_has_baseOption_compat', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 timeline: { axisType: 'category' },
                 baseOption: {
                     xAxis: { data: ['a'] },
@@ -269,7 +280,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_no_baseOption', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 timeline: { axisType: 'category' },
                 xAxis: { data: ['a'] },
                 yAxis: {},
@@ -299,7 +310,7 @@ describe('timelineMediaOptions', function () {
     describe('timeline_onceMore', function () {
 
         it('timeline_setOptionOnceMore_baseOption', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 baseOption: {
                     timeline: {
                         axisType: 'category',
@@ -347,7 +358,7 @@ describe('timelineMediaOptions', function () {
 
 
         it('timeline_setOptionOnceMore_substitudeTimelineOptions', function () {
-            var option = {
+            const option: EChartsFullOption = {
                 baseOption: {
                     timeline: {
                         axisType: 'category',
@@ -377,7 +388,7 @@ describe('timelineMediaOptions', function () {
             };
             chart.setOption(option);
 
-            var ecModel = chart.getModel();
+            let ecModel = chart.getModel();
             expect(getData0(chart, 0)).toEqual(1111);
             expect(getData0(chart, 1)).toEqual(2222);
 
@@ -399,9 +410,9 @@ describe('timelineMediaOptions', function () {
                 }]
             });
 
-            var ecModel = chart.getModel();
-            var option = ecModel.getOption();
-            expect(option.backgroundColor).toEqual('#987654');
+            ecModel = chart.getModel();
+            const optionGotten = ecModel.getOption();
+            expect(optionGotten.backgroundColor).toEqual('#987654');
             expect(getData0(chart, 0)).toEqual(1111);
             expect(getData0(chart, 1)).toEqual(2222);
 
diff --git a/test/ut/spec/scale/interval.test.ts b/test/ut/spec/scale/interval.test.ts
index e663306..c151ad0 100755
--- a/test/ut/spec/scale/interval.test.ts
+++ b/test/ut/spec/scale/interval.test.ts
@@ -18,15 +18,19 @@
 * under the License.
 */
 
-const scaleHelper = require('../../../../lib/scale/helper');
-const numberUtil = require('../../../../lib/util/number');
-const IntervalScale = require('../../../../lib/scale/Interval');
-const utHelper = require('../../core/utHelper');
+import { createChart, isValueFinite } from '../../core/utHelper';
+import { EChartsType } from '../../../../src/echarts';
+import CartesianAxisModel from '../../../../src/coord/cartesian/AxisModel';
+import IntervalScale from '../../../../src/scale/Interval';
+import { intervalScaleNiceTicks } from '../../../../src/scale/helper';
+import { getPrecisionSafe } from '../../../../src/util/number';
+
 
 describe('scale_interval', function () {
-    var chart;
+
+    let chart: EChartsType;
     beforeEach(function () {
-        chart = utHelper.createChart();
+        chart = createChart();
     });
 
     afterEach(function () {
@@ -37,9 +41,9 @@ describe('scale_interval', function () {
     describe('extreme', function () {
         it('ticks_min_max', function () {
 
-            var min = 0;
-            var max = 54.090909;
-            var splitNumber = 5;
+            const min = 0;
+            const max = 54.090909;
+            const splitNumber = 5;
 
             chart.setOption({
                 xAxis: {},
@@ -53,12 +57,12 @@ describe('scale_interval', function () {
                 series: [{type: 'line', data: []}]
             });
 
-            var yAxis = chart.getModel().getComponent('yAxis', 0);
-            var scale = yAxis.axis.scale;
-            var ticks = scale.getTicks();
+            const yAxis = chart.getModel().getComponent('yAxis', 0) as CartesianAxisModel;
+            const scale = yAxis.axis.scale;
+            const ticks = scale.getTicks();
 
-            expect(ticks[0]).toEqual(min);
-            expect(ticks[ticks.length - 1]).toEqual(max);
+            expect(ticks[0].value).toEqual(min);
+            expect(ticks[ticks.length - 1].value).toEqual(max);
         });
 
         it('ticks_small_value', function () {
@@ -87,16 +91,16 @@ describe('scale_interval', function () {
                 ]
             });
 
-            var yAxis = chart.getModel().getComponent('yAxis', 0);
-            var scale = yAxis.axis.scale;
-            var ticks = scale.getTicks();
-            var labels = yAxis.axis.getViewLabels().map(function (item) {
+            const yAxis = chart.getModel().getComponent('yAxis', 0) as CartesianAxisModel;
+            const scale = yAxis.axis.scale as IntervalScale;
+            const ticks = scale.getTicks();
+            const labels = yAxis.axis.getViewLabels().map(function (item) {
                 return item.formattedLabel;
             });
 
-            var labelPrecisioned = scale.getLabel(0.0000005, {precision: 10});
+            const labelPrecisioned = scale.getLabel({ value: 0.0000005 }, { precision: 10 });
 
-            expect(ticks).toEqual(
+            expect(ticks.map(tick => tick.value)).toEqual(
                 [0, 0.0000005, 0.000001, 0.0000015, 0.000002, 0.0000025, 0.000003, 0.0000035]
             );
             expect(labels).toEqual(
@@ -110,51 +114,51 @@ describe('scale_interval', function () {
 
     describe('ticks', function () {
 
-        function randomNumber(quantity) {
+        function randomNumber(quantity: number): number {
             return (Math.random() - 0.5) * Math.pow(10, (Math.random() - 0.5) * quantity);
         }
 
-        function doSingleTest(extent, splitNumber) {
-            var result = scaleHelper.intervalScaleNiceTicks(extent, splitNumber);
-            var intervalPrecision = result.intervalPrecision;
-            var interval = result.interval;
-            var niceTickExtent = result.niceTickExtent;
+        function doSingleTest(extent: [number, number], splitNumber: number): void {
+            const result = intervalScaleNiceTicks(extent, splitNumber);
+            const intervalPrecision = result.intervalPrecision;
+            const resultInterval = result.interval;
+            const niceTickExtent = result.niceTickExtent;
 
-            expect(interval).toBeFinite();
-            expect(intervalPrecision).toBeFinite();
-            expect(niceTickExtent[0]).toBeFinite();
-            expect(niceTickExtent[1]).toBeFinite();
+            expect(isValueFinite(resultInterval)).toEqual(true);
+            expect(isValueFinite(intervalPrecision)).toEqual(true);
+            expect(isValueFinite(niceTickExtent[0])).toEqual(true);
+            expect(isValueFinite(niceTickExtent[1])).toEqual(true);
 
-            expect(niceTickExtent[0]).toBeGeaterThanOrEqualTo(extent[0]);
+            expect(niceTickExtent[0]).toBeGreaterThanOrEqual(extent[0]);
             expect(niceTickExtent[1]).not.toBeGreaterThan(extent[1]);
-            expect(niceTickExtent[1]).toBeGeaterThanOrEqualTo(niceTickExtent[1]);
+            expect(niceTickExtent[1]).toBeGreaterThanOrEqual(niceTickExtent[1]);
 
-            var interval = new IntervalScale();
+            const interval = new IntervalScale();
             interval.setExtent(extent[0], extent[1]);
             interval.niceExtent({
                 fixMin: true,
                 fixMax: true,
                 splitNumber
             });
-            var ticks = interval.getTicks();
+            const ticks = interval.getTicks();
 
-            expect(ticks).not.toBeEmptyArray();
-            expect(ticks[0]).toEqual(extent[0]);
-            expect(ticks[ticks.length - 1]).toEqual(extent[1]);
+            expect(ticks.length > 0);
+            expect(ticks[0].value).toEqual(extent[0]);
+            expect(ticks[ticks.length - 1].value).toEqual(extent[1]);
 
-            for (var i = 1; i < ticks.length; i++) {
-                expect(ticks[i - 1]).not.toBeGeaterThanOrEqualTo(ticks[i]);
+            for (let i = 1; i < ticks.length; i++) {
+                expect(ticks[i - 1].value).not.toBeGreaterThanOrEqual(ticks[i].value);
 
-                if (ticks[i] !== extent[0] && ticks[i] !== extent[1]) {
-                    var tickPrecision = numberUtil.getPrecisionSafe(ticks[i]);
+                if (ticks[i].value !== extent[0] && ticks[i].value !== extent[1]) {
+                    const tickPrecision = getPrecisionSafe(ticks[i].value);
                     expect(tickPrecision).not.toBeGreaterThan(intervalPrecision);
                 }
             }
         }
 
-        function doRandomTest(count, splitNumber, quantity) {
-            for (var i = 0; i < count; i++) {
-                var extent = [];
+        function doRandomTest(count: number, splitNumber: number, quantity: number): void {
+            for (let i = 0; i < count; i++) {
+                const extent: number[] = [];
                 extent[0] = randomNumber(quantity);
                 extent[1] = extent[0] + randomNumber(quantity);
                 if (extent[1] === extent[0]) {
@@ -163,7 +167,7 @@ describe('scale_interval', function () {
                 if (extent[0] > extent[1]) {
                     extent.reverse();
                 }
-                doSingleTest(extent, splitNumber);
+                doSingleTest(extent as [number, number], splitNumber);
             }
         }
 
diff --git a/test/ut/spec/util/graphic.test.ts b/test/ut/spec/util/graphic.test.ts
index d68df34..5a3b196 100755
--- a/test/ut/spec/util/graphic.test.ts
+++ b/test/ut/spec/util/graphic.test.ts
@@ -18,67 +18,70 @@
 * under the License.
 */
 
-const graphic = require('../../../../lib/util/graphic');
+import {
+    subPixelOptimize, subPixelOptimizeLine, subPixelOptimizeRect
+} from 'zrender/src/graphic/helper/subPixelOptimize';
+import { lineLineIntersect } from '../../../../src/util/graphic';
+
 
 describe('util/graphic', function () {
 
     describe('subPixelOptimize', function () {
 
-        it('subPixelOptimize_base', function (done) {
-            expect(graphic.subPixelOptimize(5, 1)).toEqual(4.5);
-            expect(graphic.subPixelOptimize(5, 2)).toEqual(5);
-            expect(graphic.subPixelOptimize(5, 43)).toEqual(4.5);
-            expect(graphic.subPixelOptimize(7.5, 1)).toEqual(7.5);
-            expect(graphic.subPixelOptimize(7.5, 2)).toEqual(7);
-            expect(graphic.subPixelOptimize(14, 1, true)).toEqual(14.5);
-            expect(graphic.subPixelOptimize(14, 2, true)).toEqual(14);
-            expect(graphic.subPixelOptimize(-11, 1)).toEqual(-11.5);
-            expect(graphic.subPixelOptimize(-11, 2)).toEqual(-11);
-            expect(graphic.subPixelOptimize(0, 2)).toEqual(0);
-            expect(graphic.subPixelOptimize(0, 1)).toEqual(-0.5);
-            expect(graphic.subPixelOptimize(5, 0)).toEqual(5);
-            done();
+        it('subPixelOptimize_base', function () {
+            expect(subPixelOptimize(5, 1)).toEqual(4.5);
+            expect(subPixelOptimize(5, 2)).toEqual(5);
+            expect(subPixelOptimize(5, 43)).toEqual(4.5);
+            expect(subPixelOptimize(7.5, 1)).toEqual(7.5);
+            expect(subPixelOptimize(7.5, 2)).toEqual(7);
+            expect(subPixelOptimize(14, 1, true)).toEqual(14.5);
+            expect(subPixelOptimize(14, 2, true)).toEqual(14);
+            expect(subPixelOptimize(-11, 1)).toEqual(-11.5);
+            expect(subPixelOptimize(-11, 2)).toEqual(-11);
+            expect(subPixelOptimize(0, 2)).toEqual(0);
+            expect(subPixelOptimize(0, 1)).toEqual(-0.5);
+            expect(subPixelOptimize(5, 0)).toEqual(5);
         });
 
-        it('subPixelOptimize_line', function (done) {
-            function doSubPixelOptimizeLine(x, y, width, height, lineWidth) {
-                return graphic.subPixelOptimizeLine(makeParam(x, y, width, height, lineWidth));
+        it('subPixelOptimize_line', function () {
+            function doSubPixelOptimizeLine(x: number, y: number, width: number, height: number, lineWidth: number) {
+                const params = makeParam(x, y, width, height, lineWidth);
+                return subPixelOptimizeLine(params.shape, params.shape, params.style);
             }
-            function makeParam(x1, y1, x2, y2, lineWidth) {
+            function makeParam(x1: number, y1: number, x2: number, y2: number, lineWidth: number) {
                 return {
                     shape: {x1: x1, y1: y1, x2: x2, y2: y2},
                     style: {lineWidth: lineWidth}
                 };
             }
-            expect(doSubPixelOptimizeLine(5, 11, 3, 7, 1)).toEqual(makeParam(5, 11, 3, 7, 1));
-            expect(doSubPixelOptimizeLine(5, 11, 5, 7, 1)).toEqual(makeParam(5.5, 11, 5.5, 7, 1));
-            expect(doSubPixelOptimizeLine(5, 11, 5, 7, 2)).toEqual(makeParam(5, 11, 5, 7, 2));
-            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 1)).toEqual(makeParam(5, 11.5, 15, 11.5, 1));
-            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 2)).toEqual(makeParam(5, 11, 15, 11, 2));
-            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 3)).toEqual(makeParam(5, 11.5, 15, 11.5, 3));
-            expect(doSubPixelOptimizeLine(5, 11, 15, 11.5, 3)).toEqual(makeParam(5, 11, 15, 11.5, 3));
-            expect(doSubPixelOptimizeLine(5, 11.5, 15, 11.5, 3)).toEqual(makeParam(5, 11.5, 15, 11.5, 3));
-            expect(doSubPixelOptimizeLine(5, 11.5, 15, 11.5, 4)).toEqual(makeParam(5, 12, 15, 12, 4));
-            done();
+            expect(doSubPixelOptimizeLine(5, 11, 3, 7, 1)).toEqual(makeParam(5, 11, 3, 7, 1).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 5, 7, 1)).toEqual(makeParam(5.5, 11, 5.5, 7, 1).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 5, 7, 2)).toEqual(makeParam(5, 11, 5, 7, 2).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 1)).toEqual(makeParam(5, 11.5, 15, 11.5, 1).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 2)).toEqual(makeParam(5, 11, 15, 11, 2).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 15, 11, 3)).toEqual(makeParam(5, 11.5, 15, 11.5, 3).shape);
+            expect(doSubPixelOptimizeLine(5, 11, 15, 11.5, 3)).toEqual(makeParam(5, 11, 15, 11.5, 3).shape);
+            expect(doSubPixelOptimizeLine(5, 11.5, 15, 11.5, 3)).toEqual(makeParam(5, 11.5, 15, 11.5, 3).shape);
+            expect(doSubPixelOptimizeLine(5, 11.5, 15, 11.5, 4)).toEqual(makeParam(5, 12, 15, 12, 4).shape);
         });
 
-        it('subPixelOptimize_rect', function (done) {
-            function doSubPixelOptimizeRect(x, y, width, height, lineWidth) {
-                return graphic.subPixelOptimizeRect(makeParam(x, y, width, height, lineWidth));
+        it('subPixelOptimize_rect', function () {
+            function doSubPixelOptimizeRect(x: number, y: number, width: number, height: number, lineWidth: number) {
+                const params = makeParam(x, y, width, height, lineWidth);
+                return subPixelOptimizeRect(params.shape, params.shape, params.style);
             }
-            function makeParam(x, y, width, height, lineWidth) {
+            function makeParam(x: number, y: number, width: number, height: number, lineWidth: number) {
                 return {
                     shape: {x: x, y: y, width: width, height: height},
                     style: {lineWidth: lineWidth}
                 };
             }
-            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 1)).toEqual(makeParam(5.5, 11.5, 2, 6, 1));
-            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 2)).toEqual(makeParam(5, 11, 3, 7, 2));
-            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 3)).toEqual(makeParam(5.5, 11.5, 2, 6, 3));
+            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 1)).toEqual(makeParam(5.5, 11.5, 2, 6, 1).shape);
+            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 2)).toEqual(makeParam(5, 11, 3, 7, 2).shape);
+            expect(doSubPixelOptimizeRect(5, 11, 3, 7, 3)).toEqual(makeParam(5.5, 11.5, 2, 6, 3).shape);
             // Boundary value tests
-            expect(doSubPixelOptimizeRect(5, 11, 1, 7, 1)).toEqual(makeParam(5.5, 11.5, 1, 6, 1));
-            expect(doSubPixelOptimizeRect(5, 11, 1, 0, 1)).toEqual(makeParam(5.5, 11.5, 1, 0, 1));
-            done();
+            expect(doSubPixelOptimizeRect(5, 11, 1, 7, 1)).toEqual(makeParam(5.5, 11.5, 1, 6, 1).shape);
+            expect(doSubPixelOptimizeRect(5, 11, 1, 0, 1)).toEqual(makeParam(5.5, 11.5, 1, 0, 1).shape);
         });
 
     });
@@ -86,20 +89,20 @@ describe('util/graphic', function () {
     describe('lineLineIntersect', function () {
 
         it('extreme', function () {
-            expect(graphic.lineLineIntersect(10, 10, 30, 30, 10, 10, 10, 10)).toEqual(false);
+            expect(lineLineIntersect(10, 10, 30, 30, 10, 10, 10, 10)).toEqual(false);
         });
 
         it('parallel and colinear', function () {
-            expect(graphic.lineLineIntersect(10, 20, 30, 40, 100, 220, 120, 240)).toEqual(false);
-            expect(graphic.lineLineIntersect(10, 10, 30, 30, 40, 40, 50, 50)).toEqual(false);
-            expect(graphic.lineLineIntersect(10, 10, 30, 30, 10, 10, 30, 30)).toEqual(false);
-            expect(graphic.lineLineIntersect(10, 10, 30, 30, 20, 20, 30, 30)).toEqual(false);
-            expect(graphic.lineLineIntersect(10, 10, 30, 30, 20, 20, 22, 22)).toEqual(false);
+            expect(lineLineIntersect(10, 20, 30, 40, 100, 220, 120, 240)).toEqual(false);
+            expect(lineLineIntersect(10, 10, 30, 30, 40, 40, 50, 50)).toEqual(false);
+            expect(lineLineIntersect(10, 10, 30, 30, 10, 10, 30, 30)).toEqual(false);
+            expect(lineLineIntersect(10, 10, 30, 30, 20, 20, 30, 30)).toEqual(false);
+            expect(lineLineIntersect(10, 10, 30, 30, 20, 20, 22, 22)).toEqual(false);
         });
 
         it('intersect', function () {
-            expect(graphic.lineLineIntersect(10, 20, 30, 40, 12, 20, 30, 40)).toEqual(true);
-            expect(graphic.lineLineIntersect(10, 20, 30, 40, 12, 20, 20, 42)).toEqual(true);
+            expect(lineLineIntersect(10, 20, 30, 40, 12, 20, 30, 40)).toEqual(true);
+            expect(lineLineIntersect(10, 20, 30, 40, 12, 20, 20, 42)).toEqual(true);
         });
     });
 
diff --git a/test/ut/spec/util/layout.test.ts b/test/ut/spec/util/layout.test.ts
index 46ab3d2..4c43ceb 100644
--- a/test/ut/spec/util/layout.test.ts
+++ b/test/ut/spec/util/layout.test.ts
@@ -17,22 +17,25 @@
 * specific language governing permissions and limitations
 * under the License.
 */
-const layoutUtil = require('../../../../lib/util/layout');
+
+// import { Dictionary } from 'zrender/src/core/types';
+import { mergeLayoutParam } from '../../../../src/util/layout';
+import { BoxLayoutOptionMixin } from '../../../../src/util/types';
 
 describe('util/number', function () {
 
     describe('mergeLayoutParam', function () {
 
         // The given obj has exactly the given props, has no other props.
-        function expectPropsEqual(obj, props) {
+        function expectPropsEqual(obj: object, props: object): void {
             expect(propContain(obj, props) && propContain(props, obj)).toEqual(true);
         }
 
-        function propContain(more, less) {
-            for (var key in more) {
+        function propContain(more: object, less: object): boolean {
+            for (const key in more) {
                 if (more.hasOwnProperty(key)) {
-                    if (more[key] !== less[key]
-                        && !(more[key] == null && less[key] == null)
+                    if ((more as any)[key] !== (less as any)[key]
+                        && !((more as any)[key] == null && (less as any)[key] == null)
                     ) {
                         return false;
                     }
@@ -41,9 +44,9 @@ describe('util/number', function () {
             return true;
         }
 
-        function shadowClone(obj) {
-            var newObj = {};
-            for (var key in obj) {
+        function shadowClone<T extends object>(obj: T): T {
+            const newObj = {} as T;
+            for (const key in obj) {
                 if (obj.hasOwnProperty(key)) {
                     newObj[key] = obj[key];
                 }
@@ -53,18 +56,23 @@ describe('util/number', function () {
 
         it('all', function () {
 
-            function testMerge(targetOption, newOption, result, resultIgnoreSize) {
-                var t1 = shadowClone(targetOption);
-                var t2 = shadowClone(targetOption);
-                var n1 = shadowClone(newOption);
-                var n2 = shadowClone(newOption);
-                layoutUtil.mergeLayoutParam(t1, n1);
-                layoutUtil.mergeLayoutParam(t2, n2, {ignoreSize: true});
+            function testMerge(
+                targetOption: BoxLayoutOptionMixin,
+                newOption: BoxLayoutOptionMixin,
+                result: BoxLayoutOptionMixin,
+                resultIgnoreSize?: BoxLayoutOptionMixin
+            ) {
+                const t1 = shadowClone(targetOption);
+                const t2 = shadowClone(targetOption);
+                const n1 = shadowClone(newOption);
+                const n2 = shadowClone(newOption);
+                mergeLayoutParam(t1, n1);
+                mergeLayoutParam(t2, n2, {ignoreSize: true});
                 expectPropsEqual(t1, result);
                 expectPropsEqual(t2, resultIgnoreSize || result);
             }
 
-            function singleValueAdd(val) {
+            function singleValueAdd(val: number | string): void {
                 testMerge({}, {width: val}, {width: val});
                 testMerge({}, {left: val}, {left: val});
                 testMerge({}, {right: val}, {right: val});
@@ -79,7 +87,7 @@ describe('util/number', function () {
             singleValueAdd('right');
             singleValueAdd('center');
 
-            function singleValueReplace(val) {
+            function singleValueReplace(val: number | string): void {
                 testMerge({width: -999}, {width: val}, {width: val});
                 testMerge({left: -999}, {left: val}, {left: val});
                 testMerge({right: -999}, {right: val}, {right: val});
diff --git a/test/ut/spec/util/model.test.ts b/test/ut/spec/util/model.test.ts
index 8decb98..bde8882 100755
--- a/test/ut/spec/util/model.test.ts
+++ b/test/ut/spec/util/model.test.ts
@@ -18,20 +18,21 @@
 * under the License.
 */
 
-const modelUtil = require('../../../../lib/util/model');
+import { compressBatches } from '../../../../src/util/model';
+
 
 describe('util/model', function () {
 
 
     describe('compressBatches', function () {
 
-        function item(seriesId, dataIndex) {
+        function item(seriesId: number | string, dataIndex: number | number[]) {
             return {seriesId, dataIndex};
         }
 
         it('base', function () {
             // Remove dupliate between A and B
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, 4), item(3, 5), item(4, 5)],
                 [item(4, 6), item(4, 5), item(3, 3), item(3, 4)]
             )).toEqual([
@@ -40,7 +41,7 @@ describe('util/model', function () {
             ]);
 
             // Compress
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, 4), item(3, 6), item(3, 5), item(4, 5)],
                 [item(4, 6), item(4, 5), item(3, 3), item(3, 4), item(4, 7)]
             )).toEqual([
@@ -49,7 +50,7 @@ describe('util/model', function () {
             ]);
 
             // Remove duplicate in themselves
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, 4), item(3, 6), item(3, 5), item(4, 5)],
                 [item(4, 6), item(4, 5), item(3, 3), item(3, 4), item(4, 7), item(4, 6)]
             )).toEqual([
@@ -58,7 +59,7 @@ describe('util/model', function () {
             ]);
 
             // dataIndex is array
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, [4, 5, 8]), item(4, 4), item(3, [5, 7, 7])],
                 [item(3, [8, 9])]
             )).toEqual([
@@ -67,14 +68,14 @@ describe('util/model', function () {
             ]);
 
             // empty
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, [4, 5, 8]), item(4, 4), item(3, [5, 7, 7])],
                 []
             )).toEqual([
                 [item('3', [4, 5, 7, 8]), item('4', [4])],
                 []
             ]);
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [],
                 [item(3, [4, 5, 8]), item(4, 4), item(3, [5, 7, 7])]
             )).toEqual([
@@ -83,7 +84,7 @@ describe('util/model', function () {
             ]);
 
             // should not has empty array
-            expect(modelUtil.compressBatches(
+            expect(compressBatches(
                 [item(3, [4, 5, 8])],
                 [item(3, [4, 5, 8])]
             )).toEqual([
diff --git a/test/ut/spec/util/number.test.ts b/test/ut/spec/util/number.test.ts
index 205b59a..1e5d2d2 100755
--- a/test/ut/spec/util/number.test.ts
+++ b/test/ut/spec/util/number.test.ts
@@ -18,147 +18,161 @@
 * under the License.
 */
 
-const numberUtil = require('../../../../lib/util/number');
+import {
+    linearMap, parseDate, reformIntervals, getPrecisionSafe,
+    getPercentWithPrecision, quantityExponent, quantity, nice,
+    isNumeric, numericToNumber
+} from '../../../../src/util/number';
+
 
 describe('util/number', function () {
 
     describe('linearMap', function () {
 
         it('accuracyError', function () {
-            var range = [-15918.3, 17724.9];
-            var result = numberUtil.linearMap(100, [0, 100], range, true);
+            let range;
+            let result;
+
+            range = [-15918.3, 17724.9];
+            result = linearMap(100, [0, 100], range, true);
             // Should not be 17724.899999999998.
             expect(result).toEqual(range[1]);
 
-            var range = [-62.83, 83.56];
-            var result = numberUtil.linearMap(100, [0, 100], range, true);
+            range = [-62.83, 83.56];
+            result = linearMap(100, [0, 100], range, true);
             // Should not be 83.55999999999999.
             expect(result).toEqual(range[1]);
         });
 
         it('clamp', function () {
+            let range;
+            let result;
+
             // (1) normal order.
-            var range = [-15918.3, 17724.9];
+            range = [-15918.3, 17724.9];
             // bigger than max
-            var result = numberUtil.linearMap(100.1, [0, 100], range, true);
+            result = linearMap(100.1, [0, 100], range, true);
             expect(result).toEqual(range[1]);
             // smaller than min
-            var result = numberUtil.linearMap(-2, [0, 100], range, true);
+            result = linearMap(-2, [0, 100], range, true);
             expect(result).toEqual(range[0]);
             // equals to max
-            var result = numberUtil.linearMap(100, [0, 100], range, true);
+            result = linearMap(100, [0, 100], range, true);
             expect(result).toEqual(range[1]);
             // equals to min
-            var result = numberUtil.linearMap(0, [0, 100], range, true);
+            result = linearMap(0, [0, 100], range, true);
             expect(result).toEqual(range[0]);
 
             // (2) inverse range
-            var range = [17724.9, -15918.3];
+            range = [17724.9, -15918.3];
             // bigger than max
-            var result = numberUtil.linearMap(102, [0, 100], range, true);
+            result = linearMap(102, [0, 100], range, true);
             expect(result).toEqual(range[1]);
             // smaller than min
-            var result = numberUtil.linearMap(-0.001, [0, 100], range, true);
+            result = linearMap(-0.001, [0, 100], range, true);
             expect(result).toEqual(range[0]);
             // equals to max
-            var result = numberUtil.linearMap(100, [0, 100], range, true);
+            result = linearMap(100, [0, 100], range, true);
             expect(result).toEqual(range[1]);
             // equals to min
-            var result = numberUtil.linearMap(0, [0, 100], range, true);
+            result = linearMap(0, [0, 100], range, true);
             expect(result).toEqual(range[0]);
 
             // (2) inverse domain
             // bigger than max, inverse domain
-            var range = [-15918.3, 17724.9];
+            range = [-15918.3, 17724.9];
             // bigger than max
-            var result = numberUtil.linearMap(102, [100, 0], range, true);
+            result = linearMap(102, [100, 0], range, true);
             expect(result).toEqual(range[0]);
             // smaller than min
-            var result = numberUtil.linearMap(-0.001, [100, 0], range, true);
+            result = linearMap(-0.001, [100, 0], range, true);
             expect(result).toEqual(range[1]);
             // equals to max
-            var result = numberUtil.linearMap(100, [100, 0], range, true);
+            result = linearMap(100, [100, 0], range, true);
             expect(result).toEqual(range[0]);
             // equals to min
-            var result = numberUtil.linearMap(0, [100, 0], range, true);
+            result = linearMap(0, [100, 0], range, true);
             expect(result).toEqual(range[1]);
 
             // (3) inverse domain, inverse range
-            var range = [17724.9, -15918.3];
+            range = [17724.9, -15918.3];
             // bigger than max
-            var result = numberUtil.linearMap(100.1, [100, 0], range, true);
+            result = linearMap(100.1, [100, 0], range, true);
             expect(result).toEqual(range[0]);
             // smaller than min
-            var result = numberUtil.linearMap(-2, [100, 0], range, true);
+            result = linearMap(-2, [100, 0], range, true);
             expect(result).toEqual(range[1]);
             // equals to max
-            var result = numberUtil.linearMap(100, [100, 0], range, true);
+            result = linearMap(100, [100, 0], range, true);
             expect(result).toEqual(range[0]);
             // equals to min
-            var result = numberUtil.linearMap(0, [100, 0], range, true);
+            result = linearMap(0, [100, 0], range, true);
             expect(result).toEqual(range[1]);
         });
 
         it('noClamp', function () {
+            let range;
+            let result;
+
             // (1) normal order.
-            var range = [-15918.3, 17724.9];
+            range = [-15918.3, 17724.9];
             // bigger than max
-            var result = numberUtil.linearMap(100.1, [0, 100], range, false);
+            result = linearMap(100.1, [0, 100], range, false);
             expect(result).toEqual(17758.543199999996);
             // smaller than min
-            var result = numberUtil.linearMap(-2, [0, 100], range, false);
+            result = linearMap(-2, [0, 100], range, false);
             expect(result).toEqual(-16591.164);
             // equals to max
-            var result = numberUtil.linearMap(100, [0, 100], range, false);
+            result = linearMap(100, [0, 100], range, false);
             expect(result).toEqual(17724.9);
             // equals to min
-            var result = numberUtil.linearMap(0, [0, 100], range, false);
+            result = linearMap(0, [0, 100], range, false);
             expect(result).toEqual(-15918.3);
 
             // (2) inverse range
-            var range = [17724.9, -15918.3];
+            range = [17724.9, -15918.3];
             // bigger than max
-            var result = numberUtil.linearMap(102, [0, 100], range, false);
+            result = linearMap(102, [0, 100], range, false);
             expect(result).toEqual(-16591.163999999997);
             // smaller than min
-            var result = numberUtil.linearMap(-0.001, [0, 100], range, false);
+            result = linearMap(-0.001, [0, 100], range, false);
             expect(result).toEqual(17725.236432);
             // equals to max
-            var result = numberUtil.linearMap(100, [0, 100], range, false);
+            result = linearMap(100, [0, 100], range, false);
             expect(result).toEqual(-15918.3);
             // equals to min
-            var result = numberUtil.linearMap(0, [0, 100], range, false);
+            result = linearMap(0, [0, 100], range, false);
             expect(result).toEqual(17724.9);
 
             // (2) inverse domain
             // bigger than max, inverse domain
-            var range = [-15918.3, 17724.9];
+            range = [-15918.3, 17724.9];
             // bigger than max
-            var result = numberUtil.linearMap(102, [100, 0], range, false);
+            result = linearMap(102, [100, 0], range, false);
             expect(result).toEqual(-16591.164);
             // smaller than min
-            var result = numberUtil.linearMap(-0.001, [100, 0], range, false);
+            result = linearMap(-0.001, [100, 0], range, false);
             expect(result).toEqual(17725.236432);
             // equals to max
-            var result = numberUtil.linearMap(100, [100, 0], range, false);
+            result = linearMap(100, [100, 0], range, false);
             expect(result).toEqual(-15918.3);
             // equals to min
-            var result = numberUtil.linearMap(0, [100, 0], range, false);
+            result = linearMap(0, [100, 0], range, false);
             expect(result).toEqual(17724.9);
 
             // (3) inverse domain, inverse range
-            var range = [17724.9, -15918.3];
+            range = [17724.9, -15918.3];
             // bigger than max
-            var result = numberUtil.linearMap(100.1, [100, 0], range, false);
+            result = linearMap(100.1, [100, 0], range, false);
             expect(result).toEqual(17758.5432);
             // smaller than min
-            var result = numberUtil.linearMap(-2, [100, 0], range, false);
+            result = linearMap(-2, [100, 0], range, false);
             expect(result).toEqual(-16591.163999999997);
             // equals to max
-            var result = numberUtil.linearMap(100, [100, 0], range, false);
+            result = linearMap(100, [100, 0], range, false);
             expect(result).toEqual(17724.9);
             // equals to min
-            var result = numberUtil.linearMap(0, [100, 0], range, false);
+            result = linearMap(0, [100, 0], range, false);
             expect(result).toEqual(-15918.3);
         });
 
@@ -167,25 +181,28 @@ describe('util/number', function () {
             doTest(true);
             doTest(false);
 
-            function doTest(clamp) {
+            function doTest(clamp: boolean) {
+                let range;
+                let result;
+
                 // normal
-                var range = [444, 555];
-                var result = numberUtil.linearMap(40, [0, 100], range, clamp);
+                range = [444, 555];
+                result = linearMap(40, [0, 100], range, clamp);
                 expect(result).toEqual(488.4);
 
                 // inverse range
-                var range = [555, 444];
-                var result = numberUtil.linearMap(40, [0, 100], range, clamp);
+                range = [555, 444];
+                result = linearMap(40, [0, 100], range, clamp);
                 expect(result).toEqual(510.6);
 
                 // inverse domain and range
-                var range = [555, 444];
-                var result = numberUtil.linearMap(40, [100, 0], range, clamp);
+                range = [555, 444];
+                result = linearMap(40, [100, 0], range, clamp);
                 expect(result).toEqual(488.4);
 
                 // inverse domain
-                var range = [444, 555];
-                var result = numberUtil.linearMap(40, [100, 0], range, clamp);
+                range = [444, 555];
+                result = linearMap(40, [100, 0], range, clamp);
                 expect(result).toEqual(510.6);
             }
         });
@@ -195,20 +212,23 @@ describe('util/number', function () {
             doTest(true);
             doTest(false);
 
-            function doTest(clamp) {
+            function doTest(clamp: boolean) {
+                let range;
+                let result;
+
                 // zero domain interval
-                var range = [444, 555];
-                var result = numberUtil.linearMap(40, [1212222223.2323232, 1212222223.2323232], range, clamp);
+                range = [444, 555];
+                result = linearMap(40, [1212222223.2323232, 1212222223.2323232], range, clamp);
                 expect(result).toEqual(499.5); // half of range.
 
                 // zero range interval
-                var range = [1221212.1221372238, 1221212.1221372238];
-                var result = numberUtil.linearMap(40, [0, 100], range, clamp);
+                range = [1221212.1221372238, 1221212.1221372238];
+                result = linearMap(40, [0, 100], range, clamp);
                 expect(result).toEqual(1221212.1221372238);
 
                 // zero domain interval and range interval
-                var range = [1221212.1221372238, 1221212.1221372238];
-                var result = numberUtil.linearMap(40, [43.55454545, 43.55454545], range, clamp);
+                range = [1221212.1221372238, 1221212.1221372238];
+                result = linearMap(40, [43.55454545, 43.55454545], range, clamp);
                 expect(result).toEqual(1221212.1221372238);
             }
         });
@@ -218,53 +238,53 @@ describe('util/number', function () {
         it('parseDate', function () {
 
             // Invalid Date
-            expect('' + numberUtil.parseDate(null)).toEqual('Invalid Date');
-            expect('' + numberUtil.parseDate(void 0)).toEqual('Invalid Date');
-            expect('' + numberUtil.parseDate('asdf')).toEqual('Invalid Date');
-            expect('' + numberUtil.parseDate(NaN)).toEqual('Invalid Date');
-            expect('' + numberUtil.parseDate('-')).toEqual('Invalid Date');
-            expect('' + numberUtil.parseDate('20120304')).toEqual('Invalid Date');
+            expect('' + parseDate(null)).toEqual('Invalid Date');
+            expect('' + parseDate(void 0)).toEqual('Invalid Date');
+            expect('' + parseDate('asdf')).toEqual('Invalid Date');
+            expect('' + parseDate(NaN)).toEqual('Invalid Date');
+            expect('' + parseDate('-')).toEqual('Invalid Date');
+            expect('' + parseDate('20120304')).toEqual('Invalid Date');
 
             // Input instance of Date or timestamp
-            expect(+numberUtil.parseDate(new Date('2012-03-04'))).toEqual(1330819200000);
-            expect(+numberUtil.parseDate(1330819200000)).toEqual(1330819200000);
-            expect(+numberUtil.parseDate(1330819199999.99)).toEqual(1330819200000);
-            expect(+numberUtil.parseDate(1330819200000.01)).toEqual(1330819200000);
+            expect(+parseDate(new Date('2012-03-04'))).toEqual(1330819200000);
+            expect(+parseDate(1330819200000)).toEqual(1330819200000);
+            expect(+parseDate(1330819199999.99)).toEqual(1330819200000);
+            expect(+parseDate(1330819200000.01)).toEqual(1330819200000);
 
             // ISO string
-            expect(+numberUtil.parseDate('2012-03')).toEqual(+new Date('2012-03-01T00:00:00'));
-            expect(+numberUtil.parseDate('2012-03-04')).toEqual(+new Date('2012-03-04T00:00:00'));
-            expect(+numberUtil.parseDate('2012-03-04 05')).toEqual(+new Date('2012-03-04T05:00:00'));
-            expect(+numberUtil.parseDate('2012-03-04T05')).toEqual(+new Date('2012-03-04T05:00:00'));
-            expect(+numberUtil.parseDate('2012-03-04 05:06')).toEqual(+new Date('2012-03-04T05:06:00'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06')).toEqual(+new Date('2012-03-04T05:06:00'));
-            expect(+numberUtil.parseDate('2012-03-04 05:06:07')).toEqual(+new Date('2012-03-04T05:06:07'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07')).toEqual(+new Date('2012-03-04T05:06:07'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.123')).toEqual(+new Date('2012-03-04T05:06:07.123'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07,123')).toEqual(+new Date('2012-03-04T05:06:07.123'));
+            expect(+parseDate('2012-03')).toEqual(+new Date('2012-03-01T00:00:00'));
+            expect(+parseDate('2012-03-04')).toEqual(+new Date('2012-03-04T00:00:00'));
+            expect(+parseDate('2012-03-04 05')).toEqual(+new Date('2012-03-04T05:00:00'));
+            expect(+parseDate('2012-03-04T05')).toEqual(+new Date('2012-03-04T05:00:00'));
+            expect(+parseDate('2012-03-04 05:06')).toEqual(+new Date('2012-03-04T05:06:00'));
+            expect(+parseDate('2012-03-04T05:06')).toEqual(+new Date('2012-03-04T05:06:00'));
+            expect(+parseDate('2012-03-04 05:06:07')).toEqual(+new Date('2012-03-04T05:06:07'));
+            expect(+parseDate('2012-03-04T05:06:07')).toEqual(+new Date('2012-03-04T05:06:07'));
+            expect(+parseDate('2012-03-04T05:06:07.123')).toEqual(+new Date('2012-03-04T05:06:07.123'));
+            expect(+parseDate('2012-03-04T05:06:07,123')).toEqual(+new Date('2012-03-04T05:06:07.123'));
             // TODO new Date('2012-03-04T05:06:07.12') is same to '2012-03-04T05:06:07.120', not '2012-03-04T05:06:07.012'
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.12')).toEqual(+new Date('2012-03-04T05:06:07.012'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.1')).toEqual(+new Date('2012-03-04T05:06:07.001'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07,123Z')).toEqual(+new Date('2012-03-04T05:06:07.123Z'));
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.123+0800')).toEqual(1330808767123);
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.123+08:00')).toEqual(1330808767123);
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.123-0700')).toEqual(1330862767123);
-            expect(+numberUtil.parseDate('2012-03-04T05:06:07.123-07:00')).toEqual(1330862767123);
-            expect(+numberUtil.parseDate('2012-03-04T5:6:7.123-07:00')).toEqual(1330862767123);
+            expect(+parseDate('2012-03-04T05:06:07.12')).toEqual(+new Date('2012-03-04T05:06:07.012'));
+            expect(+parseDate('2012-03-04T05:06:07.1')).toEqual(+new Date('2012-03-04T05:06:07.001'));
+            expect(+parseDate('2012-03-04T05:06:07,123Z')).toEqual(+new Date('2012-03-04T05:06:07.123Z'));
+            expect(+parseDate('2012-03-04T05:06:07.123+0800')).toEqual(1330808767123);
+            expect(+parseDate('2012-03-04T05:06:07.123+08:00')).toEqual(1330808767123);
+            expect(+parseDate('2012-03-04T05:06:07.123-0700')).toEqual(1330862767123);
+            expect(+parseDate('2012-03-04T05:06:07.123-07:00')).toEqual(1330862767123);
+            expect(+parseDate('2012-03-04T5:6:7.123-07:00')).toEqual(1330862767123);
 
             // Other string
-            expect(+numberUtil.parseDate('2012')).toEqual(+new Date('2012-01-01T00:00:00'));
-            expect(+numberUtil.parseDate('2012/03')).toEqual(+new Date('2012-03-01T00:00:00'));
-            expect(+numberUtil.parseDate('2012/03/04')).toEqual(+new Date('2012-03-04T00:00:00'));
-            expect(+numberUtil.parseDate('2012-3-4')).toEqual(+new Date('2012-03-04T00:00:00'));
-            expect(+numberUtil.parseDate('2012/3')).toEqual(+new Date('2012-03-01T00:00:00'));
-            expect(+numberUtil.parseDate('2012/3/4')).toEqual(+new Date('2012-03-04T00:00:00'));
-            expect(+numberUtil.parseDate('2012/3/4 2:05')).toEqual(+new Date('2012-03-04T02:05:00'));
-            expect(+numberUtil.parseDate('2012/03/04 2:05')).toEqual(+new Date('2012-03-04T02:05:00'));
-            expect(+numberUtil.parseDate('2012/3/4 2:05:08')).toEqual(+new Date('2012-03-04T02:05:08'));
-            expect(+numberUtil.parseDate('2012/03/04 2:05:08')).toEqual(+new Date('2012-03-04T02:05:08'));
-            expect(+numberUtil.parseDate('2012/3/4 2:05:08.123')).toEqual(+new Date('2012-03-04T02:05:08.123'));
-            expect(+numberUtil.parseDate('2012/03/04 2:05:08.123')).toEqual(+new Date('2012-03-04T02:05:08.123'));
+            expect(+parseDate('2012')).toEqual(+new Date('2012-01-01T00:00:00'));
+            expect(+parseDate('2012/03')).toEqual(+new Date('2012-03-01T00:00:00'));
+            expect(+parseDate('2012/03/04')).toEqual(+new Date('2012-03-04T00:00:00'));
+            expect(+parseDate('2012-3-4')).toEqual(+new Date('2012-03-04T00:00:00'));
+            expect(+parseDate('2012/3')).toEqual(+new Date('2012-03-01T00:00:00'));
+            expect(+parseDate('2012/3/4')).toEqual(+new Date('2012-03-04T00:00:00'));
+            expect(+parseDate('2012/3/4 2:05')).toEqual(+new Date('2012-03-04T02:05:00'));
+            expect(+parseDate('2012/03/04 2:05')).toEqual(+new Date('2012-03-04T02:05:00'));
+            expect(+parseDate('2012/3/4 2:05:08')).toEqual(+new Date('2012-03-04T02:05:08'));
+            expect(+parseDate('2012/03/04 2:05:08')).toEqual(+new Date('2012-03-04T02:05:08'));
+            expect(+parseDate('2012/3/4 2:05:08.123')).toEqual(+new Date('2012-03-04T02:05:08.123'));
+            expect(+parseDate('2012/03/04 2:05:08.123')).toEqual(+new Date('2012-03-04T02:05:08.123'));
         });
     });
 
@@ -273,7 +293,7 @@ describe('util/number', function () {
 
         it('basic', function () {
             // all
-            expect(numberUtil.reformIntervals([
+            expect(reformIntervals([
                 {interval: [18, 62], close: [1, 1]},
                 {interval: [-Infinity, -70], close: [0, 0]},
                 {interval: [-70, -26], close: [1, 1]},
@@ -291,7 +311,7 @@ describe('util/number', function () {
             ]);
 
             // remove overlap
-            expect(numberUtil.reformIntervals([
+            expect(reformIntervals([
                 {interval: [18, 62], close: [1, 1]},
                 {interval: [50, 150], close: [1, 1]}
             ])).toEqual([
@@ -300,7 +320,7 @@ describe('util/number', function () {
             ]);
 
             // remove overlap on edge
-            expect(numberUtil.reformIntervals([
+            expect(reformIntervals([
                 {interval: [18, 62], close: [1, 1]},
                 {interval: [62, 150], close: [1, 1]}
             ])).toEqual([
@@ -309,7 +329,7 @@ describe('util/number', function () {
             ]);
 
             // remove included interval
-            expect(numberUtil.reformIntervals([
+            expect(reformIntervals([
                 {interval: [30, 40], close: [1, 1]},
                 {interval: [42, 54], close: [1, 1]},
                 {interval: [45, 60], close: [1, 1]},
@@ -319,7 +339,7 @@ describe('util/number', function () {
             ]);
 
             // remove edge
-            expect(numberUtil.reformIntervals([
+            expect(reformIntervals([
                 {interval: [18, 62], close: [1, 1]},
                 {interval: [30, 62], close: [1, 1]}
             ])).toEqual([
@@ -331,16 +351,16 @@ describe('util/number', function () {
 
     describe('getPrecisionSafe', function () {
         it('basic', function () {
-            expect(numberUtil.getPrecisionSafe(10)).toEqual(0);
-            expect(numberUtil.getPrecisionSafe(1)).toEqual(0);
-            expect(numberUtil.getPrecisionSafe(0)).toEqual(0);
-            expect(numberUtil.getPrecisionSafe(100000000000000000000000000000)).toEqual(0);
-            expect(numberUtil.getPrecisionSafe(1e+100)).toEqual(0);
-            expect(numberUtil.getPrecisionSafe(0.1)).toEqual(1);
-            expect(numberUtil.getPrecisionSafe(0.100)).toEqual(1);
-            expect(numberUtil.getPrecisionSafe(0.0032)).toEqual(4);
-            expect(numberUtil.getPrecisionSafe(0.0000000000034)).toEqual(12);
-            expect(numberUtil.getPrecisionSafe(3.4e-10)).toEqual(10);
+            expect(getPrecisionSafe(10)).toEqual(0);
+            expect(getPrecisionSafe(1)).toEqual(0);
+            expect(getPrecisionSafe(0)).toEqual(0);
+            expect(getPrecisionSafe(100000000000000000000000000000)).toEqual(0);
+            expect(getPrecisionSafe(1e+100)).toEqual(0);
+            expect(getPrecisionSafe(0.1)).toEqual(1);
+            expect(getPrecisionSafe(0.100)).toEqual(1);
+            expect(getPrecisionSafe(0.0032)).toEqual(4);
+            expect(getPrecisionSafe(0.0000000000034)).toEqual(12);
+            expect(getPrecisionSafe(3.4e-10)).toEqual(10);
         });
     });
 
@@ -349,102 +369,102 @@ describe('util/number', function () {
 
             // console.log(numberUtil.getPercentWithPrecision([-1.678, -4.783, -2.664, -0.875], 0, 2));
 
-            // var arr = [49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5];
-            var arr = [49.5, NaN];
-            var result = [];
-            for (var i = 0; i < arr.length; i++) {
+            // const arr = [49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5, 49.5];
+            const arr = [49.5, NaN];
+            const result = [];
+            for (let i = 0; i < arr.length; i++) {
                 result.push(
-                    numberUtil.getPercentWithPrecision(arr, i, 0)
+                    getPercentWithPrecision(arr, i, 0)
                 );
             }
-            var sum = 0;
-            for (var i = 0; i < result.length; i++) {
-                sum += result[i];
-            }
-
-            expect(numberUtil.getPercentWithPrecision([50.5, 49.5], 0, 0)).toEqual(51);
-            expect(numberUtil.getPercentWithPrecision([50.5, 49.5], 1, 0)).toEqual(49);
-
-            expect(numberUtil.getPercentWithPrecision([12.34, 34.56, 53.1], 0, 1)).toEqual(12.3);
-            expect(numberUtil.getPercentWithPrecision([12.34, 34.56, 53.1], 1, 1)).toEqual(34.6);
-            expect(numberUtil.getPercentWithPrecision([12.34, 34.56, 53.1], 2, 1)).toEqual(53.1);
-
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 0, 0)).toEqual(17);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 1, 0)).toEqual(48);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 2, 0)).toEqual(26);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 3, 0)).toEqual(9);
+            // let sum = 0;
+            // for (let i = 0; i < result.length; i++) {
+            //     sum += result[i];
+            // }
+
+            expect(getPercentWithPrecision([50.5, 49.5], 0, 0)).toEqual(51);
+            expect(getPercentWithPrecision([50.5, 49.5], 1, 0)).toEqual(49);
+
+            expect(getPercentWithPrecision([12.34, 34.56, 53.1], 0, 1)).toEqual(12.3);
+            expect(getPercentWithPrecision([12.34, 34.56, 53.1], 1, 1)).toEqual(34.6);
+            expect(getPercentWithPrecision([12.34, 34.56, 53.1], 2, 1)).toEqual(53.1);
+
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 0, 0)).toEqual(17);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 1, 0)).toEqual(48);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 2, 0)).toEqual(26);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875], 3, 0)).toEqual(9);
         });
 
         it('NaN data', function () {
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-'], 0, 0)).toEqual(17);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-'], 1, 0)).toEqual(48);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-'], 2, 0)).toEqual(26);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-'], 3, 0)).toEqual(9);
-            expect(numberUtil.getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-'], 4, 0)).toEqual(0);
-
-            expect(numberUtil.getPercentWithPrecision([0, undefined, '-', null, NaN], 0, 0)).toEqual(0);
-            expect(numberUtil.getPercentWithPrecision([0, undefined, '-', null, NaN], 1, 0)).toEqual(0);
-            expect(numberUtil.getPercentWithPrecision([0, undefined, '-', null, NaN], 2, 0)).toEqual(0);
-            expect(numberUtil.getPercentWithPrecision([0, undefined, '-', null, NaN], 3, 0)).toEqual(0);
-            expect(numberUtil.getPercentWithPrecision([0, undefined, '-', null, NaN], 4, 0)).toEqual(0);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-' as any], 0, 0)).toEqual(17);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-' as any], 1, 0)).toEqual(48);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-' as any], 2, 0)).toEqual(26);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-' as any], 3, 0)).toEqual(9);
+            expect(getPercentWithPrecision([1.678, 4.783, 2.664, 0.875, '-' as any], 4, 0)).toEqual(0);
+
+            expect(getPercentWithPrecision([0, undefined, '-' as any, null, NaN], 0, 0)).toEqual(0);
+            expect(getPercentWithPrecision([0, undefined, '-' as any, null, NaN], 1, 0)).toEqual(0);
+            expect(getPercentWithPrecision([0, undefined, '-' as any, null, NaN], 2, 0)).toEqual(0);
+            expect(getPercentWithPrecision([0, undefined, '-' as any, null, NaN], 3, 0)).toEqual(0);
+            expect(getPercentWithPrecision([0, undefined, '-' as any, null, NaN], 4, 0)).toEqual(0);
         });
     });
 
     describe('quantityExponent', function () {
         it('basic', function () {
-            expect(numberUtil.quantityExponent(1)).toEqual(0);
-            expect(numberUtil.quantityExponent(9)).toEqual(0);
-            expect(numberUtil.quantityExponent(12)).toEqual(1);
-            expect(numberUtil.quantityExponent(123)).toEqual(2);
-            expect(numberUtil.quantityExponent(1234)).toEqual(3);
-            expect(numberUtil.quantityExponent(1234.5678)).toEqual(3);
-            expect(numberUtil.quantityExponent(10)).toEqual(1);
-            expect(numberUtil.quantityExponent(1000)).toEqual(3);
-            expect(numberUtil.quantityExponent(10000)).toEqual(4);
+            expect(quantityExponent(1)).toEqual(0);
+            expect(quantityExponent(9)).toEqual(0);
+            expect(quantityExponent(12)).toEqual(1);
+            expect(quantityExponent(123)).toEqual(2);
+            expect(quantityExponent(1234)).toEqual(3);
+            expect(quantityExponent(1234.5678)).toEqual(3);
+            expect(quantityExponent(10)).toEqual(1);
+            expect(quantityExponent(1000)).toEqual(3);
+            expect(quantityExponent(10000)).toEqual(4);
         });
 
         it('decimals', function () {
-            expect(numberUtil.quantityExponent(0.1)).toEqual(-1);
-            expect(numberUtil.quantityExponent(0.001)).toEqual(-3);
-            expect(numberUtil.quantityExponent(0.00123)).toEqual(-3);
+            expect(quantityExponent(0.1)).toEqual(-1);
+            expect(quantityExponent(0.001)).toEqual(-3);
+            expect(quantityExponent(0.00123)).toEqual(-3);
         });
 
         it('large number', function () {
-            expect(numberUtil.quantityExponent(3.14e100)).toEqual(100);
-            expect(numberUtil.quantityExponent(3.14e-100)).toEqual(-100);
+            expect(quantityExponent(3.14e100)).toEqual(100);
+            expect(quantityExponent(3.14e-100)).toEqual(-100);
         });
 
         it('zero', function () {
-            expect(numberUtil.quantityExponent(0)).toEqual(0);
+            expect(quantityExponent(0)).toEqual(0);
         });
     });
 
     describe('quantity', function () {
         it('basic', function () {
-            expect(numberUtil.quantity(1)).toEqual(1);
-            expect(numberUtil.quantity(9)).toEqual(1);
-            expect(numberUtil.quantity(12)).toEqual(10);
-            expect(numberUtil.quantity(123)).toEqual(100);
-            expect(numberUtil.quantity(1234)).toEqual(1000);
-            expect(numberUtil.quantity(1234.5678)).toEqual(1000);
-            expect(numberUtil.quantity(10)).toEqual(10);
-            expect(numberUtil.quantity(1000)).toEqual(1000);
-            expect(numberUtil.quantity(10000)).toEqual(10000);
+            expect(quantity(1)).toEqual(1);
+            expect(quantity(9)).toEqual(1);
+            expect(quantity(12)).toEqual(10);
+            expect(quantity(123)).toEqual(100);
+            expect(quantity(1234)).toEqual(1000);
+            expect(quantity(1234.5678)).toEqual(1000);
+            expect(quantity(10)).toEqual(10);
+            expect(quantity(1000)).toEqual(1000);
+            expect(quantity(10000)).toEqual(10000);
         });
 
         it('decimals', function () {
-            expect(numberUtil.quantity(0.2)).toEqual(0.1);
-            expect(numberUtil.quantity(0.002)).toEqual(0.001);
-            expect(numberUtil.quantity(0.00123)).toEqual(0.001);
+            expect(quantity(0.2)).toEqual(0.1);
+            expect(quantity(0.002)).toEqual(0.001);
+            expect(quantity(0.00123)).toEqual(0.001);
         });
 
         it('large number', function () {
-            // expect(numberUtil.quantity(3.14e100)).toEqual(1e100);
-            // expect(numberUtil.quantity(3.14e-100)).toEqual(1e-100);
+            // expect(quantity(3.14e100)).toEqual(1e100);
+            // expect(quantity(3.14e-100)).toEqual(1e-100);
         });
 
         it('zero', function () {
-            expect(numberUtil.quantity(0)).toEqual(1);
+            expect(quantity(0)).toEqual(1);
         });
     });
 
@@ -452,28 +472,28 @@ describe('util/number', function () {
     describe('nice', function () {
         it('extreme', function () {
             // Should not be 0.30000000000000004
-            expect(numberUtil.nice(0.3869394696651766, true)).toEqual(0.3);
-            expect(numberUtil.nice(0.3869394696651766)).toEqual(0.5);
-            expect(numberUtil.nice(0.00003869394696651766, true)).toEqual(0.00003);
-            expect(numberUtil.nice(0.00003869394696651766, false)).toEqual(0.00005);
-            // expect(numberUtil.nice(0, true)).toEqual(0);
-            // expect(numberUtil.nice(0)).toEqual(0);
-            expect(numberUtil.nice(13, true)).toEqual(10);
-            expect(numberUtil.nice(13)).toEqual(20);
-            expect(numberUtil.nice(3900000000000000000021, true)).toEqual(3000000000000000000000);
-            expect(numberUtil.nice(3900000000000000000021)).toEqual(5000000000000000000000);
-            expect(numberUtil.nice(0.00000000000000000656939, true)).toEqual(0.000000000000000005);
-            expect(numberUtil.nice(0.00000000000000000656939)).toEqual(0.00000000000000001);
-            expect(numberUtil.nice(0.10000000000000000656939, true)).toEqual(0.1);
-            expect(numberUtil.nice(0.10000000000000000656939)).toEqual(0.2);
+            expect(nice(0.3869394696651766, true)).toEqual(0.3);
+            expect(nice(0.3869394696651766)).toEqual(0.5);
+            expect(nice(0.00003869394696651766, true)).toEqual(0.00003);
+            expect(nice(0.00003869394696651766, false)).toEqual(0.00005);
+            // expect(nice(0, true)).toEqual(0);
+            // expect(nice(0)).toEqual(0);
+            expect(nice(13, true)).toEqual(10);
+            expect(nice(13)).toEqual(20);
+            expect(nice(3900000000000000000021, true)).toEqual(3000000000000000000000);
+            expect(nice(3900000000000000000021)).toEqual(5000000000000000000000);
+            expect(nice(0.00000000000000000656939, true)).toEqual(0.000000000000000005);
+            expect(nice(0.00000000000000000656939)).toEqual(0.00000000000000001);
+            expect(nice(0.10000000000000000656939, true)).toEqual(0.1);
+            expect(nice(0.10000000000000000656939)).toEqual(0.2);
         });
     });
 
     describe('numeric', function () {
 
-        function testNumeric(rawVal, tarVal, beNumeric) {
-            expect(numberUtil.isNumeric(rawVal)).toEqual(beNumeric);
-            expect(numberUtil.numericToNumber(rawVal)).toEqual(tarVal);
+        function testNumeric(rawVal: unknown, tarVal: number, beNumeric: boolean) {
+            expect(isNumeric(rawVal)).toEqual(beNumeric);
+            expect(numericToNumber(rawVal)).toEqual(tarVal);
         }
 
         testNumeric(123, 123, true);
@@ -485,20 +505,20 @@ describe('util/number', function () {
         testNumeric('-555.6', -555.6, true);
         testNumeric(' 555 ', 555, true);
         testNumeric(' -555 ', -555, true);
-        testNumeric(1e3, 1000, true, true);
-        testNumeric(-1e3, -1000, true, true);
-        testNumeric('1e3', 1000, true, true);
-        testNumeric('-1e3', -1000, true, true);
+        testNumeric(1e3, 1000, true);
+        testNumeric(-1e3, -1000, true);
+        testNumeric('1e3', 1000, true);
+        testNumeric('-1e3', -1000, true);
         testNumeric(' \r \n 555 \t ', 555, true);
         testNumeric(' \r \n -555.6 \t ', -555.6, true);
-        testNumeric(Infinity, Infinity, true, true);
-        testNumeric(-Infinity, -Infinity, true, true);
-        testNumeric('Infinity', Infinity, true, true);
-        testNumeric('-Infinity', -Infinity, true, true);
-
-        testNumeric(NaN, NaN);
-        testNumeric(-NaN, NaN);
-        testNumeric('NaN', NaN);
+        testNumeric(Infinity, Infinity, true);
+        testNumeric(-Infinity, -Infinity, true);
+        testNumeric('Infinity', Infinity, true);
+        testNumeric('-Infinity', -Infinity, true);
+
+        testNumeric(NaN, NaN, false);
+        testNumeric(-NaN, NaN, false);
+        testNumeric('NaN', NaN, false);
         testNumeric('-NaN', NaN, false);
         testNumeric(' NaN ', NaN, false);
         testNumeric(true, NaN, false);


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