@itwin/map-layers-formats 3.5.0-dev.52 → 3.5.0-dev.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/.rush/temp/operation/build_ci/state.json +1 -1
  2. package/.rush/temp/operation/docs/state.json +1 -1
  3. package/.rush/temp/package-deps_build_ci.json +7 -7
  4. package/.rush/temp/package-deps_docs.json +7 -7
  5. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  6. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js +39 -17
  7. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  8. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts +0 -1
  9. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  10. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js +19 -27
  11. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  12. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  13. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js +14 -11
  14. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  15. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js +34 -10
  16. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +1 -1
  17. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js +4 -9
  18. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +1 -1
  19. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +5 -5
  20. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +1 -1
  21. package/lib/cjs/test/coverage/.nyc_output/{6d78e0cc-3049-49f9-9f29-97f2d2ce6c64.json → 40575325-e7ef-4a2f-b122-96c4919282f9.json} +0 -0
  22. package/lib/cjs/test/coverage/.nyc_output/94c48ef9-6b3d-4238-8893-892fa0244386.json +1 -0
  23. package/lib/cjs/test/coverage/.nyc_output/processinfo/40575325-e7ef-4a2f-b122-96c4919282f9.json +1 -0
  24. package/lib/cjs/test/coverage/.nyc_output/processinfo/94c48ef9-6b3d-4238-8893-892fa0244386.json +1 -0
  25. package/lib/cjs/test/coverage/.nyc_output/processinfo/index.json +1 -1
  26. package/lib/cjs/test/coverage/cobertura-coverage.xml +390 -387
  27. package/lib/cjs/test/coverage/lcov-report/index.html +18 -18
  28. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureFormat.ts.html +1 -1
  29. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureJSON.ts.html +5 -5
  30. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeaturePBF.ts.html +9 -9
  31. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureProvider.ts.html +146 -74
  32. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureQuery.ts.html +32 -62
  33. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureReader.ts.html +1 -1
  34. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureRenderer.ts.html +1 -1
  35. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureResponse.ts.html +1 -1
  36. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisSymbologyRenderer.ts.html +64 -55
  37. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/index.html +29 -29
  38. package/lib/cjs/test/coverage/lcov-report/src/index.html +1 -1
  39. package/lib/cjs/test/coverage/lcov-report/src/map-layers-formats.ts.html +1 -1
  40. package/lib/cjs/test/coverage/lcov-report/src/mapLayersFormats.ts.html +1 -1
  41. package/lib/cjs/test/coverage/lcov.info +637 -612
  42. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  43. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  44. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js +41 -19
  45. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  46. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts +0 -1
  47. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  48. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js +19 -27
  49. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  50. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  51. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js +14 -11
  52. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  53. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js +34 -10
  54. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +1 -1
  55. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js +4 -9
  56. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +1 -1
  57. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +6 -6
  58. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +1 -1
  59. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  60. package/lib/test/junit_results.xml +44 -46
  61. package/map-layers-formats.build.log +2 -2
  62. package/package.json +12 -12
  63. package/src/ArcGisFeature/ArcGisFeatureProvider.ts +39 -15
  64. package/src/ArcGisFeature/ArcGisFeatureQuery.ts +20 -30
  65. package/src/ArcGisFeature/ArcGisSymbologyRenderer.ts +15 -12
  66. package/src/test/ArcGisFeature/ArcGisFeatureProvider.test.ts +39 -10
  67. package/src/test/ArcGisFeature/ArcGisFeatureQuery.test.ts +4 -11
  68. package/src/test/ArcGisFeature/ArcGisSymbologyRenderer.test.ts +5 -5
  69. package/lib/cjs/test/coverage/.nyc_output/5f6e61f1-8da3-4cce-bc95-ee236ec2bb5b.json +0 -1
  70. package/lib/cjs/test/coverage/.nyc_output/processinfo/5f6e61f1-8da3-4cce-bc95-ee236ec2bb5b.json +0 -1
  71. package/lib/cjs/test/coverage/.nyc_output/processinfo/6d78e0cc-3049-49f9-9f29-97f2d2ce6c64.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisSymbologyRenderer.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\r\n\r\n// Convert a channel array [r, g, b, a] to ColorDef\r\nfunction colorFromArray(channels?: number[]) {\r\n if (channels && channels.length === 4) {\r\n // Alpha channel is reversed, 255 = opaque\r\n return ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);\r\n }\r\n return undefined;\r\n}\r\n\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\n/** @internal */\r\nexport type EsriSymbolType = \"esriSFS\" | \"esriPMS\" | \"esriSLS\" | \"esriSMS\" | \"esriTS\" | \"CIMSymbolReference\";\r\ninterface EsriSymbol {\r\n type: EsriSymbolType;\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSLSStyle = \"esriSLSDash\" | \"esriSLSDashDot\" | \"esriSLSDashDotDot\" | \"esriSLSDot\" | \"esriSLSLongDash\" | \"esriSLSLongDashDot\" |\r\n\"esriSLSNull\" | \"esriSLSShortDash\" | \"esriSLSShortDashDot\" | \"esriSLSShortDashDotDot\" | \"esriSLSShortDot\" | \"esriSLSSolid\";\r\n\r\ninterface EsriSLSProps {\r\n color: number[];\r\n type: EsriSymbolType;\r\n width: number;\r\n style: EsriSLSStyle;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSLS implements EsriSymbol {\r\n public readonly props: EsriSLSProps;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get width() { return this.props.width; }\r\n public get style() { return this.props.style; }\r\n\r\n constructor(json: EsriSLSProps) {\r\n this.props = json;\r\n }\r\n\r\n public static fromJSON(json: EsriSLSProps) {\r\n return new EsriSLS(json);\r\n }\r\n}\r\n\r\ninterface EsriPMSProps {\r\n type: EsriSymbolType;\r\n url: string;\r\n imageData: string;\r\n contentType: string;\r\n width?: number;\r\n height?: number;\r\n xoffset?: number;\r\n yoffset?: number;\r\n angle?: number;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriPMS implements EsriSymbol {\r\n public readonly props: EsriPMSProps;\r\n private _image: HTMLImageElement;\r\n\r\n public get type() { return this.props.type; }\r\n public get url() { return this.props.url; }\r\n public get imageData() { return this.props.imageData; }\r\n public get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }\r\n public get image() { return this._image; }\r\n public get contentType() { return this.props.contentType; }\r\n public get width() { return this.props.width; }\r\n public get height() { return this.props.height; }\r\n public get xoffset() { return this.props.xoffset; }\r\n public get yoffset() { return this.props.yoffset; }\r\n public get angle() { return this.props.angle; }\r\n\r\n constructor(json: EsriPMSProps) {\r\n this.props = json;\r\n this._image = new Image();\r\n this._image.src = this.imageUrl;\r\n }\r\n\r\n public static fromJSON(json: EsriPMSProps) {\r\n return new EsriPMS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSFSStyleProps = \"esriSFSBackwardDiagonal\" | \"esriSFSCross\" | \"esriSFSDiagonalCross\" | \"esriSFSForwardDiagonal\" | \"esriSFSHorizontal\" | \"esriSFSNull\" | \"esriSFSSolid\" | \"esriSFSVertical\";\r\ninterface EsriSFSProps {\r\n color?: number[];\r\n type: EsriSymbolType;\r\n style: EsriSFSStyleProps;\r\n outline?: EsriSLSProps;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSFS implements EsriSymbol {\r\n public readonly props: EsriSFSProps;\r\n private _outline: EsriSLS | undefined;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get style() { return this.props.style; }\r\n public get outline() { return this._outline; }\r\n constructor(json: EsriSFSProps) {\r\n this.props = json;\r\n if (json.outline)\r\n this._outline = EsriSLS.fromJSON(json.outline);\r\n }\r\n\r\n public static fromJSON(json: EsriSFSProps): EsriSFS {\r\n return new EsriSFS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisSymbologyRenderer {\r\n private _symbol: EsriSymbol | undefined;\r\n\r\n private static readonly defaultPMS: EsriPMSProps = {\r\n type: \"esriPMS\",\r\n url: \"\",\r\n contentType: \"image/png\",\r\n imageData: \"iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAT9JREFUOI2t1E8rRGEUx/HvMHViIm5ZXGt/3gFlwdKGhYjyAmxs7IassDHFyguwwkbZYJKNslVWJDZT1C3psRv9NMpmJk/Tvc3MHWf3/PuccxbPyfKPkW1wPmBmQ5L6giB4d849Al+tYjNAHpiQ1AHgnAMoA+dhGG5HUfTQCOsCDoGlhCTdwGIURfPVZPtJWCdwBkwntVF3d6+K78Rh+SYhP7bM7FbSjY8FwHqLEEBGUgEY97E5oCcFBjAGDAMvNWwyJVSLKR8L28QG4a/N7zYx+VipTazkY0VgNSVUAa597MrMniWNpMBOAOdjFUlrwAWQaQFywGZt4f+AIrAB7DYJlc1sQdJrHAZQAN6AA6A/STGzp1wut+ycu/f340bQEXAJrACzwCjQC3wAd8CppGNJP/UPk+bZZ7XKQlJ1cfEL1AZaAcKna+kAAAAASUVORK5CYII=\",\r\n width: 14,\r\n height: 14,\r\n };\r\n\r\n private static readonly defaultSLS: EsriSLSProps = {\r\n type: \"esriSLS\",\r\n color: [0, 0.0],\r\n width: 1,\r\n style: \"esriSLSSolid\",\r\n };\r\n\r\n private static readonly defaultSFS: EsriSFSProps = {\r\n type: \"esriSFS\",\r\n color: [0, 0.0],\r\n style: \"esriSFSSolid\",\r\n };\r\n\r\n constructor(geometryType: ArcGisFeatureGeometryType, rendererDefinition: any) {\r\n let symbol;\r\n if (rendererDefinition?.symbol !== undefined) {\r\n symbol = rendererDefinition.symbol;\r\n } else if (rendererDefinition?.defaultSymbol !== undefined) {\r\n symbol = rendererDefinition?.defaultSymbol;\r\n }\r\n\r\n if (symbol !== undefined) {\r\n if (symbol.type === \"esriSFS\") {\r\n this._symbol = EsriSFS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriSLS\") {\r\n this._symbol = EsriSLS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriPMS\") {\r\n this._symbol = EsriPMS.fromJSON(symbol);\r\n }\r\n }\r\n\r\n // If '_symbol' is still undefined at this point, that means we could not find\r\n // any symbology definition from the metadata, let's use some default symbology\r\n // so that we display at least something.\r\n if (this._symbol === undefined) {\r\n Logger.logWarning(loggerCategory, \"Symbology definition not supported, using default symbology\");\r\n if (geometryType === \"esriGeometryPoint\" || geometryType === \"esriGeometryMultipoint\") {\r\n this._symbol = ArcGisSymbologyRenderer.defaultPMS;\r\n } else if (geometryType === \"esriGeometryLine\" || geometryType === \"esriGeometryPolyline\") {\r\n this._symbol = ArcGisSymbologyRenderer.defaultSLS;\r\n } else if (geometryType === \"esriGeometryPolygon\") {\r\n this._symbol = ArcGisSymbologyRenderer.defaultSFS;\r\n } else {\r\n Logger.logError(loggerCategory, \"Could not determine default symbology: geometry type not supported\");\r\n }\r\n }\r\n }\r\n\r\n public applyFillStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.style === \"esriSFSSolid\" && sfs.color) {\r\n context.fillStyle = sfs.color.toRgbaString();\r\n } else {\r\n context.fillStyle = ColorDef.from(200, 0, 0, 100).toRgbaString(); // default color is red?\r\n }\r\n }\r\n }\r\n\r\n public applyStrokeStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n let sls: EsriSLS | undefined;\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.outline && sfs.outline.style === \"esriSLSSolid\") {\r\n sls = sfs.outline;\r\n }\r\n } else if (this._symbol?.type === \"esriSLS\") {\r\n sls = this._symbol as EsriSLS;\r\n }\r\n\r\n if (sls) {\r\n if (sls.color)\r\n context.strokeStyle = sls.color.toRgbaString();\r\n context.lineWidth = sls.width; // TODO: Should we scale this value here?\r\n }\r\n }\r\n\r\n public drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriPMS\") {\r\n const pms = this._symbol as EsriPMS;\r\n let xOffset = 0, yOffset = 0;\r\n if (pms.xoffset)\r\n xOffset = pms.xoffset;\r\n if (pms.yoffset)\r\n yOffset = pms.yoffset;\r\n\r\n if (pms.width && pms.height) {\r\n // // make sure the marker is centered on the point\r\n xOffset += pms.width * -0.5;\r\n yOffset += pms.height * -0.5;\r\n\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset, pms.width, pms.height);\r\n } else {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset);\r\n }\r\n\r\n // TODO: marker rotation angle\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisSymbologyRenderer.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\r\n\r\n// Convert a channel array [r, g, b, a] to ColorDef\r\nfunction colorFromArray(channels?: number[]) {\r\n if (channels && channels.length === 4) {\r\n // Alpha channel is reversed, 255 = opaque\r\n return ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);\r\n }\r\n return undefined;\r\n}\r\n\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\n/** @internal */\r\nexport type EsriSymbolType = \"esriSFS\" | \"esriPMS\" | \"esriSLS\" | \"esriSMS\" | \"esriTS\" | \"CIMSymbolReference\";\r\ninterface EsriSymbol {\r\n type: EsriSymbolType;\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSLSStyle = \"esriSLSDash\" | \"esriSLSDashDot\" | \"esriSLSDashDotDot\" | \"esriSLSDot\" | \"esriSLSLongDash\" | \"esriSLSLongDashDot\" |\r\n\"esriSLSNull\" | \"esriSLSShortDash\" | \"esriSLSShortDashDot\" | \"esriSLSShortDashDotDot\" | \"esriSLSShortDot\" | \"esriSLSSolid\";\r\n\r\ninterface EsriSLSProps {\r\n color: number[];\r\n type: EsriSymbolType;\r\n width: number;\r\n style: EsriSLSStyle;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSLS implements EsriSymbol {\r\n public readonly props: EsriSLSProps;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get width() { return this.props.width; }\r\n public get style() { return this.props.style; }\r\n\r\n constructor(json: EsriSLSProps) {\r\n this.props = json;\r\n }\r\n\r\n public static fromJSON(json: EsriSLSProps) {\r\n return new EsriSLS(json);\r\n }\r\n}\r\n\r\ninterface EsriPMSProps {\r\n type: EsriSymbolType;\r\n url: string;\r\n imageData: string;\r\n contentType: string;\r\n width?: number;\r\n height?: number;\r\n xoffset?: number;\r\n yoffset?: number;\r\n angle?: number;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriPMS implements EsriSymbol {\r\n public readonly props: EsriPMSProps;\r\n private _image: HTMLImageElement;\r\n\r\n public get type() { return this.props.type; }\r\n public get url() { return this.props.url; }\r\n public get imageData() { return this.props.imageData; }\r\n public get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }\r\n public get image() { return this._image; }\r\n public get contentType() { return this.props.contentType; }\r\n public get width() { return this.props.width; }\r\n public get height() { return this.props.height; }\r\n public get xoffset() { return this.props.xoffset; }\r\n public get yoffset() { return this.props.yoffset; }\r\n public get angle() { return this.props.angle; }\r\n\r\n constructor(json: EsriPMSProps) {\r\n this.props = json;\r\n this._image = new Image();\r\n this._image.src = this.imageUrl;\r\n }\r\n\r\n public static fromJSON(json: EsriPMSProps) {\r\n return new EsriPMS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSFSStyleProps = \"esriSFSBackwardDiagonal\" | \"esriSFSCross\" | \"esriSFSDiagonalCross\" | \"esriSFSForwardDiagonal\" | \"esriSFSHorizontal\" | \"esriSFSNull\" | \"esriSFSSolid\" | \"esriSFSVertical\";\r\ninterface EsriSFSProps {\r\n color?: number[];\r\n type: EsriSymbolType;\r\n style: EsriSFSStyleProps;\r\n outline?: EsriSLSProps;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSFS implements EsriSymbol {\r\n public readonly props: EsriSFSProps;\r\n private _outline: EsriSLS | undefined;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get style() { return this.props.style; }\r\n public get outline() { return this._outline; }\r\n constructor(json: EsriSFSProps) {\r\n this.props = json;\r\n if (json.outline)\r\n this._outline = EsriSLS.fromJSON(json.outline);\r\n }\r\n\r\n public static fromJSON(json: EsriSFSProps): EsriSFS {\r\n return new EsriSFS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisSymbologyRenderer {\r\n private _symbol: EsriSymbol | undefined;\r\n\r\n private static readonly defaultPMS: EsriPMSProps = {\r\n type: \"esriPMS\",\r\n url: \"\",\r\n contentType: \"image/png\",\r\n imageData: \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAmBJREFUOE+Nk01IVFEUx//n3jfvOZOaJkMtiiJ7o9RG3LgoqKhFSFJBTS1ahFBBi0ijfJXCIyQr+hBbSIsoW7iQoKKFCw2CkAI3tZAgy8Ei+xhoTCbnje/NPfHGnA816KzuPR+/c8/HJRQJE7o+VUhym0DcCOYGgBQEXjOLlyqo+nHanCkMoaL4rslKjZwOQLT4ek3Mmz3FACFNLB67ut6M1nWphbg8wI6VyJK5KEH0EQFVJRKbwzokAW++p/ErraAYSQK3u47bC3vLnA+ZB9i2gHF0oyQMCfCGNaUa+vauxs71wWz2V18cnBj8gQ8J1/eeBnHUa4sMFQDGdGno+4gwEAoQzjVUon3rqlx1KY9x7+0MWobjAPg3QJ2eZV4tAEyFNCN5FkSXyw2B3j1hRGvLcgBXMV5MptA4MOXr0gT0u5bZnAf0jBsyiSgJPAxqhON1K3FlRxUMvwFAtv7u0Wl0jvwEmJNEuOhakTt5wKEBifr6Oo14BIBRpgt07w6jcVMIngKGY7NofR5HwlF+zDcpsC193vyYB/innvHywCzdZfAR/+onX1segBTAxHzzfPE7/8yzzIPLjJE1LTixHZx5CtCK4gXLzovBiDPUsYxVM7gUkB3nWKlm6DYEnQGzXARxCOK+a1WfKtQXb6LNAvr7iCboCUA1Ocdsdv5KLPe7F6pH/w3wLbc+BwOuc5IZ1wEE/jonQbjptZn24tKKX7BgvR2r0NKZRwDvAqCI+Z30VJPTURv7P4A9psuQcYAUPwAoReBLrmX2Lmls7i8sZ7kWLwuoxA1FVJGxzMPLufi6P2r+2xFbOUjGAAAAAElFTkSuQmCC\",\r\n width: 16,\r\n height: 16,\r\n xoffset: -8,\r\n yoffset: -16,\r\n };\r\n\r\n private static readonly defaultSLS: EsriSLSProps = {\r\n type: \"esriSLS\",\r\n color: [0, 0, 0, 255],\r\n width: 1,\r\n style: \"esriSLSSolid\",\r\n };\r\n\r\n private static readonly defaultSFS: EsriSFSProps = {\r\n type: \"esriSFS\",\r\n color: [0, 0, 0, 255],\r\n style: \"esriSFSSolid\",\r\n };\r\n\r\n constructor(geometryType: ArcGisFeatureGeometryType, rendererDefinition: any) {\r\n let symbol;\r\n if (rendererDefinition?.symbol !== undefined) {\r\n symbol = rendererDefinition.symbol;\r\n } else if (rendererDefinition?.defaultSymbol !== undefined) {\r\n symbol = rendererDefinition?.defaultSymbol;\r\n }\r\n\r\n if (symbol !== undefined) {\r\n if (symbol.type === \"esriSFS\") {\r\n this._symbol = EsriSFS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriSLS\") {\r\n this._symbol = EsriSLS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriPMS\") {\r\n this._symbol = EsriPMS.fromJSON(symbol);\r\n }\r\n }\r\n\r\n // If '_symbol' is still undefined at this point, that means we could not find\r\n // any symbology definition from the metadata, let's use some default symbology\r\n // so that we display at least something.\r\n if (this._symbol === undefined) {\r\n Logger.logWarning(loggerCategory, \"Symbology definition not supported, using default symbology\");\r\n if (geometryType === \"esriGeometryPoint\" || geometryType === \"esriGeometryMultipoint\") {\r\n this._symbol = EsriPMS.fromJSON(ArcGisSymbologyRenderer.defaultPMS);\r\n } else if (geometryType === \"esriGeometryLine\" || geometryType === \"esriGeometryPolyline\") {\r\n this._symbol = EsriSLS.fromJSON(ArcGisSymbologyRenderer.defaultSLS);\r\n } else if (geometryType === \"esriGeometryPolygon\") {\r\n this._symbol = EsriSFS.fromJSON(ArcGisSymbologyRenderer.defaultSFS);\r\n } else {\r\n Logger.logError(loggerCategory, \"Could not determine default symbology: geometry type not supported\");\r\n }\r\n }\r\n }\r\n\r\n public applyFillStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.style === \"esriSFSSolid\" && sfs.color) {\r\n context.fillStyle = sfs.color.toRgbaString();\r\n } else {\r\n context.fillStyle = ColorDef.from(200, 0, 0, 100).toRgbaString(); // default color is red?\r\n }\r\n }\r\n }\r\n\r\n public applyStrokeStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n let sls: EsriSLS | undefined;\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.outline && sfs.outline.style === \"esriSLSSolid\") {\r\n sls = sfs.outline;\r\n }\r\n } else if (this._symbol?.type === \"esriSLS\") {\r\n sls = this._symbol as EsriSLS;\r\n }\r\n\r\n if (sls) {\r\n if (sls.color)\r\n context.strokeStyle = sls.color.toRgbaString();\r\n context.lineWidth = sls.width; // TODO: Should we scale this value here?\r\n }\r\n }\r\n\r\n public drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriPMS\") {\r\n const pms = this._symbol as EsriPMS;\r\n let xOffset = 0, yOffset = 0;\r\n if (pms.xoffset)\r\n xOffset = pms.xoffset;\r\n else if (pms.width)\r\n xOffset = pms.width * -0.5; // if no offset center in the middle\r\n\r\n if (pms.yoffset)\r\n yOffset = pms.yoffset;\r\n else if (pms.height)\r\n yOffset = pms.height * -0.5; // if no offset center in the middle\r\n\r\n if (pms.width && pms.height) {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset, pms.width, pms.height);\r\n } else {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset);\r\n }\r\n\r\n // TODO: marker rotation angle\r\n }\r\n }\r\n}\r\n"]}
