| /* | 
 | * 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 SeriesDimensionDefine from '@/src/data/SeriesDimensionDefine'; | 
 | import createDimensions from '@/src/data/helper/createDimensions'; | 
 | import { createSource } from '@/src/data/Source'; | 
 | import { SOURCE_FORMAT_ARRAY_ROWS, SERIES_LAYOUT_BY_COLUMN } from '@/src/util/types'; | 
 |  | 
 | type ParametersOfCreateDimensions = Parameters<typeof createDimensions>; | 
 |  | 
 | describe('createDimensions', function () { | 
 |  | 
 |     function doCreateDimensions( | 
 |         source: ParametersOfCreateDimensions[0], | 
 |         opt: ParametersOfCreateDimensions[1] | 
 |     ): SeriesDimensionDefine[] { | 
 |         const result = createDimensions(source, opt); | 
 |         for (let i = 0; i < result.dimensions.length; i++) { | 
 |             const item = result.dimensions[i]; | 
 |             if (item && item.hasOwnProperty('dimsDef') && (item as any).dimsDef == null) { | 
 |                 delete (item as any).dimsDef; | 
 |             } | 
 |         } | 
 |         return result.dimensions; | 
 |     } | 
 |  | 
 |     it('namesMoreThanDimCount', function () { | 
 |         const sysDims = [ | 
 |             { | 
 |                 'name': 'x', | 
 |                 'type': 'ordinal' as const, | 
 |                 'otherDims': { | 
 |                     'tooltip': false as const, | 
 |                     'itemName': 0 | 
 |                 }, | 
 |                 'dimsDef': [ | 
 |                     'base' | 
 |                 ] | 
 |             }, | 
 |             { | 
 |                 'name': 'y', | 
 |                 'type': 'float' as const, | 
 |                 'dimsDef': [ | 
 |                     'open', | 
 |                     'close', | 
 |                     'lowest', | 
 |                     'highest' | 
 |                 ] | 
 |             } | 
 |         ]; | 
 |  | 
 |         const source = createSource( | 
 |             [ | 
 |                 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] | 
 |             ], | 
 |             { | 
 |                 seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, | 
 |                 sourceHeader: 0, | 
 |                 dimensions: void 0 | 
 |             }, | 
 |             SOURCE_FORMAT_ARRAY_ROWS | 
 |         ); | 
 |  | 
 |         const opt = { | 
 |             'coordDimensions': sysDims, | 
 |             'dimensionsDefine': [ | 
 |                 { | 
 |                     'name': 'date', | 
 |                     'displayName': 'date' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'open', | 
 |                     'displayName': 'open' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'high', | 
 |                     'displayName': 'high' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'low', | 
 |                     'displayName': 'low' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'close', | 
 |                     'displayName': 'close' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'volume', | 
 |                     'displayName': 'volume' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'haOpen', | 
 |                     'displayName': 'haOpen' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'haHigh', | 
 |                     'displayName': 'haHigh' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'haLow', | 
 |                     'displayName': 'haLow' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'haClose', | 
 |                     'displayName': 'haClose' | 
 |                 }, | 
 |                 { | 
 |                     'name': 'sma9', | 
 |                     'displayName': 'sma9' | 
 |                 } | 
 |             ], | 
 |             'encodeDefine': { | 
 |                 'x': 'date', | 
 |                 'y': [ | 
 |                     'haOpen', | 
 |                     'haClose', | 
 |                     'haLow', | 
 |                     'haHigh' | 
 |                 ], | 
 |                 'tooltip': [ | 
 |                     'open', | 
 |                     'high', | 
 |                     'low', | 
 |                     'close' | 
 |                 ] | 
 |             }, | 
 |             'dimensionsCount': 5 | 
 |         }; | 
 |  | 
 |         const result: SeriesDimensionDefine[] = [ | 
 |             { | 
 |                 'otherDims': { | 
 |                     'tooltip': false, | 
 |                     'itemName': 0 | 
 |                 }, | 
 |                 'displayName': 'date', | 
 |                 'name': 'date', | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'type': 'ordinal', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': { | 
 |                     'tooltip': 0 | 
 |                 }, | 
 |                 'displayName': 'open', | 
 |                 'name': 'open', | 
 |                 'coordDim': 'value', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 1 | 
 |             }, | 
 |             { | 
 |                 'otherDims': { | 
 |                     'tooltip': 1 | 
 |                 }, | 
 |                 'displayName': 'high', | 
 |                 'name': 'high', | 
 |                 'coordDim': 'value0', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 2 | 
 |             }, | 
 |             { | 
 |                 'otherDims': { | 
 |                     'tooltip': 2 | 
 |                 }, | 
 |                 'displayName': 'low', | 
 |                 'name': 'low', | 
 |                 'coordDim': 'value1', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 3 | 
 |             }, | 
 |             { | 
 |                 'otherDims': { | 
 |                     'tooltip': 3 | 
 |                 }, | 
 |                 'displayName': 'close', | 
 |                 'name': 'close', | 
 |                 'coordDim': 'value2', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 4 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'volume', | 
 |                 'name': 'volume', | 
 |                 'coordDim': 'value3', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 5 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'haOpen', | 
 |                 'name': 'haOpen', | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'type': 'float', | 
 |                 'storeDimIndex': 6 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'haHigh', | 
 |                 'name': 'haHigh', | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 3, | 
 |                 'type': 'float', | 
 |                 'storeDimIndex': 7 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'haLow', | 
 |                 'name': 'haLow', | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 2, | 
 |                 'type': 'float', | 
 |                 'storeDimIndex': 8 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'haClose', | 
 |                 'name': 'haClose', | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 1, | 
 |                 'type': 'float', | 
 |                 'storeDimIndex': 9 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'displayName': 'sma9', | 
 |                 'name': 'sma9', | 
 |                 'coordDim': 'value4', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'storeDimIndex': 10 | 
 |             } | 
 |         ]; | 
 |  | 
 |         expect(doCreateDimensions(source, opt)).toEqual(result.map(a => new SeriesDimensionDefine(a))); | 
 |     }); | 
 |  | 
 |  | 
 |     it('differentData', function () { | 
 |         function doTest( | 
 |             source: ParametersOfCreateDimensions[0], | 
 |             opt: ParametersOfCreateDimensions[1], | 
 |             result: SeriesDimensionDefine[] | 
 |         ) { | 
 |             expect(doCreateDimensions(source, opt)).toEqual(result.map(a => new SeriesDimensionDefine(a))); | 
 |         } | 
 |  | 
 |         // test dimcount | 
 |         doTest([], { coordDimensions: ['x', 'y']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'y', | 
 |                 'storeDimIndex': 1 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([12], { coordDimensions: ['x', 'y']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'y', | 
 |                 'storeDimIndex': 1 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([12, 4], { coordDimensions: ['x', 'y']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'y', | 
 |                 'storeDimIndex': 1 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([[32, 55]], { coordDimensions: ['x']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([[32, 55]], { coordDimensions: ['x', 'y', 'z']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'y', | 
 |                 'storeDimIndex': 1 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'z', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'z', | 
 |                 'storeDimIndex': 2 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([[32, 55], [99, 11]], { coordDimensions: ['x']}, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             } | 
 |         ]); | 
 |  | 
 |         doTest([[32, 55], [99, 11]], { | 
 |             dimensionsCount: 4, | 
 |             coordDimensions: ['x', 'y'] | 
 |         }, [ | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'x', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'x', | 
 |                 'storeDimIndex': 0 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'y', | 
 |                 'coordDimIndex': 0, | 
 |                 'name': 'y', | 
 |                 'storeDimIndex': 1 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'value', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'name': 'value', | 
 |                 'storeDimIndex': 2 | 
 |             }, | 
 |             { | 
 |                 'otherDims': {}, | 
 |                 'coordDim': 'value0', | 
 |                 'coordDimIndex': 0, | 
 |                 'isExtraCoord': true, | 
 |                 'name': 'value0', | 
 |                 'storeDimIndex': 3 | 
 |             } | 
 |         ]); | 
 |     }); | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     it('differentSysDims', function () { | 
 |         function doTest( | 
 |             source: ParametersOfCreateDimensions[0], | 
 |             opt: ParametersOfCreateDimensions[1], | 
 |             result: SeriesDimensionDefine[] | 
 |         ) { | 
 |             expect(doCreateDimensions(source, opt)).toEqual(result.map(a => new SeriesDimensionDefine(a))); | 
 |         } | 
 |  | 
 |         const data = [ | 
 |             ['iw', 332, 4434, 323, 59], | 
 |             ['vrr', 44, 11, 144, 55] | 
 |         ]; | 
 |  | 
 |         doTest( | 
 |             data, { coordDimensions: ['x', 'y'] }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'x', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'x', | 
 |                     'type': 'ordinal', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'y', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'y', | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, { coordDimensions: ['value'] }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'value', | 
 |                     'type': 'ordinal', | 
 |                     'storeDimIndex': 0 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { coordDimensions: [{name: 'time', type: 'time' as const}, 'value'] }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'name': 'time', | 
 |                     'type': 'time', | 
 |                     'coordDimIndex': 0, | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDim': 'time', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'value', | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, { | 
 |                 coordDimensions: [{ | 
 |                     name: 'y', | 
 |                     otherDims: { | 
 |                         tooltip: false | 
 |                     }, | 
 |                     dimsDef: ['base'] | 
 |                 }, { | 
 |                     name: 'x', | 
 |                     dimsDef: ['open', 'close'] | 
 |                 }] | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': false | 
 |                     }, | 
 |                     'name': 'base', | 
 |                     'defaultTooltip': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'y', | 
 |                     'type': 'ordinal', | 
 |                     'displayName': 'base', | 
 |                     'ordinalMeta': undefined, | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'name': 'open', | 
 |                     'ordinalMeta': undefined, | 
 |                     'defaultTooltip': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'x', | 
 |                     'displayName': 'open', | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, { | 
 |                 dimensionsDefine: ['基础', '打开', '关闭'], | 
 |                 coordDimensions: [{ | 
 |                     name: 'y', | 
 |                     otherDims: { | 
 |                         tooltip: false | 
 |                     }, | 
 |                     dimsDef: ['base'] | 
 |                 }, { | 
 |                     name: 'x', | 
 |                     dimsDef: ['open', 'close'] | 
 |                 }], | 
 |                 encodeDefine: { | 
 |                     tooltip: [1, 2, 0] | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': 2 | 
 |                     }, | 
 |                     'name': '基础', | 
 |                     'displayName': '基础', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'y', | 
 |                     'type': 'ordinal', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': 0 | 
 |                     }, | 
 |                     'name': '打开', | 
 |                     'displayName': '打开', | 
 |                     'coordDimIndex': 0, | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDim': 'x', | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': 1 | 
 |                     }, | 
 |                     'name': '关闭', | 
 |                     'displayName': '关闭', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 1, | 
 |                     'coordDim': 'x', | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, { | 
 |                 coordDimensions: [{ | 
 |                     name: 'y', | 
 |                     otherDims: { | 
 |                         tooltip: false | 
 |                     }, | 
 |                     dimsDef: ['base'] | 
 |                 }, { | 
 |                     name: 'x', | 
 |                     dimsDef: ['open', 'close'] | 
 |                 }], | 
 |                 dimensionsDefine: ['基础', null, '关闭'], | 
 |                 encodeDefine: { | 
 |                     x: [0, 4] | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '基础', | 
 |                     'name': '基础', | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'x', | 
 |                     'ordinalMeta': undefined, | 
 |                     'type': 'ordinal', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': false | 
 |                     }, | 
 |                     'name': 'base', | 
 |                     'displayName': 'base', | 
 |                     'ordinalMeta': undefined, | 
 |                     'defaultTooltip': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'y', | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'name': '关闭', | 
 |                     'displayName': '关闭', | 
 |                     'coordDimIndex': 0, | 
 |                     'isExtraCoord': true, | 
 |                     'coordDim': 'value', | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |     }); | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     it('dimsDef', function () { | 
 |         function doTest( | 
 |             source: ParametersOfCreateDimensions[0], | 
 |             opt: ParametersOfCreateDimensions[1], | 
 |             result: SeriesDimensionDefine[] | 
 |         ) { | 
 |             expect(doCreateDimensions(source, opt)).toEqual(result.map(a => new SeriesDimensionDefine(a))); | 
 |         } | 
 |  | 
 |         const data = [['iw', 332, 4434, 323, 59], ['vrr', 44, 11, 144, 55]]; | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: ['挨克思', null, '歪溜'], | 
 |                 coordDimensions: ['x', 'y', 'value'] | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '挨克思', | 
 |                     'name': '挨克思', | 
 |                     'type': 'ordinal', | 
 |                     'coordDim': 'x', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'y', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'y', | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: ['挨克思', null, {type: 'ordinal' as const}], | 
 |                 coordDimensions: ['x', 'y', 'value'] | 
 |             }, // no name but only type | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '挨克思', | 
 |                     'name': '挨克思', | 
 |                     'type': 'ordinal', | 
 |                     'coordDim': 'x', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'y', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'y', | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'name': 'value', | 
 |                     'coordDim': 'value', | 
 |                     'type': 'ordinal', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: [{name: '泰亩', type: 'ordinal'}, {name: '歪溜', type: 'float'}], | 
 |                 coordDimensions: [{name: 'time', type: 'time' as const}, 'value'] | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '泰亩', | 
 |                     'name': '泰亩', | 
 |                     'type': 'ordinal', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'time', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'type': 'float', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         // Duplicate name | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: [{name: '泰亩', type: 'ordinal'}, {name: '泰亩', type: 'float'}], | 
 |                 coordDimensions: [{name: 'time', type: 'time' as const}, 'value'] | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '泰亩', | 
 |                     'name': '泰亩', | 
 |                     'type': 'ordinal', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'time', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '泰亩', | 
 |                     'name': '泰亩0', | 
 |                     'type': 'float', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |     }); | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     it('encodeDef', function () { | 
 |         function doTest( | 
 |             source: ParametersOfCreateDimensions[0], | 
 |             opt: ParametersOfCreateDimensions[1], | 
 |             result: SeriesDimensionDefine[] | 
 |         ) { | 
 |             expect(doCreateDimensions(source, opt)).toEqual(result.map(a => new SeriesDimensionDefine(a))); | 
 |         } | 
 |  | 
 |         const data = [['iw', 332, 4434, 323, 'd8', 59], ['vrr', 44, 11, 144, '-', 55]]; | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 encodeDefine: { | 
 |                     x: 2, | 
 |                     y: [1, 4], | 
 |                     tooltip: 2, | 
 |                     label: [3, 5] | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'value', | 
 |                     'isExtraCoord': true, | 
 |                     'type': 'ordinal', | 
 |                     'storeDimIndex': 0 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: ['挨克思', null, '歪溜'], | 
 |                 encodeDefine: { | 
 |                     x: 2, | 
 |                     y: [1, 4], | 
 |                     tooltip: 2, | 
 |                     label: [3, 5] | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '挨克思', | 
 |                     'name': '挨克思', | 
 |                     'type': 'ordinal', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'isExtraCoord': true, | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'y', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'y', | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': 0 | 
 |                     }, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'coordDim': 'x', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 dimensionsDefine: ['挨克思', null, '歪溜'], | 
 |                 coordDimensions: ['x', {name: 'y', type: 'time' as const}, 'z'], | 
 |                 encodeDefine: { | 
 |                     x: 2, | 
 |                     y: [1, 4], | 
 |                     tooltip: 2, | 
 |                     label: [3, 5] | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '挨克思', | 
 |                     'name': '挨克思', | 
 |                     'type': 'ordinal', | 
 |                     'coordDim': 'z', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'coordDim': 'y', | 
 |                     'coordDimIndex': 0, | 
 |                     'name': 'y', | 
 |                     'type': 'time', | 
 |                     'ordinalMeta': undefined, | 
 |                     'storeDimIndex': 1 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': { | 
 |                         'tooltip': 0 | 
 |                     }, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'coordDim': 'x', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 2 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 // dimsDef type 'ordinal' has higher priority then sysDims type 'time'. | 
 |                 dimensionsDefine: [{name: '泰亩', type: 'ordinal'}, {name: '歪溜', type: 'float'}], | 
 |                 coordDimensions: [{name: 'time', type: 'time' as const}, 'value'], | 
 |                 encodeDefine: { | 
 |                     tooltip: 2 | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '泰亩', | 
 |                     'name': '泰亩', | 
 |                     'type': 'ordinal', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'time', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'type': 'float', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |         doTest( | 
 |             data, | 
 |             { | 
 |                 // dimsDef type 'ordinal' has higher priority then sysDims type 'time'. | 
 |                 dimensionsDefine: [{name: '泰亩', type: 'ordinal'}, {name: '歪溜', type: 'float'}], | 
 |                 coordDimensions: [{name: 'time', type: 'time' as const}, 'value'], | 
 |                 encodeDefine: { | 
 |                     tooltip: 2 | 
 |                 } | 
 |             }, | 
 |             [ | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '泰亩', | 
 |                     'name': '泰亩', | 
 |                     'type': 'ordinal', | 
 |                     'ordinalMeta': undefined, | 
 |                     'coordDimIndex': 0, | 
 |                     'coordDim': 'time', | 
 |                     'storeDimIndex': 0 | 
 |                 }, | 
 |                 { | 
 |                     'otherDims': {}, | 
 |                     'displayName': '歪溜', | 
 |                     'name': '歪溜', | 
 |                     'type': 'float', | 
 |                     'coordDim': 'value', | 
 |                     'coordDimIndex': 0, | 
 |                     'storeDimIndex': 1 | 
 |                 } | 
 |             ] | 
 |         ); | 
 |  | 
 |     }); | 
 |  | 
 | }); |