@itwin/core-backend 5.9.0-dev.15 → 5.9.0-dev.17

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 (137) hide show
  1. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  2. package/lib/cjs/BriefcaseManager.js +6 -3
  3. package/lib/cjs/BriefcaseManager.js.map +1 -1
  4. package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
  5. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  6. package/lib/cjs/ChangesetECAdaptor.js +7 -1
  7. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  8. package/lib/cjs/ChangesetReader.d.ts +186 -0
  9. package/lib/cjs/ChangesetReader.d.ts.map +1 -0
  10. package/lib/cjs/ChangesetReader.js +372 -0
  11. package/lib/cjs/ChangesetReader.js.map +1 -0
  12. package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
  13. package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
  14. package/lib/cjs/ChangesetReaderTypes.js +23 -0
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
  16. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  17. package/lib/cjs/DevTools.js.map +1 -1
  18. package/lib/cjs/DisplayStyle.js.map +1 -1
  19. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  20. package/lib/cjs/ECSqlStatement.js.map +1 -1
  21. package/lib/cjs/EditTxn.d.ts +49 -3
  22. package/lib/cjs/EditTxn.d.ts.map +1 -1
  23. package/lib/cjs/EditTxn.js +24 -9
  24. package/lib/cjs/EditTxn.js.map +1 -1
  25. package/lib/cjs/Element.d.ts +69 -0
  26. package/lib/cjs/Element.d.ts.map +1 -1
  27. package/lib/cjs/Element.js +36 -0
  28. package/lib/cjs/Element.js.map +1 -1
  29. package/lib/cjs/ElementGraphics.js.map +1 -1
  30. package/lib/cjs/ExternalSource.js.map +1 -1
  31. package/lib/cjs/GeographicCRSServices.d.ts +15 -0
  32. package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
  33. package/lib/cjs/GeographicCRSServices.js +13 -4
  34. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  35. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  36. package/lib/cjs/IpcHost.js.map +1 -1
  37. package/lib/cjs/Model.d.ts +34 -0
  38. package/lib/cjs/Model.d.ts.map +1 -1
  39. package/lib/cjs/Model.js +24 -0
  40. package/lib/cjs/Model.js.map +1 -1
  41. package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
  42. package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
  43. package/lib/cjs/PartialChangeUnifier.js +234 -0
  44. package/lib/cjs/PartialChangeUnifier.js.map +1 -0
  45. package/lib/cjs/SheetIndex.js.map +1 -1
  46. package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
  47. package/lib/cjs/SqliteChangesetReader.js +1 -1
  48. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  49. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  50. package/lib/cjs/core-backend.d.ts +3 -0
  51. package/lib/cjs/core-backend.d.ts.map +1 -1
  52. package/lib/cjs/core-backend.js +3 -0
  53. package/lib/cjs/core-backend.js.map +1 -1
  54. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  55. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  56. package/lib/esm/BriefcaseManager.js +6 -3
  57. package/lib/esm/BriefcaseManager.js.map +1 -1
  58. package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
  59. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  60. package/lib/esm/ChangesetECAdaptor.js +7 -1
  61. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  62. package/lib/esm/ChangesetReader.d.ts +186 -0
  63. package/lib/esm/ChangesetReader.d.ts.map +1 -0
  64. package/lib/esm/ChangesetReader.js +368 -0
  65. package/lib/esm/ChangesetReader.js.map +1 -0
  66. package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
  67. package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
  68. package/lib/esm/ChangesetReaderTypes.js +20 -0
  69. package/lib/esm/ChangesetReaderTypes.js.map +1 -0
  70. package/lib/esm/ConcurrentQuery.js.map +1 -1
  71. package/lib/esm/DevTools.js.map +1 -1
  72. package/lib/esm/DisplayStyle.js.map +1 -1
  73. package/lib/esm/ECSqlStatement.d.ts.map +1 -1
  74. package/lib/esm/ECSqlStatement.js.map +1 -1
  75. package/lib/esm/EditTxn.d.ts +49 -3
  76. package/lib/esm/EditTxn.d.ts.map +1 -1
  77. package/lib/esm/EditTxn.js +23 -8
  78. package/lib/esm/EditTxn.js.map +1 -1
  79. package/lib/esm/Element.d.ts +69 -0
  80. package/lib/esm/Element.d.ts.map +1 -1
  81. package/lib/esm/Element.js +36 -0
  82. package/lib/esm/Element.js.map +1 -1
  83. package/lib/esm/ElementGraphics.js.map +1 -1
  84. package/lib/esm/ExternalSource.js.map +1 -1
  85. package/lib/esm/GeographicCRSServices.d.ts +15 -0
  86. package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
  87. package/lib/esm/GeographicCRSServices.js +12 -4
  88. package/lib/esm/GeographicCRSServices.js.map +1 -1
  89. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  90. package/lib/esm/IpcHost.js.map +1 -1
  91. package/lib/esm/Model.d.ts +34 -0
  92. package/lib/esm/Model.d.ts.map +1 -1
  93. package/lib/esm/Model.js +24 -0
  94. package/lib/esm/Model.js.map +1 -1
  95. package/lib/esm/PartialChangeUnifier.d.ts +77 -0
  96. package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
  97. package/lib/esm/PartialChangeUnifier.js +230 -0
  98. package/lib/esm/PartialChangeUnifier.js.map +1 -0
  99. package/lib/esm/SheetIndex.js.map +1 -1
  100. package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
  101. package/lib/esm/SqliteChangesetReader.js +1 -1
  102. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  103. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  104. package/lib/esm/core-backend.d.ts +3 -0
  105. package/lib/esm/core-backend.d.ts.map +1 -1
  106. package/lib/esm/core-backend.js +3 -0
  107. package/lib/esm/core-backend.js.map +1 -1
  108. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  109. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  110. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  111. package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
  112. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  113. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  114. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  115. package/lib/esm/test/element/DeleteDefinitionElements.test.js +40 -31
  116. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  117. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  118. package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
  119. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  120. package/lib/esm/test/misc/GeoServices.test.js +43 -1
  121. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  122. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  123. package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
  124. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  125. package/lib/esm/test/standalone/DeleteElements.test.js +39 -15
  126. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  127. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  128. package/lib/esm/test/standalone/IntegrityCheck.test.js +1 -1
  129. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  130. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
  131. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
  132. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
  133. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
  134. package/lib/esm/test/standalone/ViewDefinition.test.js +1 -1
  135. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  136. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  137. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { withEditTxn } from \"../../../EditTxn\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n range3d?: Uint8Array;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n range3d: index === 0\n ? new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer)\n : new Uint8Array(new Range3d(2.2, 3.3, 4.4, 5.5, 6.6, 7.7).toFloat64Array().buffer),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n } as TestElementWithNavProps;\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n await withEditTxn(iModel, async (txn) => {\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = txn.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = txn.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(txn.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(txn.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n });\n iModel.close();\n }\n}\n"]}