@@ -36,7 +36,7 @@ describe("ArcGisFeatureProvider", () => {
36
36
  const provider = new ArcGisFeatureProvider(settings);
37
37
  await provider.initialize();
38
38
  expect(provider._minDepthFromLod).to.equals(11);
39
- expect(provider._maxDepthFromLod).to.equals(0);
39
+ expect(provider._maxDepthFromLod).to.equals(22);
40
40
  });
41
41
  it("should not initialize with no service metadata", async () => {
42
42
  sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
@@ -134,16 +134,39 @@ describe("ArcGisFeatureProvider", () => {
134
134
  let getLayerMetadataStub = sandbox.stub(ArcGisFeatureProvider.prototype, "getLayerMetadata").callsFake(async function (_id) {
135
135
  return { defaultVisibility: true, supportedQueryFormats: "PBF, JSON" };
136
136
  });
137
- sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
137
+ const getServiceJsonStub = sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
138
138
  return { capabilities: "Query" };
139
139
  });
140
140
  let provider = new ArcGisFeatureProvider(settings);
141
141
  await provider.initialize();
142
+ expect(provider.format).to.equals("JSON");
143
+ // PBF requires 'supportsCoordinatesQuantization'
144
+ getServiceJsonStub.restore();
145
+ sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
146
+ return { currentVersion: 11, capabilities: "Query" };
147
+ });
148
+ getLayerMetadataStub.restore();
149
+ getLayerMetadataStub = sandbox.stub(ArcGisFeatureProvider.prototype, "getLayerMetadata").callsFake(async function (_id) {
150
+ return { defaultVisibility: true, supportsCoordinatesQuantization: true, supportedQueryFormats: "PBF, JSON" };
151
+ });
152
+ provider = new ArcGisFeatureProvider(settings);
153
+ await provider.initialize();
142
154
  expect(provider.format).to.equals("PBF");
