You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/03/31 06:27:05 UTC

[echarts] branch enhance-missing-components-log updated: test: fix ut

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

shenyi pushed a commit to branch enhance-missing-components-log
in repository https://gitbox.apache.org/repos/asf/echarts.git


The following commit(s) were added to refs/heads/enhance-missing-components-log by this push:
     new 68f2a55  test: fix ut
68f2a55 is described below

commit 68f2a55b5fb615a8c237608e37c9d8e1db1a86f4
Author: pissang <bm...@gmail.com>
AuthorDate: Wed Mar 31 14:25:52 2021 +0800

    test: fix ut
---
 test/ut/spec/component/graphic/setOption.test.ts   |   6 +-
 test/ut/spec/component/visualMap/setOption.test.ts |   8 +-
 test/ut/spec/data/dataTransform.test.ts            |  12 +-
 test/ut/spec/model/Component.test.ts               | 235 --------------------
 test/ut/spec/model/Global.test.ts                  |  56 ++---
 test/ut/spec/model/componentDependency.test.ts     | 240 +++++++++++++++++++++
 test/ut/spec/model/timelineMediaOptions.test.ts    |  44 ++--
 test/ut/spec/series/custom.test.ts                 |   2 +-
 8 files changed, 304 insertions(+), 299 deletions(-)

diff --git a/test/ut/spec/component/graphic/setOption.test.ts b/test/ut/spec/component/graphic/setOption.test.ts
index 815915d..4669fa0 100755
--- a/test/ut/spec/component/graphic/setOption.test.ts
+++ b/test/ut/spec/component/graphic/setOption.test.ts
@@ -21,10 +21,10 @@ import { createChart, getGraphicElements, getECModel } from '../../../core/utHel
 // import { imageURI } from './setOptionImageURI';
 import { EChartsType } from '../../../../../src/echarts';
 import Element from 'zrender/src/Element';
-import { EChartsFullOption } from '../../../../../src/option';
+import { EChartsOption } from '../../../../../src/export/option';
 import {
     GraphicComponentOption, GraphicComponentImageOption
-} from '../../../../../src/component/graphic';
+} from '../../../../../src/component/graphic/install';
 import Group from 'zrender/src/graphic/Group';
 import { Dictionary } from 'zrender/src/core/types';
 