1
+ {"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { withEditTxn } from \"../../../EditTxn\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n range3d?: Uint8Array;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n range3d: index === 0\n ? new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer)\n : new Uint8Array(new Range3d(2.2, 3.3, 4.4, 5.5, 6.6, 7.7).toFloat64Array().buffer),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n };\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n await withEditTxn(iModel, async (txn) => {\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = txn.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = txn.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(txn.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(txn.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n });\n iModel.close();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlTestRunner.test.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestRunner.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { ECSqlRowArg, ECSqlStatement, ECSqlSyncReader, SnapshotDb, SynchronousQueryOptions } from \"../../../core-backend\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport { buildBinaryData, ECDbMarkdownTestParser, ECDbTestMode, ECDbTestProps, ECDbTestRowFormat } from \"./ECSqlTestParser\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\n\nenum TestDataset {\n AllProperties = \"AllProperties.bim\"\n}\n\nconst snapshotDbs: { [key in TestDataset]?: SnapshotDb } = {};\n\ndescribe(\"Markdown based ECDb test runner\", async () => {\n before(async () => {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", TestDataset.AllProperties);\n if (!fs.existsSync(datasetFilePath)) {\n throw new Error(`Dataset file ${datasetFilePath} does not exist`);\n }\n snapshotDbs[TestDataset.AllProperties] = SnapshotDb.openFile(datasetFilePath);\n });\n\n after(() => {\n for (const key in snapshotDbs) {\n if (snapshotDbs.hasOwnProperty(key)) {\n (snapshotDbs[key as keyof typeof snapshotDbs])?.close();\n }\n }\n });\n const tests: ECDbTestProps[] = ECDbMarkdownTestParser.parse();\n\n //TODO: Mechanism to run a single test, put something like it.only into the test md which causes this loop to only run those tests\n for (const test of tests) {\n if (!test.dataset) {\n logWarning(`Skipping test ${test.title} because it does not have a dataset`);\n continue;\n }\n\n if (test.dataset.toLowerCase() !== TestDataset.AllProperties.toLowerCase()) {\n logWarning(`Skipping test ${test.title} because dataset ${test.dataset} is not recognized`);\n continue;\n }\n const dataset = TestDataset.AllProperties;\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.Statement) {\n if (test.skip)\n it(`${test.fileName}: ${test.title} (Statement) skipped. Reason: ${test.skip}`);\n else if (test.only)\n it.only(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n else\n it(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n }\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.QueryReader) {\n if (test.skip) {\n it(`${test.fileName}: ${test.title} (ECSqlReader) skipped. Reason: ${test.skip}`);\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader) skipped. Reason: ${test.skip}`);\n }\n else if (test.only) {\n it.only(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it.only(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n else {\n it(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n }\n }\n});\n\nfunction runECSqlStatementTest(test: ECDbTestProps, dataset: TestDataset) {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let stmt: ECSqlStatement | undefined;\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n try {\n // TODO: statement options should be exposed through the markdown\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n stmt = imodel.prepareStatement(test.sql); // TODO: Wire up logic for tests we expect to fail during prepare\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during prepare of Statement: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n try {\n if (test.binders !== undefined) {\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n stmt.bindNull(id);\n break;\n case \"string\":\n stmt.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n stmt.bindInteger(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n stmt.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n stmt.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n stmt.bindIdSet(id, trimmedValues);\n break;\n case \"datetime\":\n stmt.bindDateTime(id, binder.value);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n stmt.bindPoint2d(id, { x: parsedVal2d.X, y: parsedVal2d.Y });\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n stmt.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n stmt.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"navigation\":\n stmt.bindNavigation(id, JSON.parse(binder.value));\n break;\n case \"array\":\n stmt.bindArray(id, JSON.parse(binder.value));\n break;\n case \"struct\":\n stmt.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n } // if test.binders\n\n let resultCount = 0;\n let stepResult: DbResult;\n while ((stepResult = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n const colCount = stmt.getColumnCount();\n assert.strictEqual(colCount, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colCount}`);\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.getPropertyName(), expectedColInfo.name, `Expected property name ${expectedColInfo.name} but got ${colInfo.getPropertyName()} for column index ${i}`);\n //if (expectedColInfo.isDynamicProp !== undefined) TODO: Is this not exposed?\n // assert.strictEqual(colInfo..isDynamicProperty, expectedColInfo.isDynamicProp, `Expected dynamic property ${expectedColInfo.isDynamicProp} but got ${colInfo.isDynamicProperty} for column index ${i}`);\n // TODO: Extended type name not exposed??\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.isGeneratedProperty(), expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.isGeneratedProperty()} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.getAccessString(), expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.getAccessString()} for column index ${i}`);\n if (expectedColInfo.type !== undefined)\n assert.strictEqual(ECSqlValueType[colInfo.getType()], expectedColInfo.type, `Expected type ${expectedColInfo.type} but got ${ECSqlValueType[colInfo.getType()]} for column index ${i}`);\n if (expectedColInfo.originPropertyName !== undefined)\n assert.strictEqual(colInfo.getOriginPropertyName(), expectedColInfo.originPropertyName, `Expected Origin PropertyName ${expectedColInfo.originPropertyName} but got ${colInfo.getOriginPropertyName()} for column index ${i}`);\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n expectedResult = buildBinaryData(expectedResult);\n const rowArgs: ECSqlRowArg = { rowFormat: getRowFormat(test.rowFormat), classIdsToClassNames: test.convertClassIdsToClassNames };\n const actualResult = stmt.getRow(rowArgs);\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n stmt[Symbol.dispose]();\n stmt = undefined;\n\n if (resultCount === 0 && test.stepStatus) {\n const stepResultString = DbResult[stepResult];\n assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n } finally {\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n }\n}\n\nfunction getRowFormat(rowFormat: ECDbTestRowFormat): QueryRowFormat {\n switch (rowFormat) {\n case ECDbTestRowFormat.ECSqlNames:\n return QueryRowFormat.UseECSqlPropertyNames;\n case ECDbTestRowFormat.ECSqlIndexes:\n return QueryRowFormat.UseECSqlPropertyIndexes;\n case ECDbTestRowFormat.JsNames:\n return QueryRowFormat.UseJsPropertyNames;\n default:\n return QueryRowFormat.UseECSqlPropertyNames;\n }\n}\n\n/** Builds a QueryBinder from the test's binder definitions. Returns undefined when the test has no binders. */\nfunction buildQueryBinder(test: ECDbTestProps): QueryBinder | undefined {\n if (test.binders === undefined)\n return undefined;\n\n const params = new QueryBinder();\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n params.bindNull(id);\n break;\n case \"string\":\n params.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n params.bindInt(id, Number.parseInt(binder.value));\n break;\n case \"long\":\n // eslint-disable-next-line radix\n params.bindLong(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n params.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n params.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n params.bindIdSet(id, trimmedValues);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n params.bindPoint2d(id, new Point2d(parsedVal2d.X, parsedVal2d.Y));\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n params.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n params.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"struct\":\n params.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n return params;\n}\n\n/** Builds the common query options object from the test configuration. */\nfunction buildReaderQueryOptions(test: ECDbTestProps): QueryOptions {\n const queryOptions: QueryOptions = {};\n queryOptions.rowFormat = getRowFormat(test.rowFormat);\n if (test.abbreviateBlobs)\n queryOptions.abbreviateBlobs = true;\n if (test.convertClassIdsToClassNames) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n queryOptions.convertClassIdsToClassNames = true;\n }\n return queryOptions;\n}\n\n/**\n * Shared assertion logic for QueryReader tests that operates on the result rows and column metadata.\n * Used by both ECSqlReader and ECSqlSyncReader test paths.\n */\nfunction runResultAssertions(test: ECDbTestProps, rows: any, colMetaData: QueryPropertyMetaData[]) {\n let resultCount = 0;\n while (resultCount < rows.length) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n assert.strictEqual(colMetaData.length, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colMetaData.length}`);\n for (let i = 0; i < colMetaData.length; i++) {\n const colInfo = colMetaData[i];\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.name, expectedColInfo.name, `Expected name ${expectedColInfo.name} but got ${colInfo.name} for column index ${i}`);\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.generated, expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.generated} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.accessString, expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.accessString} for column index ${i}`);\n if (expectedColInfo.typeName !== undefined)\n assert.strictEqual(colInfo.typeName, expectedColInfo.typeName, `Expected type name ${expectedColInfo.typeName} but got ${colInfo.typeName} for column index ${i}`);\n if (expectedColInfo.className !== undefined)\n assert.strictEqual(colInfo.className, expectedColInfo.className, `Expected class name ${expectedColInfo.className} but got ${colInfo.className} for column index ${i}`);\n assert.strictEqual(colInfo.extendedType, expectedColInfo.extendedType, `Expected extended type ${expectedColInfo.extendedType} but got ${colInfo.extendedType} for column index ${i}`);\n assert.strictEqual(colInfo.extendType, expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType, `Expected extend type ${expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType} but got ${colInfo.extendType} for column index ${i}`); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n // replace props in expected result, TODO: optimize this\n expectedResult = buildBinaryData(expectedResult);\n\n const actualResult = rows[resultCount]; // TODO: should we test getValue() as well?\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlReader test paths.\n */\nasync function runAssertionsOnReader(test: ECDbTestProps, reader: ECSqlReader, label: string): Promise<void> {\n let rows;\n try {\n rows = await reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = await reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlSyncReader test paths.\n */\nfunction runAssertionsOnSyncReader(test: ECDbTestProps, reader: ECSqlSyncReader, label: string): void {\n let rows;\n try {\n rows = reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\nasync function runECSqlReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n let reader: ECSqlReader;\n try {\n reader = imodel.createQueryReader(test.sql, params, queryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlReader: ${error.message}`);\n }\n\n await runAssertionsOnReader(test, reader, \"ECSqlReader\");\n}\n\nasync function runECSqlSyncReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n try {\n imodel.withQueryReader(test.sql, reader => {\n runAssertionsOnSyncReader(test, reader, \"ECSqlSyncReader\");\n }, params, queryOptions as SynchronousQueryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlSyncReader: ${error.message}`);\n }\n}\n\nfunction checkingExpectedResults(rowFormat: ECDbTestRowFormat, actualResult: any, expectedResult: any, indexesToInclude?: number[]) {\n if (rowFormat === ECDbTestRowFormat.ECSqlIndexes && indexesToInclude) {\n let i: any = 0;\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[indexesToInclude[i]] === \"string\" ? actualResult[indexesToInclude[i]].trim() : actualResult[indexesToInclude[i]];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[indexesToInclude[i]])}`);\n i++;\n }\n }\n else {\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[key] === \"string\" ? actualResult[key].trim() : actualResult[key];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[key])}`);\n }\n }\n}\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}\n"]}
1
+ {"version":3,"file":"ECSqlTestRunner.test.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestRunner.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { ECSqlRowArg, ECSqlStatement, ECSqlSyncReader, SnapshotDb } from \"../../../core-backend\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport { buildBinaryData, ECDbMarkdownTestParser, ECDbTestMode, ECDbTestProps, ECDbTestRowFormat } from \"./ECSqlTestParser\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\n\nenum TestDataset {\n AllProperties = \"AllProperties.bim\"\n}\n\nconst snapshotDbs: { [key in TestDataset]?: SnapshotDb } = {};\n\ndescribe(\"Markdown based ECDb test runner\", async () => {\n before(async () => {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", TestDataset.AllProperties);\n if (!fs.existsSync(datasetFilePath)) {\n throw new Error(`Dataset file ${datasetFilePath} does not exist`);\n }\n snapshotDbs[TestDataset.AllProperties] = SnapshotDb.openFile(datasetFilePath);\n });\n\n after(() => {\n for (const key in snapshotDbs) {\n if (snapshotDbs.hasOwnProperty(key)) {\n (snapshotDbs[key as keyof typeof snapshotDbs])?.close();\n }\n }\n });\n const tests: ECDbTestProps[] = ECDbMarkdownTestParser.parse();\n\n //TODO: Mechanism to run a single test, put something like it.only into the test md which causes this loop to only run those tests\n for (const test of tests) {\n if (!test.dataset) {\n logWarning(`Skipping test ${test.title} because it does not have a dataset`);\n continue;\n }\n\n if (test.dataset.toLowerCase() !== TestDataset.AllProperties.toLowerCase()) {\n logWarning(`Skipping test ${test.title} because dataset ${test.dataset} is not recognized`);\n continue;\n }\n const dataset = TestDataset.AllProperties;\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.Statement) {\n if (test.skip)\n it(`${test.fileName}: ${test.title} (Statement) skipped. Reason: ${test.skip}`);\n else if (test.only)\n it.only(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n else\n it(`${test.fileName}: ${test.title} (Statement)`, () => {\n runECSqlStatementTest(test, dataset);\n });\n }\n\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.QueryReader) {\n if (test.skip) {\n it(`${test.fileName}: ${test.title} (ECSqlReader) skipped. Reason: ${test.skip}`);\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader) skipped. Reason: ${test.skip}`);\n }\n else if (test.only) {\n it.only(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it.only(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n else {\n it(`${test.fileName}: ${test.title} (ECSqlReader)`, async () => {\n await runECSqlReaderTest(test, dataset);\n });\n it(`${test.fileName}: ${test.title} (ECSqlSyncReader)`, async () => {\n await runECSqlSyncReaderTest(test, dataset);\n });\n }\n }\n }\n});\n\nfunction runECSqlStatementTest(test: ECDbTestProps, dataset: TestDataset) {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let stmt: ECSqlStatement | undefined;\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n try {\n // TODO: statement options should be exposed through the markdown\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n stmt = imodel.prepareStatement(test.sql); // TODO: Wire up logic for tests we expect to fail during prepare\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during prepare of Statement: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n try {\n if (test.binders !== undefined) {\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n stmt.bindNull(id);\n break;\n case \"string\":\n stmt.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n stmt.bindInteger(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n stmt.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n stmt.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n stmt.bindIdSet(id, trimmedValues);\n break;\n case \"datetime\":\n stmt.bindDateTime(id, binder.value);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n stmt.bindPoint2d(id, { x: parsedVal2d.X, y: parsedVal2d.Y });\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n stmt.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n stmt.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"navigation\":\n stmt.bindNavigation(id, JSON.parse(binder.value));\n break;\n case \"array\":\n stmt.bindArray(id, JSON.parse(binder.value));\n break;\n case \"struct\":\n stmt.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n } // if test.binders\n\n let resultCount = 0;\n let stepResult: DbResult;\n while ((stepResult = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n const colCount = stmt.getColumnCount();\n assert.strictEqual(colCount, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colCount}`);\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.getPropertyName(), expectedColInfo.name, `Expected property name ${expectedColInfo.name} but got ${colInfo.getPropertyName()} for column index ${i}`);\n //if (expectedColInfo.isDynamicProp !== undefined) TODO: Is this not exposed?\n // assert.strictEqual(colInfo..isDynamicProperty, expectedColInfo.isDynamicProp, `Expected dynamic property ${expectedColInfo.isDynamicProp} but got ${colInfo.isDynamicProperty} for column index ${i}`);\n // TODO: Extended type name not exposed??\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.isGeneratedProperty(), expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.isGeneratedProperty()} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.getAccessString(), expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.getAccessString()} for column index ${i}`);\n if (expectedColInfo.type !== undefined)\n assert.strictEqual(ECSqlValueType[colInfo.getType()], expectedColInfo.type, `Expected type ${expectedColInfo.type} but got ${ECSqlValueType[colInfo.getType()]} for column index ${i}`);\n if (expectedColInfo.originPropertyName !== undefined)\n assert.strictEqual(colInfo.getOriginPropertyName(), expectedColInfo.originPropertyName, `Expected Origin PropertyName ${expectedColInfo.originPropertyName} but got ${colInfo.getOriginPropertyName()} for column index ${i}`);\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n expectedResult = buildBinaryData(expectedResult);\n const rowArgs: ECSqlRowArg = { rowFormat: getRowFormat(test.rowFormat), classIdsToClassNames: test.convertClassIdsToClassNames };\n const actualResult = stmt.getRow(rowArgs);\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n stmt[Symbol.dispose]();\n stmt = undefined;\n\n if (resultCount === 0 && test.stepStatus) {\n const stepResultString = DbResult[stepResult];\n assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n } finally {\n if (stmt !== undefined)\n stmt[Symbol.dispose]();\n }\n}\n\nfunction getRowFormat(rowFormat: ECDbTestRowFormat): QueryRowFormat {\n switch (rowFormat) {\n case ECDbTestRowFormat.ECSqlNames:\n return QueryRowFormat.UseECSqlPropertyNames;\n case ECDbTestRowFormat.ECSqlIndexes:\n return QueryRowFormat.UseECSqlPropertyIndexes;\n case ECDbTestRowFormat.JsNames:\n return QueryRowFormat.UseJsPropertyNames;\n default:\n return QueryRowFormat.UseECSqlPropertyNames;\n }\n}\n\n/** Builds a QueryBinder from the test's binder definitions. Returns undefined when the test has no binders. */\nfunction buildQueryBinder(test: ECDbTestProps): QueryBinder | undefined {\n if (test.binders === undefined)\n return undefined;\n\n const params = new QueryBinder();\n for (const binder of test.binders) {\n // eslint-disable-next-line radix\n let id: number | string = Number.parseInt(binder.indexOrName);\n if (isNaN(id))\n id = binder.indexOrName;\n\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\n case \"null\":\n params.bindNull(id);\n break;\n case \"string\":\n params.bindString(id, binder.value);\n break;\n case \"int\":\n // eslint-disable-next-line radix\n params.bindInt(id, Number.parseInt(binder.value));\n break;\n case \"long\":\n // eslint-disable-next-line radix\n params.bindLong(id, Number.parseInt(binder.value));\n break;\n case \"double\":\n params.bindDouble(id, Number.parseFloat(binder.value));\n break;\n case \"id\":\n params.bindId(id, binder.value);\n break;\n case \"idset\":\n const values: string[] = binder.value.slice(1, -1).split(\",\");\n const trimmedValues = values.map((value: string) =>\n value.trim()\n );\n params.bindIdSet(id, trimmedValues);\n break;\n case \"point2d\":\n const parsedVal2d = JSON.parse(binder.value);\n params.bindPoint2d(id, new Point2d(parsedVal2d.X, parsedVal2d.Y));\n break;\n case \"point3d\":\n const parsedVal3d = JSON.parse(binder.value);\n params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));\n break;\n case \"range3d\":\n const parsedRange3d = JSON.parse(binder.value);\n params.bindRange3d(id, { low: { x: parsedRange3d.low.x, y: parsedRange3d.low.y, z: parsedRange3d.low.z }, high: { x: parsedRange3d.high.x, y: parsedRange3d.high.y, z: parsedRange3d.high.z } });\n break;\n case \"blob\":\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\n const numbers = arrayValues.map((value: string) =>\n // eslint-disable-next-line radix\n parseInt(value.trim())\n );\n params.bindBlob(id, Uint8Array.of(...numbers));\n break;\n case \"struct\":\n params.bindStruct(id, JSON.parse(binder.value));\n break;\n default:\n assert.fail(`Unsupported binder type ${binder.type}`);\n } // switch binder.type\n } // for binder\n return params;\n}\n\n/** Builds the common query options object from the test configuration. */\nfunction buildReaderQueryOptions(test: ECDbTestProps): QueryOptions {\n const queryOptions: QueryOptions = {};\n queryOptions.rowFormat = getRowFormat(test.rowFormat);\n if (test.abbreviateBlobs)\n queryOptions.abbreviateBlobs = true;\n if (test.convertClassIdsToClassNames) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n queryOptions.convertClassIdsToClassNames = true;\n }\n return queryOptions;\n}\n\n/**\n * Shared assertion logic for QueryReader tests that operates on the result rows and column metadata.\n * Used by both ECSqlReader and ECSqlSyncReader test paths.\n */\nfunction runResultAssertions(test: ECDbTestProps, rows: any, colMetaData: QueryPropertyMetaData[]) {\n let resultCount = 0;\n while (resultCount < rows.length) {\n if (resultCount === 0 && test.columnInfo) {\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\n assert.strictEqual(colMetaData.length, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colMetaData.length}`);\n for (let i = 0; i < colMetaData.length; i++) {\n const colInfo = colMetaData[i];\n const expectedColInfo = test.columnInfo[i];\n // cannot directly compare against colInfo because it has methods instead of getters\n assert.strictEqual(colInfo.name, expectedColInfo.name, `Expected name ${expectedColInfo.name} but got ${colInfo.name} for column index ${i}`);\n if (expectedColInfo.generated !== undefined)\n assert.strictEqual(colInfo.generated, expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.generated} for column index ${i}`);\n if (expectedColInfo.accessString !== undefined)\n assert.strictEqual(colInfo.accessString, expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.accessString} for column index ${i}`);\n if (expectedColInfo.typeName !== undefined)\n assert.strictEqual(colInfo.typeName, expectedColInfo.typeName, `Expected type name ${expectedColInfo.typeName} but got ${colInfo.typeName} for column index ${i}`);\n if (expectedColInfo.className !== undefined)\n assert.strictEqual(colInfo.className, expectedColInfo.className, `Expected class name ${expectedColInfo.className} but got ${colInfo.className} for column index ${i}`);\n assert.strictEqual(colInfo.extendedType, expectedColInfo.extendedType, `Expected extended type ${expectedColInfo.extendedType} but got ${colInfo.extendedType} for column index ${i}`);\n assert.strictEqual(colInfo.extendType, expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType, `Expected extend type ${expectedColInfo.extendedType === undefined ? \"\" : expectedColInfo.extendedType} but got ${colInfo.extendType} for column index ${i}`); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n }\n\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\n let expectedResult = test.expectedResults[resultCount];\n // replace props in expected result, TODO: optimize this\n expectedResult = buildBinaryData(expectedResult);\n\n const actualResult = rows[resultCount]; // TODO: should we test getValue() as well?\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\n }\n resultCount++;\n }\n\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\n }\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlReader test paths.\n */\nasync function runAssertionsOnReader(test: ECDbTestProps, reader: ECSqlReader, label: string): Promise<void> {\n let rows;\n try {\n rows = await reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = await reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\n/**\n * Shared assertion logic that operates on an already-created ECSqlReader.\n * Used by ECSqlSyncReader test paths.\n */\nfunction runAssertionsOnSyncReader(test: ECDbTestProps, reader: ECSqlSyncReader, label: string): void {\n let rows;\n try {\n rows = reader.toArray();\n }\n catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during execution of ${label}: ${error.message}`);\n }\n\n if (test.errorDuringPrepare)\n assert.fail(`Statement is expected to fail during prepare`);\n\n const colMetaData = reader.getMetaData();\n runResultAssertions(test, rows, colMetaData);\n}\n\nasync function runECSqlReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n let reader: ECSqlReader;\n try {\n reader = imodel.createQueryReader(test.sql, params, queryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlReader: ${error.message}`);\n }\n\n await runAssertionsOnReader(test, reader, \"ECSqlReader\");\n}\n\nasync function runECSqlSyncReaderTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\n const imodel = snapshotDbs[dataset];\n if (!imodel) {\n assert.fail(`Dataset ${dataset} is not loaded`);\n }\n\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n\n const params = buildQueryBinder(test);\n const queryOptions = buildReaderQueryOptions(test);\n\n try {\n imodel.withQueryReader(test.sql, reader => {\n runAssertionsOnSyncReader(test, reader, \"ECSqlSyncReader\");\n }, params, queryOptions);\n } catch (error: any) {\n if (test.errorDuringPrepare)\n return;\n else\n assert.fail(`Error during creating ECSqlSyncReader: ${error.message}`);\n }\n}\n\nfunction checkingExpectedResults(rowFormat: ECDbTestRowFormat, actualResult: any, expectedResult: any, indexesToInclude?: number[]) {\n if (rowFormat === ECDbTestRowFormat.ECSqlIndexes && indexesToInclude) {\n let i: any = 0;\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[indexesToInclude[i]] === \"string\" ? actualResult[indexesToInclude[i]].trim() : actualResult[indexesToInclude[i]];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[indexesToInclude[i]])}`);\n i++;\n }\n }\n else {\n for (const key of Object.keys(expectedResult)) {\n const expected = typeof expectedResult[key] === \"string\" ? expectedResult[key].trim() : expectedResult[key];\n const actual = typeof actualResult[key] === \"string\" ? actualResult[key].trim() : actualResult[key];\n assert.deepEqual(actual, expected, `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[key])}`);\n }\n }\n}\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}\n"]}
@@ -287,7 +287,7 @@ describe("DeleteDefinitionElements", () => {
287
287
  */
288
288
  const executeTestCase = (txn, label, idsToDelete, expectedDeleted, expectedFailed, expectedRetained, abandonChanges = true) => {
289
289
  const failed = txn.deleteElements(idsToDelete);
290
- assert.sameMembers(Array.from(failed), expectedFailed, `[${label}] failed set mismatch`);
290
+ assert.sameMembers(Array.from(failed.failedIds), expectedFailed, `[${label}] failed set mismatch`);
291
291
  for (const id of expectedDeleted)
292
292
  assert.isUndefined(iModelDb.elements.tryGetElement(id), `error reading element`);
293
293
  for (const id of expectedRetained)
@@ -300,7 +300,7 @@ describe("DeleteDefinitionElements", () => {
300
300
  const txn = new EditTxn(iModelDb, "delete definition elements");
301
301
  txn.start();
302
302
  // make sure deleteElements only skips Elements that are being used (subjectId)
303
- usedDefinitionElementIds = txn.deleteElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]);
303
+ usedDefinitionElementIds = txn.deleteElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]).failedIds;
304
304
  assert.equal(usedDefinitionElementIds.size, 1);
305
305
  assert.isUndefined(iModelDb.elements.tryGetElement(physicalObjectId1));
306
306
  assert.isUndefined(iModelDb.elements.tryGetElement(physicalObjectId2));
@@ -312,7 +312,7 @@ describe("DeleteDefinitionElements", () => {
312
312
  assert.throws(() => txn.deleteElements([Id64.invalid, Id64.invalid]));
313
313
  // deleteElement/deleteElements for a used GeometryPart should fail
314
314
  assert.throws(() => txn.deleteElement(geometryPartId));
315
- usedDefinitionElementIds = txn.deleteElements([geometryPartId]);
315
+ usedDefinitionElementIds = txn.deleteElements([geometryPartId]).failedIds;
316
316
  assert.isTrue(usedDefinitionElementIds.has(geometryPartId));
317
317
  assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));
318
318
  // deleteElements for an unused GeometryPart should succeed, delete should still fail
@@ -327,57 +327,63 @@ describe("DeleteDefinitionElements", () => {
327
327
  const unusedGeometryPartId = txn.insertElement(unusedGeometryPartProps);
328
328
  assert.isTrue(Id64.isValidId64(unusedGeometryPartId));
329
329
  assert.throws(() => txn.deleteElement(unusedGeometryPartId));
330
- usedDefinitionElementIds = txn.deleteElements([unusedGeometryPartId]);
330
+ usedDefinitionElementIds = txn.deleteElements([unusedGeometryPartId]).failedIds;
331
331
  assert.equal(usedDefinitionElementIds.size, 0);
332
332
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));
333
+ txn.abandonChanges();
333
334
  // deleteElement/deleteElements for a used RenderMaterial should fail
334
335
  assert.throws(() => txn.deleteElement(renderMaterialId));
335
- usedDefinitionElementIds = txn.deleteElements([renderMaterialId]);
336
+ usedDefinitionElementIds = txn.deleteElements([renderMaterialId]).failedIds;
336
337
  assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));
