@itwin/core-backend 5.4.0-dev.7 → 5.4.0

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 (406) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChannelControl.js.map +1 -1
  15. package/lib/cjs/CheckpointManager.js.map +1 -1
  16. package/lib/cjs/ClassRegistry.js +5 -5
  17. package/lib/cjs/ClassRegistry.js.map +1 -1
  18. package/lib/cjs/CloudSqlite.js.map +1 -1
  19. package/lib/cjs/CodeService.js.map +1 -1
  20. package/lib/cjs/CodeSpecs.js.map +1 -1
  21. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  22. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  23. package/lib/cjs/DevTools.js.map +1 -1
  24. package/lib/cjs/DisplayStyle.js.map +1 -1
  25. package/lib/cjs/ECDb.js.map +1 -1
  26. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  27. package/lib/cjs/ECSqlStatement.js.map +1 -1
  28. package/lib/cjs/Element.js.map +1 -1
  29. package/lib/cjs/ElementAspect.js.map +1 -1
  30. package/lib/cjs/ElementGraphics.js.map +1 -1
  31. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  32. package/lib/cjs/Entity.js.map +1 -1
  33. package/lib/cjs/EntityReferences.js.map +1 -1
  34. package/lib/cjs/ExportGraphics.js.map +1 -1
  35. package/lib/cjs/ExternalSource.js.map +1 -1
  36. package/lib/cjs/FontFile.js.map +1 -1
  37. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  38. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  39. package/lib/cjs/GeometrySummary.js +47 -47
  40. package/lib/cjs/GeometrySummary.js.map +1 -1
  41. package/lib/cjs/IModelDb.d.ts.map +1 -1
  42. package/lib/cjs/IModelDb.js +20 -17
  43. package/lib/cjs/IModelDb.js.map +1 -1
  44. package/lib/cjs/IModelDbFonts.js.map +1 -1
  45. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  46. package/lib/cjs/IModelHost.d.ts +11 -0
  47. package/lib/cjs/IModelHost.d.ts.map +1 -1
  48. package/lib/cjs/IModelHost.js +6 -0
  49. package/lib/cjs/IModelHost.js.map +1 -1
  50. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  51. package/lib/cjs/IModelJsFs.js.map +1 -1
  52. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  53. package/lib/cjs/IpcHost.js.map +1 -1
  54. package/lib/cjs/LineStyle.js.map +1 -1
  55. package/lib/cjs/LocalHub.js +1 -1
  56. package/lib/cjs/LocalHub.js.map +1 -1
  57. package/lib/cjs/LocalhostIpcHost.d.ts +1 -0
  58. package/lib/cjs/LocalhostIpcHost.d.ts.map +1 -1
  59. package/lib/cjs/LocalhostIpcHost.js +1 -1
  60. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  61. package/lib/cjs/LockControl.js.map +1 -1
  62. package/lib/cjs/Material.js.map +1 -1
  63. package/lib/cjs/Model.js.map +1 -1
  64. package/lib/cjs/NativeAppStorage.js.map +1 -1
  65. package/lib/cjs/NativeHost.js.map +1 -1
  66. package/lib/cjs/NavigationRelationship.js.map +1 -1
  67. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  68. package/lib/cjs/PropertyStore.js.map +1 -1
  69. package/lib/cjs/Relationship.js.map +1 -1
  70. package/lib/cjs/RpcBackend.js.map +1 -1
  71. package/lib/cjs/SQLiteDb.js.map +1 -1
  72. package/lib/cjs/Schema.js.map +1 -1
  73. package/lib/cjs/SchemaSync.js.map +1 -1
  74. package/lib/cjs/SchemaUtils.js.map +1 -1
  75. package/lib/cjs/SheetIndex.js.map +1 -1
  76. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  77. package/lib/cjs/SqliteStatement.js.map +1 -1
  78. package/lib/cjs/StashManager.js.map +1 -1
  79. package/lib/cjs/Texture.js.map +1 -1
  80. package/lib/cjs/TileStorage.js.map +1 -1
  81. package/lib/cjs/TxnManager.d.ts +16 -4
  82. package/lib/cjs/TxnManager.d.ts.map +1 -1
  83. package/lib/cjs/TxnManager.js +25 -3
  84. package/lib/cjs/TxnManager.js.map +1 -1
  85. package/lib/cjs/ViewDefinition.js.map +1 -1
  86. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  87. package/lib/cjs/ViewStore.js.map +1 -1
  88. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  89. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  92. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  93. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  94. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  95. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  96. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  97. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  98. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  99. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  100. package/lib/cjs/core-backend.js.map +1 -1
  101. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  102. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  103. package/lib/cjs/domains/GenericElements.js.map +1 -1
  104. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  105. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  106. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  107. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  108. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  109. package/lib/cjs/internal/HubMock.js.map +1 -1
  110. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  111. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  112. package/lib/cjs/internal/NoLocks.js.map +1 -1
  113. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  114. package/lib/cjs/internal/Symbols.js.map +1 -1
  115. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  116. package/lib/cjs/internal/cross-package.js.map +1 -1
  117. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  118. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  119. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  120. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  121. package/lib/cjs/rpc/multipart.js.map +1 -1
  122. package/lib/cjs/rpc/tracing.js.map +1 -1
  123. package/lib/cjs/rpc/web/logging.js.map +1 -1
  124. package/lib/cjs/rpc/web/request.js.map +1 -1
  125. package/lib/cjs/rpc/web/response.js.map +1 -1
  126. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  127. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  128. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  129. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  130. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  131. package/lib/cjs/workspace/Settings.js.map +1 -1
  132. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  133. package/lib/cjs/workspace/Workspace.js.map +1 -1
  134. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  135. package/lib/esm/BackendHubAccess.js.map +1 -1
  136. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  137. package/lib/esm/BisCoreSchema.js.map +1 -1
  138. package/lib/esm/BlobContainerService.js.map +1 -1
  139. package/lib/esm/BriefcaseManager.js.map +1 -1
  140. package/lib/esm/CatalogDb.js.map +1 -1
  141. package/lib/esm/Category.js.map +1 -1
  142. package/lib/esm/ChangeSummaryManager.js +2 -2
  143. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  144. package/lib/esm/ChangedElementsDb.js.map +1 -1
  145. package/lib/esm/ChangesetECAdaptor.js +248 -248
  146. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  147. package/lib/esm/ChannelControl.js.map +1 -1
  148. package/lib/esm/CheckpointManager.js.map +1 -1
  149. package/lib/esm/ClassRegistry.js +5 -5
  150. package/lib/esm/ClassRegistry.js.map +1 -1
  151. package/lib/esm/CloudSqlite.js.map +1 -1
  152. package/lib/esm/CodeService.js.map +1 -1
  153. package/lib/esm/CodeSpecs.js.map +1 -1
  154. package/lib/esm/ConcurrentQuery.js.map +1 -1
  155. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  156. package/lib/esm/DevTools.js.map +1 -1
  157. package/lib/esm/DisplayStyle.js.map +1 -1
  158. package/lib/esm/ECDb.js.map +1 -1
  159. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  160. package/lib/esm/ECSqlStatement.js.map +1 -1
  161. package/lib/esm/Element.js.map +1 -1
  162. package/lib/esm/ElementAspect.js.map +1 -1
  163. package/lib/esm/ElementGraphics.js.map +1 -1
  164. package/lib/esm/ElementTreeWalker.js.map +1 -1
  165. package/lib/esm/Entity.js.map +1 -1
  166. package/lib/esm/EntityReferences.js.map +1 -1
  167. package/lib/esm/ExportGraphics.js.map +1 -1
  168. package/lib/esm/ExternalSource.js.map +1 -1
  169. package/lib/esm/FontFile.js.map +1 -1
  170. package/lib/esm/GeoCoordConfig.js.map +1 -1
  171. package/lib/esm/GeographicCRSServices.js.map +1 -1
  172. package/lib/esm/GeometrySummary.js +47 -47
  173. package/lib/esm/GeometrySummary.js.map +1 -1
  174. package/lib/esm/IModelDb.d.ts.map +1 -1
  175. package/lib/esm/IModelDb.js +20 -17
  176. package/lib/esm/IModelDb.js.map +1 -1
  177. package/lib/esm/IModelDbFonts.js.map +1 -1
  178. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  179. package/lib/esm/IModelHost.d.ts +11 -0
  180. package/lib/esm/IModelHost.d.ts.map +1 -1
  181. package/lib/esm/IModelHost.js +6 -0
  182. package/lib/esm/IModelHost.js.map +1 -1
  183. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  184. package/lib/esm/IModelJsFs.js.map +1 -1
  185. package/lib/esm/ImageSourceConversion.js.map +1 -1
  186. package/lib/esm/IpcHost.js.map +1 -1
  187. package/lib/esm/LineStyle.js.map +1 -1
  188. package/lib/esm/LocalHub.js +1 -1
  189. package/lib/esm/LocalHub.js.map +1 -1
  190. package/lib/esm/LocalhostIpcHost.d.ts +1 -0
  191. package/lib/esm/LocalhostIpcHost.d.ts.map +1 -1
  192. package/lib/esm/LocalhostIpcHost.js +1 -1
  193. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  194. package/lib/esm/LockControl.js.map +1 -1
  195. package/lib/esm/Material.js.map +1 -1
  196. package/lib/esm/Model.js.map +1 -1
  197. package/lib/esm/NativeAppStorage.js.map +1 -1
  198. package/lib/esm/NativeHost.js.map +1 -1
  199. package/lib/esm/NavigationRelationship.js.map +1 -1
  200. package/lib/esm/PromiseMemoizer.js.map +1 -1
  201. package/lib/esm/PropertyStore.js.map +1 -1
  202. package/lib/esm/Relationship.js.map +1 -1
  203. package/lib/esm/RpcBackend.js.map +1 -1
  204. package/lib/esm/SQLiteDb.js.map +1 -1
  205. package/lib/esm/Schema.js.map +1 -1
  206. package/lib/esm/SchemaSync.js.map +1 -1
  207. package/lib/esm/SchemaUtils.js.map +1 -1
  208. package/lib/esm/SheetIndex.js.map +1 -1
  209. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  210. package/lib/esm/SqliteStatement.js.map +1 -1
  211. package/lib/esm/StashManager.js.map +1 -1
  212. package/lib/esm/Texture.js.map +1 -1
  213. package/lib/esm/TileStorage.js.map +1 -1
  214. package/lib/esm/TxnManager.d.ts +16 -4
  215. package/lib/esm/TxnManager.d.ts.map +1 -1
  216. package/lib/esm/TxnManager.js +25 -3
  217. package/lib/esm/TxnManager.js.map +1 -1
  218. package/lib/esm/ViewDefinition.js.map +1 -1
  219. package/lib/esm/ViewStateHydrator.js.map +1 -1
  220. package/lib/esm/ViewStore.js.map +1 -1
  221. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  222. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  223. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  224. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  225. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  226. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  227. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  228. package/lib/esm/core-backend.js.map +1 -1
  229. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  230. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  231. package/lib/esm/domains/GenericElements.js.map +1 -1
  232. package/lib/esm/domains/GenericSchema.js.map +1 -1
  233. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  234. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  235. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  236. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  237. package/lib/esm/internal/HubMock.js.map +1 -1
  238. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  239. package/lib/esm/internal/NativePlatform.js.map +1 -1
  240. package/lib/esm/internal/NoLocks.js.map +1 -1
  241. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  242. package/lib/esm/internal/Symbols.js.map +1 -1
  243. package/lib/esm/internal/annotations/fields.js.map +1 -1
  244. package/lib/esm/internal/cross-package.js.map +1 -1
  245. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  246. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  247. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  248. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  249. package/lib/esm/rpc/multipart.js.map +1 -1
  250. package/lib/esm/rpc/tracing.js.map +1 -1
  251. package/lib/esm/rpc/web/logging.js.map +1 -1
  252. package/lib/esm/rpc/web/request.js.map +1 -1
  253. package/lib/esm/rpc/web/response.js.map +1 -1
  254. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  255. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  256. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  257. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  258. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  259. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  260. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  261. package/lib/esm/test/AttachDb.test.js +11 -11
  262. package/lib/esm/test/AttachDb.test.js.map +1 -1
  263. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  264. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  265. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  266. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  267. package/lib/esm/test/IModelHost.test.js.map +1 -1
  268. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  269. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  270. package/lib/esm/test/IpcHost.test.js.map +1 -1
  271. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  272. package/lib/esm/test/PrintElementTree.js.map +1 -1
  273. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  274. package/lib/esm/test/RevisionUtility.js.map +1 -1
  275. package/lib/esm/test/SchemaUtils.test.js +25 -25
  276. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  277. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  278. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  279. package/lib/esm/test/TestUtils.js.map +1 -1
  280. package/lib/esm/test/annotations/Fields.test.js +53 -53
  281. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  282. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  283. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  284. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  285. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  286. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  287. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  288. package/lib/esm/test/categories/Category.test.js.map +1 -1
  289. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  290. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  291. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  292. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
  293. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  294. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  295. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  296. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  297. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  298. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  299. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  300. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  301. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  303. package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
  304. package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
  305. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  306. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  307. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  308. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  309. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  310. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  311. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  312. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  313. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  314. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  315. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  316. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  317. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  318. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  319. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  320. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  321. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  322. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  323. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  324. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  325. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  326. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  327. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  328. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +132 -34
  329. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  330. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  331. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  332. package/lib/esm/test/hubaccess/Rebase.test.js +197 -41
  333. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  334. package/lib/esm/test/imageData.js.map +1 -1
  335. package/lib/esm/test/imodel/Code.test.js +369 -248
  336. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  337. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  338. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  339. package/lib/esm/test/imodel/IModel.test.js +47 -44
  340. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  341. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  342. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  343. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  344. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +27 -8
  345. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  346. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
  347. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +4 -1
  348. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +1 -1
  349. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +14 -4
  350. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
  351. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
  352. package/lib/esm/test/index.js.map +1 -1
  353. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  354. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  355. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  356. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  357. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  358. package/lib/esm/test/rpc/response.test.js.map +1 -1
  359. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  360. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  361. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  362. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  363. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  364. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  365. package/lib/esm/test/standalone/ChangeMerge.test.js +24 -0
  366. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  367. package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
  368. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  369. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  370. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  371. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  372. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  373. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  374. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  375. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  376. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  377. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  378. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  379. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  380. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  381. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  382. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  383. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  384. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  385. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  386. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  387. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  388. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  389. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  390. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  391. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  392. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  393. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  394. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  395. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  396. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  397. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  398. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  399. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  400. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  401. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  402. package/lib/esm/workspace/Settings.js.map +1 -1
  403. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  404. package/lib/esm/workspace/Workspace.js.map +1 -1
  405. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  406. package/package.json +15 -15
