|  | 
 | /* | 
 | * 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 { createChart, removeChart } from '../../core/utHelper'; | 
 | import { EChartsType, registerMap } from '../../../../src/echarts'; | 
 | import { GeoJSON } from '../../../../src/coord/geo/geoTypes'; | 
 |  | 
 |  | 
 | describe('api/containPixel', function () { | 
 |     const testGeoJson1: GeoJSON = { | 
 |         'type': 'FeatureCollection', | 
 |         'features': [ | 
 |             { | 
 |                 'type': 'Feature', | 
 |                 'geometry': { | 
 |                     'type': 'Polygon', | 
 |                     'coordinates': [ | 
 |                         [ | 
 |                             [ | 
 |                                 2000, | 
 |                                 3000 | 
 |                             ], | 
 |                             [ | 
 |                                 5000, | 
 |                                 3000 | 
 |                             ], | 
 |                             [ | 
 |                                 5000, | 
 |                                 8000 | 
 |                             ], | 
 |                             [ | 
 |                                 2000, | 
 |                                 8000 | 
 |                             ] | 
 |                         ] | 
 |                     ] | 
 |                 }, | 
 |                 'properties': { | 
 |                     'name': 'Afghanistan', | 
 |                     'childNum': 1 | 
 |                 } | 
 |             } | 
 |         ] | 
 |     }; | 
 |  | 
 |     const testGeoJson2: GeoJSON = { | 
 |         'type': 'FeatureCollection', | 
 |         'features': [ | 
 |             { | 
 |                 'type': 'Feature', | 
 |                 'geometry': { | 
 |                     'type': 'Polygon', | 
 |                     'coordinates': [ | 
 |                         [ | 
 |                             [ | 
 |                                 200, | 
 |                                 300 | 
 |                             ], | 
 |                             [ | 
 |                                 500, | 
 |                                 300 | 
 |                             ], | 
 |                             [ | 
 |                                 500, | 
 |                                 800 | 
 |                             ], | 
 |                             [ | 
 |                                 200, | 
 |                                 800 | 
 |                             ] | 
 |                         ] | 
 |                     ] | 
 |                 }, | 
 |                 'properties': { | 
 |                     'name': 'Afghanistan', | 
 |                     'childNum': 1 | 
 |                 } | 
 |             } | 
 |         ] | 
 |     }; | 
 |  | 
 |     let chart: EChartsType; | 
 |  | 
 |     beforeEach(function () { | 
 |         chart = createChart({ | 
 |             width: 200, | 
 |             height: 150 | 
 |         }); | 
 |     }); | 
 |  | 
 |     afterEach(function () { | 
 |         removeChart(chart); | 
 |     }); | 
 |  | 
 |  | 
 |     it('geo', function () { | 
 |         registerMap('test1', testGeoJson1); | 
 |         registerMap('test2', testGeoJson2); | 
 |  | 
 |         chart.setOption({ | 
 |             geo: [ | 
 |                 { | 
 |                     id: 'aa', | 
 |                     left: 10, | 
 |                     right: '50%', | 
 |                     top: 30, | 
 |                     bottom: 40, | 
 |                     map: 'test1' | 
 |                 }, | 
 |                 { | 
 |                     id: 'bb', | 
 |                     layoutCenter: ['50%', 50], | 
 |                     layoutSize: 20, | 
 |                     aspectScale: 1, | 
 |                     map: 'test2' | 
 |                 }, | 
 |                 { | 
 |                     id: 'cc', | 
 |                     aspectScale: 1, | 
 |                     left: 0, | 
 |                     width: '50%', | 
 |                     top: 0, | 
 |                     height: '50%', | 
 |                     zoom: 0.5, // test roam | 
 |                     map: 'test1' | 
 |                 } | 
 |             ], | 
 |             series: [ | 
 |                 {id: 'k1', type: 'scatter', coordinateSystem: 'geo', geoIndex: 1}, | 
 |                 {id: 'k2', type: 'scatter', coordinateSystem: 'geo'} | 
 |             ] | 
 |         }); | 
 |  | 
 |         const width = chart.getWidth(); | 
 |         // const height = chart.getWidth(); | 
 |  | 
 |         expect(chart.containPixel('geo', [15, 30])).toEqual(true); | 
 |         expect(chart.containPixel('geo', [9.5, 30])).toEqual(false); | 
 |         expect(chart.containPixel({geoIndex: 1}, [width / 2, 50])).toEqual(true); | 
 |         expect(chart.containPixel({geoIndex: 1}, [10, 20])).toEqual(false); | 
 |         expect(chart.containPixel({geoId: 'cc'}, [0, 0])).toEqual(false); | 
 |     }); | 
 |  | 
 |  | 
 |     it('map', function () { | 
 |         registerMap('test1', testGeoJson1); | 
 |         registerMap('test2', testGeoJson2); | 
 |  | 
 |         chart.setOption({ | 
 |             series: [ | 
 |                 { | 
 |                     id: 'k1', | 
 |                     type: 'map', | 
 |                     map: 'test1', | 
 |                     left: 10, | 
 |                     right: '50%', | 
 |                     top: 30, | 
 |                     bottom: 40 | 
 |                 }, | 
 |                 { | 
 |                     id: 'k2', | 
 |                     type: 'map', | 
 |                     map: 'test2', | 
 |                     layoutCenter: ['50%', 50], | 
 |                     layoutSize: 20, | 
 |                     aspectScale: 1 | 
 |                 } | 
 |             ] | 
 |         }); | 
 |  | 
 |         const width = chart.getWidth(); | 
 |  | 
 |         expect(chart.containPixel('series', [15, 30])).toEqual(true); | 
 |         expect(chart.containPixel('series', [9.5, 30])).toEqual(false); | 
 |         expect(chart.containPixel({seriesId: 'k2'}, [width / 2, 50])).toEqual(true); | 
 |         expect(chart.containPixel({seriesId: 1}, [10, 20])).toEqual(false); | 
 |     }); | 
 |  | 
 |  | 
 |     it('cartesian', function () { | 
 |         registerMap('test1', testGeoJson1); | 
 |  | 
 |         chart.setOption({ | 
 |             geo: [ // Should not affect grid converter. | 
 |                 { | 
 |                     map: 'test1' | 
 |                 } | 
 |             ], | 
 |             grid: [ | 
 |                 { | 
 |                     id: 'g0', | 
 |                     left: 10, | 
 |                     right: '50%', | 
 |                     top: 30, | 
 |                     bottom: 40 | 
 |                 }, | 
 |                 { | 
 |                     id: 'g1', | 
 |                     left: '50%', | 
 |                     right: 20, | 
 |                     top: 30, | 
 |                     bottom: 40 | 
 |                 } | 
 |             ], | 
 |             xAxis: [ | 
 |                 { | 
 |                     id: 'x0', | 
 |                     type: 'value', | 
 |                     min: -500, | 
 |                     max: 3000, | 
 |                     gridId: 'g0' | 
 |                 }, | 
 |                 { | 
 |                     id: 'x1', | 
 |                     type: 'value', | 
 |                     min: -50, | 
 |                     max: 300, | 
 |                     gridId: 'g0' | 
 |                 }, | 
 |                 { | 
 |                     id: 'x2', | 
 |                     type: 'value', | 
 |                     min: -50, | 
 |                     max: 300, | 
 |                     gridId: 'g1' | 
 |                 } | 
 |             ], | 
 |             yAxis: [ | 
 |                 { | 
 |                     id: 'y0', | 
 |                     type: 'value', | 
 |                     min: 6000, | 
 |                     max: 9000, | 
 |                     gridId: 'g0' | 
 |                 }, | 
 |                 { | 
 |                     id: 'y1', | 
 |                     type: 'value', | 
 |                     inverse: true, // test inverse | 
 |                     min: 600, | 
 |                     max: 900, | 
 |                     gridId: 'g1' | 
 |                 } | 
 |             ], | 
 |             series: [ | 
 |                 { | 
 |                     id: 'k1', | 
 |                     type: 'scatter', | 
 |                     // left: 0, | 
 |                     // right: 0, | 
 |                     // top: 0, | 
 |                     // bottom: 0, | 
 |                     data: [[1000, 700]] | 
 |                 }, | 
 |                 { | 
 |                     id: 'k2', | 
 |                     type: 'scatter', | 
 |                     // left: 0, | 
 |                     // right: 0, | 
 |                     // top: 0, | 
 |                     // bottom: 0, | 
 |                     data: [[100, 800]] | 
 |                 }, | 
 |                 { | 
 |                     id: 'j1', | 
 |                     type: 'scatter', | 
 |                     // left: 0, | 
 |                     // right: 0, | 
 |                     // top: 0, | 
 |                     // bottom: 0, | 
 |                     data: [[100, 800]], | 
 |                     xAxisIndex: 1 | 
 |                 }, | 
 |                 { | 
 |                     id: 'i1', | 
 |                     type: 'scatter', | 
 |                     // left: 0, | 
 |                     // right: 0, | 
 |                     // top: 0, | 
 |                     // bottom: 0, | 
 |                     data: [], | 
 |                     xAxisId: 'x2', | 
 |                     yAxisId: 'y1' | 
 |                 } | 
 |             ] | 
 |         }); | 
 |  | 
 |         const width = chart.getWidth(); | 
 |  | 
 |         expect(chart.containPixel('grid', [15, 30])).toEqual(true); | 
 |         expect(chart.containPixel('grid', [9.5, 30])).toEqual(false); | 
 |         expect(chart.containPixel({gridIndex: 1}, [width / 2, 50])).toEqual(true); | 
 |         expect(chart.containPixel({gridIndex: 1}, [10, 20])).toEqual(false); | 
 |     }); | 
 |  | 
 |  | 
 |     // it('pie', function () { | 
 |  | 
 |     //     chart.setOption({ | 
 |     //         series: [ | 
 |     //             { | 
 |     //                 id: 'k1', | 
 |     //                 type: 'pie', | 
 |     //                 center: [40, '50%'], | 
 |     //                 radius: [10, '50%'], | 
 |     //                 data: [ | 
 |     //                     {x: 1000, y: 2000}, | 
 |     //                     {x: 1000, y: 5000}, | 
 |     //                     {x: 3000, y: 5000}, | 
 |     //                     {x: 3000, y: 2000} | 
 |     //                 ], | 
 |     //                 links: [] | 
 |     //             } | 
 |     //         ] | 
 |     //     }); | 
 |  | 
 |     //     const height = chart.getHeight(); | 
 |  | 
 |     //     expect(chart.containPixel('series', [40, height / 2])).toEqual(false); | 
 |     //     expect(chart.containPixel('series', [40, height / 2 + 10])).toEqual(true); | 
 |     //     expect(chart.containPixel('series', [9.5, 1])).toEqual(false); | 
 |     // }); | 
 |  | 
 |  | 
 |     // it('pieAndGeo', function () { | 
 |     //     registerMap('test1', testGeoJson1); | 
 |     //     registerMap('test2', testGeoJson2); | 
 |  | 
 |     //     chart.setOption({ | 
 |     //         geo: [ | 
 |     //             { | 
 |     //                 id: 'aa', | 
 |     //                 left: 10, | 
 |     //                 top: 10, | 
 |     //                 width: 10, | 
 |     //                 height: 10, | 
 |     //                 map: 'test1' | 
 |     //             }, | 
 |     //             { | 
 |     //                 id: 'bb', | 
 |     //                 left: 100, | 
 |     //                 top: 10, | 
 |     //                 width: 10, | 
 |     //                 height: 10, | 
 |     //                 map: 'test2' | 
 |     //             } | 
 |     //         ], | 
 |     //         series: [ | 
 |     //             {id: 'k1', type: 'scatter', coordinateSystem: 'geo', geoIndex: 1}, | 
 |     //             {id: 'k2', type: 'scatter', coordinateSystem: 'geo'}, | 
 |     //             { | 
 |     //                 id: 'k3', | 
 |     //                 type: 'pie', | 
 |     //                 center: [40, 100], | 
 |     //                 radius: [3, 10], | 
 |     //                 data: [ | 
 |     //                     {x: 1000, y: 2000}, | 
 |     //                     {x: 1000, y: 5000} | 
 |     //                 ], | 
 |     //                 links: [] | 
 |     //             } | 
 |     //         ] | 
 |     //     }); | 
 |  | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [15, 15])).toEqual(true); | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [15, 25])).toEqual(false); | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [105, 15])).toEqual(true); | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [105, 25])).toEqual(false); | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [45, 100])).toEqual(true); | 
 |     //     expect(chart.containPixel({geoIndex: [0, 1], seriesId: 'k3'}, [55, 100])).toEqual(false); | 
 |     // }); | 
 |  | 
 |  | 
 |     it('graph', function () { | 
 |         registerMap('test1', testGeoJson1); | 
 |  | 
 |         chart.setOption({ | 
 |             geo: [ // Should not affect graph converter. | 
 |                 { | 
 |                     map: 'test1' | 
 |                 } | 
 |             ], | 
 |             series: [ | 
 |                 { | 
 |                     id: 'k1', | 
 |                     type: 'graph', | 
 |                     left: 10, | 
 |                     right: '50%', | 
 |                     top: 30, | 
 |                     bottom: 40, | 
 |                     data: [ | 
 |                         {x: 1000, y: 2000}, | 
 |                         {x: 1000, y: 5000}, | 
 |                         {x: 3000, y: 5000}, | 
 |                         {x: 3000, y: 2000} | 
 |                     ], | 
 |                     links: [] | 
 |                 } | 
 |             ] | 
 |         }); | 
 |  | 
 |         expect(chart.containPixel('series', [15, 35])).toEqual(true); | 
 |         expect(chart.containPixel('series', [3, 4])).toEqual(false); | 
 |     }); | 
 |  | 
 |  | 
 | }); |