337
338
  assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));
339
+ txn.abandonChanges();
338
340
  // deleteElements for an unused RenderMaterial should succeed, delete should still fail
339
341
  const unusedRenderMaterialId = RenderMaterialElement.insert(txn, definitionModelId, "Unused RenderMaterial", { paletteName: "PaletteName" });
340
342
  assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));
341
343
  assert.throws(() => txn.deleteElement(unusedRenderMaterialId));
342
- usedDefinitionElementIds = txn.deleteElements([unusedRenderMaterialId]);
344
+ usedDefinitionElementIds = txn.deleteElements([unusedRenderMaterialId]).failedIds;
343
345
  assert.equal(usedDefinitionElementIds.size, 0);
344
346
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));
345
347
  txn.abandonChanges();
346
348
  // deleteElement/deleteElements for a used Texture should fail
347
349
  assert.throws(() => txn.deleteElement(textureId));
348
- usedDefinitionElementIds = txn.deleteElements([textureId]);
350
+ usedDefinitionElementIds = txn.deleteElements([textureId]).failedIds;
349
351
  assert.isTrue(usedDefinitionElementIds.has(textureId));
350
352
  assert.isDefined(iModelDb.elements.tryGetElement(textureId));
353
+ txn.abandonChanges();
351
354
  // deleteElements for an unused Texture should succeed, delete should still fail
