blob: 67e19322b370853eb15326b046b39cd5cdc2138b [file] [log] [blame]
/*
* 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;
});
});