@@ -1049,7 +1049,7 @@ describe('graphic_setOption', function () {
 
     describe('boundingAndRotation', function () {
 
-        function getOption(): EChartsFullOption {
+        function getOption(): EChartsOption {
             return {
                 legend: {
                     data: ['高度(km)与气温(°C)变化关系']
diff --git a/test/ut/spec/component/visualMap/setOption.test.ts b/test/ut/spec/component/visualMap/setOption.test.ts
index c0f63df..0911af0 100755
--- a/test/ut/spec/component/visualMap/setOption.test.ts
+++ b/test/ut/spec/component/visualMap/setOption.test.ts
@@ -20,7 +20,7 @@
 
 import { createChart, getECModel } from '../../../core/utHelper';
 import { EChartsType } from '../../../../../src/echarts';
-import { EChartsFullOption } from '../../../../../src/option';
+import { EChartsOption } from '../../../../../src/export/option';
 import { ContinousVisualMapOption } from '../../../../../src/component/visualMap/ContinuousModel';
 import { PiecewiseVisualMapOption } from '../../../../../src/component/visualMap/PiecewiseModel';
 import VisualMapModel from '../../../../../src/component/visualMap/VisualMapModel';
@@ -94,15 +94,15 @@ describe('vsiaulMap_setOption', function () {
             visualMap: {}
         });
 
-        expectTheSame(chart.getOption());
+        expectTheSame(chart.getOption() as EChartsOption);
 
         chart.setOption({
             series: [{data: [[44, 55]]}] // visualMap depends series
         });
 
-        expectTheSame(chart.getOption());
+        expectTheSame(chart.getOption() as EChartsOption);
 
-        function expectTheSame(option: EChartsFullOption) {
+        function expectTheSame(option: EChartsOption) {
             const visualMapOptionGotten = option.visualMap as (ContinousVisualMapOption | PiecewiseVisualMapOption)[];
             expect(visualMapOptionGotten.length).toEqual(1);
             expect(visualMapOptionGotten[0].inRange.color).toEqual(['red', 'blue', 'yellow']);
diff --git a/test/ut/spec/data/dataTransform.test.ts b/test/ut/spec/data/dataTransform.test.ts
index 21500d1..316064f 100644
--- a/test/ut/spec/data/dataTransform.test.ts
+++ b/test/ut/spec/data/dataTransform.test.ts
@@ -19,7 +19,7 @@
 
 import { EChartsType } from '../../../../src/echarts';
 import { createChart, removeChart, getECModel } from '../../core/utHelper';
-import { EChartsFullOption } from '../../../../src/option';
+import { EChartsOption } from '../../../../src/export/option';
 import { retrieveRawValue } from '../../../../src/data/helper/dataProvider';
 
 
@@ -59,7 +59,7 @@ describe('dataTransform', function () {
     }
 
     it('forbid_seriesLayoutBy_row', function () {
-        const option: EChartsFullOption = {
+        const option: EChartsOption = {
             dataset: [{
                 source: makeDatasetSourceDetection(),
                 // This config should cause error thrown.
@@ -78,7 +78,7 @@ describe('dataTransform', function () {
     });
 
     it('seriesLayoutBy_changed_no_transform', function () {
-        const option: EChartsFullOption = {
+        const option: EChartsOption = {
             dataset: {
                 source: makeDatasetSourceDetection()
             },
@@ -104,7 +104,7 @@ describe('dataTransform', function () {
         ]
     }].forEach((dataset1, itIdx) => {
         it(`seriesLayoutBy_changed_transform_detection_${itIdx}`, function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 dataset: [{
                     source: makeDatasetSourceDetection()
                 }, dataset1],
@@ -136,7 +136,7 @@ describe('dataTransform', function () {
     }].forEach((dataset1, itIdx) => {
         it(`seriesLayoutBy_changed_transform_non_detection_${itIdx}`, function () {
             const sourceWrap = makeDatasetSourceNonDetectionByRow();
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 dataset: [{
                     dimensions: sourceWrap.dimensions,
                     source: sourceWrap.source
@@ -163,7 +163,7 @@ describe('dataTransform', function () {
         ]
     }].forEach((dataset1, itIdx) => {
         it(`inherit_detected_dimensions_${itIdx}`, function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 dataset: [{
                     source: makeDatasetSourceDetection()
                 }, dataset1],
diff --git a/test/ut/spec/model/Component.test.ts b/test/ut/spec/model/Component.test.ts
deleted file mode 100755
index c6799c7..0000000
--- a/test/ut/spec/model/Component.test.ts
+++ /dev/null
@@ -1,235 +0,0 @@
-
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-import ComponentModel, { ComponentModelConstructor } from '../../../../src/model/Component';
-import { ComponentMainType } from '../../../../src/util/types';
-
-const componentModelConstructor = ComponentModel as ComponentModelConstructor;
-
-
-describe('Component', function () {
-
-    let idx = 0;
-
-    function makeTypes(count: number): string[] {
-        const arr = [];
-        for (let i = 0; i < count; i++) {
-            arr.push('type_' + idx++);
-        }
-        return arr;
-    }
-
-    type TopoResultItem = [ComponentMainType, ComponentMainType[]];
-
-    describe('topologicalTravel', function () {
-
-        it('topologicalTravel_base', function () {
-            const [m1, a1, a2] = makeTypes(3);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a1});
-            componentModelConstructor.extend({type: a2});
-            const result: TopoResultItem[] = [];
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            componentModelConstructor.topologicalTravel(
-                [m1, a1, a2],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
-        });
-
-        it('topologicalTravel_a1IsAbsent', function () {
-            const [m1, a1, a2] = makeTypes(3);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a2});
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            const result: TopoResultItem[] = [];
-            componentModelConstructor.topologicalTravel(
-                [m1, a2],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a2, ['dataset']], [m1, ['dataset', a1, a2]]]);
-        });
-
-        it('topologicalTravel_empty', function () {
-            const [m1, a1, a2] = makeTypes(3);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a1});
-            componentModelConstructor.extend({type: a2});
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            const result: TopoResultItem[] = [];
-            componentModelConstructor.topologicalTravel(
-                [],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([]);
-        });
-
-        it('topologicalTravel_isolate', function () {
-            const [m1, a1, a2] = makeTypes(3);
-            componentModelConstructor.extend({type: a2});
-            componentModelConstructor.extend({type: a1});
-            componentModelConstructor.extend({type: m1, dependencies: [a2]});
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            const result: TopoResultItem[] = [];
-            componentModelConstructor.topologicalTravel(
-                [a1, a2, m1],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a1, ['dataset']], [a2, ['dataset']], [m1, ['dataset', a2]]]);
-        });
-
-        it('topologicalTravel_diamond', function () {
-            const [m1, a1, a2, a3] = makeTypes(4);
-            componentModelConstructor.extend({type: a1, dependencies: []});
-            componentModelConstructor.extend({type: a2, dependencies: [a1]});
-            componentModelConstructor.extend({type: a3, dependencies: [a1]});
-            componentModelConstructor.extend({type: m1, dependencies: [a2, a3]});
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            const result: TopoResultItem[] = [];
-            componentModelConstructor.topologicalTravel(
-                [m1, a1, a2, a3],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual(
-                [[a1, ['dataset']],
-                [a3, ['dataset', a1]],
-                [a2, ['dataset', a1]],
-                [m1, ['dataset', a2, a3]]
-            ]);
-        });
-
-        it('topologicalTravel_loop', function () {
-            const [m1, m2, a1, a2, a3] = makeTypes(5);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: m2, dependencies: [m1, a2]});
-            componentModelConstructor.extend({type: a1, dependencies: [m2, a2, a3]});
-            componentModelConstructor.extend({type: a2});
-            componentModelConstructor.extend({type: a3});
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            expect(function () {
-                componentModelConstructor.topologicalTravel(
-                    [m1, m2, a1],
-                    allList,
-                    () => {}
-                );
-            }).toThrowError(/Circl/);
-        });
-
-        it('topologicalTravel_multipleEchartsInstance', function () {
-            const [m1, m2, a1, a2] = makeTypes(4);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a1});
-            componentModelConstructor.extend({type: a2});
-            let allList = componentModelConstructor.getAllClassMainTypes();
-            let result: TopoResultItem[] = [];
-            componentModelConstructor.topologicalTravel(
-                [m1, a1, a2],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
-
-            result = [];
-            componentModelConstructor.extend({type: m2, dependencies: [a1, m1]});
-            allList = componentModelConstructor.getAllClassMainTypes();
-            componentModelConstructor.topologicalTravel(
-                [m2, m1, a1, a2],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual(
-                [[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]], [m2, ['dataset', a1, m1]]]
-            );
-        });
-
-        it('topologicalTravel_missingSomeNodeButHasDependencies', function () {
-            const [m1, a1, a2, a3, a4] = makeTypes(5);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a2, dependencies: [a3]});
-            componentModelConstructor.extend({type: a3});
-            componentModelConstructor.extend({type: a4});
-            let result: TopoResultItem[] = [];
-            let allList = componentModelConstructor.getAllClassMainTypes();
-            componentModelConstructor.topologicalTravel(
-                [a3, m1],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
-            result = [];
-            allList = componentModelConstructor.getAllClassMainTypes();
-            componentModelConstructor.topologicalTravel(
-                [m1, a3],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
-        });
-
-        it('topologicalTravel_subType', function () {
-            const [m1, a1, a2, a3, a4] = makeTypes(5);
-            componentModelConstructor.extend({type: m1, dependencies: [a1, a2]});
-            componentModelConstructor.extend({type: a1 + '.aaa', dependencies: [a2]});
-            componentModelConstructor.extend({type: a1 + '.bbb', dependencies: [a3, a4]});
-            componentModelConstructor.extend({type: a2});
-            componentModelConstructor.extend({type: a3});
-            componentModelConstructor.extend({type: a4});
-            const result: TopoResultItem[] = [];
-            const allList = componentModelConstructor.getAllClassMainTypes();
-            componentModelConstructor.topologicalTravel(
-                [m1, a1, a2, a4],
-                allList,
-                function (componentType, dependencies) {
-                    result.push([componentType, dependencies]);
-                }
-            );
-            expect(result).toEqual(
-                [[a4, ['dataset']],
-                [a2, ['dataset']],
-                [a1, ['dataset', a2, a3, a4]],
-                [m1, ['dataset', a1, a2]]
-            ]);
-        });
-    });
-
-});
\ No newline at end of file
diff --git a/test/ut/spec/model/Global.test.ts b/test/ut/spec/model/Global.test.ts
index ff26ed5..632f7f1 100755
--- a/test/ut/spec/model/Global.test.ts
+++ b/test/ut/spec/model/Global.test.ts
@@ -24,7 +24,7 @@ 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';
+import { EChartsOption } from '../../../../src/export/option';
 
 type OriginModelView = {
     model: SeriesModel;
@@ -119,7 +119,7 @@ describe('modelAndOptionMapping', function () {
     describe('idNoNameNo', function () {
 
         it('sameTypeNotMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -239,7 +239,7 @@ describe('modelAndOptionMapping', function () {
     describe('idSpecified', function () {
 
         it('sameTypeNotMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -270,7 +270,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -293,7 +293,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeNotMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -307,7 +307,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             const origins = saveOrigins(chart);
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -328,7 +328,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergeFull', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -342,7 +342,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             const origins = saveOrigins(chart);
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'line', data: [11]},
                     {type: 'bar', data: [22], id: 20, name: 'a'},
@@ -362,7 +362,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartial1', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -376,7 +376,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             const origins = saveOrigins(chart);
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -399,7 +399,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartial2', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -409,7 +409,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -429,7 +429,7 @@ describe('modelAndOptionMapping', function () {
 
 
         it('mergePartialDoNotMapToOtherId', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -439,7 +439,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40}
                 ]
@@ -455,7 +455,7 @@ describe('modelAndOptionMapping', function () {
 
 
         it('idDuplicate', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -524,7 +524,7 @@ describe('modelAndOptionMapping', function () {
     describe('noIdButNameExists', function () {
 
         it('sameTypeNotMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -558,7 +558,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('sameTypeMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -581,7 +581,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeNotMerge', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -595,7 +595,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             const origins = saveOrigins(chart);
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -616,7 +616,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartialOneMapTwo', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -630,7 +630,7 @@ describe('modelAndOptionMapping', function () {
             chart.setOption(option);
 
             const origins = saveOrigins(chart);
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], id: 40},
                     {type: 'line', data: [333]},
@@ -654,7 +654,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('differentTypeMergePartialTwoMapOne', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -664,7 +664,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], name: 'a'},
                     {type: 'line', data: [333]},
@@ -684,7 +684,7 @@ describe('modelAndOptionMapping', function () {
 
         it('mergePartialCanMapToOtherName', function () {
             // Consider case: axis.name = 'some label', which can be overwritten.
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 series: [
@@ -694,7 +694,7 @@ describe('modelAndOptionMapping', function () {
             };
             chart.setOption(option);
 
-            const option2: EChartsFullOption = {
+            const option2: EChartsOption = {
                 series: [
                     {type: 'bar', data: [444], name: 40},
                     {type: 'bar', data: [999], name: 40},
@@ -720,7 +720,7 @@ describe('modelAndOptionMapping', function () {
     describe('ohters', function () {
 
         it('aBugCase', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 series: [
                     {
                         type: 'pie',
@@ -790,7 +790,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('color', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 backgroundColor: 'rgba(1,1,1,1)',
                 xAxis: {data: ['a']},
                 yAxis: {},
@@ -812,7 +812,7 @@ describe('modelAndOptionMapping', function () {
         });
 
         it('innerId', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: {data: ['a']},
                 yAxis: {},
                 toolbox: {
diff --git a/test/ut/spec/model/componentDependency.test.ts b/test/ut/spec/model/componentDependency.test.ts
new file mode 100755
index 0000000..31e2f6b
--- /dev/null
+++ b/test/ut/spec/model/componentDependency.test.ts
@@ -0,0 +1,240 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+import ComponentModel, { ComponentModelConstructor } from '../../../../src/model/Component';
+import { ComponentMainType } from '../../../../src/util/types';
+
+const componentModelConstructor = ComponentModel as ComponentModelConstructor;
+
+function extendModel(type: string, dependencies?: string[]) {
+    class SubModel extends ComponentModel {
+        static type: string = type;
+        type: string = type;
+        static dependencies = dependencies || [];
+    };
+    ComponentModel.registerClass(SubModel);
+    return SubModel;
+}
+
+describe('componentDependency', function () {
+
+    let idx = 0;
+
+    function makeTypes(count: number): string[] {
+        const arr = [];
+        for (let i = 0; i < count; i++) {
+            arr.push('type_' + idx++);
+        }
+        return arr;
+    }
+
+    type TopoResultItem = [ComponentMainType, ComponentMainType[]];
+
+    it('topologicalTravel_base', function () {
+        const [m1, a1, a2] = makeTypes(3);
+        extendModel(m1, [a1, a2]);
+        extendModel(a1);
+        extendModel(a2);
+        const result: TopoResultItem[] = [];
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        componentModelConstructor.topologicalTravel(
+            [m1, a1, a2],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
+    });
+
+    it('topologicalTravel_a1IsAbsent', function () {
+        const [m1, a1, a2] = makeTypes(3);
+        extendModel(m1, [a1, a2]);
+        extendModel(a2);
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        const result: TopoResultItem[] = [];
+        componentModelConstructor.topologicalTravel(
+            [m1, a2],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a2, ['dataset']], [m1, ['dataset', a1, a2]]]);
+    });
+
+    it('topologicalTravel_empty', function () {
+        const [m1, a1, a2] = makeTypes(3);
+        extendModel(m1, [a1, a2]);
+        extendModel(a1);
+        extendModel(a2);
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        const result: TopoResultItem[] = [];
+        componentModelConstructor.topologicalTravel(
+            [],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([]);
+    });
+
+    it('topologicalTravel_isolate', function () {
+        const [m1, a1, a2] = makeTypes(3);
+        extendModel(a2);
+        extendModel(a1);
+        extendModel(m1, [a2]);
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        const result: TopoResultItem[] = [];
+        componentModelConstructor.topologicalTravel(
+            [a1, a2, m1],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a1, ['dataset']], [a2, ['dataset']], [m1, ['dataset', a2]]]);
+    });
+
+    it('topologicalTravel_diamond', function () {
+        const [m1, a1, a2, a3] = makeTypes(4);
+        extendModel(a1, []);
+        extendModel(a2, [a1]);
+        extendModel(a3, [a1]);
+        extendModel(m1, [a2, a3]);
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        const result: TopoResultItem[] = [];
+        componentModelConstructor.topologicalTravel(
+            [m1, a1, a2, a3],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual(
+            [[a1, ['dataset']],
+            [a3, ['dataset', a1]],
+            [a2, ['dataset', a1]],
+            [m1, ['dataset', a2, a3]]
+        ]);
+    });
+
+    it('topologicalTravel_loop', function () {
+        const [m1, m2, a1, a2, a3] = makeTypes(5);
+        extendModel(m1, [a1, a2]);
+        extendModel(m2, [m1, a2]);
+        extendModel(a1, [m2, a2, a3]);
+        extendModel(a2);
+        extendModel(a3);
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        expect(function () {
+            componentModelConstructor.topologicalTravel(
+                [m1, m2, a1],
+                allList,
+                () => {}
+            );
+        }).toThrowError(/Circular/);
+    });
+
+    it('topologicalTravel_multipleEchartsInstance', function () {
+        const [m1, m2, a1, a2] = makeTypes(4);
+        extendModel(m1, [a1, a2]);
+        extendModel(a1);
+        extendModel(a2);
+        let allList = componentModelConstructor.getAllClassMainTypes();
+        let result: TopoResultItem[] = [];
+        componentModelConstructor.topologicalTravel(
+            [m1, a1, a2],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]]]);
+
+        result = [];
+        extendModel(m2, [a1, m1]);
+        allList = componentModelConstructor.getAllClassMainTypes();
+        componentModelConstructor.topologicalTravel(
+            [m2, m1, a1, a2],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual(
+            [[a2, ['dataset']], [a1, ['dataset']], [m1, ['dataset', a1, a2]], [m2, ['dataset', a1, m1]]]
+        );
+    });
+
+    it('topologicalTravel_missingSomeNodeButHasDependencies', function () {
+        const [m1, a1, a2, a3, a4] = makeTypes(5);
+        extendModel(m1, [a1, a2]);
+        extendModel(a2, [a3]);
+        extendModel(a3);
+        extendModel(a4);
+        let result: TopoResultItem[] = [];
+        let allList = componentModelConstructor.getAllClassMainTypes();
+        componentModelConstructor.topologicalTravel(
+            [a3, m1],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
+        result = [];
+        allList = componentModelConstructor.getAllClassMainTypes();
+        componentModelConstructor.topologicalTravel(
+            [m1, a3],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual([[a3, ['dataset']], [a2, ['dataset', a3]], [m1, ['dataset', a1, a2]]]);
+    });
+
+    it('topologicalTravel_subType', function () {
+        const [m1, a1, a2, a3, a4] = makeTypes(5);
+        extendModel(m1, [a1, a2]);
+        extendModel(a1 + '.aaa', [a2]);
+        extendModel(a1 + '.bbb', [a3, a4]);
+        extendModel(a2);
+        extendModel(a3);
+        extendModel(a4);
+        const result: TopoResultItem[] = [];
+        const allList = componentModelConstructor.getAllClassMainTypes();
+        componentModelConstructor.topologicalTravel(
+            [m1, a1, a2, a4],
+            allList,
+            function (componentType, dependencies) {
+                result.push([componentType, dependencies]);
+            }
+        );
+        expect(result).toEqual(
+            [[a4, ['dataset']],
+            [a2, ['dataset']],
+            [a1, ['dataset', a2, a3, a4]],
+            [m1, ['dataset', a1, a2]]
+        ]);
+    });
+});
\ No newline at end of file
diff --git a/test/ut/spec/model/timelineMediaOptions.test.ts b/test/ut/spec/model/timelineMediaOptions.test.ts
index 8bcb342..d0bf402 100755
--- a/test/ut/spec/model/timelineMediaOptions.test.ts
+++ b/test/ut/spec/model/timelineMediaOptions.test.ts
@@ -24,7 +24,7 @@ import { ParsedValue } from '../../../../src/util/types';
 import { LegendOption } from '../../../../src/component/legend/LegendModel';
 import TimelineModel from '../../../../src/component/timeline/TimelineModel';
 import { createChart, getECModel } from '../../core/utHelper';
-import { EChartsFullOption } from '../../../../src/option';
+import { EChartsOption } from '../../../../src/export/option';
 
 
 describe('timelineMediaOptions', function () {
@@ -36,7 +36,7 @@ describe('timelineMediaOptions', function () {
         return getECModel(chart).getComponent('series', seriesIndex) as SeriesModel;
     }
     function getLegendOption(chart: EChartsType): LegendOption {
-        return getECModel(chart).getComponent('legend', 0).option;
+        return getECModel(chart).getComponent('legend', 0).option as LegendOption;
     }
     function getTimelineComponent(chart: EChartsType): TimelineModel {
         return getECModel(chart).getComponent('timeline', 0) as TimelineModel;
@@ -60,7 +60,7 @@ describe('timelineMediaOptions', function () {
     describe('parse_timeline_media_option', function () {
 
         it('parse_media_has_baseOption_has_default', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 baseOption: {
                     xAxis: { data: ['a'] },
                     yAxis: {},
@@ -88,7 +88,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_media_no_baseOption_has_default', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: { data: ['a'] },
                 yAxis: {},
                 legend: { left: 10 },
@@ -112,7 +112,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_media_no_baseOption_no_default', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 xAxis: { data: ['a'] },
                 yAxis: {},
                 legend: { left: 10 },
@@ -132,7 +132,7 @@ describe('timelineMediaOptions', function () {
         });
 
         it('parse_timeline_media_has_baseOption', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 baseOption: {
                     timeline: { axisType: 'category' },
                     xAxis: { data: ['a'] },
@@ -166,13 +166,13 @@ describe('timelineMediaOptions', function () {
             expect(getData0(chart, 0)).toEqual(88);
             expect(getLegendOption(chart).left).toEqual(50);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
             expect(getLegendOption(chart).left).toEqual(50);
         });
 
         it('parse_timeline_media_no_baseOption', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 timeline: { axisType: 'category' },
                 xAxis: { data: ['a'] },
                 yAxis: {},
@@ -202,13 +202,13 @@ describe('timelineMediaOptions', function () {
             expect(getData0(chart, 0)).toEqual(88);
             expect(getLegendOption(chart).left).toEqual(50);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
             expect(getLegendOption(chart).left).toEqual(50);
         });
 
         it('parse_timeline_has_baseOption', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 baseOption: {
                     timeline: { axisType: 'category' },
                     xAxis: { data: ['a'] },
@@ -227,12 +227,12 @@ describe('timelineMediaOptions', function () {
             expect(getLegendOption(chart).right).not.toEqual(123);
             expect(getTimelineComponent(chart) != null).toEqual(true);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
         });
 
         it('parse_timeline_has_baseOption_compat', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 timeline: { axisType: 'category' },
                 baseOption: {
                     xAxis: { data: ['a'] },
@@ -251,12 +251,12 @@ describe('timelineMediaOptions', function () {
             expect(getLegendOption(chart).right).not.toEqual(123);
             expect(getTimelineComponent(chart) != null).toEqual(true);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
         });
 
         it('parse_timeline_has_baseOption_compat', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 timeline: { axisType: 'category' },
                 baseOption: {
                     xAxis: { data: ['a'] },
@@ -275,12 +275,12 @@ describe('timelineMediaOptions', function () {
             expect(getLegendOption(chart).right).not.toEqual(123);
             expect(getTimelineComponent(chart) != null).toEqual(true);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
         });
 
         it('parse_timeline_no_baseOption', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 timeline: { axisType: 'category' },
                 xAxis: { data: ['a'] },
                 yAxis: {},
@@ -296,7 +296,7 @@ describe('timelineMediaOptions', function () {
             expect(getLegendOption(chart).right).not.toEqual(123);
             expect(getTimelineComponent(chart) != null).toEqual(true);
 
-            chart.setOption({ timeline: { currentIndex: 1 } });
+            chart.setOption<EChartsOption>({ timeline: { currentIndex: 1 } });
             expect(getData0(chart, 0)).toEqual(99);
         });
 
@@ -310,7 +310,7 @@ describe('timelineMediaOptions', function () {
     describe('timeline_onceMore', function () {
 
         it('timeline_setOptionOnceMore_baseOption', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 baseOption: {
                     timeline: {
                         axisType: 'category',
@@ -344,7 +344,7 @@ describe('timelineMediaOptions', function () {
             expect(getData0(chart, 0)).toEqual(11);
             expect(getData0(chart, 1)).toEqual(22);
 
-            chart.setOption({
+            chart.setOption<EChartsOption>({
                 xAxis: {data: ['c']},
                 timeline: {
                     currentIndex: 1
@@ -358,7 +358,7 @@ describe('timelineMediaOptions', function () {
 
 
         it('timeline_setOptionOnceMore_substitudeTimelineOptions', function () {
-            const option: EChartsFullOption = {
+            const option: EChartsOption = {
                 baseOption: {
                     timeline: {
                         axisType: 'category',
@@ -416,7 +416,7 @@ describe('timelineMediaOptions', function () {
             expect(getData0(chart, 0)).toEqual(1111);
             expect(getData0(chart, 1)).toEqual(2222);
 
-            chart.setOption({
+            chart.setOption<EChartsOption>({
                 timeline: {
                     currentIndex: 0
                 }
@@ -425,7 +425,7 @@ describe('timelineMediaOptions', function () {
             expect(getData0(chart, 0)).toEqual(55);
             expect(getData0(chart, 1)).toEqual(66);
 
-            chart.setOption({
+            chart.setOption<EChartsOption>({
                 timeline: {
                     currentIndex: 2
                 }
diff --git a/test/ut/spec/series/custom.test.ts b/test/ut/spec/series/custom.test.ts
index ec4565e..0cc7874 100644
--- a/test/ut/spec/series/custom.test.ts
+++ b/test/ut/spec/series/custom.test.ts
@@ -20,7 +20,7 @@
 import { EChartsType } from '../../../../src/echarts';
 import { createChart } from '../../core/utHelper';
 import { ZRColor } from '../../../../src/util/types';
-import { CustomSeriesRenderItemAPI, CustomSeriesRenderItemParams } from '../../../../src/chart/custom';
+import { CustomSeriesRenderItemAPI, CustomSeriesRenderItemParams } from '../../../../src/chart/custom/install';
 
 
 describe('custom_series', function () {

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