352
355
  const unusedTextureId = IModelTestUtils.insertTextureElement(txn, definitionModelId, "Unused Texture");
353
356
  assert.isTrue(Id64.isValidId64(unusedTextureId));
354
357
  assert.throws(() => txn.deleteElement(unusedTextureId));
355
- usedDefinitionElementIds = txn.deleteElements([unusedTextureId]);
358
+ usedDefinitionElementIds = txn.deleteElements([unusedTextureId]).failedIds;
356
359
  assert.equal(usedDefinitionElementIds.size, 0);
357
360
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));
358
361
  txn.abandonChanges();
359
362
  // deleteElement/deleteElements for a used SpatialCategory should fail
360
363
  assert.throws(() => txn.deleteElement(spatialCategoryId));
361
- usedDefinitionElementIds = txn.deleteElements([spatialCategoryId]);
364
+ usedDefinitionElementIds = txn.deleteElements([spatialCategoryId]).failedIds;
362
365
  assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));
363
366
  assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));
367
+ txn.abandonChanges();
364
368
  // deleteElement/deleteElements for a default SubCategory should fail
365
369
  const spatialCategory = iModelDb.elements.getElement(spatialCategoryId, SpatialCategory);
366
370
  const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();
367
371
  assert.throws(() => txn.deleteElement(defaultSpatialSubCategoryId));