143
155
  getLayerMetadataStub.restore();
144
156
  getLayerMetadataStub = sandbox.stub(ArcGisFeatureProvider.prototype, "getLayerMetadata").callsFake(async function (_id) {
145
157
  return { defaultVisibility: true, supportedQueryFormats: "JSON" };
146
158
  });
159
+ getServiceJsonStub.restore();
160
+ sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
161
+ return { currentVersion: 10.91, capabilities: "Query", supportsCoordinatesQuantization: true };
162
+ });
163
+ provider = new ArcGisFeatureProvider(settings);
164
+ await provider.initialize();
165
+ expect(provider.format).to.equals("JSON");
166
+ getLayerMetadataStub.restore();
167
+ getLayerMetadataStub = sandbox.stub(ArcGisFeatureProvider.prototype, "getLayerMetadata").callsFake(async function (_id) {
168
+ return { defaultVisibility: true, supportedQueryFormats: "JSON" };
169
+ });
147
170
  provider = new ArcGisFeatureProvider(settings);
148
171
  await provider.initialize();
149
172
  expect(provider.format).to.equals("JSON");
@@ -194,7 +217,7 @@ describe("ArcGisFeatureProvider", () => {
194
217
  };
195
218
  });
196
219
  sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
197
- return { capabilities: "Query" };
220
+ return { currentVersion: 11, capabilities: "Query" };
198
221
  });
199
222
  const provider = new ArcGisFeatureProvider(settings);
200
223
  await provider.initialize();
@@ -209,7 +232,7 @@ describe("ArcGisFeatureProvider", () => {
209
232
  latestWkid: 3857,
210
233
  },
211
234
  };
212
- expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={"xmin":-20037508.34,"ymin":-20037508.339999996,"xmax":20037508.34,"ymax":20037508.340000004,"spatialReference":{"wkid":102100,"latestWkid":3857}}&inSR=102100`);
235
+ expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100`);
213
236
  expect((_a = url === null || url === void 0 ? void 0 : url.envelope) === null || _a === void 0 ? void 0 : _a.xmin).to.be.closeTo(extent.xmin, 0.01);
214
237
  expect((_b = url === null || url === void 0 ? void 0 : url.envelope) === null || _b === void 0 ? void 0 : _b.ymin).to.be.closeTo(extent.ymin, 0.01);
215
238
  expect((_c = url === null || url === void 0 ? void 0 : url.envelope) === null || _c === void 0 ? void 0 : _c.xmax).to.be.closeTo(extent.xmax, 0.01);
