|  | /* | 
|  | * 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 { EChartsType } from '@/src/echarts'; | 
|  | import { createChart, removeChart, getECModel } from '../../core/utHelper'; | 
|  | import { EChartsOption } from '@/src/export/option'; | 
|  | import { retrieveRawValue } from '@/src/data/helper/dataProvider'; | 
|  |  | 
|  |  | 
|  | describe('dataTransform', function () { | 
|  |  | 
|  | let chart: EChartsType; | 
|  |  | 
|  | beforeEach(function () { | 
|  | chart = createChart({ | 
|  | width: 200, | 
|  | height: 150 | 
|  | }); | 
|  | }); | 
|  |  | 
|  | afterEach(function () { | 
|  | removeChart(chart); | 
|  | }); | 
|  |  | 
|  | function makeDatasetSourceDetection() { | 
|  | return [ | 
|  | ['product', '2012', '2013', '2014', '2015'], | 
|  | ['AAA', 41.1, 30.4, 65.1, 53.3], | 
|  | ['BBB', 86.5, 92.1, 85.7, 83.1], | 
|  | ['CCC', 24.1, 67.2, 79.5, 86.4] | 
|  | ]; | 
|  | } | 
|  |  | 
|  | function makeDatasetSourceNonDetectionByRow() { | 
|  | return { | 
|  | dimensions: ['2012', '2013', '2014', '2015'], | 
|  | source: [ | 
|  | [41.1, 30.4, 65.1, 53.3], | 
|  | [86.5, 92.1, 85.7, 83.1], | 
|  | [24.1, 67.2, 79.5, 86.4] | 
|  | ] | 
|  | }; | 
|  | } | 
|  |  | 
|  | it('forbid_seriesLayoutBy_row', function () { | 
|  | const option: EChartsOption = { | 
|  | dataset: [{ | 
|  | source: makeDatasetSourceDetection(), | 
|  | // This config should cause error thrown. | 
|  | seriesLayoutBy: 'row' | 
|  | }, { | 
|  | transform: { type: 'filter', config: { dimension: 0, ne: '' } } | 
|  | }], | 
|  | xAxis: { type: 'category' }, | 
|  | yAxis: {}, | 
|  | series: { type: 'bar', datasetIndex: 1 } | 
|  | }; | 
|  |  | 
|  | expect(() => { | 
|  | chart.setOption(option); | 
|  | }).toThrowError(/column/); | 
|  | }); | 
|  |  | 
|  | it('seriesLayoutBy_changed_no_transform', function () { | 
|  | const option: EChartsOption = { | 
|  | dataset: { | 
|  | source: makeDatasetSourceDetection() | 
|  | }, | 
|  | xAxis: { type: 'category' }, | 
|  | yAxis: {}, | 
|  | series: { type: 'bar', seriesLayoutBy: 'row' } | 
|  | }; | 
|  |  | 
|  | chart.setOption(option); | 
|  | const listData = getECModel(chart).getSeries()[0].getData(); | 
|  | expect(listData.getDimension(1)).toEqual('AAA'); | 
|  | expect(listData.getDimension(2)).toEqual('BBB'); | 
|  | expect(listData.getDimension(3)).toEqual('CCC'); | 
|  | }); | 
|  |  | 
|  | [{ | 
|  | transform: | 
|  | { type: 'filter', config: { dimension: 'product', '!=': 'XXX' } } | 
|  | }, { | 
|  | transform: [ | 
|  | { type: 'filter', config: { dimension: 'product', '!=': 'XXX' } }, | 
|  | { type: 'filter', config: { dimension: 'product', '!=': 'XXX' } } | 
|  | ] | 
|  | }].forEach((dataset1, itIdx) => { | 
|  | it(`seriesLayoutBy_changed_transform_detection_${itIdx}`, function () { | 
|  | const option: EChartsOption = { | 
|  | dataset: [{ | 
|  | source: makeDatasetSourceDetection() | 
|  | }, dataset1], | 
|  | xAxis: { type: 'category' }, | 
|  | yAxis: {}, | 
|  | series: { type: 'bar', datasetIndex: 1, seriesLayoutBy: 'row' } | 
|  | }; | 
|  |  | 
|  | chart.setOption(option); | 
|  | const listData = getECModel(chart).getSeries()[0].getData(); | 
|  | expect(listData.getDimension(1)).toEqual('AAA'); | 
|  | expect(listData.getDimension(2)).toEqual('BBB'); | 
|  | expect(listData.getDimension(3)).toEqual('CCC'); | 
|  | expect(listData.get('product', 0)).toEqual(0); | 
|  | expect(retrieveRawValue(listData, 0, 'product')).toEqual('2012'); | 
|  | expect(listData.get('product', 1)).toEqual(1); | 
|  | expect(retrieveRawValue(listData, 1, 'product')).toEqual('2013'); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | [{ | 
|  | transform: | 
|  | { type: 'filter', config: { dimension: 0, '!=': 'XXX' } } | 
|  | }, { | 
|  | transform: [ | 
|  | { type: 'filter', config: { dimension: 0, '!=': 'XXX' } }, | 
|  | { type: 'filter', config: { dimension: 0, '!=': 'XXX' } } | 
|  | ] | 
|  | }].forEach((dataset1, itIdx) => { | 
|  | it(`seriesLayoutBy_changed_transform_non_detection_${itIdx}`, function () { | 
|  | const sourceWrap = makeDatasetSourceNonDetectionByRow(); | 
|  | const option: EChartsOption = { | 
|  | dataset: [{ | 
|  | dimensions: sourceWrap.dimensions, | 
|  | source: sourceWrap.source | 
|  | }, dataset1], | 
|  | xAxis: {}, | 
|  | yAxis: {}, | 
|  | series: { type: 'bar', datasetIndex: 1, seriesLayoutBy: 'row' } | 
|  | }; | 
|  |  | 
|  | chart.setOption(option); | 
|  | const listData = getECModel(chart).getSeries()[0].getData(); | 
|  | expect(listData.get(listData.getDimension(0), 0)).toEqual(41.1); | 
|  | expect(listData.get(listData.getDimension(0), 1)).toEqual(30.4); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | [{ | 
|  | transform: | 
|  | { type: 'filter', config: { dimension: '2012', '!=': 'XXX' } } | 
|  | }, { | 
|  | transform: [ | 
|  | { type: 'filter', config: { dimension: '2012', '!=': 'XXX' } }, | 
|  | { type: 'filter', config: { dimension: '2012', '!=': 'XXX' } } | 
|  | ] | 
|  | }].forEach((dataset1, itIdx) => { | 
|  | it(`inherit_detected_dimensions_${itIdx}`, function () { | 
|  | const option: EChartsOption = { | 
|  | dataset: [{ | 
|  | source: makeDatasetSourceDetection() | 
|  | }, dataset1], | 
|  | xAxis: { type: 'category' }, | 
|  | yAxis: {}, | 
|  | series: { type: 'bar', datasetIndex: 1 } | 
|  | }; | 
|  |  | 
|  | chart.setOption(option); | 
|  | const listData = getECModel(chart).getSeries()[0].getData(); | 
|  | expect(listData.getDimension(0)).toEqual('product'); | 
|  | expect(listData.getDimension(1)).toEqual('2012'); | 
|  | expect(listData.getDimension(2)).toEqual('2013'); | 
|  | }); | 
|  | }); | 
|  |  | 
|  |  | 
|  | }); | 
|  |  |