368
- usedDefinitionElementIds = txn.deleteElements([defaultSpatialSubCategoryId]);
372
+ usedDefinitionElementIds = txn.deleteElements([defaultSpatialSubCategoryId]).failedIds;
369
373
  assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));
370
374
  assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));
375
+ txn.abandonChanges();
371
376
  // deleteElement/deleteElements for a used, non-default SubCategory should fail
372
377
  assert.throws(() => txn.deleteElement(subCategoryId));
373
- usedDefinitionElementIds = txn.deleteElements([subCategoryId]);
378
+ usedDefinitionElementIds = txn.deleteElements([subCategoryId]).failedIds;
374
379
  assert.isTrue(usedDefinitionElementIds.has(subCategoryId));
375
380
  assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));
381
+ txn.abandonChanges();
376
382
  // deleteElements for an unused SubCategory should succeed, delete should still fail
377
383
  const unusedSubCategoryId = SubCategory.insert(txn, spatialCategoryId, "Unused SubCategory", {});
378
384
  assert.isTrue(Id64.isValidId64(unusedSubCategoryId));
379
385
  assert.throws(() => txn.deleteElement(unusedSubCategoryId));
380
- usedDefinitionElementIds = txn.deleteElements([unusedSubCategoryId]);
386
+ usedDefinitionElementIds = txn.deleteElements([unusedSubCategoryId]).failedIds;
381
387
  assert.equal(usedDefinitionElementIds.size, 0);