@@ -228,7 +251,7 @@ describe("ArcGisFeatureProvider", () => {
228
251
  const provider2 = new ArcGisFeatureProvider(settings);
229
252
  await provider2.initialize();
230
253
  url = provider2.constructFeatureUrl(0, 0, 0, "PBF");
231
- expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={"xmin":-20037508.34,"ymin":-20037508.339999996,"xmax":20037508.34,"ymax":20037508.340000004,"spatialReference":{"wkid":102100,"latestWkid":3857}}&inSR=102100&quantizationParameters={"mode":"view","originPosition":"upperLeft","tolerance":78271.516953125,"extent":{"xmin":-20037508.34,"ymin":-20037508.339999996,"xmax":20037508.34,"ymax":20037508.340000004,"spatialReference":{"wkid":102100,"latestWkid":3857}}}`);
254
+ expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D`);
232
255
  expect((_g = url === null || url === void 0 ? void 0 : url.envelope) === null || _g === void 0 ? void 0 : _g.xmin).to.be.closeTo(extent.xmin, 0.01);
233
256
  expect((_h = url === null || url === void 0 ? void 0 : url.envelope) === null || _h === void 0 ? void 0 : _h.ymin).to.be.closeTo(extent.ymin, 0.01);
234
257
  expect((_j = url === null || url === void 0 ? void 0 : url.envelope) === null || _j === void 0 ? void 0 : _j.xmax).to.be.closeTo(extent.xmax, 0.01);
@@ -252,7 +275,7 @@ describe("ArcGisFeatureProvider", () => {
252
275
  const provider3 = new ArcGisFeatureProvider(settings);
253
276
  await provider3.initialize();
254
277
  url = provider3.constructFeatureUrl(0, 0, 0, "PBF", overrideGeom);
255
- expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={"xmin":-50,"ymin":-50,"xmax":50,"ymax":50,"spatialReference":{"wkid":102100,"latestWkid":3857}}&inSR=102100&quantizationParameters={"mode":"view","originPosition":"upperLeft","tolerance":78271.516953125,"extent":{"xmin":-20037508.34,"ymin":-20037508.339999996,"xmax":20037508.34,"ymax":20037508.340000004,"spatialReference":{"wkid":102100,"latestWkid":3857}}}`);
278
+ expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-50%2C%22ymin%22%3A-50%2C%22xmax%22%3A50%2C%22ymax%22%3A50%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D`);
256
279
  expect((_o = url === null || url === void 0 ? void 0 : url.envelope) === null || _o === void 0 ? void 0 : _o.xmin).to.be.closeTo(overrideGeom.geom.xmin, 0.01);
257
280
  expect((_p = url === null || url === void 0 ? void 0 : url.envelope) === null || _p === void 0 ? void 0 : _p.ymin).to.be.closeTo(overrideGeom.geom.ymin, 0.01);
258
281
  expect((_q = url === null || url === void 0 ? void 0 : url.envelope) === null || _q === void 0 ? void 0 : _q.xmax).to.be.closeTo(overrideGeom.geom.xmax, 0.01);
@@ -261,7 +284,7 @@ describe("ArcGisFeatureProvider", () => {
261
284
  expect((_t = url === null || url === void 0 ? void 0 : url.envelope) === null || _t === void 0 ? void 0 : _t.spatialReference.latestWkid).to.be.equal(overrideGeom.geom.spatialReference.latestWkid);
262
285
  // Now test with a different tolerance value
263
286
  url = provider3.constructFeatureUrl(0, 0, 0, "PBF", overrideGeom, undefined, 10);
264
- expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={"xmin":-50,"ymin":-50,"xmax":50,"ymax":50,"spatialReference":{"wkid":102100,"latestWkid":3857}}&inSR=102100&quantizationParameters={"mode":"view","originPosition":"upperLeft","tolerance":78271.516953125,"extent":{"xmin":-20037508.34,"ymin":-20037508.339999996,"xmax":20037508.34,"ymax":20037508.340000004,"spatialReference":{"wkid":102100,"latestWkid":3857}}}&distance=782715.16953125`);
287
+ expect(url === null || url === void 0 ? void 0 : url.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-50%2C%22ymin%22%3A-50%2C%22xmax%22%3A50%2C%22ymax%22%3A50%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D&distance=782715.16953125`);
265
288
  expect((_u = url === null || url === void 0 ? void 0 : url.envelope) === null || _u === void 0 ? void 0 : _u.xmin).to.be.closeTo(overrideGeom.geom.xmin, 0.01);
266
289
  expect((_v = url === null || url === void 0 ? void 0 : url.envelope) === null || _v === void 0 ? void 0 : _v.ymin).to.be.closeTo(overrideGeom.geom.ymin, 0.01);
267
290
  expect((_w = url === null || url === void 0 ? void 0 : url.envelope) === null || _w === void 0 ? void 0 : _w.xmax).to.be.closeTo(overrideGeom.geom.xmax, 0.01);
@@ -283,7 +306,7 @@ describe("ArcGisFeatureProvider", () => {
283
306
  };
284
307
  });
285
308
  sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
286
- return { capabilities: "Query" };
309
+ return { currentVersion: 11, capabilities: "Query" };
287
310
  });
288
311
  sandbox.stub(ArcGisFeatureProvider.prototype, "constructFeatureUrl").callsFake(function _(_row, _column, _zoomLevel, _format, _geomOverride, _outFields, _tolerance, _returnGeometry) {
289
312
  return undefined;
@@ -305,12 +328,13 @@ describe("ArcGisFeatureProvider", () => {
305
328
  return {
306
329
  defaultVisibility: true,
307
330
  supportedQueryFormats: "PBF, JSON",
331
+ supportsCoordinatesQuantization: true,
308
332
  minScale: 600000,
309
333
  maxScale: 5000,
310
334
  };
311
335
  });
312
336
  sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
313
- return { capabilities: "Query" };
337
+ return { currentVersion: 11, capabilities: "Query" };
314
338
  });
