| /* | |
| * 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 { init, use, EChartsType } from '@/src/export/core'; | |
| import { | |
| PieChart | |
| } from '@/src/export/charts'; | |
| import { | |
| TitleComponent | |
| } from '@/src/export/components'; | |
| import { | |
| CanvasRenderer | |
| } from '@/src/export/renderers'; | |
| use([PieChart, TitleComponent, CanvasRenderer]); | |
| import { EChartsOption } from '@/src/export/option'; | |
| function createChart(theme?: object): EChartsType { | |
| const el = document.createElement('div'); | |
| Object.defineProperty(el, 'clientWidth', { | |
| get() { | |
| return 500; | |
| } | |
| }); | |
| Object.defineProperty(el, 'clientHeight', { | |
| get() { | |
| return 400; | |
| } | |
| }); | |
| const chart = init(el, theme); | |
| return chart; | |
| }; | |
| function makeComponentError(componentName: string, componentImportName: string) { | |
| return `[ECharts] Component ${componentName} is used but not imported. | |
| import { ${componentImportName} } from 'echarts/components'; | |
| echarts.use([${componentImportName}]);`; | |
| } | |
| function makeSerieError(seriesName: string, seriesImportName: string) { | |
| return `[ECharts] Series ${seriesName} is used but not imported. | |
| import { ${seriesImportName} } from 'echarts/charts'; | |
| echarts.use([${seriesImportName}]);`; | |
| } | |
| // !!!!IMPORTANTE NOTE: | |
| // DO NOT test on the same component twice. | |
| // Because error message will be cached. It will not report on the same component twice. | |
| describe('model_componentMissing', function () { | |
| const oldConsoleErr = console.error; | |
| it('Should report grid component missing error', function () { | |
| const chart = createChart(); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({ | |
| xAxis: {}, | |
| yAxis: {}, | |
| series: [] | |
| }); | |
| expect(console.error).toHaveBeenCalledWith( | |
| makeComponentError('xAxis', 'GridComponent') | |
| ); | |
| console.error = oldConsoleErr; | |
| }); | |
| it('Should report dataZoom component missing error', function () { | |
| const chart = createChart(); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({ | |
| dataZoom: {} | |
| }); | |
| expect(console.error).toHaveBeenCalledWith( | |
| makeComponentError('dataZoom', 'DataZoomComponent') | |
| ); | |
| console.error = oldConsoleErr; | |
| }); | |
| it('Should not report title component missing error', function () { | |
| const chart = createChart(); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({ | |
| title: {}, | |
| series: [] | |
| }); | |
| expect(console.error).not.toBeCalled(); | |
| console.error = oldConsoleErr; | |
| }); | |
| it('Should report funnel series missing error', function () { | |
| const chart = createChart(); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({ | |
| series: [{ | |
| type: 'funnel' | |
| }] | |
| }); | |
| expect(console.error).toHaveBeenCalledWith( | |
| makeSerieError('funnel', 'FunnelChart') | |
| ); | |
| console.error = oldConsoleErr; | |
| }); | |
| it('Should not report pie series missing error', function () { | |
| const chart = createChart(); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({ | |
| series: [{ | |
| type: 'pie' | |
| }] | |
| }); | |
| expect(console.error).not.toBeCalled(); | |
| console.error = oldConsoleErr; | |
| }); | |
| it('Should not report visualMap component missing error when using theme', function () { | |
| const chart = createChart({ | |
| visualMap: { | |
| borderColor: '#71708A' | |
| } | |
| }); | |
| console.error = jest.fn(); | |
| chart.setOption<EChartsOption>({}); | |
| expect(console.error).not.toBeCalled(); | |
| console.error = oldConsoleErr; | |
| }); | |
| }); |