382
388
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));
383
389
  txn.abandonChanges();
@@ -389,16 +395,17 @@ describe("DeleteDefinitionElements", () => {
389
395
  assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));
390
396
  assert.throws(() => txn.deleteElement(unusedSpatialCategoryId));
391
397
  assert.throws(() => txn.deleteElement(unusedSpatialCategoryDefaultSubCategoryId));
392
- usedDefinitionElementIds = txn.deleteElements([unusedSpatialCategoryId]);
398
+ usedDefinitionElementIds = txn.deleteElements([unusedSpatialCategoryId]).failedIds;
393
399
  assert.equal(usedDefinitionElementIds.size, 0);
394
400
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));
395
401
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));
396
402
  txn.abandonChanges();
397
403
  // deleteElement/deleteElements of a used DrawingCategory should fail
398
404
  assert.throws(() => txn.deleteElement(drawingCategoryId));
399
- usedDefinitionElementIds = txn.deleteElements([drawingCategoryId]);
405
+ usedDefinitionElementIds = txn.deleteElements([drawingCategoryId]).failedIds;
400
406
  assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));
401
407
  assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));
408
+ txn.abandonChanges();
402
409
  // deleteElements for an unused DrawingCategory should succeed, delete should still fail
403
410
  const unusedDrawingCategoryId = DrawingCategory.insert(txn, definitionModelId, "Unused DrawingCategory", {});