315
339
  sandbox.stub(ArcGISImageryProvider.prototype, "fetch").callsFake(async function _(_url, _options) {
316
340
  const test = {
@@ -469,7 +493,7 @@ describe("ArcGisFeatureProvider", () => {
469
493
  };
470
494
  });
471
495
  sandbox.stub(ArcGisUtilities, "getServiceJson").callsFake(async function _(_url, _formatId, _userName, _password, _ignoreCache) {
472
- return { capabilities: "Query" };
496
+ return { currentVersion: 11, capabilities: "Query" };
473
497
  });
474
498
  sandbox.stub(HTMLCanvasElement.prototype, "getContext").callsFake(function _(_contextId, _options) {
475
499
  return {};
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisFeatureProvider.test.js","sourceRoot":"","sources":["../../../../src/test/ArcGisFeature/ArcGisFeatureProvider.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Base64EncodedString, Cartographic, ImageMapLayerSettings, ImageSourceFormat, ServerError } from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { ArcGisFeatureMapLayerFormat } from \"../../ArcGisFeature/ArcGisFeatureFormat\";\r\nimport { ArcGisFeatureProvider } from \"../../map-layers-formats\";\r\nimport * as sinon from \"sinon\";\r\nimport { ArcGISImageryProvider, ArcGisUtilities, ImageryMapTileTree, MapLayerFeatureInfo, MapLayerImageryProviderStatus, QuadId } from \"@itwin/core-frontend\";\r\nimport { NewYorkDataset } from \"./NewYorkDataset\";\r\nimport { base64StringToUint8Array, ByteStream, Logger } from \"@itwin/core-bentley\";\r\nimport { ArcGisExtent, ArcGisFeatureFormat, ArcGisGeometry } from \"../../ArcGisFeature/ArcGisFeatureQuery\";\r\nimport { PhillyLandmarksDataset } from \"./PhillyLandmarksDataset\";\r\nimport { ArcGisFeatureResponse } from \"../../ArcGisFeature/ArcGisFeatureResponse\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { ArcGisFeaturePBF } from \"../../ArcGisFeature/ArcGisFeaturePBF\";\r\nimport { ArcGisFeatureJSON } from \"../../ArcGisFeature/ArcGisFeatureJSON\";\r\n\r\nconst expect = chai.expect;\r\nchai.use(chaiAsPromised);\r\n\r\nconst esriFeatureSampleSource = {name: \"dummyFeatureLayer\", url: \"https://dummy.com\", formatId: ArcGisFeatureMapLayerFormat.formatId};\r\nconst pngTransparent1x1 = \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==\";\r\n\r\ndescribe(\"ArcGisFeatureProvider\", () => {\r\n const sandbox = sinon.createSandbox();\r\n\r\n afterEach(async () => {\r\n sandbox.restore();\r\n });\r\n\r\n it(\"should initialize with valid data\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return NewYorkDataset.serviceCapabilities;\r\n });\r\n\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"getLayerMetadata\" as any).callsFake(async function _(_layerId: number) {\r\n return NewYorkDataset.streetsLayerCapabilities;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n expect((provider as any)._minDepthFromLod).to.equals(11);\r\n expect((provider as any)._maxDepthFromLod).to.equals(0);\r\n });\r\n\r\n it(\"should not initialize with no service metadata\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return undefined;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n\r\n });\r\n\r\n it(\"should update status when invalid token error from service\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {error: {code: 499}};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const raiseEventSpy = sandbox.spy(provider.onStatusChanged, \"raiseEvent\");\r\n await provider.initialize();\r\n\r\n expect(provider.status).to.equals(MapLayerImageryProviderStatus.RequireAuth);\r\n expect(raiseEventSpy.calledOnceWith(provider)).to.be.true;\r\n });\r\n\r\n it(\"should throw query capability not supported\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Test\"};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should pick the first visible sub-layer when multiple visible sub-layers\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n const provider = new ArcGisFeatureProvider(settings);\r\n (provider as any)._format = \"JSON\";\r\n await provider.initialize();\r\n expect((provider as any)._layerId ).to.equals(settings.subLayers[0].id);\r\n });\r\n\r\n it(\"should pick sub-layers from service metadata if none provided on layer settings\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\",\r\n layers: [\r\n {\r\n id : 0,\r\n\r\n },\r\n {\r\n id : 1,\r\n },\r\n ]};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (id: number) {\r\n if (id === 1 ) {\r\n return {defaultVisibility:true};\r\n }\r\n return undefined;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n (provider as any)._format = \"JSON\";\r\n await provider.initialize();\r\n expect((provider as any)._layerId ).to.equals(1);\r\n expect((provider as any)._layerMetadata ).to.eql({defaultVisibility:true});\r\n });\r\n\r\n it(\"should throw error if no layers in capabilities\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\",\r\n layers: []};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should throw if no layer metadata from service\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return undefined;\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should read supported supported format\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n let getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"PBF, JSON\"};\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n let provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"PBF\");\r\n\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"JSON\"};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"JSON\");\r\n\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"\"};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should compute minLod/maxLod\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n expect((provider as any)._minDepthFromLod ).to.equals(9);\r\n expect((provider as any)._maxDepthFromLod ).to.equals(15);\r\n });\r\n\r\n it(\"should construct empty url\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const url = await provider.constructUrl(0,0,0);\r\n expect(url).to.equals(\"\");\r\n\r\n });\r\n\r\n it(\"should construct feature query url\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n let getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility: true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n let url = provider.constructFeatureUrl(0,0,0, \"PBF\");\r\n const extent = {\r\n xmin: -20037508.34,\r\n ymin: -20037508.33,\r\n xmax: 20037508.34,\r\n ymax: 20037508.34,\r\n spatialReference: {\r\n wkid: 102100,\r\n latestWkid: 3857,\r\n },\r\n };\r\n expect(url?.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={\"xmin\":-20037508.34,\"ymin\":-20037508.339999996,\"xmax\":20037508.34,\"ymax\":20037508.340000004,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}&inSR=102100`);\r\n expect(url?.envelope?.xmin).to.be.closeTo(extent.xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo(extent.ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo(extent.xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo(extent.ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(102100);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(3857);\r\n\r\n // Now turn ON 'supportsCoordinatesQuantization' to ON\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility: true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n supportsCoordinatesQuantization: true,\r\n };\r\n });\r\n\r\n const provider2 = new ArcGisFeatureProvider(settings);\r\n await provider2.initialize();\r\n url = provider2.constructFeatureUrl(0,0,0, \"PBF\");\r\n expect(url?.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={\"xmin\":-20037508.34,\"ymin\":-20037508.339999996,\"xmax\":20037508.34,\"ymax\":20037508.340000004,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}&inSR=102100&quantizationParameters={\"mode\":\"view\",\"originPosition\":\"upperLeft\",\"tolerance\":78271.516953125,\"extent\":{\"xmin\":-20037508.34,\"ymin\":-20037508.339999996,\"xmax\":20037508.34,\"ymax\":20037508.340000004,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}}`);\r\n expect(url?.envelope?.xmin).to.be.closeTo(extent.xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo(extent.ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo(extent.xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo(extent.ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(extent.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(extent.spatialReference.latestWkid);\r\n\r\n // Test passing an override geometry\r\n const overrideGeom: ArcGisGeometry = {\r\n type: \"esriGeometryEnvelope\",\r\n geom: {\r\n xmin: -50,\r\n ymin: -50,\r\n xmax: 50,\r\n ymax: 50,\r\n spatialReference: {\r\n wkid: 102100,\r\n latestWkid: 3857,\r\n },\r\n },\r\n };\r\n const provider3 = new ArcGisFeatureProvider(settings);\r\n await provider3.initialize();\r\n url = provider3.constructFeatureUrl(0,0,0, \"PBF\", overrideGeom);\r\n expect(url?.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={\"xmin\":-50,\"ymin\":-50,\"xmax\":50,\"ymax\":50,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}&inSR=102100&quantizationParameters={\"mode\":\"view\",\"originPosition\":\"upperLeft\",\"tolerance\":78271.516953125,\"extent\":{\"xmin\":-20037508.34,\"ymin\":-20037508.339999996,\"xmax\":20037508.34,\"ymax\":20037508.340000004,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}}`);\r\n expect(url?.envelope?.xmin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(overrideGeom.geom.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(overrideGeom.geom.spatialReference.latestWkid);\r\n\r\n // Now test with a different tolerance value\r\n url = provider3.constructFeatureUrl(0,0,0, \"PBF\", overrideGeom, undefined, 10);\r\n expect(url?.url).to.equals(`https://dummy.com/0/query/?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry={\"xmin\":-50,\"ymin\":-50,\"xmax\":50,\"ymax\":50,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}&inSR=102100&quantizationParameters={\"mode\":\"view\",\"originPosition\":\"upperLeft\",\"tolerance\":78271.516953125,\"extent\":{\"xmin\":-20037508.34,\"ymin\":-20037508.339999996,\"xmax\":20037508.34,\"ymax\":20037508.340000004,\"spatialReference\":{\"wkid\":102100,\"latestWkid\":3857}}}&distance=782715.16953125`);\r\n expect(url?.envelope?.xmin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(overrideGeom.geom.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(overrideGeom.geom.spatialReference.latestWkid);\r\n\r\n });\r\n\r\n it(\"should log error when getFeatureInfo cannot be performed\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"constructFeatureUrl\").callsFake(function _(_row: number, _column: number, _zoomLevel: number, _format: ArcGisFeatureFormat, _geomOverride?: ArcGisGeometry, _outFields?: string, _tolerance?: number, _returnGeometry?: boolean) {\r\n return undefined;\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.called).to.be.true;\r\n\r\n });\r\n\r\n it(\"should process data in getFeatureInfo\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub((ArcGISImageryProvider.prototype as any), \"fetch\").callsFake(async function _(_url: URL, _options?: RequestInit) {\r\n const test = {\r\n headers: { \"content-type\" : \"pbf\"},\r\n arrayBuffer: async () => {\r\n const byteArray = Base64EncodedString.toUint8Array(PhillyLandmarksDataset.phillyTransportationGetFeatureInfoQueryEncodedPbf);\r\n return Promise.resolve(byteArray ? ByteStream.fromUint8Array(byteArray).arrayBuffer : undefined);\r\n },\r\n status: 200,\r\n } as unknown; // By using unknown type, I can define parts of Response I really need\r\n return (test as Response );\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(1);\r\n expect(logErrorSpy.calledOnce).to.be.false;\r\n\r\n });\r\n\r\n it(\"should log error when exceed transfert limit\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {exceedTransferLimit: true, data:undefined};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.calledOnce).to.be.true;\r\n\r\n });\r\n\r\n it(\"should log error when exceed exception thrown limit\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n throw new Error();\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.calledOnce).to.be.true;\r\n\r\n });\r\n\r\n it(\"should debug Feature Geom\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {data: {\r\n toObject: () => undefined,\r\n }};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n (provider as any)._debugFeatureGeom = true;\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logInfoSpy = sandbox.spy(Logger, \"logInfo\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logInfoSpy.callCount).to.equals(2);\r\n\r\n });\r\n\r\n it(\"should compute computeTileWorld2CanvasTransform\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n const worldSize = 100;\r\n const canvasSize = 10;\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const getEPSG3857ExtentStub = sandbox.stub(ArcGisFeatureProvider.prototype, \"getEPSG3857Extent\").callsFake(function (_row: number, _column: number, _zoomLevel: number) {\r\n return { left:0, right:worldSize, bottom:0, top:worldSize };\r\n });\r\n\r\n sandbox.stub(provider, \"tileSize\").get(function () {\r\n return canvasSize; // return a size of 10 to simplicity\r\n });\r\n let transform = ((provider as any).computeTileWorld2CanvasTransform(0,0,0) as Transform | undefined);\r\n let worldPoint = Point3d.createFrom({x: worldSize*0.5, y:worldSize*0.5, z:0});\r\n let transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n\r\n // Make sure center point remains in the center\r\n expect(transformedPoint).to.not.undefined;\r\n expect(transformedPoint!.x).to.equals(canvasSize*0.5);\r\n expect(transformedPoint!.y).to.equals(canvasSize*0.5);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n // Check that y-axis get flipped\r\n worldPoint = Point3d.createFrom({x: 0, y:10, z:0});\r\n transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n expect(transformedPoint!.x).to.equals(0);\r\n expect(transformedPoint!.y).to.equals(9);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n // Now check translation has been applied (origin shift)\r\n getEPSG3857ExtentStub.restore();\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"getEPSG3857Extent\").callsFake(function (_row: number, _column: number, _zoomLevel: number) {\r\n return { left:worldSize, right:worldSize*2, bottom:worldSize, top:worldSize*2 };\r\n });\r\n worldPoint = Point3d.createFrom({x: worldSize, y:worldSize, z:0});\r\n transform = ((provider as any).computeTileWorld2CanvasTransform(0,0,0) as Transform | undefined);\r\n transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n expect(transformedPoint).to.not.undefined;\r\n expect(transformedPoint!.x).to.equals(0);\r\n expect(transformedPoint!.y).to.equals(10);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n });\r\n\r\n it(\"should loadTile from PBF request\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF\",\r\n supportsCoordinatesQuantization:true,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const providerStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n return new ArcGisFeatureResponse(\"PBF\", Promise.resolve({} as Response));\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {\r\n exceedTransferLimit: false,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n // toDataURL string;\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeaturePBF.prototype, \"readAndRender\");\r\n const computeTransfoSpy = sandbox.spy(ArcGisFeatureProvider.prototype as any, \"computeTileWorld2CanvasTransform\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const tileData = await provider.loadTile(0,0,0);\r\n expect (tileData).to.not.undefined;\r\n expect (tileData?.data instanceof Uint8Array).to.be.true;\r\n expect(tileData?.data).to.eqls(base64StringToUint8Array(pngTransparent1x1));\r\n expect(tileData?.format).to.equals(ImageSourceFormat.Png);\r\n expect (providerStub.calledOnce).to.be.true;\r\n expect (readAndRenderSpy.calledOnce).to.be.true;\r\n expect (computeTransfoSpy.calledOnce).to.be.false; // Should not be called since we have supportsCoordinatesQuantization in layer metadata\r\n\r\n });\r\n\r\n it(\"should loadTile from JSON request\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const providerStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n return new ArcGisFeatureResponse(\"JSON\", Promise.resolve({} as Response));\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {\r\n exceedTransferLimit: false,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeatureJSON.prototype, \"readAndRender\");\r\n const computeTransfoSpy = sandbox.spy(ArcGisFeatureProvider.prototype as any, \"computeTileWorld2CanvasTransform\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const tileData = await provider.loadTile(0,0,0);\r\n expect (tileData).to.not.undefined;\r\n expect (tileData?.data instanceof Uint8Array).to.be.true;\r\n expect(tileData?.data).to.eqls(base64StringToUint8Array(pngTransparent1x1));\r\n expect(tileData?.format).to.equals(ImageSourceFormat.Png);\r\n expect (providerStub.calledOnce).to.be.true;\r\n expect (readAndRenderSpy.calledOnce).to.be.true;\r\n expect (computeTransfoSpy.calledOnce).to.be.true; // Should be called since we dont have _supportsCoordinatesQuantization in layer metadata\r\n });\r\n\r\n it(\"should make sub request if loadtile request return 'exceedTransferLimit'\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const extentSize = 100;\r\n const fetchTileStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n const envelope: ArcGisExtent = {\r\n xmin : 0,\r\n ymin : 0,\r\n xmax : extentSize,\r\n ymax : extentSize,\r\n spatialReference : {\r\n wkid : 102100,\r\n latestWkid : 3857,\r\n }};\r\n return new ArcGisFeatureResponse(\"JSON\", Promise.resolve({} as Response), envelope);\r\n });\r\n\r\n let firstCall = true;\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n\r\n const exceed = firstCall === true;\r\n firstCall = false;\r\n return {\r\n exceedTransferLimit: exceed,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeatureJSON.prototype, \"readAndRender\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n await provider.loadTile(0,0,0);\r\n\r\n // We should have 5 calls:\r\n // Call #1 : initial call for 0,0,0 and it returns 'exceedTransferLimit'\r\n // Calls #2-5: Four calls which represent a call for each sub-envelope (initial extent divided by 4)\r\n expect (fetchTileStub.getCalls().length).to.equals(5);\r\n expect (fetchTileStub.getCalls()[1].args[3]).to.eqls( {\r\n xmin : 0, ymin : 0, xmax : extentSize*0.5, ymax : extentSize*0.5,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[2].args[3]).to.eqls( {\r\n xmin : 0, ymin : extentSize*0.5, xmax : extentSize*0.5, ymax : extentSize,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[3].args[3]).to.eqls( {\r\n xmin : extentSize*0.5, ymin : 0, xmax : extentSize, ymax : extentSize*0.5,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[4].args[3]).to.eqls( {\r\n xmin : extentSize*0.5, ymin : extentSize*0.5, xmax : extentSize, ymax : extentSize,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (readAndRenderSpy.getCalls().length).to.equals(4);\r\n });\r\n\r\n it(\"fetchTile should return undefined when to format defined\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n // make a first request with init, should return undefined because of missing format\r\n const tileData = await (provider as any).fetchTile(0,0,0);\r\n expect(tileData).to.be.undefined;\r\n });\r\n\r\n it(\"fetchTile should call fetch with the proper URL\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n const fetchStub = sandbox.stub((ArcGISImageryProvider.prototype as any), \"fetch\");\r\n\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"constructFeatureUrl\").callsFake(function _(_row: number, _column: number, _zoomLevel: number, _format: ArcGisFeatureFormat, _geomOverride?: ArcGisGeometry, _outFields?: string, _tolerance?: number, _returnGeometry?: boolean) {\r\n return {url: settings.url};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const response = await (provider as any).fetchTile(0,0,0);\r\n expect(response).to.not.undefined;\r\n expect(fetchStub.calledOnce).to.be.true;\r\n const test1 = fetchStub.getCall(0).firstArg;\r\n expect(test1.toString()).to.equals(new URL(settings.url).toString());\r\n\r\n });\r\n\r\n});\r\n"]}
1
+ {"version":3,"file":"ArcGisFeatureProvider.test.js","sourceRoot":"","sources":["../../../../src/test/ArcGisFeature/ArcGisFeatureProvider.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Base64EncodedString, Cartographic, ImageMapLayerSettings, ImageSourceFormat, ServerError } from \"@itwin/core-common\";\r\nimport * as chai from \"chai\";\r\nimport * as chaiAsPromised from \"chai-as-promised\";\r\nimport { ArcGisFeatureMapLayerFormat } from \"../../ArcGisFeature/ArcGisFeatureFormat\";\r\nimport { ArcGisFeatureProvider } from \"../../map-layers-formats\";\r\nimport * as sinon from \"sinon\";\r\nimport { ArcGISImageryProvider, ArcGisUtilities, ImageryMapTileTree, MapLayerFeatureInfo, MapLayerImageryProviderStatus, QuadId } from \"@itwin/core-frontend\";\r\nimport { NewYorkDataset } from \"./NewYorkDataset\";\r\nimport { base64StringToUint8Array, ByteStream, Logger } from \"@itwin/core-bentley\";\r\nimport { ArcGisExtent, ArcGisFeatureFormat, ArcGisGeometry } from \"../../ArcGisFeature/ArcGisFeatureQuery\";\r\nimport { PhillyLandmarksDataset } from \"./PhillyLandmarksDataset\";\r\nimport { ArcGisFeatureResponse } from \"../../ArcGisFeature/ArcGisFeatureResponse\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { ArcGisFeaturePBF } from \"../../ArcGisFeature/ArcGisFeaturePBF\";\r\nimport { ArcGisFeatureJSON } from \"../../ArcGisFeature/ArcGisFeatureJSON\";\r\n\r\nconst expect = chai.expect;\r\nchai.use(chaiAsPromised);\r\n\r\nconst esriFeatureSampleSource = {name: \"dummyFeatureLayer\", url: \"https://dummy.com\", formatId: ArcGisFeatureMapLayerFormat.formatId};\r\nconst pngTransparent1x1 = \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==\";\r\n\r\ndescribe(\"ArcGisFeatureProvider\", () => {\r\n const sandbox = sinon.createSandbox();\r\n\r\n afterEach(async () => {\r\n sandbox.restore();\r\n });\r\n\r\n it(\"should initialize with valid data\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return NewYorkDataset.serviceCapabilities;\r\n });\r\n\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"getLayerMetadata\" as any).callsFake(async function _(_layerId: number) {\r\n return NewYorkDataset.streetsLayerCapabilities;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n expect((provider as any)._minDepthFromLod).to.equals(11);\r\n expect((provider as any)._maxDepthFromLod).to.equals(22);\r\n });\r\n\r\n it(\"should not initialize with no service metadata\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return undefined;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n\r\n });\r\n\r\n it(\"should update status when invalid token error from service\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {error: {code: 499}};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const raiseEventSpy = sandbox.spy(provider.onStatusChanged, \"raiseEvent\");\r\n await provider.initialize();\r\n\r\n expect(provider.status).to.equals(MapLayerImageryProviderStatus.RequireAuth);\r\n expect(raiseEventSpy.calledOnceWith(provider)).to.be.true;\r\n });\r\n\r\n it(\"should throw query capability not supported\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Test\"};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should pick the first visible sub-layer when multiple visible sub-layers\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n const provider = new ArcGisFeatureProvider(settings);\r\n (provider as any)._format = \"JSON\";\r\n await provider.initialize();\r\n expect((provider as any)._layerId ).to.equals(settings.subLayers[0].id);\r\n });\r\n\r\n it(\"should pick sub-layers from service metadata if none provided on layer settings\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\",\r\n layers: [\r\n {\r\n id : 0,\r\n\r\n },\r\n {\r\n id : 1,\r\n },\r\n ]};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (id: number) {\r\n if (id === 1 ) {\r\n return {defaultVisibility:true};\r\n }\r\n return undefined;\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n (provider as any)._format = \"JSON\";\r\n await provider.initialize();\r\n expect((provider as any)._layerId ).to.equals(1);\r\n expect((provider as any)._layerMetadata ).to.eql({defaultVisibility:true});\r\n });\r\n\r\n it(\"should throw error if no layers in capabilities\", async () => {\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\",\r\n layers: []};\r\n });\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should throw if no layer metadata from service\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return undefined;\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should read supported supported format\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n let getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"PBF, JSON\"};\r\n });\r\n\r\n const getServiceJsonStub = sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n let provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"JSON\");\r\n\r\n // PBF requires 'supportsCoordinatesQuantization'\r\n getServiceJsonStub.restore();\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return { currentVersion: 11, capabilities: \"Query\"};\r\n });\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportsCoordinatesQuantization:true, supportedQueryFormats:\"PBF, JSON\"};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"PBF\");\r\n\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"JSON\"};\r\n });\r\n\r\n getServiceJsonStub.restore();\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return { currentVersion: 10.91, capabilities: \"Query\", supportsCoordinatesQuantization:true};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"JSON\");\r\n\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"JSON\"};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n expect(provider.format).to.equals(\"JSON\");\r\n\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {defaultVisibility:true, supportedQueryFormats:\"\"};\r\n });\r\n\r\n provider = new ArcGisFeatureProvider(settings);\r\n await expect(provider.initialize()).to.be.rejectedWith(ServerError);\r\n });\r\n\r\n it(\"should compute minLod/maxLod\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n expect((provider as any)._minDepthFromLod ).to.equals(9);\r\n expect((provider as any)._maxDepthFromLod ).to.equals(15);\r\n });\r\n\r\n it(\"should construct empty url\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON(esriFeatureSampleSource);\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const url = await provider.constructUrl(0,0,0);\r\n expect(url).to.equals(\"\");\r\n\r\n });\r\n\r\n it(\"should construct feature query url\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n let getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility: true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {currentVersion: 11, capabilities: \"Query\"};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n\r\n let url = provider.constructFeatureUrl(0,0,0, \"PBF\");\r\n const extent = {\r\n xmin: -20037508.34,\r\n ymin: -20037508.33,\r\n xmax: 20037508.34,\r\n ymax: 20037508.34,\r\n spatialReference: {\r\n wkid: 102100,\r\n latestWkid: 3857,\r\n },\r\n };\r\n expect(url?.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100`);\r\n expect(url?.envelope?.xmin).to.be.closeTo(extent.xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo(extent.ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo(extent.xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo(extent.ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(102100);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(3857);\r\n\r\n // Now turn ON 'supportsCoordinatesQuantization' to ON\r\n getLayerMetadataStub.restore();\r\n getLayerMetadataStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility: true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n supportsCoordinatesQuantization: true,\r\n };\r\n });\r\n\r\n const provider2 = new ArcGisFeatureProvider(settings);\r\n await provider2.initialize();\r\n url = provider2.constructFeatureUrl(0,0,0, \"PBF\");\r\n expect(url?.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D`);\r\n expect(url?.envelope?.xmin).to.be.closeTo(extent.xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo(extent.ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo(extent.xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo(extent.ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(extent.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(extent.spatialReference.latestWkid);\r\n\r\n // Test passing an override geometry\r\n const overrideGeom: ArcGisGeometry = {\r\n type: \"esriGeometryEnvelope\",\r\n geom: {\r\n xmin: -50,\r\n ymin: -50,\r\n xmax: 50,\r\n ymax: 50,\r\n spatialReference: {\r\n wkid: 102100,\r\n latestWkid: 3857,\r\n },\r\n },\r\n };\r\n const provider3 = new ArcGisFeatureProvider(settings);\r\n await provider3.initialize();\r\n url = provider3.constructFeatureUrl(0,0,0, \"PBF\", overrideGeom);\r\n expect(url?.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-50%2C%22ymin%22%3A-50%2C%22xmax%22%3A50%2C%22ymax%22%3A50%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D`);\r\n expect(url?.envelope?.xmin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(overrideGeom.geom.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(overrideGeom.geom.spatialReference.latestWkid);\r\n\r\n // Now test with a different tolerance value\r\n url = provider3.constructFeatureUrl(0,0,0, \"PBF\", overrideGeom, undefined, 10);\r\n expect(url?.url).to.equals(`https://dummy.com/0/query?f=PBF&resultType=tile&maxRecordCountFactor=3&returnExceededLimitFeatures=false&outSR=102100&geometryType=esriGeometryEnvelope&geometry=%7B%22xmin%22%3A-50%2C%22ymin%22%3A-50%2C%22xmax%22%3A50%2C%22ymax%22%3A50%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D&units=esriSRUnit_Meter&inSR=102100&quantizationParameters=%7B%22mode%22%3A%22view%22%2C%22originPosition%22%3A%22upperLeft%22%2C%22tolerance%22%3A78271.516953125%2C%22extent%22%3A%7B%22xmin%22%3A-20037508.34%2C%22ymin%22%3A-20037508.339999996%2C%22xmax%22%3A20037508.34%2C%22ymax%22%3A20037508.340000004%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%2C%22latestWkid%22%3A3857%7D%7D%7D&distance=782715.16953125`);\r\n expect(url?.envelope?.xmin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmin, 0.01);\r\n expect(url?.envelope?.ymin).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymin, 0.01);\r\n expect(url?.envelope?.xmax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).xmax, 0.01);\r\n expect(url?.envelope?.ymax).to.be.closeTo((overrideGeom.geom as ArcGisExtent).ymax, 0.01);\r\n expect(url?.envelope?.spatialReference.wkid).to.be.equal(overrideGeom.geom.spatialReference.wkid);\r\n expect(url?.envelope?.spatialReference.latestWkid).to.be.equal(overrideGeom.geom.spatialReference.latestWkid);\r\n\r\n });\r\n\r\n it(\"should log error when getFeatureInfo cannot be performed\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {currentVersion: 11, capabilities: \"Query\"};\r\n });\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"constructFeatureUrl\").callsFake(function _(_row: number, _column: number, _zoomLevel: number, _format: ArcGisFeatureFormat, _geomOverride?: ArcGisGeometry, _outFields?: string, _tolerance?: number, _returnGeometry?: boolean) {\r\n return undefined;\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.called).to.be.true;\r\n\r\n });\r\n\r\n it(\"should process data in getFeatureInfo\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n supportsCoordinatesQuantization:true,\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {currentVersion: 11, capabilities: \"Query\"};\r\n });\r\n sandbox.stub((ArcGISImageryProvider.prototype as any), \"fetch\").callsFake(async function _(_url: URL, _options?: RequestInit) {\r\n const test = {\r\n headers: { \"content-type\" : \"pbf\"},\r\n arrayBuffer: async () => {\r\n const byteArray = Base64EncodedString.toUint8Array(PhillyLandmarksDataset.phillyTransportationGetFeatureInfoQueryEncodedPbf);\r\n return Promise.resolve(byteArray ? ByteStream.fromUint8Array(byteArray).arrayBuffer : undefined);\r\n },\r\n status: 200,\r\n } as unknown; // By using unknown type, I can define parts of Response I really need\r\n return (test as Response );\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(1);\r\n expect(logErrorSpy.calledOnce).to.be.false;\r\n\r\n });\r\n\r\n it(\"should log error when exceed transfert limit\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {exceedTransferLimit: true, data:undefined};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.calledOnce).to.be.true;\r\n\r\n });\r\n\r\n it(\"should log error when exceed exception thrown limit\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n throw new Error();\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logErrorSpy = sandbox.spy(Logger, \"logError\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logErrorSpy.calledOnce).to.be.true;\r\n\r\n });\r\n\r\n it(\"should debug Feature Geom\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF, JSON\",\r\n minScale: 600000,\r\n maxScale: 5000,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {data: {\r\n toObject: () => undefined,\r\n }};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n (provider as any)._debugFeatureGeom = true;\r\n const featureInfos: MapLayerFeatureInfo[] = [];\r\n const logInfoSpy = sandbox.spy(Logger, \"logInfo\");\r\n await provider.getFeatureInfo(featureInfos, new QuadId(0, 0, 0), Cartographic.fromDegrees({latitude: 46, longitude:-71}), (undefined as unknown) as ImageryMapTileTree);\r\n expect(featureInfos.length).to.equals(0);\r\n expect(logInfoSpy.callCount).to.equals(2);\r\n\r\n });\r\n\r\n it(\"should compute computeTileWorld2CanvasTransform\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n const worldSize = 100;\r\n const canvasSize = 10;\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n const getEPSG3857ExtentStub = sandbox.stub(ArcGisFeatureProvider.prototype, \"getEPSG3857Extent\").callsFake(function (_row: number, _column: number, _zoomLevel: number) {\r\n return { left:0, right:worldSize, bottom:0, top:worldSize };\r\n });\r\n\r\n sandbox.stub(provider, \"tileSize\").get(function () {\r\n return canvasSize; // return a size of 10 to simplicity\r\n });\r\n let transform = ((provider as any).computeTileWorld2CanvasTransform(0,0,0) as Transform | undefined);\r\n let worldPoint = Point3d.createFrom({x: worldSize*0.5, y:worldSize*0.5, z:0});\r\n let transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n\r\n // Make sure center point remains in the center\r\n expect(transformedPoint).to.not.undefined;\r\n expect(transformedPoint!.x).to.equals(canvasSize*0.5);\r\n expect(transformedPoint!.y).to.equals(canvasSize*0.5);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n // Check that y-axis get flipped\r\n worldPoint = Point3d.createFrom({x: 0, y:10, z:0});\r\n transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n expect(transformedPoint!.x).to.equals(0);\r\n expect(transformedPoint!.y).to.equals(9);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n // Now check translation has been applied (origin shift)\r\n getEPSG3857ExtentStub.restore();\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"getEPSG3857Extent\").callsFake(function (_row: number, _column: number, _zoomLevel: number) {\r\n return { left:worldSize, right:worldSize*2, bottom:worldSize, top:worldSize*2 };\r\n });\r\n worldPoint = Point3d.createFrom({x: worldSize, y:worldSize, z:0});\r\n transform = ((provider as any).computeTileWorld2CanvasTransform(0,0,0) as Transform | undefined);\r\n transformedPoint = transform?.multiplyPoint3d(worldPoint);\r\n expect(transformedPoint).to.not.undefined;\r\n expect(transformedPoint!.x).to.equals(0);\r\n expect(transformedPoint!.y).to.equals(10);\r\n expect(transformedPoint!.z).to.equals(0);\r\n\r\n });\r\n\r\n it(\"should loadTile from PBF request\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"PBF\",\r\n supportsCoordinatesQuantization:true,\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {currentVersion: 11, capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const providerStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n return new ArcGisFeatureResponse(\"PBF\", Promise.resolve({} as Response));\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {\r\n exceedTransferLimit: false,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n // toDataURL string;\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeaturePBF.prototype, \"readAndRender\");\r\n const computeTransfoSpy = sandbox.spy(ArcGisFeatureProvider.prototype as any, \"computeTileWorld2CanvasTransform\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const tileData = await provider.loadTile(0,0,0);\r\n expect (tileData).to.not.undefined;\r\n expect (tileData?.data instanceof Uint8Array).to.be.true;\r\n expect(tileData?.data).to.eqls(base64StringToUint8Array(pngTransparent1x1));\r\n expect(tileData?.format).to.equals(ImageSourceFormat.Png);\r\n expect (providerStub.calledOnce).to.be.true;\r\n expect (readAndRenderSpy.calledOnce).to.be.true;\r\n expect (computeTransfoSpy.calledOnce).to.be.false; // Should not be called since we have supportsCoordinatesQuantization in layer metadata\r\n\r\n });\r\n\r\n it(\"should loadTile from JSON request\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const providerStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n return new ArcGisFeatureResponse(\"JSON\", Promise.resolve({} as Response));\r\n });\r\n\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n return {\r\n exceedTransferLimit: false,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeatureJSON.prototype, \"readAndRender\");\r\n const computeTransfoSpy = sandbox.spy(ArcGisFeatureProvider.prototype as any, \"computeTileWorld2CanvasTransform\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const tileData = await provider.loadTile(0,0,0);\r\n expect (tileData).to.not.undefined;\r\n expect (tileData?.data instanceof Uint8Array).to.be.true;\r\n expect(tileData?.data).to.eqls(base64StringToUint8Array(pngTransparent1x1));\r\n expect(tileData?.format).to.equals(ImageSourceFormat.Png);\r\n expect (providerStub.calledOnce).to.be.true;\r\n expect (readAndRenderSpy.calledOnce).to.be.true;\r\n expect (computeTransfoSpy.calledOnce).to.be.true; // Should be called since we dont have _supportsCoordinatesQuantization in layer metadata\r\n });\r\n\r\n it(\"should make sub request if loadtile request return 'exceedTransferLimit'\", async () => {\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n sandbox.stub(HTMLCanvasElement.prototype, \"getContext\").callsFake( function _(_contextId: any, _options?: any) {\r\n return {} as RenderingContext;\r\n });\r\n\r\n sandbox.stub(HTMLCanvasElement.prototype, \"toDataURL\").callsFake( function _(_type?: string, _quality?: any) {\r\n return `data:image/png;base64,${pngTransparent1x1}`;\r\n });\r\n\r\n const extentSize = 100;\r\n const fetchTileStub = sandbox.stub((ArcGisFeatureProvider.prototype as any), \"fetchTile\").callsFake(async function _() {\r\n const envelope: ArcGisExtent = {\r\n xmin : 0,\r\n ymin : 0,\r\n xmax : extentSize,\r\n ymax : extentSize,\r\n spatialReference : {\r\n wkid : 102100,\r\n latestWkid : 3857,\r\n }};\r\n return new ArcGisFeatureResponse(\"JSON\", Promise.resolve({} as Response), envelope);\r\n });\r\n\r\n let firstCall = true;\r\n sandbox.stub((ArcGisFeatureResponse.prototype as any), \"getResponseData\").callsFake(async function _() {\r\n\r\n const exceed = firstCall === true;\r\n firstCall = false;\r\n return {\r\n exceedTransferLimit: exceed,\r\n data: {toObject: () => undefined},\r\n };\r\n });\r\n\r\n const readAndRenderSpy = sandbox.spy(ArcGisFeatureJSON.prototype, \"readAndRender\");\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n await provider.loadTile(0,0,0);\r\n\r\n // We should have 5 calls:\r\n // Call #1 : initial call for 0,0,0 and it returns 'exceedTransferLimit'\r\n // Calls #2-5: Four calls which represent a call for each sub-envelope (initial extent divided by 4)\r\n expect (fetchTileStub.getCalls().length).to.equals(5);\r\n expect (fetchTileStub.getCalls()[1].args[3]).to.eqls( {\r\n xmin : 0, ymin : 0, xmax : extentSize*0.5, ymax : extentSize*0.5,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[2].args[3]).to.eqls( {\r\n xmin : 0, ymin : extentSize*0.5, xmax : extentSize*0.5, ymax : extentSize,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[3].args[3]).to.eqls( {\r\n xmin : extentSize*0.5, ymin : 0, xmax : extentSize, ymax : extentSize*0.5,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (fetchTileStub.getCalls()[4].args[3]).to.eqls( {\r\n xmin : extentSize*0.5, ymin : extentSize*0.5, xmax : extentSize, ymax : extentSize,\r\n spatialReference : { wkid : 102100, latestWkid : 3857,\r\n }});\r\n expect (readAndRenderSpy.getCalls().length).to.equals(4);\r\n });\r\n\r\n it(\"fetchTile should return undefined when to format defined\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n // make a first request with init, should return undefined because of missing format\r\n const tileData = await (provider as any).fetchTile(0,0,0);\r\n expect(tileData).to.be.undefined;\r\n });\r\n\r\n it(\"fetchTile should call fetch with the proper URL\", async () => {\r\n\r\n const settings = ImageMapLayerSettings.fromJSON({\r\n ...esriFeatureSampleSource,\r\n subLayers: [{id: 0, name: \"layer1\", visible:true}, {id:2, name: \"layer2\", visible:true}]}\r\n );\r\n\r\n sandbox.stub((ArcGisFeatureProvider.prototype as any), \"getLayerMetadata\").callsFake(async function (_id: number) {\r\n return {\r\n defaultVisibility:true,\r\n supportedQueryFormats:\"JSON\",\r\n };\r\n });\r\n sandbox.stub(ArcGisUtilities, \"getServiceJson\").callsFake(async function _(_url: string, _formatId: string, _userName?: string, _password?: string, _ignoreCache?: boolean) {\r\n return {capabilities: \"Query\"};\r\n });\r\n const fetchStub = sandbox.stub((ArcGISImageryProvider.prototype as any), \"fetch\");\r\n\r\n sandbox.stub(ArcGisFeatureProvider.prototype, \"constructFeatureUrl\").callsFake(function _(_row: number, _column: number, _zoomLevel: number, _format: ArcGisFeatureFormat, _geomOverride?: ArcGisGeometry, _outFields?: string, _tolerance?: number, _returnGeometry?: boolean) {\r\n return {url: settings.url};\r\n });\r\n\r\n const provider = new ArcGisFeatureProvider(settings);\r\n await provider.initialize();\r\n const response = await (provider as any).fetchTile(0,0,0);\r\n expect(response).to.not.undefined;\r\n expect(fetchStub.calledOnce).to.be.true;\r\n const test1 = fetchStub.getCall(0).firstArg;\r\n expect(test1.toString()).to.equals(new URL(settings.url).toString());\r\n\r\n });\r\n\r\n});\r\n"]}