@@ -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, SnapshotDb } from \"../../../core-backend\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, 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.ConcurrentQuery) {\n if (test.skip)\n it(`${test.fileName}: ${test.title} (ConcurrentQuery) skipped. Reason: ${test.skip}`);\n else if (test.only)\n it.only(`${test.fileName}: ${test.title} (ConcurrentQuery)`, async () => {\n await runConcurrentQueryTest(test, dataset);\n });\n else\n it(`${test.fileName}: ${test.title} (ConcurrentQuery)`, async () => {\n await runConcurrentQueryTest(test, dataset);\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 \"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\nasync function runConcurrentQueryTest(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 let reader: ECSqlReader;\n if (test.sql === undefined) {\n assert.fail(\"Test does not have an ECSql statement\");\n }\n let params: QueryBinder | undefined;\n if (test.binders !== undefined) {\n 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 \"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 } // if test.binders\n\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 try {\n reader = imodel.createQueryReader(test.sql, params, queryOptions); // TODO: Wire up logic for tests we expect to fail during prepare\n } catch (error: any) {\n assert.fail(`Error during creating QueryReader: ${error.message}`);\n }\n\n let resultCount = 0;\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 prepare of Concurrent Query: ${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 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 (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}\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 assert.deepEqual(actualResult[indexesToInclude[i]], expectedResult[key], `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 assert.deepEqual(actualResult[key], expectedResult[key], `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}"]}
1
+ {"version":3,"file":"ECSqlTestRunner.test.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestRunner.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\nimport { assert } from \"chai\";\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { ECSqlRowArg, ECSqlStatement, SnapshotDb } from \"../../../core-backend\";\r\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\r\nimport { ECSqlReader, ECSqlValueType, QueryBinder, QueryOptions, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { buildBinaryData, ECDbMarkdownTestParser, ECDbTestMode, ECDbTestProps, ECDbTestRowFormat } from \"./ECSqlTestParser\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\r\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\r\n\r\nenum TestDataset {\r\n AllProperties = \"AllProperties.bim\"\r\n}\r\n\r\nconst snapshotDbs: { [key in TestDataset]?: SnapshotDb } = {};\r\n\r\ndescribe(\"Markdown based ECDb test runner\", async () => {\r\n before(async () => {\r\n await ECSqlDatasets.generateFiles();\r\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", TestDataset.AllProperties);\r\n if (!fs.existsSync(datasetFilePath)) {\r\n throw new Error(`Dataset file ${datasetFilePath} does not exist`);\r\n }\r\n snapshotDbs[TestDataset.AllProperties] = SnapshotDb.openFile(datasetFilePath);\r\n });\r\n\r\n after(() => {\r\n for (const key in snapshotDbs) {\r\n if (snapshotDbs.hasOwnProperty(key)) {\r\n (snapshotDbs[key as keyof typeof snapshotDbs])?.close();\r\n }\r\n }\r\n });\r\n const tests: ECDbTestProps[] = ECDbMarkdownTestParser.parse();\r\n\r\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\r\n for (const test of tests) {\r\n if (!test.dataset) {\r\n logWarning(`Skipping test ${test.title} because it does not have a dataset`);\r\n continue;\r\n }\r\n\r\n if (test.dataset.toLowerCase() !== TestDataset.AllProperties.toLowerCase()) {\r\n logWarning(`Skipping test ${test.title} because dataset ${test.dataset} is not recognized`);\r\n continue;\r\n }\r\n const dataset = TestDataset.AllProperties;\r\n\r\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.Statement) {\r\n if (test.skip)\r\n it(`${test.fileName}: ${test.title} (Statement) skipped. Reason: ${test.skip}`);\r\n else if (test.only)\r\n it.only(`${test.fileName}: ${test.title} (Statement)`, () => {\r\n runECSqlStatementTest(test, dataset);\r\n });\r\n else\r\n it(`${test.fileName}: ${test.title} (Statement)`, () => {\r\n runECSqlStatementTest(test, dataset);\r\n });\r\n }\r\n\r\n if (test.mode === ECDbTestMode.Both || test.mode === ECDbTestMode.ConcurrentQuery) {\r\n if (test.skip)\r\n it(`${test.fileName}: ${test.title} (ConcurrentQuery) skipped. Reason: ${test.skip}`);\r\n else if (test.only)\r\n it.only(`${test.fileName}: ${test.title} (ConcurrentQuery)`, async () => {\r\n await runConcurrentQueryTest(test, dataset);\r\n });\r\n else\r\n it(`${test.fileName}: ${test.title} (ConcurrentQuery)`, async () => {\r\n await runConcurrentQueryTest(test, dataset);\r\n });\r\n }\r\n }\r\n});\r\n\r\nfunction runECSqlStatementTest(test: ECDbTestProps, dataset: TestDataset) {\r\n const imodel = snapshotDbs[dataset];\r\n if (!imodel) {\r\n assert.fail(`Dataset ${dataset} is not loaded`);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n let stmt: ECSqlStatement | undefined;\r\n if (test.sql === undefined) {\r\n assert.fail(\"Test does not have an ECSql statement\");\r\n }\r\n\r\n try {\r\n // TODO: statement options should be exposed through the markdown\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n stmt = imodel.prepareStatement(test.sql); // TODO: Wire up logic for tests we expect to fail during prepare\r\n } catch (error: any) {\r\n if (test.errorDuringPrepare)\r\n return;\r\n else\r\n assert.fail(`Error during prepare of Statement: ${error.message}`);\r\n }\r\n\r\n if (test.errorDuringPrepare)\r\n assert.fail(`Statement is expected to fail during prepare`);\r\n\r\n try {\r\n if (test.binders !== undefined) {\r\n for (const binder of test.binders) {\r\n // eslint-disable-next-line radix\r\n let id: number | string = Number.parseInt(binder.indexOrName);\r\n if (isNaN(id))\r\n id = binder.indexOrName;\r\n\r\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\r\n case \"null\":\r\n stmt.bindNull(id);\r\n break;\r\n case \"string\":\r\n stmt.bindString(id, binder.value);\r\n break;\r\n case \"int\":\r\n // eslint-disable-next-line radix\r\n stmt.bindInteger(id, Number.parseInt(binder.value));\r\n break;\r\n case \"double\":\r\n stmt.bindDouble(id, Number.parseFloat(binder.value));\r\n break;\r\n case \"id\":\r\n stmt.bindId(id, binder.value);\r\n break;\r\n case \"idset\":\r\n const values: string[] = binder.value.slice(1, -1).split(\",\");\r\n const trimmedValues = values.map((value: string) =>\r\n value.trim()\r\n );\r\n stmt.bindIdSet(id, trimmedValues);\r\n break;\r\n case \"datetime\":\r\n stmt.bindDateTime(id, binder.value);\r\n break;\r\n case \"point2d\":\r\n const parsedVal2d = JSON.parse(binder.value);\r\n stmt.bindPoint2d(id, { x: parsedVal2d.X, y: parsedVal2d.Y });\r\n break;\r\n case \"point3d\":\r\n const parsedVal3d = JSON.parse(binder.value);\r\n stmt.bindPoint3d(id, { x: parsedVal3d.X, y: parsedVal3d.Y, z: parsedVal3d.Z });\r\n break;\r\n case \"blob\":\r\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\r\n const numbers = arrayValues.map((value: string) =>\r\n // eslint-disable-next-line radix\r\n parseInt(value.trim())\r\n );\r\n stmt.bindBlob(id, Uint8Array.of(...numbers));\r\n break;\r\n case \"navigation\":\r\n stmt.bindNavigation(id, JSON.parse(binder.value));\r\n break;\r\n case \"array\":\r\n stmt.bindArray(id, JSON.parse(binder.value));\r\n break;\r\n case \"struct\":\r\n stmt.bindStruct(id, JSON.parse(binder.value));\r\n break;\r\n default:\r\n assert.fail(`Unsupported binder type ${binder.type}`);\r\n } // switch binder.type\r\n } // for binder\r\n } // if test.binders\r\n\r\n let resultCount = 0;\r\n let stepResult: DbResult;\r\n while ((stepResult = stmt.step()) === DbResult.BE_SQLITE_ROW) {\r\n if (resultCount === 0 && test.columnInfo) {\r\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\r\n const colCount = stmt.getColumnCount();\r\n assert.strictEqual(colCount, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colCount}`);\r\n for (let i = 0; i < colCount; i++) {\r\n const colInfo = stmt.getValue(i).columnInfo;\r\n const expectedColInfo = test.columnInfo[i];\r\n // cannot directly compare against colInfo because it has methods instead of getters\r\n assert.strictEqual(colInfo.getPropertyName(), expectedColInfo.name, `Expected property name ${expectedColInfo.name} but got ${colInfo.getPropertyName()} for column index ${i}`);\r\n //if (expectedColInfo.isDynamicProp !== undefined) TODO: Is this not exposed?\r\n // assert.strictEqual(colInfo..isDynamicProperty, expectedColInfo.isDynamicProp, `Expected dynamic property ${expectedColInfo.isDynamicProp} but got ${colInfo.isDynamicProperty} for column index ${i}`);\r\n // TODO: Extended type name not exposed??\r\n if (expectedColInfo.generated !== undefined)\r\n assert.strictEqual(colInfo.isGeneratedProperty(), expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.isGeneratedProperty()} for column index ${i}`);\r\n if (expectedColInfo.accessString !== undefined)\r\n assert.strictEqual(colInfo.getAccessString(), expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.getAccessString()} for column index ${i}`);\r\n if (expectedColInfo.type !== undefined)\r\n assert.strictEqual(ECSqlValueType[colInfo.getType()], expectedColInfo.type, `Expected type ${expectedColInfo.type} but got ${ECSqlValueType[colInfo.getType()]} for column index ${i}`);\r\n if (expectedColInfo.originPropertyName !== undefined)\r\n assert.strictEqual(colInfo.getOriginPropertyName(), expectedColInfo.originPropertyName, `Expected Origin PropertyName ${expectedColInfo.originPropertyName} but got ${colInfo.getOriginPropertyName()} for column index ${i}`);\r\n }\r\n }\r\n\r\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\r\n let expectedResult = test.expectedResults[resultCount];\r\n expectedResult = buildBinaryData(expectedResult);\r\n const rowArgs: ECSqlRowArg = { rowFormat: getRowFormat(test.rowFormat), classIdsToClassNames: test.convertClassIdsToClassNames };\r\n const actualResult = stmt.getRow(rowArgs);\r\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\r\n }\r\n resultCount++;\r\n }\r\n stmt[Symbol.dispose]();\r\n stmt = undefined;\r\n\r\n if (resultCount === 0 && test.stepStatus) {\r\n const stepResultString = DbResult[stepResult];\r\n assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\r\n }\r\n\r\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\r\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\r\n }\r\n } finally {\r\n if (stmt !== undefined)\r\n stmt[Symbol.dispose]();\r\n }\r\n}\r\n\r\nfunction getRowFormat(rowFormat: ECDbTestRowFormat): QueryRowFormat {\r\n switch (rowFormat) {\r\n case ECDbTestRowFormat.ECSqlNames:\r\n return QueryRowFormat.UseECSqlPropertyNames;\r\n case ECDbTestRowFormat.ECSqlIndexes:\r\n return QueryRowFormat.UseECSqlPropertyIndexes;\r\n case ECDbTestRowFormat.JsNames:\r\n return QueryRowFormat.UseJsPropertyNames;\r\n default:\r\n return QueryRowFormat.UseECSqlPropertyNames;\r\n }\r\n}\r\n\r\nasync function runConcurrentQueryTest(test: ECDbTestProps, dataset: TestDataset): Promise<void> {\r\n const imodel = snapshotDbs[dataset];\r\n if (!imodel) {\r\n assert.fail(`Dataset ${dataset} is not loaded`);\r\n }\r\n\r\n let reader: ECSqlReader;\r\n if (test.sql === undefined) {\r\n assert.fail(\"Test does not have an ECSql statement\");\r\n }\r\n let params: QueryBinder | undefined;\r\n if (test.binders !== undefined) {\r\n params = new QueryBinder();\r\n for (const binder of test.binders) {\r\n // eslint-disable-next-line radix\r\n let id: number | string = Number.parseInt(binder.indexOrName);\r\n if (isNaN(id))\r\n id = binder.indexOrName;\r\n\r\n switch (binder.type.toLowerCase()) { // TODO: replace props variables in binder.value\r\n case \"null\":\r\n params.bindNull(id);\r\n break;\r\n case \"string\":\r\n params.bindString(id, binder.value);\r\n break;\r\n case \"int\":\r\n // eslint-disable-next-line radix\r\n params.bindInt(id, Number.parseInt(binder.value));\r\n break;\r\n case \"long\":\r\n // eslint-disable-next-line radix\r\n params.bindLong(id, Number.parseInt(binder.value));\r\n break;\r\n case \"double\":\r\n params.bindDouble(id, Number.parseFloat(binder.value));\r\n break;\r\n case \"id\":\r\n params.bindId(id, binder.value);\r\n break;\r\n case \"idset\":\r\n const values: string[] = binder.value.slice(1, -1).split(\",\");\r\n const trimmedValues = values.map((value: string) =>\r\n value.trim()\r\n );\r\n params.bindIdSet(id, trimmedValues);\r\n break;\r\n case \"point2d\":\r\n const parsedVal2d = JSON.parse(binder.value);\r\n params.bindPoint2d(id, new Point2d(parsedVal2d.X, parsedVal2d.Y));\r\n break;\r\n case \"point3d\":\r\n const parsedVal3d = JSON.parse(binder.value);\r\n params.bindPoint3d(id, new Point3d(parsedVal3d.X, parsedVal3d.Y, parsedVal3d.Z));\r\n break;\r\n case \"blob\":\r\n const arrayValues: string[] = binder.value.slice(1, -1).split(\",\");\r\n const numbers = arrayValues.map((value: string) =>\r\n // eslint-disable-next-line radix\r\n parseInt(value.trim())\r\n );\r\n params.bindBlob(id, Uint8Array.of(...numbers));\r\n break;\r\n case \"struct\":\r\n params.bindStruct(id, JSON.parse(binder.value));\r\n break;\r\n default:\r\n assert.fail(`Unsupported binder type ${binder.type}`);\r\n } // switch binder.type\r\n } // for binder\r\n } // if test.binders\r\n\r\n const queryOptions: QueryOptions = {};\r\n queryOptions.rowFormat = getRowFormat(test.rowFormat);\r\n if (test.abbreviateBlobs)\r\n queryOptions.abbreviateBlobs = true;\r\n if (test.convertClassIdsToClassNames) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n queryOptions.convertClassIdsToClassNames = true;\r\n }\r\n try {\r\n reader = imodel.createQueryReader(test.sql, params, queryOptions); // TODO: Wire up logic for tests we expect to fail during prepare\r\n } catch (error: any) {\r\n assert.fail(`Error during creating QueryReader: ${error.message}`);\r\n }\r\n\r\n let resultCount = 0;\r\n let rows;\r\n try {\r\n rows = await reader.toArray();\r\n }\r\n catch (error: any) {\r\n if (test.errorDuringPrepare)\r\n return;\r\n else\r\n assert.fail(`Error during prepare of Concurrent Query: ${error.message}`);\r\n }\r\n\r\n if (test.errorDuringPrepare)\r\n assert.fail(`Statement is expected to fail during prepare`);\r\n\r\n const colMetaData = await reader.getMetaData();\r\n while (resultCount < rows.length) {\r\n if (resultCount === 0 && test.columnInfo) {\r\n // Verify the columns on the first result row (TODO: for dynamic columns we have to do this every item)\r\n assert.strictEqual(colMetaData.length, test.columnInfo.length, `Expected ${test.columnInfo.length} columns but got ${colMetaData.length}`);\r\n for (let i = 0; i < colMetaData.length; i++) {\r\n const colInfo = colMetaData[i];\r\n const expectedColInfo = test.columnInfo[i];\r\n // cannot directly compare against colInfo because it has methods instead of getters\r\n assert.strictEqual(colInfo.name, expectedColInfo.name, `Expected name ${expectedColInfo.name} but got ${colInfo.name} for column index ${i}`);\r\n if (expectedColInfo.generated !== undefined)\r\n assert.strictEqual(colInfo.generated, expectedColInfo.generated, `Expected generated property ${expectedColInfo.generated} but got ${colInfo.generated} for column index ${i}`);\r\n if (expectedColInfo.accessString !== undefined)\r\n assert.strictEqual(colInfo.accessString, expectedColInfo.accessString, `Expected access string ${expectedColInfo.accessString} but got ${colInfo.accessString} for column index ${i}`);\r\n if (expectedColInfo.typeName !== undefined)\r\n assert.strictEqual(colInfo.typeName, expectedColInfo.typeName, `Expected type name ${expectedColInfo.typeName} but got ${colInfo.typeName} for column index ${i}`);\r\n if (expectedColInfo.className !== undefined)\r\n assert.strictEqual(colInfo.className, expectedColInfo.className, `Expected class name ${expectedColInfo.className} but got ${colInfo.className} for column index ${i}`);\r\n assert.strictEqual(colInfo.extendedType, expectedColInfo.extendedType, `Expected extended type ${expectedColInfo.extendedType} but got ${colInfo.extendedType} for column index ${i}`);\r\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\r\n }\r\n }\r\n\r\n if (test.expectedResults !== undefined && test.expectedResults.length > resultCount) {\r\n let expectedResult = test.expectedResults[resultCount];\r\n // replace props in expected result, TODO: optimize this\r\n expectedResult = buildBinaryData(expectedResult);\r\n\r\n const actualResult = rows[resultCount] // TODO: should we test getValue() as well?\r\n checkingExpectedResults(test.rowFormat, actualResult, expectedResult, test.indexesToIncludeInResults);\r\n }\r\n resultCount++;\r\n }\r\n\r\n // if (resultCount === 0 && test.stepStatus) {\r\n // const stepResultString = DbResult[stepResult];\r\n // assert.strictEqual(stepResultString, test.stepStatus, `Expected step status ${test.stepStatus} but got ${stepResultString}`);\r\n // }\r\n\r\n if (test.expectedResults && test.expectedResults.length !== resultCount) {\r\n assert.fail(`Expected ${test.expectedResults.length} rows but got ${resultCount}`);\r\n }\r\n}\r\n\r\nfunction checkingExpectedResults(rowFormat: ECDbTestRowFormat, actualResult: any, expectedResult: any, indexesToInclude?: number[]) {\r\n if (rowFormat === ECDbTestRowFormat.ECSqlIndexes && indexesToInclude) {\r\n let i: any = 0;\r\n for (const key of Object.keys(expectedResult)) {\r\n assert.deepEqual(actualResult[indexesToInclude[i]], expectedResult[key], `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[indexesToInclude[i]])}`);\r\n i++;\r\n }\r\n }\r\n else {\r\n for (const key of Object.keys(expectedResult)) {\r\n assert.deepEqual(actualResult[key], expectedResult[key], `Expected ${JSON.stringify(expectedResult[key])} but got ${JSON.stringify(actualResult[key])}`);\r\n }\r\n }\r\n}\r\nfunction logWarning(message: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`\\x1b[33m${message}\\x1b[0m`);\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteDefinitionElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/DeleteDefinitionElements.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*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64Set } from \"@itwin/core-bentley\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport { GeometryPartProps, IModel } from \"@itwin/core-common\";\nimport {\n CategorySelector, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, GeometryPart, IModelJsFs, InformationPartitionElement,\n ModelSelector, OrthographicViewDefinition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, Subject, Texture,\n} from \"../../core-backend\";\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\ndescribe(\"DeleteDefinitionElements\", () => {\n const outputDir: string = path.join(KnownTestLocations.outputDir, \"DeleteDefinitionElements\");\n\n before(async () => {\n if (!IModelJsFs.existsSync(KnownTestLocations.outputDir)) {\n IModelJsFs.mkdirSync(KnownTestLocations.outputDir);\n }\n if (!IModelJsFs.existsSync(outputDir)) {\n IModelJsFs.mkdirSync(outputDir);\n }\n });\n\n it(\"should delete if not used\", async () => {\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"DeleteDefinitionElements\", \"DeleteDefinitionElements.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"DeleteDefinitionElements\" } });\n await ExtensiveTestScenario.prepareDb(iModelDb);\n await ExtensiveTestScenario.populateDb(iModelDb);\n\n // Get ElementIds of DefinitionElements created by populateDb\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, \"Subject\"))!;\n const definitionModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Definition\"))!;\n const spatialCategoryId = iModelDb.elements.queryElementIdByCode(SpatialCategory.createCode(iModelDb, definitionModelId, \"SpatialCategory\"))!;\n const subCategoryId = iModelDb.elements.queryElementIdByCode(SubCategory.createCode(iModelDb, spatialCategoryId, \"SubCategory\"))!;\n const spatialCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"SpatialCategories\"))!;\n const modelSelectorId = iModelDb.elements.queryElementIdByCode(ModelSelector.createCode(iModelDb, definitionModelId, \"SpatialModels\"))!;\n const displayStyle3dId = iModelDb.elements.queryElementIdByCode(DisplayStyle3d.createCode(iModelDb, definitionModelId, \"DisplayStyle3d\"))!;\n const viewId = iModelDb.elements.queryElementIdByCode(OrthographicViewDefinition.createCode(iModelDb, definitionModelId, \"Orthographic View\"))!;\n const drawingCategoryId = iModelDb.elements.queryElementIdByCode(DrawingCategory.createCode(iModelDb, definitionModelId, \"DrawingCategory\"))!;\n const drawingCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"DrawingCategories\"))!;\n const displayStyle2dId = iModelDb.elements.queryElementIdByCode(DisplayStyle2d.createCode(iModelDb, definitionModelId, \"DisplayStyle2d\"))!;\n const drawingViewId = iModelDb.elements.queryElementIdByCode(DrawingViewDefinition.createCode(iModelDb, definitionModelId, \"Drawing View\"))!;\n const geometryPartId = iModelDb.elements.queryElementIdByCode(GeometryPart.createCode(iModelDb, definitionModelId, \"GeometryPart\"))!;\n const renderMaterialId = iModelDb.elements.queryElementIdByCode(RenderMaterialElement.createCode(iModelDb, definitionModelId, \"RenderMaterial\"))!;\n const textureId = iModelDb.elements.queryElementIdByCode(Texture.createCode(iModelDb, definitionModelId, \"Texture\"))!;\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject1\");\n const physicalObjectId2 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject2\");\n const physicalObjectId3 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject3\");\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\n assert.isTrue(Id64.isValidId64(subCategoryId));\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\n assert.isTrue(Id64.isValidId64(modelSelectorId));\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\n assert.isTrue(Id64.isValidId64(viewId));\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\n assert.isTrue(Id64.isValidId64(drawingViewId));\n assert.isTrue(Id64.isValidId64(geometryPartId));\n assert.isTrue(Id64.isValidId64(renderMaterialId));\n assert.isTrue(Id64.isValidId64(textureId));\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\n\n let usedDefinitionElementIds: Id64Set;\n\n // make sure deleteDefinitionElements skips Elements that are not DefinitionElements\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId1));\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId2));\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId3));\n assert.isDefined(iModelDb.elements.tryGetElement(subjectId));\n\n // make sure deleteDefinitionElements skips invalid Ids\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([Id64.invalid, Id64.invalid]);\n assert.equal(usedDefinitionElementIds.size, 0);\n\n // delete/deleteDefinitionElements for a used GeometryPart should fail\n assert.throws(() => iModelDb.elements.deleteElement(geometryPartId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([geometryPartId]);\n assert.isTrue(usedDefinitionElementIds.has(geometryPartId));\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));\n\n // deleteDefinitionElements for an unused GeometryPart should succeed, delete should still fail\n const unusedGeometryPartProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: definitionModelId,\n code: GeometryPart.createCode(iModelDb, definitionModelId, \"Unused GeometryPart\"),\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\n };\n const unusedGeometryPartId = iModelDb.elements.insertElement(unusedGeometryPartProps);\n assert.isTrue(Id64.isValidId64(unusedGeometryPartId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedGeometryPartId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedGeometryPartId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));\n\n // delete/deleteDefinitionElements for a used RenderMaterial should fail\n assert.throws(() => iModelDb.elements.deleteElement(renderMaterialId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([renderMaterialId]);\n assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));\n\n // deleteDefinitionElements for an unused RenderMaterial should succeed, delete should still fail\n const unusedRenderMaterialId = RenderMaterialElement.insert(iModelDb, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\n assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedRenderMaterialId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedRenderMaterialId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));\n\n // delete/deleteDefinitionElements for a used Texture should fail\n assert.throws(() => iModelDb.elements.deleteElement(textureId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([textureId]);\n assert.isTrue(usedDefinitionElementIds.has(textureId));\n assert.isDefined(iModelDb.elements.tryGetElement(textureId));\n\n // deleteDefinitionElements for an unused Texture should succeed, delete should still fail\n const unusedTextureId = IModelTestUtils.insertTextureElement(iModelDb, definitionModelId, \"Unused Texture\");\n assert.isTrue(Id64.isValidId64(unusedTextureId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedTextureId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedTextureId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));\n\n // delete/deleteDefinitionElements for a used SpatialCategory should fail\n assert.throws(() => iModelDb.elements.deleteElement(spatialCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([spatialCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));\n\n // delete/deleteDefinitionElements for a default SubCategory should fail\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\n const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();\n assert.throws(() => iModelDb.elements.deleteElement(defaultSpatialSubCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([defaultSpatialSubCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));\n\n // delete/deleteDefinitionElements for a used, non-default SubCategory should fail\n assert.throws(() => iModelDb.elements.deleteElement(subCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([subCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(subCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));\n\n // deleteDefinitionElements for an unused SubCategory should succeed, delete should still fail\n const unusedSubCategoryId = SubCategory.insert(iModelDb, spatialCategoryId, \"Unused SubCategory\", {});\n assert.isTrue(Id64.isValidId64(unusedSubCategoryId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedSubCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedSubCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));\n\n // deleteDefinitionElements for an unused SpatialCategory should succeed, delete should still fail\n const unusedSpatialCategoryId = SpatialCategory.insert(iModelDb, definitionModelId, \"Unused SpatialCategory\", {});\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryId));\n const unusedSpatialCategory = iModelDb.elements.getElement<SpatialCategory>(unusedSpatialCategoryId, SpatialCategory);\n const unusedSpatialCategoryDefaultSubCategoryId = unusedSpatialCategory.myDefaultSubCategoryId();\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedSpatialCategoryId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedSpatialCategoryDefaultSubCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedSpatialCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));\n\n // delete/deleteDefinitionElements of a used DrawingCategory should fail\n assert.throws(() => iModelDb.elements.deleteElement(drawingCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));\n\n // deleteDefinitionElements for an unused DrawingCategory should succeed, delete should still fail\n const unusedDrawingCategoryId = DrawingCategory.insert(iModelDb, definitionModelId, \"Unused DrawingCategory\", {});\n assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));\n const unusedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\n const unusedDrawingSubCategoryId = unusedDrawingCategory.myDefaultSubCategoryId();\n assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));\n assert.throws(() => iModelDb.elements.deleteElement(unusedDrawingSubCategoryId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedDrawingCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));\n\n // delete/deleteDefinitionElements of DefinitionElements used by an existing SpatialViewDefinition should fail\n assert.throws(() => iModelDb.elements.deleteElement(spatialCategorySelectorId));\n assert.throws(() => iModelDb.elements.deleteElement(modelSelectorId));\n assert.throws(() => iModelDb.elements.deleteElement(displayStyle3dId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\n assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));\n assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));\n assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));\n assert.isDefined(iModelDb.elements.tryGetElement(viewId));\n\n // deleteDefinitionElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\n assert.throws(() => iModelDb.elements.deleteElement(viewId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle3dId));\n assert.isUndefined(iModelDb.elements.tryGetElement(viewId));\n\n // delete/deleteDefinitionElements of DefinitionElements used by an existing DrawingViewDefinition should fail\n assert.throws(() => iModelDb.elements.deleteElement(drawingCategorySelectorId));\n assert.throws(() => iModelDb.elements.deleteElement(displayStyle2dId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingCategorySelectorId, displayStyle2dId]);\n assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));\n assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));\n\n // deleteDefinitionElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\n assert.throws(() => iModelDb.elements.deleteElement(drawingViewId));\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingViewId));\n\n iModelDb.saveChanges();\n iModelDb.close();\n });\n});\n"]}
1
+ {"version":3,"file":"DeleteDefinitionElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/DeleteDefinitionElements.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 { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { Id64, Id64Set } from \"@itwin/core-bentley\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\nimport { GeometryPartProps, IModel } from \"@itwin/core-common\";\r\nimport {\r\n CategorySelector, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, GeometryPart, IModelJsFs, InformationPartitionElement,\r\n ModelSelector, OrthographicViewDefinition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, Subject, Texture,\r\n} from \"../../core-backend\";\r\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\ndescribe(\"DeleteDefinitionElements\", () => {\r\n const outputDir: string = path.join(KnownTestLocations.outputDir, \"DeleteDefinitionElements\");\r\n\r\n before(async () => {\r\n if (!IModelJsFs.existsSync(KnownTestLocations.outputDir)) {\r\n IModelJsFs.mkdirSync(KnownTestLocations.outputDir);\r\n }\r\n if (!IModelJsFs.existsSync(outputDir)) {\r\n IModelJsFs.mkdirSync(outputDir);\r\n }\r\n });\r\n\r\n it(\"should delete if not used\", async () => {\r\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"DeleteDefinitionElements\", \"DeleteDefinitionElements.bim\");\r\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"DeleteDefinitionElements\" } });\r\n await ExtensiveTestScenario.prepareDb(iModelDb);\r\n await ExtensiveTestScenario.populateDb(iModelDb);\r\n\r\n // Get ElementIds of DefinitionElements created by populateDb\r\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, \"Subject\"))!;\r\n const definitionModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Definition\"))!;\r\n const spatialCategoryId = iModelDb.elements.queryElementIdByCode(SpatialCategory.createCode(iModelDb, definitionModelId, \"SpatialCategory\"))!;\r\n const subCategoryId = iModelDb.elements.queryElementIdByCode(SubCategory.createCode(iModelDb, spatialCategoryId, \"SubCategory\"))!;\r\n const spatialCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"SpatialCategories\"))!;\r\n const modelSelectorId = iModelDb.elements.queryElementIdByCode(ModelSelector.createCode(iModelDb, definitionModelId, \"SpatialModels\"))!;\r\n const displayStyle3dId = iModelDb.elements.queryElementIdByCode(DisplayStyle3d.createCode(iModelDb, definitionModelId, \"DisplayStyle3d\"))!;\r\n const viewId = iModelDb.elements.queryElementIdByCode(OrthographicViewDefinition.createCode(iModelDb, definitionModelId, \"Orthographic View\"))!;\r\n const drawingCategoryId = iModelDb.elements.queryElementIdByCode(DrawingCategory.createCode(iModelDb, definitionModelId, \"DrawingCategory\"))!;\r\n const drawingCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"DrawingCategories\"))!;\r\n const displayStyle2dId = iModelDb.elements.queryElementIdByCode(DisplayStyle2d.createCode(iModelDb, definitionModelId, \"DisplayStyle2d\"))!;\r\n const drawingViewId = iModelDb.elements.queryElementIdByCode(DrawingViewDefinition.createCode(iModelDb, definitionModelId, \"Drawing View\"))!;\r\n const geometryPartId = iModelDb.elements.queryElementIdByCode(GeometryPart.createCode(iModelDb, definitionModelId, \"GeometryPart\"))!;\r\n const renderMaterialId = iModelDb.elements.queryElementIdByCode(RenderMaterialElement.createCode(iModelDb, definitionModelId, \"RenderMaterial\"))!;\r\n const textureId = iModelDb.elements.queryElementIdByCode(Texture.createCode(iModelDb, definitionModelId, \"Texture\"))!;\r\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject1\");\r\n const physicalObjectId2 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject2\");\r\n const physicalObjectId3 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject3\");\r\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\r\n assert.isTrue(Id64.isValidId64(subCategoryId));\r\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\r\n assert.isTrue(Id64.isValidId64(modelSelectorId));\r\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\r\n assert.isTrue(Id64.isValidId64(viewId));\r\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\r\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\r\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\r\n assert.isTrue(Id64.isValidId64(drawingViewId));\r\n assert.isTrue(Id64.isValidId64(geometryPartId));\r\n assert.isTrue(Id64.isValidId64(renderMaterialId));\r\n assert.isTrue(Id64.isValidId64(textureId));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\r\n\r\n let usedDefinitionElementIds: Id64Set;\r\n\r\n // make sure deleteDefinitionElements skips Elements that are not DefinitionElements\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId1));\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId2));\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId3));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subjectId));\r\n\r\n // make sure deleteDefinitionElements skips invalid Ids\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([Id64.invalid, Id64.invalid]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n\r\n // delete/deleteDefinitionElements for a used GeometryPart should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(geometryPartId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([geometryPartId]);\r\n assert.isTrue(usedDefinitionElementIds.has(geometryPartId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));\r\n\r\n // deleteDefinitionElements for an unused GeometryPart should succeed, delete should still fail\r\n const unusedGeometryPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: GeometryPart.createCode(iModelDb, definitionModelId, \"Unused GeometryPart\"),\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const unusedGeometryPartId = iModelDb.elements.insertElement(unusedGeometryPartProps);\r\n assert.isTrue(Id64.isValidId64(unusedGeometryPartId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedGeometryPartId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedGeometryPartId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));\r\n\r\n // delete/deleteDefinitionElements for a used RenderMaterial should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(renderMaterialId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([renderMaterialId]);\r\n assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));\r\n\r\n // deleteDefinitionElements for an unused RenderMaterial should succeed, delete should still fail\r\n const unusedRenderMaterialId = RenderMaterialElement.insert(iModelDb, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\r\n assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedRenderMaterialId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedRenderMaterialId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));\r\n\r\n // delete/deleteDefinitionElements for a used Texture should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(textureId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([textureId]);\r\n assert.isTrue(usedDefinitionElementIds.has(textureId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(textureId));\r\n\r\n // deleteDefinitionElements for an unused Texture should succeed, delete should still fail\r\n const unusedTextureId = IModelTestUtils.insertTextureElement(iModelDb, definitionModelId, \"Unused Texture\");\r\n assert.isTrue(Id64.isValidId64(unusedTextureId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedTextureId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedTextureId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));\r\n\r\n // delete/deleteDefinitionElements for a used SpatialCategory should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(spatialCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([spatialCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));\r\n\r\n // delete/deleteDefinitionElements for a default SubCategory should fail\r\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\r\n const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();\r\n assert.throws(() => iModelDb.elements.deleteElement(defaultSpatialSubCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([defaultSpatialSubCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements for a used, non-default SubCategory should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(subCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([subCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(subCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));\r\n\r\n // deleteDefinitionElements for an unused SubCategory should succeed, delete should still fail\r\n const unusedSubCategoryId = SubCategory.insert(iModelDb, spatialCategoryId, \"Unused SubCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedSubCategoryId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedSubCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedSubCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));\r\n\r\n // deleteDefinitionElements for an unused SpatialCategory should succeed, delete should still fail\r\n const unusedSpatialCategoryId = SpatialCategory.insert(iModelDb, definitionModelId, \"Unused SpatialCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryId));\r\n const unusedSpatialCategory = iModelDb.elements.getElement<SpatialCategory>(unusedSpatialCategoryId, SpatialCategory);\r\n const unusedSpatialCategoryDefaultSubCategoryId = unusedSpatialCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedSpatialCategoryId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedSpatialCategoryDefaultSubCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedSpatialCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements of a used DrawingCategory should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(drawingCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));\r\n\r\n // deleteDefinitionElements for an unused DrawingCategory should succeed, delete should still fail\r\n const unusedDrawingCategoryId = DrawingCategory.insert(iModelDb, definitionModelId, \"Unused DrawingCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));\r\n const unusedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\r\n const unusedDrawingSubCategoryId = unusedDrawingCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));\r\n assert.throws(() => iModelDb.elements.deleteElement(unusedDrawingSubCategoryId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([unusedDrawingCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements of DefinitionElements used by an existing SpatialViewDefinition should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(spatialCategorySelectorId));\r\n assert.throws(() => iModelDb.elements.deleteElement(modelSelectorId));\r\n assert.throws(() => iModelDb.elements.deleteElement(displayStyle3dId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(viewId));\r\n\r\n // deleteDefinitionElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n assert.throws(() => iModelDb.elements.deleteElement(viewId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(viewId));\r\n\r\n // delete/deleteDefinitionElements of DefinitionElements used by an existing DrawingViewDefinition should fail\r\n assert.throws(() => iModelDb.elements.deleteElement(drawingCategorySelectorId));\r\n assert.throws(() => iModelDb.elements.deleteElement(displayStyle2dId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingCategorySelectorId, displayStyle2dId]);\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n\r\n // deleteDefinitionElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n assert.throws(() => iModelDb.elements.deleteElement(drawingViewId));\r\n usedDefinitionElementIds = iModelDb.elements.deleteDefinitionElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n\r\n iModelDb.saveChanges();\r\n iModelDb.close();\r\n });\r\n});\r\n"]}
@@ -78,7 +78,7 @@ describe("ElementAspect", () => {
78
78
  assert.equal(aspectX.schemaName, aspect.schemaName);
79
79
  assert.equal(aspectX.className, aspect.className);
80
80
  });
81
- assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
81
+ assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
82
82
  {"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, ""));
83
83
  const multiAspectsA = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspectNoHandler");
84
84
  assert.exists(multiAspectsA);
@@ -97,7 +97,7 @@ describe("ElementAspect", () => {
97
97
  assert.exists(aspectX.asAny.testMultiAspectProperty);
98
98
  assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
99
99
  });
100
- assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
100
+ assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
101
101
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
102
102
  // Test getAspects with dot separator
103
103
  const multiAspectsADotSeparator = iModel.elements.getAspects(element.id, "DgnPlatformTest.TestMultiAspectNoHandler");
@@ -117,7 +117,7 @@ describe("ElementAspect", () => {
117
117
  assert.exists(aspectX.asAny.testMultiAspectProperty);
118
118
  assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
119
119
  });
120
- assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
120
+ assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
121
121
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
122
122
  const multiAspectsB = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspect");
123
123
  assert.exists(multiAspectsB);
@@ -135,7 +135,7 @@ describe("ElementAspect", () => {
135
135
  assert.equal(aspectX.className, "TestMultiAspect");
136
136
  assert.exists(aspectX.asAny.testMultiAspectProperty);
137
137
  });
138
- assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
138
+ assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
139
139
  {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
140
140
  const multiAspects = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);
141
141
  assert.equal(multiAspects.length, 4);
@@ -147,9 +147,9 @@ describe("ElementAspect", () => {
147
147
  assert.equal(aspectX.schemaName, aspect.schemaName);
148
148
  assert.equal(aspectX.className, aspect.className);
149
149
  });
150
- assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
151
- {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
152
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
150
+ assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
151
+ {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
152
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
153
153
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
154
154
  const rootSubject = iModel.elements.getRootSubject();
155
155
  assert.equal(0, iModel.elements.getAspects(rootSubject.id, "DgnPlatformTest:TestUniqueAspect").length, "Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject");
@@ -157,11 +157,11 @@ describe("ElementAspect", () => {
157
157
  assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, "Don't expect any aspects on the root Subject");
158
158
  // The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.
159
159
  // Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.
160
- const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
161
- {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
162
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
163
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
164
- {"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
160
+ const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
161
+ {"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
162
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
163
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
164
+ {"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
165
165
  {"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, "");
166
166
  const aspects = iModel.elements.getAspects(element.id, ElementAspect.classFullName);
167
167
  assert.equal(aspects.length, 6);
@@ -182,8 +182,8 @@ describe("ElementAspect", () => {
182
182
  iModel.elements.insertAspect(aspectProps);
183
183
  let aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
184
184
  assert.isAtLeast(aspects.length, 1);
185
- assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
186
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
185
+ assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
186
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
187
187
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
188
188
  const numAspects = aspects.length;
189
189
  let found = false;
@@ -202,14 +202,14 @@ describe("ElementAspect", () => {
202
202
  assert.equal(aspectsUpdated.length, aspects.length);
203
203
  assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, "MultiAspectInsertTest1-Updated");
204
204
  // Check if aspect was updated
205
- assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
206
- {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
205
+ assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
206
+ {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
207
207
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
208
208
  iModel.elements.deleteAspect(aspects[foundIndex].id);
209
209
  aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
210
210
  assert.equal(numAspects, aspects.length + 1);
211
211
  // Check if aspect was deleted
212
- assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
212
+ assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
213
213
  {"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
214
214
  });
215
215
  it("should be able to insert, update, and delete UniqueAspects", () => {
@@ -329,17 +329,17 @@ describe("ElementAspect", () => {
329
329
  e1Aspects.forEach((x) => {
330
330
  assert.isTrue(findInProps(x, e1AspectProps));
331
331
  });
332
- assert.equal(JSON.stringify(e1Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x21","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
333
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
334
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
335
- {"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
332
+ assert.equal(JSON.stringify(e1Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x21","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
333
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
334
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
335
+ {"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
336
336
  {"classFullName":"BisCore:ExternalSourceAspect","id":"0x25","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Kind2","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
337
337
  const e2Aspects = iModelDb.elements.getAspects(e2, aspectProps.classFullName);
338
338
  assert.equal(e2Aspects.length, e2AspectProps.length);
339
339
  e2Aspects.forEach((x) => {
340
340
  assert.isTrue(findInProps(x, e2AspectProps));
341
341
  });
342
- assert.equal(JSON.stringify(e2Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x26","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}},
342
+ assert.equal(JSON.stringify(e2Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x26","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}},
343
343
  {"classFullName":"BisCore:ExternalSourceAspect","id":"0x27","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
344
344
  const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, "A");
345
345
  assert.equal(allA.filter((x) => x.elementId === e1).length, 2, "there are two A's in scope 1 on e1");