404
411
  assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));
@@ -406,7 +413,7 @@ describe("DeleteDefinitionElements", () => {
406
413
  const unusedDrawingSubCategoryId = unusedDrawingCategory.myDefaultSubCategoryId();
407
414
  assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));
408
415
  assert.throws(() => txn.deleteElement(unusedDrawingSubCategoryId));
409
- usedDefinitionElementIds = txn.deleteElements([unusedDrawingCategoryId]);
416
+ usedDefinitionElementIds = txn.deleteElements([unusedDrawingCategoryId]).failedIds;
410
417
  assert.equal(usedDefinitionElementIds.size, 0);
411
418
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));
412
419
  assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));
@@ -415,7 +422,7 @@ describe("DeleteDefinitionElements", () => {
415
422
  assert.throws(() => txn.deleteElement(spatialCategorySelectorId));
416
423
  assert.throws(() => txn.deleteElement(modelSelectorId));
417
424
  assert.throws(() => txn.deleteElement(displayStyle3dId));
418
- usedDefinitionElementIds = txn.deleteElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);
425
+ usedDefinitionElementIds = txn.deleteElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]).failedIds;
419
426
  assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));
420
427
  assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));
421
428
  assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));
@@ -423,9 +430,10 @@ describe("DeleteDefinitionElements", () => {
423
430
  assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));
424
431
  assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));
425
432
  assert.isDefined(iModelDb.elements.tryGetElement(viewId));
433
+ txn.abandonChanges();
426
434
  // deleteElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail
427
435
  assert.throws(() => txn.deleteElement(viewId));
428
- usedDefinitionElementIds = txn.deleteElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);
436
+ usedDefinitionElementIds = txn.deleteElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]).failedIds;
429
437
  assert.equal(usedDefinitionElementIds.size, 0);
430
438
  assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));
431
439
  assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));
@@ -435,15 +443,16 @@ describe("DeleteDefinitionElements", () => {
435
443
  // deleteElement/deleteElements of DefinitionElements used by an existing DrawingViewDefinition should fail
436
444
  assert.throws(() => txn.deleteElement(drawingCategorySelectorId));
437
445
  assert.throws(() => txn.deleteElement(displayStyle2dId));
438
- usedDefinitionElementIds = txn.deleteElements([drawingCategorySelectorId, displayStyle2dId]);
446
+ usedDefinitionElementIds = txn.deleteElements([drawingCategorySelectorId, displayStyle2dId]).failedIds;
439
447
  assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));
440
448
  assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));
441
449
  assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));
442
450
  assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));
443
451
  assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));
452
+ txn.abandonChanges();
444
453
  // deleteElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail
445
454
  assert.throws(() => txn.deleteElement(drawingViewId));
446
- usedDefinitionElementIds = txn.deleteElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]);
455
+ usedDefinitionElementIds = txn.deleteElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]).failedIds;
447
456
  assert.equal(usedDefinitionElementIds.size, 0);
448
457
  assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));
449
458
  assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));
@@ -471,7 +480,7 @@ describe("DeleteDefinitionElements", () => {
471
480
  executeTestCase(txn, "multiple unused definition elements", [element1, element2, element3], [element1, element2, element3], [], []);
472
481
  });
473
482
  it("returns empty failed-set when given an empty array", () => {
474
- const failed = txn.deleteElements([]);
483
+ const failed = txn.deleteElements([]).failedIds;
475
484
  assert.isEmpty(Array.from(failed), "empty input should return empty failed set");
476
485
  });
477
486
  it("throws for invalid ids", () => {
@@ -480,7 +489,7 @@ describe("DeleteDefinitionElements", () => {
480
489
  it("keeps an in-use definition element in the failed set and does not delete it", () => {
481
490
  // geometryPartId is referenced by PhysicalObject1's geometry stream
482
491
  const failed = txn.deleteElements([geometryPartId]);
483
- assert.isTrue(failed.has(geometryPartId), "in-use definition element must be in failed set");
492
+ assert.isTrue(failed.failedIds.has(geometryPartId), "in-use definition element must be in failed set");
484
493
  assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId), "in-use definition element must not be deleted");
485
494
  });
486
495
  it("returns only the in-use definition element in the failed set when mixing used and unused parts", () => {
@@ -500,7 +509,7 @@ describe("DeleteDefinitionElements", () => {
500
509
  });
501
510
  it("keeps an in-use RenderMaterial in the failed set and does not delete it", () => {
502
511
  const failed = txn.deleteElements([renderMaterialId]);
503
- assert.isTrue(failed.has(renderMaterialId), "in-use RenderMaterial must be in failed set");
512
+ assert.isTrue(failed.failedIds.has(renderMaterialId), "in-use RenderMaterial must be in failed set");
504
513
  assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId), "in-use RenderMaterial must not be deleted");
505
514
  });
506
515
  it("deletes an unused RenderMaterial", () => {
@@ -509,7 +518,7 @@ describe("DeleteDefinitionElements", () => {
509
518
  });
510
519
  it("keeps an in-use Texture in the failed set and does not delete it", () => {
511
520
  const failed = txn.deleteElements([textureId]);
512
- assert.isTrue(failed.has(textureId), "in-use Texture must be in failed set");
521
+ assert.isTrue(failed.failedIds.has(textureId), "in-use Texture must be in failed set");
513
522
  assert.isDefined(iModelDb.elements.tryGetElement(textureId), "in-use Texture must not be deleted");
514
523
  });
515
524
  it("deletes an unused Texture", () => {
@@ -535,10 +544,10 @@ describe("DeleteDefinitionElements", () => {
535
544
  physElemProps.geom = IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedElement3);
536
545
  assert.isTrue(Id64.isValid(txn.insertElement(physElemProps)));
537
546
  const failedToDelete = txn.deleteElements([usedElement1, usedElement2, usedElement3]);
538
- assert.equal(failedToDelete.size, 3, "all in-use definition elements should be in failed set");
539
- assert.isTrue(failedToDelete.has(usedElement1));
540
- assert.isTrue(failedToDelete.has(usedElement2));
541
- assert.isTrue(failedToDelete.has(usedElement3));
547
+ assert.equal(failedToDelete.failedIds.size, 3, "all in-use definition elements should be in failed set");
548
+ assert.isTrue(failedToDelete.failedIds.has(usedElement1));
549
+ assert.isTrue(failedToDelete.failedIds.has(usedElement2));
550
+ assert.isTrue(failedToDelete.failedIds.has(usedElement3));
542
551
  });
543
552
  });
544
553
  describe("category and subcategory tests", () => {
@@ -552,19 +561,19 @@ describe("DeleteDefinitionElements", () => {
552
561
  });
553
562
  it("keeps an in-use SpatialCategory in the failed set and does not delete it", () => {
554
563
  const failed = txn.deleteElements([spatialCategoryId]);
555
- assert.isTrue(failed.has(spatialCategoryId), "in-use SpatialCategory must be in failed set");
564
+ assert.isTrue(failed.failedIds.has(spatialCategoryId), "in-use SpatialCategory must be in failed set");
556
565
  assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId), "in-use SpatialCategory must not be deleted");
557
566
  });
558
567
  it("keeps the default SubCategory in the failed set when its parent SpatialCategory is in use", () => {
559
568
  const spatialCategory = iModelDb.elements.getElement(spatialCategoryId, SpatialCategory);
560
569
  const defaultSubCategoryId = spatialCategory.myDefaultSubCategoryId();
561
570
  const failed = txn.deleteElements([defaultSubCategoryId]);
562
- assert.isTrue(failed.has(defaultSubCategoryId), "default SubCategory must be in failed set");
571
+ assert.isTrue(failed.failedIds.has(defaultSubCategoryId), "default SubCategory must be in failed set");
563
572
  assert.isDefined(iModelDb.elements.tryGetElement(defaultSubCategoryId), "default SubCategory must not be deleted");
564
573
  });
565
574
  it("keeps a used non-default SubCategory in the failed set and does not delete it", () => {
566
575
  const failed = txn.deleteElements([subCategoryId]);
567
- assert.isTrue(failed.has(subCategoryId), "in-use SubCategory must be in failed set");
576
+ assert.isTrue(failed.failedIds.has(subCategoryId), "in-use SubCategory must be in failed set");
568
577
  assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId), "in-use SubCategory must not be deleted");
569
578
  });
570
579
  it("deletes an unused non-default SubCategory", () => {
@@ -949,7 +958,7 @@ describe("DeleteDefinitionElements", () => {
949
958
  const physTypeId = insertPhysicalType();
950
959
  const physObjId = insertPhysicalObjectWithType(physTypeId);
951
960
  const failed = txn.deleteElements([physTypeId]);
952
- assert.isFalse(failed.has(physTypeId), "physTypeId should NOT be in the failed set — TypeDefinitionId refs do not block deleteElements");
961
+ assert.isFalse(failed.failedIds.has(physTypeId), "physTypeId should NOT be in the failed set — TypeDefinitionId refs do not block deleteElements");
953
962
  assert.isUndefined(iModelDb.elements.tryGetElement(physTypeId), "PhysicalType should be deleted");
954
963
  assert.isDefined(iModelDb.elements.tryGetElement(physObjId), "PhysicalObject should still exist");
955
964
  assert.isUndefined(getTypeDefinitionId3d(physObjId), "TypeDefinitionId should be NULLed since the type was deleted");