@itwin/core-backend 5.13.0-dev.12 → 5.13.0-dev.13

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 (454) hide show
  1. package/lib/cjs/BackendHubAccess.js.map +1 -1
  2. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  3. package/lib/cjs/BisCoreSchema.js.map +1 -1
  4. package/lib/cjs/BlobContainerService.js.map +1 -1
  5. package/lib/cjs/BriefcaseManager.js.map +1 -1
  6. package/lib/cjs/CatalogDb.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.js +2 -2
  9. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  10. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  11. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  12. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  13. package/lib/cjs/ChangesetReader.js +3 -3
  14. package/lib/cjs/ChangesetReader.js.map +1 -1
  15. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  30. package/lib/cjs/ECSqlStatement.js.map +1 -1
  31. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  32. package/lib/cjs/EditTxn.js.map +1 -1
  33. package/lib/cjs/Element.js.map +1 -1
  34. package/lib/cjs/ElementAspect.js.map +1 -1
  35. package/lib/cjs/ElementGraphics.js.map +1 -1
  36. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  37. package/lib/cjs/Entity.js.map +1 -1
  38. package/lib/cjs/EntityReferences.js.map +1 -1
  39. package/lib/cjs/ExportGraphics.js.map +1 -1
  40. package/lib/cjs/ExternalSource.js.map +1 -1
  41. package/lib/cjs/FontFile.js.map +1 -1
  42. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  43. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  44. package/lib/cjs/GeometrySummary.js +47 -47
  45. package/lib/cjs/GeometrySummary.js.map +1 -1
  46. package/lib/cjs/IModelDb.js +25 -25
  47. package/lib/cjs/IModelDb.js.map +1 -1
  48. package/lib/cjs/IModelDbFonts.js.map +1 -1
  49. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  50. package/lib/cjs/IModelHost.js.map +1 -1
  51. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  52. package/lib/cjs/IModelJsFs.js.map +1 -1
  53. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  54. package/lib/cjs/IpcHost.js.map +1 -1
  55. package/lib/cjs/LineStyle.js.map +1 -1
  56. package/lib/cjs/LocalHub.js +1 -1
  57. package/lib/cjs/LocalHub.js.map +1 -1
  58. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  59. package/lib/cjs/LockControl.js.map +1 -1
  60. package/lib/cjs/Material.js.map +1 -1
  61. package/lib/cjs/Model.js.map +1 -1
  62. package/lib/cjs/NativeAppStorage.js.map +1 -1
  63. package/lib/cjs/NativeHost.js.map +1 -1
  64. package/lib/cjs/NavigationRelationship.js.map +1 -1
  65. package/lib/cjs/PartialChangeUnifier.js +7 -7
  66. package/lib/cjs/PartialChangeUnifier.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.js.map +1 -1
  82. package/lib/cjs/ViewDefinition.js.map +1 -1
  83. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  84. package/lib/cjs/ViewStore.js.map +1 -1
  85. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  86. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  87. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  88. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  89. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  90. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  91. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  92. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  93. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  94. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  95. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  96. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  97. package/lib/cjs/core-backend.js.map +1 -1
  98. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  99. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  100. package/lib/cjs/domains/GenericElements.js.map +1 -1
  101. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  102. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  103. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  104. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -1
  105. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  106. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  107. package/lib/cjs/internal/HubMock.js.map +1 -1
  108. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  109. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  110. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  111. package/lib/cjs/internal/NoLocks.js.map +1 -1
  112. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  113. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  114. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  115. package/lib/cjs/internal/Symbols.js.map +1 -1
  116. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  117. package/lib/cjs/internal/cross-package.js.map +1 -1
  118. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  119. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  120. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  121. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  122. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  123. package/lib/cjs/rpc/multipart.js.map +1 -1
  124. package/lib/cjs/rpc/tracing.js.map +1 -1
  125. package/lib/cjs/rpc/web/logging.js.map +1 -1
  126. package/lib/cjs/rpc/web/request.js.map +1 -1
  127. package/lib/cjs/rpc/web/response.js.map +1 -1
  128. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  129. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  130. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  131. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  132. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  133. package/lib/cjs/workspace/Settings.js.map +1 -1
  134. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  135. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  136. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  137. package/lib/cjs/workspace/Workspace.js.map +1 -1
  138. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  139. package/lib/esm/BackendHubAccess.js.map +1 -1
  140. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  141. package/lib/esm/BisCoreSchema.js.map +1 -1
  142. package/lib/esm/BlobContainerService.js.map +1 -1
  143. package/lib/esm/BriefcaseManager.js.map +1 -1
  144. package/lib/esm/CatalogDb.js.map +1 -1
  145. package/lib/esm/Category.js.map +1 -1
  146. package/lib/esm/ChangeSummaryManager.js +2 -2
  147. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  148. package/lib/esm/ChangedElementsDb.js.map +1 -1
  149. package/lib/esm/ChangesetECAdaptor.js +248 -248
  150. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  151. package/lib/esm/ChangesetReader.js +3 -3
  152. package/lib/esm/ChangesetReader.js.map +1 -1
  153. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  154. package/lib/esm/ChannelControl.js.map +1 -1
  155. package/lib/esm/CheckpointManager.js.map +1 -1
  156. package/lib/esm/ClassRegistry.js +5 -5
  157. package/lib/esm/ClassRegistry.js.map +1 -1
  158. package/lib/esm/CloudSqlite.js.map +1 -1
  159. package/lib/esm/CodeService.js.map +1 -1
  160. package/lib/esm/CodeSpecs.js.map +1 -1
  161. package/lib/esm/ConcurrentQuery.js.map +1 -1
  162. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  163. package/lib/esm/DevTools.js.map +1 -1
  164. package/lib/esm/DisplayStyle.js.map +1 -1
  165. package/lib/esm/ECDb.js.map +1 -1
  166. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  167. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  168. package/lib/esm/ECSqlStatement.js.map +1 -1
  169. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  170. package/lib/esm/EditTxn.js.map +1 -1
  171. package/lib/esm/Element.js.map +1 -1
  172. package/lib/esm/ElementAspect.js.map +1 -1
  173. package/lib/esm/ElementGraphics.js.map +1 -1
  174. package/lib/esm/ElementTreeWalker.js.map +1 -1
  175. package/lib/esm/Entity.js.map +1 -1
  176. package/lib/esm/EntityReferences.js.map +1 -1
  177. package/lib/esm/ExportGraphics.js.map +1 -1
  178. package/lib/esm/ExternalSource.js.map +1 -1
  179. package/lib/esm/FontFile.js.map +1 -1
  180. package/lib/esm/GeoCoordConfig.js.map +1 -1
  181. package/lib/esm/GeographicCRSServices.js.map +1 -1
  182. package/lib/esm/GeometrySummary.js +47 -47
  183. package/lib/esm/GeometrySummary.js.map +1 -1
  184. package/lib/esm/IModelDb.js +25 -25
  185. package/lib/esm/IModelDb.js.map +1 -1
  186. package/lib/esm/IModelDbFonts.js.map +1 -1
  187. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  188. package/lib/esm/IModelHost.js.map +1 -1
  189. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  190. package/lib/esm/IModelJsFs.js.map +1 -1
  191. package/lib/esm/ImageSourceConversion.js.map +1 -1
  192. package/lib/esm/IpcHost.js.map +1 -1
  193. package/lib/esm/LineStyle.js.map +1 -1
  194. package/lib/esm/LocalHub.js +1 -1
  195. package/lib/esm/LocalHub.js.map +1 -1
  196. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  197. package/lib/esm/LockControl.js.map +1 -1
  198. package/lib/esm/Material.js.map +1 -1
  199. package/lib/esm/Model.js.map +1 -1
  200. package/lib/esm/NativeAppStorage.js.map +1 -1
  201. package/lib/esm/NativeHost.js.map +1 -1
  202. package/lib/esm/NavigationRelationship.js.map +1 -1
  203. package/lib/esm/PartialChangeUnifier.js +7 -7
  204. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  205. package/lib/esm/PromiseMemoizer.js.map +1 -1
  206. package/lib/esm/PropertyStore.js.map +1 -1
  207. package/lib/esm/Relationship.js.map +1 -1
  208. package/lib/esm/RpcBackend.js.map +1 -1
  209. package/lib/esm/SQLiteDb.js.map +1 -1
  210. package/lib/esm/Schema.js.map +1 -1
  211. package/lib/esm/SchemaSync.js.map +1 -1
  212. package/lib/esm/SchemaUtils.js.map +1 -1
  213. package/lib/esm/SheetIndex.js.map +1 -1
  214. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  215. package/lib/esm/SqliteStatement.js.map +1 -1
  216. package/lib/esm/StashManager.js.map +1 -1
  217. package/lib/esm/Texture.js.map +1 -1
  218. package/lib/esm/TileStorage.js.map +1 -1
  219. package/lib/esm/TxnManager.js.map +1 -1
  220. package/lib/esm/ViewDefinition.js.map +1 -1
  221. package/lib/esm/ViewStateHydrator.js.map +1 -1
  222. package/lib/esm/ViewStore.js.map +1 -1
  223. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  224. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  225. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  226. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  227. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  228. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  229. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  230. package/lib/esm/core-backend.js.map +1 -1
  231. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  232. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  233. package/lib/esm/domains/GenericElements.js.map +1 -1
  234. package/lib/esm/domains/GenericSchema.js.map +1 -1
  235. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  236. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  237. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -1
  238. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  239. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  240. package/lib/esm/internal/HubMock.js.map +1 -1
  241. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  242. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  243. package/lib/esm/internal/NativePlatform.js.map +1 -1
  244. package/lib/esm/internal/NoLocks.js.map +1 -1
  245. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  246. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  247. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  248. package/lib/esm/internal/Symbols.js.map +1 -1
  249. package/lib/esm/internal/annotations/fields.js.map +1 -1
  250. package/lib/esm/internal/cross-package.js.map +1 -1
  251. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  252. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  253. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  254. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  255. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  256. package/lib/esm/rpc/multipart.js.map +1 -1
  257. package/lib/esm/rpc/tracing.js.map +1 -1
  258. package/lib/esm/rpc/web/logging.js.map +1 -1
  259. package/lib/esm/rpc/web/request.js.map +1 -1
  260. package/lib/esm/rpc/web/response.js.map +1 -1
  261. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  262. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  263. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  264. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  265. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  266. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  267. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  268. package/lib/esm/test/AttachDb.test.js +11 -11
  269. package/lib/esm/test/AttachDb.test.js.map +1 -1
  270. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  271. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  272. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  273. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  274. package/lib/esm/test/IModelHost.test.js.map +1 -1
  275. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  276. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  277. package/lib/esm/test/IpcHost.test.js.map +1 -1
  278. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  279. package/lib/esm/test/PrintElementTree.js.map +1 -1
  280. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  281. package/lib/esm/test/RevisionUtility.js.map +1 -1
  282. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  283. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  284. package/lib/esm/test/SchemaUtils.test.js +25 -25
  285. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  286. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  287. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  288. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  289. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  290. package/lib/esm/test/TestEditTxn.js.map +1 -1
  291. package/lib/esm/test/TestUtils.js.map +1 -1
  292. package/lib/esm/test/annotations/Fields.test.js +53 -53
  293. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  294. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  295. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  296. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  297. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  298. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  299. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  300. package/lib/esm/test/categories/Category.test.js.map +1 -1
  301. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  302. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  303. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  304. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  305. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  306. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  307. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  308. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  309. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  310. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  311. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  312. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  313. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  314. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  315. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  316. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  317. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  318. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +4 -4
  319. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  320. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  321. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  322. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  323. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  324. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  325. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  326. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  327. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  328. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  329. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  330. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  331. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  332. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  333. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  334. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  335. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  336. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  337. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  338. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  339. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  340. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  341. package/lib/esm/test/example-code/EditTxn.test.js.map +1 -1
  342. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  343. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  344. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  345. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  346. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  347. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  348. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  349. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  350. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  351. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  352. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  353. package/lib/esm/test/imageData.js.map +1 -1
  354. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  355. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  356. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  357. package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -1
  358. package/lib/esm/test/imodel/IModelElements.test.js.map +1 -1
  359. package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -1
  360. package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -1
  361. package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -1
  362. package/lib/esm/test/imodel/IModelModels.test.js.map +1 -1
  363. package/lib/esm/test/imodel/IModelRelationships.test.js +44 -44
  364. package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -1
  365. package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -1
  366. package/lib/esm/test/imodel/IModelViews.test.js.map +1 -1
  367. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  368. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  369. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  370. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  371. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  372. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  373. package/lib/esm/test/index.js.map +1 -1
  374. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +32 -32
  375. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -1
  376. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  377. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  378. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  379. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  380. package/lib/esm/test/rpc/response.test.js.map +1 -1
  381. package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
  382. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  383. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  384. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  385. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  386. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  387. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  388. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  389. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +21 -21
  390. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -1
  391. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  392. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  393. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  394. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  395. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
  396. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  397. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  398. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  399. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  400. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  401. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  402. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  403. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  404. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  405. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  406. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  407. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  408. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  409. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  410. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  411. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  412. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  413. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  414. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  415. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  416. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  417. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  418. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  419. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  420. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  421. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  422. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  423. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  424. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  425. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  426. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  427. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  428. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  429. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  430. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  431. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  432. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  433. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  434. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  435. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  436. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  437. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  438. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  439. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  440. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  441. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  442. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  443. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  444. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  445. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  446. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  447. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  448. package/lib/esm/workspace/Settings.js.map +1 -1
  449. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  450. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  451. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  452. package/lib/esm/workspace/Workspace.js.map +1 -1
  453. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  454. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"IModelRelationships.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelRelationships.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, expect } from \"chai\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Code, ColorByName, ColorDef, GeometricElementProps, IModel, IModelError, QueryBinder, RelatedElement, RelationshipProps, SubCategoryAppearance,\r\n} from \"@itwin/core-common\";\r\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport {\r\n ElementDrivesElement, ElementGroupsMembers, ElementGroupsMembersProps, GeometricModel, IModelDb, IModelJsFs, PhysicalModel,\r\n PhysicalObject, SnapshotDb, SpatialCategory, StandaloneDb,\r\n} from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { createIModelFromSeed, importTestBim } from \"./IModelTestFixtures\";\r\n\r\n\r\nfunction createElemProps(_imodel: IModelDb, modId: Id64String, catId: Id64String, className: string): GeometricElementProps {\r\n const elementProps: GeometricElementProps = {\r\n classFullName: className,\r\n model: modId,\r\n category: catId,\r\n code: Code.createEmpty(),\r\n };\r\n return elementProps;\r\n}\r\n\r\nfunction insertElement(imodel: IModelDb, mId: Id64String, cId: Id64String, cName: string, propName: string, txn: EditTxn): Id64String {\r\n const elementProps = createElemProps(imodel, mId, cId, cName);\r\n const geomElement = imodel.elements.createElement(elementProps);\r\n (geomElement as any).name = propName; // Add a custom property to the element\r\n const id = txn.insertElement(geomElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(id), \"insert failed\");\r\n return id;\r\n}\r\n\r\nfunction validateADrivesBRowCount(imodel: IModelDb, expectedRows: number): void {\r\n const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);\r\n assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);\r\n}\r\n\r\nfunction validateNavProp(imodel: IModelDb, expectedNavPropValue: any): void {\r\n const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);\r\n assert.strictEqual(reader.length, 1);\r\n assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be \"${expectedNavPropValue}\"`);\r\n}\r\n\r\ndescribe(\"iModel relationships\", () => {\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n IModelTestUtils.registerTestBimSchema();\r\n });\r\n\r\n describe(\"with a writable seed iModel\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n beforeEach(async () => {\r\n imodel = await importTestBim(createIModelFromSeed(\"relationships.bim\", \"test.bim\"));\r\n });\r\n\r\n afterEach(() => {\r\n if (imodel !== undefined && imodel.isOpen)\r\n imodel.close();\r\n });\r\n\r\n it(\"should create model with custom relationship to modeled element\", async () => {\r\n const testImodel = imodel;\r\n const txn = new EditTxn(testImodel, \"custom relationship to modeled element\");\r\n\r\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestModelModelsElement\", EntityClass), \"TestModelModelsElement is expected to be defined in TestBim.ecschema.xml\");\r\n\r\n txn.start();\r\n const newPartition1 = IModelTestUtils.createAndInsertPhysicalPartition(txn, Code.createEmpty());\r\n const relClassName1 = \"TestBim:TestModelModelsElement\";\r\n const modeledElementRef = new RelatedElement({ id: newPartition1, relClassName: relClassName1 });\r\n const newModelId1 = IModelTestUtils.createAndInsertPhysicalModel(txn, modeledElementRef);\r\n assert.isTrue(Id64.isValidId64(newModelId1));\r\n const [, newModelId2] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty());\r\n txn.end();\r\n const newModel2 = testImodel.models.getModel(newModelId2);\r\n const relClassName2 = newModel2.modeledElement.relClassName;\r\n\r\n const model1 = testImodel.models.getModel(newModelId1);\r\n const model2 = testImodel.models.getModel(newModelId2);\r\n\r\n const foundRelClassName1 = model1.modeledElement.relClassName;\r\n const foundRelClassName2 = model2.modeledElement.relClassName;\r\n\r\n assert.equal(foundRelClassName1, relClassName1);\r\n assert.equal(foundRelClassName2, relClassName2);\r\n });\r\n });\r\n\r\n it(\"should create link table relationship instances\", () => {\r\n const snapshotFile2: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"CreateLinkTable.bim\");\r\n const testImodel = StandaloneDb.createEmpty(snapshotFile2, { rootSubject: { name: \"test1\" }, enableTransactions: true });\r\n const txn = new EditTxn(testImodel, \"link table relationship instances\");\r\n txn.start();\r\n // Create a new physical model\r\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\r\n\r\n // create a SpatialCategory\r\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\r\n\r\n // Create a couple of physical elements.\r\n const elementProps: GeometricElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: newModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n\r\n const id0 = txn.insertElement(elementProps);\r\n const id1 = txn.insertElement(elementProps);\r\n const id2 = txn.insertElement(elementProps);\r\n\r\n const geometricModel = testImodel.models.getModel<GeometricModel>(newModelId);\r\n assert.throws(() => geometricModel.queryExtents()); // no geometry\r\n\r\n // Create grouping relationships from 0 to 1 and from 0 to 2\r\n const r1 = ElementGroupsMembers.create(testImodel, id0, id1, 1);\r\n r1.id = txn.insertRelationship(r1.toJSON());\r\n const r2 = ElementGroupsMembers.create(testImodel, id0, id2);\r\n r2.id = txn.insertRelationship(r2.toJSON());\r\n\r\n // Look up by id\r\n const g1 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\r\n const g2 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r2.id);\r\n\r\n assert.deepEqual(g1.id, r1.id);\r\n assert.equal(g1.classFullName, ElementGroupsMembers.classFullName);\r\n assert.equal(g1.memberPriority, 1, \"g1.memberPriority\");\r\n assert.deepEqual(g2.id, r2.id);\r\n assert.equal(g2.classFullName, ElementGroupsMembers.classFullName);\r\n assert.equal(g2.memberPriority, 0, \"g2.memberPriority\"); // The memberPriority parameter defaults to 0 in ElementGroupsMembers.create\r\n\r\n // Look up by source and target\r\n const g1byst = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, { sourceId: r1.sourceId, targetId: r1.targetId });\r\n assert.deepEqual(g1byst, g1);\r\n\r\n // Update relationship instance property\r\n r1.asAny.memberPriority = 2;\r\n txn.updateRelationship(r1.toJSON());\r\n\r\n const g11 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\r\n assert.equal(g11.memberPriority, 2, \"g11.memberPriority\");\r\n txn.saveChanges(\"step 1\");\r\n\r\n // Delete relationship instance property\r\n txn.deleteRelationship(g11.toJSON());\r\n txn.saveChanges(\"step 2\");\r\n assert.throws(() => ElementGroupsMembers.getInstance(testImodel, r1.id), IModelError);\r\n\r\n const d0 = txn.insertElement(elementProps);\r\n const d1 = txn.insertElement(elementProps);\r\n const ede1 = ElementDrivesElement.create(testImodel, d0, d1, 0);\r\n ede1.id = txn.insertRelationship(ede1.toJSON());\r\n txn.saveChanges(\"step 3\");\r\n\r\n txn.deleteRelationship(ede1.toJSON());\r\n txn.end(\"save\", \"step 4\");\r\n testImodel.close();\r\n });\r\n\r\n it(\"should throw \\\"constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)\\\" when inserting a relationship instance with the same prop twice\", () => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"insertDuplicateInstance.bim\");\r\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"insertDuplicateInstance\" } });\r\n const txn = new EditTxn(imodel, \"insert duplicate relationship instance\");\r\n txn.start();\r\n // Create a new physical model\r\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\r\n\r\n // create a SpatialCategory\r\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\r\n\r\n // Create a couple of physical elements.\r\n const elementProps: GeometricElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: newModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n\r\n const id0 = txn.insertElement(elementProps);\r\n const id1 = txn.insertElement(elementProps);\r\n\r\n const props: ElementGroupsMembersProps = {\r\n classFullName: \"BisCore:ElementGroupsMembers\",\r\n sourceId: id0,\r\n targetId: id1,\r\n memberPriority: 1,\r\n };\r\n\r\n txn.insertRelationship(props);\r\n expect(() => txn.insertRelationship(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);\r\n\r\n txn.end(\"abandon\");\r\n imodel.close();\r\n });\r\n\r\n it(\"Validate invalid relationship classes being inserted/updated\", async () => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"invalidRelationshipClass.bim\");\r\n\r\n if (IModelJsFs.existsSync(imodelPath))\r\n IModelJsFs.unlinkSync(imodelPath);\r\n\r\n const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"invalidRelationshipClass\" } });\r\n\r\n await testImodel.importSchemaStrings([\r\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestRelationSchema\" alias=\"trs\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"Name\" typeName=\"string\" />\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ChildA\" >\r\n <BaseClass>TestElement</BaseClass>\r\n <ECNavigationProperty propertyName=\"NavPropChildB\" relationshipName=\"ADrivesB\" direction=\"Forward\" readOnly=\"True\">\r\n </ECNavigationProperty>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ChildB\" >\r\n <BaseClass>TestElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECRelationshipClass typeName=\"ADrivesB\" strengthDirection=\"Backward\" strength=\"referencing\" modifier=\"Sealed\">\r\n <Source multiplicity=\"(0..*)\" polymorphic=\"true\" roleLabel=\"drives\">\r\n <Class class=\"ChildA\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..1)\" polymorphic=\"true\" roleLabel=\"is driven by\">\r\n <Class class=\"ChildB\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n\r\n <ECEntityClass typeName=\"ChildC\">\r\n <BaseClass>TestElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"ChildD\">\r\n <BaseClass>TestElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECRelationshipClass typeName=\"CIsRelatedToD\" strength=\"referencing\" modifier=\"Sealed\">\r\n <BaseClass>bis:ElementRefersToElements</BaseClass>\r\n <Source multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo\" polymorphic=\"true\">\r\n <Class class=\"ChildC\"/>\r\n </Source>\r\n <Target multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo (Reversed)\" polymorphic=\"true\">\r\n <Class class=\"ChildD\"/>\r\n </Target>\r\n </ECRelationshipClass>\r\n </ECSchema>`]);\r\n\r\n // Enable ECSQL write validation and verify it's set\r\n const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);\r\n assert.exists(pragmaRows);\r\n assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);\r\n\r\n // Ensure ADrivesB table is empty before test\r\n validateADrivesBRowCount(testImodel, 0);\r\n\r\n // Create a physical model and spatial category if needed\r\n const setupTxn = new EditTxn(testImodel, \"setup invalid relationship class test\");\r\n setupTxn.start();\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(setupTxn, Code.createEmpty(), true);\r\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")\r\n ?? SpatialCategory.insert(setupTxn,\r\n IModel.dictionaryId,\r\n \"MySpatialCategory\",\r\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() })\r\n );\r\n const idB = insertElement(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildB\", \"ChildBElement\", setupTxn);\r\n setupTxn.end();\r\n assert.isTrue(Id64.isValidId64(idB), \"Insert ChildBElement failed\");\r\n\r\n // Prepare base props for ChildA\r\n const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildA\");\r\n\r\n // Test various relationship class names for navigation property\r\n const testCases = [\r\n { name: \"trs:ADrivesB\", shouldSucceed: true, expectedRows: 1 },\r\n { name: \"trs.FakeClass\", shouldSucceed: true, expectedRows: 0 },\r\n { name: \"trs:ChildA\", shouldSucceed: false, expectedRows: 0 },\r\n { name: \"trs:ChildB\", shouldSucceed: false, expectedRows: 0 },\r\n { name: \"trs:CIsRelatedToD\", shouldSucceed: false, expectedRows: 0 },\r\n ];\r\n\r\n for (const { name, shouldSucceed, expectedRows } of testCases) {\r\n const txn = new EditTxn(testImodel, `invalid relationship class ${name}`);\r\n txn.start();\r\n try {\r\n const elemRef = new RelatedElement({ id: idB, relClassName: name });\r\n (elementProps as any).navPropChildB = elemRef;\r\n (elementProps as any).name = \"ChildAElement\";\r\n const geomElement = testImodel.elements.createElement(elementProps);\r\n\r\n let idA: Id64String | undefined;\r\n try {\r\n idA = txn.insertElement(geomElement.toJSON());\r\n if (shouldSucceed)\r\n assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);\r\n else\r\n assert.fail(`Insert should have failed for ${name}.`);\r\n } catch (err: any) {\r\n if (shouldSucceed)\r\n assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);\r\n\r\n // If should not succeed, error is expected\r\n }\r\n\r\n // Validate row count in ADrivesB table\r\n validateADrivesBRowCount(testImodel, expectedRows);\r\n\r\n // If insert succeeded, test update and delete scenarios\r\n if (expectedRows === 1 && idA !== undefined) {\r\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\r\n\r\n const editElem: any = testImodel.elements.getElement(idA);\r\n editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: \"trs.FakeClass\" });\r\n editElem.name = \"ChildAElementUpdated\";\r\n txn.updateElement(editElem);\r\n\r\n validateADrivesBRowCount(testImodel, 1);\r\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\r\n\r\n const editedElem: any = testImodel.elements.getElement(idA);\r\n assert.equal(editedElem.name, \"ChildAElementUpdated\", `Expected name to be \"ChildAElementUpdated\" after update, but got \"${editedElem.name}\"`);\r\n assert.strictEqual(editedElem.navPropChildB.relClassName, \"TestRelationSchema.ADrivesB\", `Expected navPropChildB to be \"TestRelationSchema.ADrivesB\" after update, but got \"${editedElem.navPropChildB}\"`);\r\n\r\n // Set the nav prop value to null\r\n editElem.name = \"ChildAElementNulled\";\r\n editElem.navPropChildB = null;\r\n txn.updateElement(editElem);\r\n\r\n validateADrivesBRowCount(testImodel, 0);\r\n const nulledElem: any = testImodel.elements.getElement(idA);\r\n assert.equal(nulledElem.name, \"ChildAElementNulled\", `Expected name to be \"ChildAElementNulled\" after nulling, but got \"${nulledElem.name}\"`);\r\n assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got \"${nulledElem.navPropChildB}\"`);\r\n\r\n if (shouldSucceed) {\r\n txn.deleteElement(idA);\r\n assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);\r\n }\r\n }\r\n } finally {\r\n txn.end(\"abandon\");\r\n }\r\n }\r\n testImodel.close();\r\n });\r\n\r\n describe(\"Delete relationship instances\", () => {\r\n let testImodel: SnapshotDb;\r\n const relationshipClasses = [\r\n \"BisCore:ElementGroupsMembers\",\r\n \"BisCore:ElementDrivesElement\",\r\n \"BisCore:ElementRefersToDocuments\"\r\n ];\r\n\r\n afterEach(() => {\r\n if (testImodel !== undefined) {\r\n const iModelPath = testImodel.pathName;\r\n if (testImodel.isOpen)\r\n testImodel.close();\r\n IModelJsFs.unlinkSync(iModelPath);\r\n }\r\n });\r\n\r\n function setupRelationships(numOfRelationships: number, multipleClasses: boolean = false): RelationshipProps[] {\r\n testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"DeleteRelationshipInstances.bim\"), { rootSubject: { name: \"DeleteRelationshipInstances\" } });\r\n assert.isTrue(testImodel.isOpen);\r\n\r\n const txn = new EditTxn(testImodel, \"setup delete relationships\");\r\n txn.start();\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\r\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\");\r\n if (!spatialCategoryId) {\r\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\r\n }\r\n\r\n const relationships: RelationshipProps[] = [];\r\n for (let i = 0; i < numOfRelationships; ++i) {\r\n const sourceProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\r\n const sourceId = txn.insertElement(sourceProps);\r\n\r\n const targetProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\r\n const targetId = txn.insertElement(targetProps);\r\n\r\n let relationshipClass = \"BisCore:ElementGroupsMembers\";\r\n if (multipleClasses)\r\n relationshipClass = relationshipClasses[i % relationshipClasses.length];\r\n\r\n const relationshipProps: RelationshipProps = {\r\n classFullName: relationshipClass,\r\n sourceId,\r\n targetId,\r\n };\r\n\r\n relationshipProps.id = txn.insertRelationship(relationshipProps);\r\n relationships.push(relationshipProps);\r\n }\r\n txn.end();\r\n return relationships;\r\n }\r\n\r\n async function getRelationshipCount(iModel: IModelDb, relationshipClass: string): Promise<number> {\r\n const reader = iModel.createQueryReader(`SELECT COUNT(*) AS [count] FROM ${relationshipClass}`);\r\n await reader.step();\r\n return reader.current.count;\r\n }\r\n\r\n it(\"deleteInstances with an empty array\", async () => {\r\n const relationships = setupRelationships(10);\r\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\r\n\r\n withEditTxn(testImodel, (txn) => {\r\n txn.deleteRelationships([]);\r\n });\r\n\r\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\r\n });\r\n\r\n it(\"deleteInstances with a single relationship instance\", async () => {\r\n const relationships = setupRelationships(10);\r\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"Should delete exactly one relationship\");\r\n\r\n // Delete just one relationship using deleteInstances method\r\n withEditTxn(testImodel, (txn) => {\r\n txn.deleteRelationships([relationships[0]]);\r\n });\r\n\r\n const remainingCount = await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\");\r\n assert.equal(remainingCount, relationships.length - 1, \"Should delete exactly one relationship\");\r\n });\r\n\r\n it(\"deleteInstances with different relationship classes\", async () => {\r\n const relationships = setupRelationships(500, true);\r\n\r\n // Verify relationships were created across different classes\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\r\n\r\n // Test deleteInstances with mixed relationship classes\r\n withEditTxn(testImodel, (txn) => {\r\n txn.deleteRelationships(relationships);\r\n });\r\n\r\n // Verify all relationships were deleted regardless of their class\r\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"All ElementGroupsMembers relationships should be deleted\");\r\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\"), \"All ElementDrivesElement relationships should be deleted\");\r\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\"), \"All ElementRefersToDocuments relationships should be deleted\");\r\n });\r\n\r\n it(\"deleteInstances for subset including duplicate entries\", async () => {\r\n const relationships = setupRelationships(1000, true);\r\n\r\n // Verify relationships exist before deletion\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\r\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\r\n\r\n // Select a deterministic, unique subset (every 4th relationship => 250 unique entries)\r\n // so the test is stable and reproducible.\r\n const relationshipsToDelete: RelationshipProps[] = [];\r\n for (let i = 0; i < relationships.length; i += 4) {\r\n relationshipsToDelete.push(relationships[i]);\r\n }\r\n assert.equal(relationshipsToDelete.length, 250);\r\n\r\n // Intentionally pass one relationship twice in the same call. deleteRelationships must\r\n // tolerate duplicate IDs in a single batch (deleting an already-deleted relationship is a no-op),\r\n // which exercises the batch/native boundary that the previous with-replacement sampling covered.\r\n const duplicated = relationshipsToDelete[0];\r\n relationshipsToDelete.push(duplicated);\r\n\r\n withEditTxn(testImodel, (txn) => {\r\n txn.deleteRelationships(relationshipsToDelete);\r\n });\r\n\r\n // Verify all relationships were deleted (dedupe so the duplicated entry is only checked once)\r\n const uniqueDeleted = relationshipsToDelete.filter((rel, index) => relationshipsToDelete.indexOf(rel) === index);\r\n for (const relClass of uniqueDeleted) {\r\n const reader = testImodel.createQueryReader(`SELECT ECInstanceId FROM ${relClass.classFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, new QueryBinder().bindId(1, relClass.sourceId).bindId(2, relClass.targetId));\r\n assert.isFalse(await reader.step(), `Relationship ${relClass.id} should be deleted`); // No row should be returned\r\n }\r\n });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"IModelRelationships.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelRelationships.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, expect } from \"chai\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n Code, ColorByName, ColorDef, GeometricElementProps, IModel, IModelError, QueryBinder, RelatedElement, RelationshipProps, SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { EntityClass } from \"@itwin/ecschema-metadata\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n ElementDrivesElement, ElementGroupsMembers, ElementGroupsMembersProps, GeometricModel, IModelDb, IModelJsFs, PhysicalModel,\n PhysicalObject, SnapshotDb, SpatialCategory, StandaloneDb,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { createIModelFromSeed, importTestBim } from \"./IModelTestFixtures\";\n\n\nfunction createElemProps(_imodel: IModelDb, modId: Id64String, catId: Id64String, className: string): GeometricElementProps {\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n return elementProps;\n}\n\nfunction insertElement(imodel: IModelDb, mId: Id64String, cId: Id64String, cName: string, propName: string, txn: EditTxn): Id64String {\n const elementProps = createElemProps(imodel, mId, cId, cName);\n const geomElement = imodel.elements.createElement(elementProps);\n (geomElement as any).name = propName; // Add a custom property to the element\n const id = txn.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert failed\");\n return id;\n}\n\nfunction validateADrivesBRowCount(imodel: IModelDb, expectedRows: number): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);\n assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);\n}\n\nfunction validateNavProp(imodel: IModelDb, expectedNavPropValue: any): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);\n assert.strictEqual(reader.length, 1);\n assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be \"${expectedNavPropValue}\"`);\n}\n\ndescribe(\"iModel relationships\", () => {\n before(async () => {\n await TestUtils.startBackend();\n IModelTestUtils.registerTestBimSchema();\n });\n\n describe(\"with a writable seed iModel\", () => {\n let imodel: SnapshotDb;\n\n beforeEach(async () => {\n imodel = await importTestBim(createIModelFromSeed(\"relationships.bim\", \"test.bim\"));\n });\n\n afterEach(() => {\n if (imodel !== undefined && imodel.isOpen)\n imodel.close();\n });\n\n it(\"should create model with custom relationship to modeled element\", async () => {\n const testImodel = imodel;\n const txn = new EditTxn(testImodel, \"custom relationship to modeled element\");\n\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestModelModelsElement\", EntityClass), \"TestModelModelsElement is expected to be defined in TestBim.ecschema.xml\");\n\n txn.start();\n const newPartition1 = IModelTestUtils.createAndInsertPhysicalPartition(txn, Code.createEmpty());\n const relClassName1 = \"TestBim:TestModelModelsElement\";\n const modeledElementRef = new RelatedElement({ id: newPartition1, relClassName: relClassName1 });\n const newModelId1 = IModelTestUtils.createAndInsertPhysicalModel(txn, modeledElementRef);\n assert.isTrue(Id64.isValidId64(newModelId1));\n const [, newModelId2] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty());\n txn.end();\n const newModel2 = testImodel.models.getModel(newModelId2);\n const relClassName2 = newModel2.modeledElement.relClassName;\n\n const model1 = testImodel.models.getModel(newModelId1);\n const model2 = testImodel.models.getModel(newModelId2);\n\n const foundRelClassName1 = model1.modeledElement.relClassName;\n const foundRelClassName2 = model2.modeledElement.relClassName;\n\n assert.equal(foundRelClassName1, relClassName1);\n assert.equal(foundRelClassName2, relClassName2);\n });\n });\n\n it(\"should create link table relationship instances\", () => {\n const snapshotFile2: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"CreateLinkTable.bim\");\n const testImodel = StandaloneDb.createEmpty(snapshotFile2, { rootSubject: { name: \"test1\" }, enableTransactions: true });\n const txn = new EditTxn(testImodel, \"link table relationship instances\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n const id2 = txn.insertElement(elementProps);\n\n const geometricModel = testImodel.models.getModel<GeometricModel>(newModelId);\n assert.throws(() => geometricModel.queryExtents()); // no geometry\n\n // Create grouping relationships from 0 to 1 and from 0 to 2\n const r1 = ElementGroupsMembers.create(testImodel, id0, id1, 1);\n r1.id = txn.insertRelationship(r1.toJSON());\n const r2 = ElementGroupsMembers.create(testImodel, id0, id2);\n r2.id = txn.insertRelationship(r2.toJSON());\n\n // Look up by id\n const g1 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n const g2 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r2.id);\n\n assert.deepEqual(g1.id, r1.id);\n assert.equal(g1.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g1.memberPriority, 1, \"g1.memberPriority\");\n assert.deepEqual(g2.id, r2.id);\n assert.equal(g2.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g2.memberPriority, 0, \"g2.memberPriority\"); // The memberPriority parameter defaults to 0 in ElementGroupsMembers.create\n\n // Look up by source and target\n const g1byst = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, { sourceId: r1.sourceId, targetId: r1.targetId });\n assert.deepEqual(g1byst, g1);\n\n // Update relationship instance property\n r1.asAny.memberPriority = 2;\n txn.updateRelationship(r1.toJSON());\n\n const g11 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n assert.equal(g11.memberPriority, 2, \"g11.memberPriority\");\n txn.saveChanges(\"step 1\");\n\n // Delete relationship instance property\n txn.deleteRelationship(g11.toJSON());\n txn.saveChanges(\"step 2\");\n assert.throws(() => ElementGroupsMembers.getInstance(testImodel, r1.id), IModelError);\n\n const d0 = txn.insertElement(elementProps);\n const d1 = txn.insertElement(elementProps);\n const ede1 = ElementDrivesElement.create(testImodel, d0, d1, 0);\n ede1.id = txn.insertRelationship(ede1.toJSON());\n txn.saveChanges(\"step 3\");\n\n txn.deleteRelationship(ede1.toJSON());\n txn.end(\"save\", \"step 4\");\n testImodel.close();\n });\n\n it(\"should throw \\\"constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)\\\" when inserting a relationship instance with the same prop twice\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"insertDuplicateInstance.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"insertDuplicateInstance\" } });\n const txn = new EditTxn(imodel, \"insert duplicate relationship instance\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n\n const props: ElementGroupsMembersProps = {\n classFullName: \"BisCore:ElementGroupsMembers\",\n sourceId: id0,\n targetId: id1,\n memberPriority: 1,\n };\n\n txn.insertRelationship(props);\n expect(() => txn.insertRelationship(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);\n\n txn.end(\"abandon\");\n imodel.close();\n });\n\n it(\"Validate invalid relationship classes being inserted/updated\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"invalidRelationshipClass.bim\");\n\n if (IModelJsFs.existsSync(imodelPath))\n IModelJsFs.unlinkSync(imodelPath);\n\n const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"invalidRelationshipClass\" } });\n\n await testImodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestRelationSchema\" alias=\"trs\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\" />\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildA\" >\n <BaseClass>TestElement</BaseClass>\n <ECNavigationProperty propertyName=\"NavPropChildB\" relationshipName=\"ADrivesB\" direction=\"Forward\" readOnly=\"True\">\n </ECNavigationProperty>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildB\" >\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ADrivesB\" strengthDirection=\"Backward\" strength=\"referencing\" modifier=\"Sealed\">\n <Source multiplicity=\"(0..*)\" polymorphic=\"true\" roleLabel=\"drives\">\n <Class class=\"ChildA\"/>\n </Source>\n <Target multiplicity=\"(0..1)\" polymorphic=\"true\" roleLabel=\"is driven by\">\n <Class class=\"ChildB\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECEntityClass typeName=\"ChildC\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildD\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"CIsRelatedToD\" strength=\"referencing\" modifier=\"Sealed\">\n <BaseClass>bis:ElementRefersToElements</BaseClass>\n <Source multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo\" polymorphic=\"true\">\n <Class class=\"ChildC\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo (Reversed)\" polymorphic=\"true\">\n <Class class=\"ChildD\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`]);\n\n // Enable ECSQL write validation and verify it's set\n const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);\n assert.exists(pragmaRows);\n assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);\n\n // Ensure ADrivesB table is empty before test\n validateADrivesBRowCount(testImodel, 0);\n\n // Create a physical model and spatial category if needed\n const setupTxn = new EditTxn(testImodel, \"setup invalid relationship class test\");\n setupTxn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(setupTxn, Code.createEmpty(), true);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")\n ?? SpatialCategory.insert(setupTxn,\n IModel.dictionaryId,\n \"MySpatialCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() })\n );\n const idB = insertElement(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildB\", \"ChildBElement\", setupTxn);\n setupTxn.end();\n assert.isTrue(Id64.isValidId64(idB), \"Insert ChildBElement failed\");\n\n // Prepare base props for ChildA\n const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildA\");\n\n // Test various relationship class names for navigation property\n const testCases = [\n { name: \"trs:ADrivesB\", shouldSucceed: true, expectedRows: 1 },\n { name: \"trs.FakeClass\", shouldSucceed: true, expectedRows: 0 },\n { name: \"trs:ChildA\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:ChildB\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:CIsRelatedToD\", shouldSucceed: false, expectedRows: 0 },\n ];\n\n for (const { name, shouldSucceed, expectedRows } of testCases) {\n const txn = new EditTxn(testImodel, `invalid relationship class ${name}`);\n txn.start();\n try {\n const elemRef = new RelatedElement({ id: idB, relClassName: name });\n (elementProps as any).navPropChildB = elemRef;\n (elementProps as any).name = \"ChildAElement\";\n const geomElement = testImodel.elements.createElement(elementProps);\n\n let idA: Id64String | undefined;\n try {\n idA = txn.insertElement(geomElement.toJSON());\n if (shouldSucceed)\n assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);\n else\n assert.fail(`Insert should have failed for ${name}.`);\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);\n\n // If should not succeed, error is expected\n }\n\n // Validate row count in ADrivesB table\n validateADrivesBRowCount(testImodel, expectedRows);\n\n // If insert succeeded, test update and delete scenarios\n if (expectedRows === 1 && idA !== undefined) {\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editElem: any = testImodel.elements.getElement(idA);\n editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: \"trs.FakeClass\" });\n editElem.name = \"ChildAElementUpdated\";\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 1);\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editedElem: any = testImodel.elements.getElement(idA);\n assert.equal(editedElem.name, \"ChildAElementUpdated\", `Expected name to be \"ChildAElementUpdated\" after update, but got \"${editedElem.name}\"`);\n assert.strictEqual(editedElem.navPropChildB.relClassName, \"TestRelationSchema.ADrivesB\", `Expected navPropChildB to be \"TestRelationSchema.ADrivesB\" after update, but got \"${editedElem.navPropChildB}\"`);\n\n // Set the nav prop value to null\n editElem.name = \"ChildAElementNulled\";\n editElem.navPropChildB = null;\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 0);\n const nulledElem: any = testImodel.elements.getElement(idA);\n assert.equal(nulledElem.name, \"ChildAElementNulled\", `Expected name to be \"ChildAElementNulled\" after nulling, but got \"${nulledElem.name}\"`);\n assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got \"${nulledElem.navPropChildB}\"`);\n\n if (shouldSucceed) {\n txn.deleteElement(idA);\n assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);\n }\n }\n } finally {\n txn.end(\"abandon\");\n }\n }\n testImodel.close();\n });\n\n describe(\"Delete relationship instances\", () => {\n let testImodel: SnapshotDb;\n const relationshipClasses = [\n \"BisCore:ElementGroupsMembers\",\n \"BisCore:ElementDrivesElement\",\n \"BisCore:ElementRefersToDocuments\"\n ];\n\n afterEach(() => {\n if (testImodel !== undefined) {\n const iModelPath = testImodel.pathName;\n if (testImodel.isOpen)\n testImodel.close();\n IModelJsFs.unlinkSync(iModelPath);\n }\n });\n\n function setupRelationships(numOfRelationships: number, multipleClasses: boolean = false): RelationshipProps[] {\n testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"DeleteRelationshipInstances.bim\"), { rootSubject: { name: \"DeleteRelationshipInstances\" } });\n assert.isTrue(testImodel.isOpen);\n\n const txn = new EditTxn(testImodel, \"setup delete relationships\");\n txn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\");\n if (!spatialCategoryId) {\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\n }\n\n const relationships: RelationshipProps[] = [];\n for (let i = 0; i < numOfRelationships; ++i) {\n const sourceProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const sourceId = txn.insertElement(sourceProps);\n\n const targetProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const targetId = txn.insertElement(targetProps);\n\n let relationshipClass = \"BisCore:ElementGroupsMembers\";\n if (multipleClasses)\n relationshipClass = relationshipClasses[i % relationshipClasses.length];\n\n const relationshipProps: RelationshipProps = {\n classFullName: relationshipClass,\n sourceId,\n targetId,\n };\n\n relationshipProps.id = txn.insertRelationship(relationshipProps);\n relationships.push(relationshipProps);\n }\n txn.end();\n return relationships;\n }\n\n async function getRelationshipCount(iModel: IModelDb, relationshipClass: string): Promise<number> {\n const reader = iModel.createQueryReader(`SELECT COUNT(*) AS [count] FROM ${relationshipClass}`);\n await reader.step();\n return reader.current.count;\n }\n\n it(\"deleteInstances with an empty array\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([]);\n });\n\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n });\n\n it(\"deleteInstances with a single relationship instance\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"Should delete exactly one relationship\");\n\n // Delete just one relationship using deleteInstances method\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([relationships[0]]);\n });\n\n const remainingCount = await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\");\n assert.equal(remainingCount, relationships.length - 1, \"Should delete exactly one relationship\");\n });\n\n it(\"deleteInstances with different relationship classes\", async () => {\n const relationships = setupRelationships(500, true);\n\n // Verify relationships were created across different classes\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Test deleteInstances with mixed relationship classes\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationships);\n });\n\n // Verify all relationships were deleted regardless of their class\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"All ElementGroupsMembers relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\"), \"All ElementDrivesElement relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\"), \"All ElementRefersToDocuments relationships should be deleted\");\n });\n\n it(\"deleteInstances for subset including duplicate entries\", async () => {\n const relationships = setupRelationships(1000, true);\n\n // Verify relationships exist before deletion\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Select a deterministic, unique subset (every 4th relationship => 250 unique entries)\n // so the test is stable and reproducible.\n const relationshipsToDelete: RelationshipProps[] = [];\n for (let i = 0; i < relationships.length; i += 4) {\n relationshipsToDelete.push(relationships[i]);\n }\n assert.equal(relationshipsToDelete.length, 250);\n\n // Intentionally pass one relationship twice in the same call. deleteRelationships must\n // tolerate duplicate IDs in a single batch (deleting an already-deleted relationship is a no-op),\n // which exercises the batch/native boundary that the previous with-replacement sampling covered.\n const duplicated = relationshipsToDelete[0];\n relationshipsToDelete.push(duplicated);\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationshipsToDelete);\n });\n\n // Verify all relationships were deleted (dedupe so the duplicated entry is only checked once)\n const uniqueDeleted = relationshipsToDelete.filter((rel, index) => relationshipsToDelete.indexOf(rel) === index);\n for (const relClass of uniqueDeleted) {\n const reader = testImodel.createQueryReader(`SELECT ECInstanceId FROM ${relClass.classFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, new QueryBinder().bindId(1, relClass.sourceId).bindId(2, relClass.targetId));\n assert.isFalse(await reader.step(), `Relationship ${relClass.id} should be deleted`); // No row should be returned\n }\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTestFixtures.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelTestFixtures.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAe,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAoB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,OAAmB;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW;YAC5B,OAAO,GAAG,CAAC;QACb,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAAC,mBAA4C,EAAE,KAA8B;IAC5G,IAAI,KAAK,KAAK,SAAS;QACrB,MAAM,CAAC,IAAI,CAAC,4CAA4C,mBAAmB,2CAA2C,CAAC,CAAC;IAC1H,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;IAClD,MAAM,OAAO,GAAG,IAAK,OAAO,CAAC,WAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,2CAA2C;IACrH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,cAAsB,EAAE,aAAqB;IAChF,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACjF,OAAO,eAAe,CAAC,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAuB,MAAS;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACvF,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,cAAsB,EAAE,aAAqB,EAAE,IAAkC;IAC1H,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACrE,IAAI,IAAI,EAAE,aAAa;QACrB,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,WAAW,CAAC,GAAG,GAAgC;IAC7D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B;IAIxC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,OAAO;QACL,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,mBAAmB,EAAE,GAAG,EAAE;YACxB,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC","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, expect } from \"chai\";\r\nimport * as path from \"node:path\";\r\nimport { DbResult, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { EntityProps, IModelError } from \"@itwin/core-common\";\r\nimport { Entity, IModelDb, SnapshotDb } from \"../../core-backend\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\n/**\r\n * Awaits `promise` and returns the {@link IModelError} it rejected with, or `undefined` if it resolved.\r\n *\r\n * A rejection that is not an {@link IModelError} is rethrown rather than swallowed, so an unexpected\r\n * failure surfaces with its original message and stack trace instead of being misreported as\r\n * \"no error was thrown\". This means `undefined` unambiguously means the promise resolved.\r\n */\r\nexport async function getIModelError<T>(promise: Promise<T>): Promise<IModelError | undefined> {\r\n try {\r\n await promise;\r\n return undefined;\r\n } catch (err) {\r\n if (err instanceof IModelError)\r\n return err;\r\n throw err;\r\n }\r\n}\r\n\r\n/** Asserts that `error` is an {@link IModelError} carrying the expected error number. */\r\nexport function expectIModelError(expectedErrorNumber: IModelStatus | DbResult, error: IModelError | undefined): void {\r\n if (error === undefined)\r\n expect.fail(`Expected an IModelError with errorNumber ${expectedErrorNumber}, but the call resolved without throwing.`);\r\n expect(error.errorNumber).to.equal(expectedErrorNumber);\r\n}\r\n\r\n/** Roundtrip an entity through a JSON string and back to a new entity, asserting the serialization is stable. */\r\nexport function roundtripThroughJson(entity1: Entity): Entity {\r\n const string1 = JSON.stringify(entity1);\r\n const props1 = JSON.parse(string1) as EntityProps;\r\n const entity2 = new (entity1.constructor as any)(props1, entity1.iModel); // create a new entity from the EntityProps\r\n const string2 = JSON.stringify(entity2);\r\n assert.equal(string1, string2);\r\n return entity2;\r\n}\r\n\r\n/**\r\n * Create a fresh writable snapshot copied from a seed asset. This is the single creation path for\r\n * mutating tests (hybrid isolation) so state never leaks between tests. Compose with\r\n * {@link importTestBim} when the test also needs the `TestBim` schema.\r\n */\r\nexport function createIModelFromSeed(targetFileName: string, seedAssetName: string): SnapshotDb {\r\n const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);\r\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", targetFileName);\r\n return IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\r\n}\r\n\r\n/**\r\n * Import the `TestBim` schema into `imodel` and return it, so this can wrap a creation call:\r\n * `await importTestBim(createIModelFromSeed(target, seed))`.\r\n */\r\nexport async function importTestBim<T extends SnapshotDb>(imodel: T): Promise<T> {\r\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\r\n await imodel.importSchemas([schemaPathname]);\r\n return imodel;\r\n}\r\n\r\n/**\r\n * Create a fresh writable copy from a seed asset, close it, and reopen it read-only.\r\n *\r\n * This is the canonical way to build a shared, per-file read-only fixture under the hybrid\r\n * isolation policy: the read-only handle can be shared safely across tests in a file because\r\n * nothing can mutate it, while each mutating test still gets its own writable copy elsewhere.\r\n * When `importTestBim` is set, the `TestBim` schema is imported into the writable copy before\r\n * it is reopened read-only.\r\n */\r\nexport async function openReadonlySeedCopy(targetFileName: string, seedAssetName: string, opts?: { importTestBim?: boolean }): Promise<SnapshotDb> {\r\n const writable = createIModelFromSeed(targetFileName, seedAssetName);\r\n if (opts?.importTestBim)\r\n await importTestBim(writable);\r\n const pathName = writable.pathName;\r\n writable.close();\r\n return SnapshotDb.openFile(pathName);\r\n}\r\n\r\n/** Close each provided database that is still open. Guards against `undefined` and already-closed handles. */\r\nexport function closeIfOpen(...dbs: Array<IModelDb | undefined>): void {\r\n for (const db of dbs) {\r\n if (db !== undefined && db.isOpen)\r\n db.close();\r\n }\r\n}\r\n\r\n/**\r\n * Create a tracker for the writable iModels a test file opens, so they are all closed during teardown.\r\n *\r\n * This is the mechanism that enforces the hybrid isolation policy for mutating tests: each test wraps\r\n * its freshly-created writable copy in `trackMutableIModel(...)`, and the file's `afterEach`/`after`\r\n * calls `closeTrackedIModels()` to close and forget them. `closeTrackedIModels` is idempotent, so it is\r\n * safe to call from both hooks.\r\n */\r\nexport function createMutableIModelTracker(): {\r\n trackMutableIModel: <T extends IModelDb>(imodel: T) => T;\r\n closeTrackedIModels: () => void;\r\n} {\r\n const tracked: IModelDb[] = [];\r\n return {\r\n trackMutableIModel: (imodel) => {\r\n tracked.push(imodel);\r\n return imodel;\r\n },\r\n closeTrackedIModels: () => {\r\n closeIfOpen(...tracked.splice(0));\r\n },\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"IModelTestFixtures.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelTestFixtures.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, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { DbResult, IModelStatus } from \"@itwin/core-bentley\";\nimport { EntityProps, IModelError } from \"@itwin/core-common\";\nimport { Entity, IModelDb, SnapshotDb } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\n/**\n * Awaits `promise` and returns the {@link IModelError} it rejected with, or `undefined` if it resolved.\n *\n * A rejection that is not an {@link IModelError} is rethrown rather than swallowed, so an unexpected\n * failure surfaces with its original message and stack trace instead of being misreported as\n * \"no error was thrown\". This means `undefined` unambiguously means the promise resolved.\n */\nexport async function getIModelError<T>(promise: Promise<T>): Promise<IModelError | undefined> {\n try {\n await promise;\n return undefined;\n } catch (err) {\n if (err instanceof IModelError)\n return err;\n throw err;\n }\n}\n\n/** Asserts that `error` is an {@link IModelError} carrying the expected error number. */\nexport function expectIModelError(expectedErrorNumber: IModelStatus | DbResult, error: IModelError | undefined): void {\n if (error === undefined)\n expect.fail(`Expected an IModelError with errorNumber ${expectedErrorNumber}, but the call resolved without throwing.`);\n expect(error.errorNumber).to.equal(expectedErrorNumber);\n}\n\n/** Roundtrip an entity through a JSON string and back to a new entity, asserting the serialization is stable. */\nexport function roundtripThroughJson(entity1: Entity): Entity {\n const string1 = JSON.stringify(entity1);\n const props1 = JSON.parse(string1) as EntityProps;\n const entity2 = new (entity1.constructor as any)(props1, entity1.iModel); // create a new entity from the EntityProps\n const string2 = JSON.stringify(entity2);\n assert.equal(string1, string2);\n return entity2;\n}\n\n/**\n * Create a fresh writable snapshot copied from a seed asset. This is the single creation path for\n * mutating tests (hybrid isolation) so state never leaks between tests. Compose with\n * {@link importTestBim} when the test also needs the `TestBim` schema.\n */\nexport function createIModelFromSeed(targetFileName: string, seedAssetName: string): SnapshotDb {\n const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", targetFileName);\n return IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n}\n\n/**\n * Import the `TestBim` schema into `imodel` and return it, so this can wrap a creation call:\n * `await importTestBim(createIModelFromSeed(target, seed))`.\n */\nexport async function importTestBim<T extends SnapshotDb>(imodel: T): Promise<T> {\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n return imodel;\n}\n\n/**\n * Create a fresh writable copy from a seed asset, close it, and reopen it read-only.\n *\n * This is the canonical way to build a shared, per-file read-only fixture under the hybrid\n * isolation policy: the read-only handle can be shared safely across tests in a file because\n * nothing can mutate it, while each mutating test still gets its own writable copy elsewhere.\n * When `importTestBim` is set, the `TestBim` schema is imported into the writable copy before\n * it is reopened read-only.\n */\nexport async function openReadonlySeedCopy(targetFileName: string, seedAssetName: string, opts?: { importTestBim?: boolean }): Promise<SnapshotDb> {\n const writable = createIModelFromSeed(targetFileName, seedAssetName);\n if (opts?.importTestBim)\n await importTestBim(writable);\n const pathName = writable.pathName;\n writable.close();\n return SnapshotDb.openFile(pathName);\n}\n\n/** Close each provided database that is still open. Guards against `undefined` and already-closed handles. */\nexport function closeIfOpen(...dbs: Array<IModelDb | undefined>): void {\n for (const db of dbs) {\n if (db !== undefined && db.isOpen)\n db.close();\n }\n}\n\n/**\n * Create a tracker for the writable iModels a test file opens, so they are all closed during teardown.\n *\n * This is the mechanism that enforces the hybrid isolation policy for mutating tests: each test wraps\n * its freshly-created writable copy in `trackMutableIModel(...)`, and the file's `afterEach`/`after`\n * calls `closeTrackedIModels()` to close and forget them. `closeTrackedIModels` is idempotent, so it is\n * safe to call from both hooks.\n */\nexport function createMutableIModelTracker(): {\n trackMutableIModel: <T extends IModelDb>(imodel: T) => T;\n closeTrackedIModels: () => void;\n} {\n const tracked: IModelDb[] = [];\n return {\n trackMutableIModel: (imodel) => {\n tracked.push(imodel);\n return imodel;\n },\n closeTrackedIModels: () => {\n closeIfOpen(...tracked.splice(0));\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IModelViews.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelViews.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, expect } from \"chai\";\r\nimport {\r\n BisCodeSpec, ColorDef, DisplayStyleProps, DisplayStyleSettings, DisplayStyleSettingsProps, IModel, MapImageryProps,\r\n RenderMode, SpatialViewDefinitionProps, ViewDefinitionProps, ViewFlagProps, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport { DictionaryModel, DisplayStyle3d, DisplayStyleCreationOptions, IModelDb, SnapshotDb, ViewDefinition } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, openReadonlySeedCopy } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel views\", () => {\r\n let compatibilityReadonly: SnapshotDb;\r\n const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();\r\n\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n IModelTestUtils.registerTestBimSchema();\r\n\r\n compatibilityReadonly = await openReadonlySeedCopy(\"views-CompatibilityTestSeed.bim\", \"CompatibilityTestSeed.bim\");\r\n });\r\n\r\n after(() => {\r\n closeIfOpen(compatibilityReadonly);\r\n closeTrackedIModels();\r\n });\r\n\r\n afterEach(() => {\r\n closeTrackedIModels();\r\n });\r\n\r\n it(\"should insert a DisplayStyle\", () => {\r\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-insert-display-style.bim\", \"CompatibilityTestSeed.bim\"));\r\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\r\n expect(model).not.to.be.undefined;\r\n\r\n const settings: DisplayStyleSettingsProps = {\r\n backgroundColor: ColorDef.blue.toJSON(),\r\n viewflags: ViewFlags.fromJSON({\r\n renderMode: RenderMode.SolidFill,\r\n }),\r\n };\r\n\r\n const props: DisplayStyleProps = {\r\n classFullName: DisplayStyle3d.classFullName,\r\n model: IModel.dictionaryId,\r\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: \"test style\" },\r\n isPrivate: false,\r\n jsonProperties: {\r\n styles: settings,\r\n },\r\n };\r\n\r\n const txn = new EditTxn(imodel2, \"insert and update DisplayStyle\");\r\n txn.start();\r\n const styleId = txn.insertElement(props);\r\n let style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\r\n expect(style instanceof DisplayStyle3d).to.be.true;\r\n expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);\r\n\r\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);\r\n expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;\r\n\r\n const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });\r\n style.settings.viewFlags = newFlags;\r\n style.settings.backgroundColor = ColorDef.red;\r\n style.settings.monochromeColor = ColorDef.green;\r\n expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);\r\n\r\n txn.updateElement(style.toJSON());\r\n txn.end();\r\n style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\r\n expect(style instanceof DisplayStyle3d).to.be.true;\r\n\r\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);\r\n expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;\r\n expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;\r\n });\r\n\r\n it(\"should create display styles\", () => {\r\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-create-display-styles.bim\", \"CompatibilityTestSeed.bim\"));\r\n const defaultViewFlags = new ViewFlags().toJSON();\r\n const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;\r\n\r\n const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });\r\n const viewflags: ViewFlagProps = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };\r\n\r\n const mapImagery: MapImageryProps = {\r\n backgroundBase: ColorDef.red.tbgr,\r\n backgroundLayers: [{\r\n name: \"x\",\r\n url: \"y\",\r\n transparency: 0.5,\r\n formatId: \"WMS\",\r\n visible: true,\r\n }],\r\n };\r\n\r\n const props: DisplayStyleSettingsProps = {\r\n mapImagery,\r\n excludedElements: [\"0x123\", \"0xfed\"],\r\n timePoint: 42,\r\n backgroundColor: ColorDef.green.tbgr,\r\n };\r\n\r\n type TestCase = [DisplayStyleCreationOptions | undefined, ViewFlagProps, boolean];\r\n const testCases: TestCase[] = [\r\n [undefined, defaultViewFlags, false],\r\n [{ viewFlags }, viewFlags.toJSON(), false],\r\n [{ viewflags }, viewflags, false],\r\n [{ viewflags, viewFlags }, viewFlags.toJSON(), false],\r\n [props, defaultViewFlags, false],\r\n [{ ...props, viewflags }, viewflags, false],\r\n [{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],\r\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],\r\n [{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],\r\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],\r\n ];\r\n\r\n let suffix = 123;\r\n withEditTxn(imodel2, (txn) => {\r\n for (const test of testCases) {\r\n const expected = test[0] ?? {};\r\n const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);\r\n const style = imodel2.elements.getElement<DisplayStyle3d>(styleId).toJSON();\r\n expect(style.jsonProperties.styles).not.to.be.undefined;\r\n\r\n expect(style.jsonProperties).not.to.be.undefined;\r\n expect(style.jsonProperties.styles).not.to.be.undefined;\r\n const actual = style.jsonProperties.styles!;\r\n\r\n expect(actual.viewflags).not.to.be.undefined;\r\n const expectedVf = ViewFlags.fromJSON(test[1]);\r\n const actualVf = ViewFlags.fromJSON(actual.viewflags);\r\n expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());\r\n\r\n const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;\r\n expect(actual.backgroundColor).to.equal(expectedBGColor);\r\n\r\n // DisplayStyleSettings constructor always initializes json.mapImagery.\r\n expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);\r\n expect(actual.excludedElements).to.deep.equal(expected.excludedElements);\r\n expect(actual.timePoint).to.deep.equal(expected.timePoint);\r\n }\r\n });\r\n });\r\n\r\n it(\"should be able to query for ViewDefinitionProps\", () => {\r\n const imodel2 = compatibilityReadonly;\r\n const viewDefinitionProps: ViewDefinitionProps[] = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions\r\n assert.isAtLeast(viewDefinitionProps.length, 3);\r\n assert.isTrue(viewDefinitionProps[0].classFullName.includes(\"ViewDefinition\"));\r\n assert.isFalse(viewDefinitionProps[1].isPrivate);\r\n\r\n const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps(\"BisCore.SpatialViewDefinition\") as SpatialViewDefinitionProps[]; // limit query to SpatialViewDefinitions\r\n assert.isAtLeast(spatialViewDefinitionProps.length, 3);\r\n assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);\r\n });\r\n\r\n it(\"should iterate ViewDefinitions\", () => {\r\n const imodel2 = compatibilityReadonly;\r\n // imodel2 contains 3 SpatialViewDefinitions and no other views.\r\n let numViews = 0;\r\n let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\r\n ++numViews;\r\n return true;\r\n });\r\n\r\n expect(result).to.be.true;\r\n expect(numViews).to.equal(3);\r\n\r\n // Query specifically for spatial views\r\n numViews = 0;\r\n result = imodel2.views.iterateViews({ from: \"BisCore.SpatialViewDefinition\" }, (view: ViewDefinition) => {\r\n if (view.isSpatialView())\r\n ++numViews;\r\n\r\n return view.isSpatialView();\r\n });\r\n expect(result).to.be.true;\r\n expect(numViews).to.equal(3);\r\n\r\n // Query specifically for 2d views\r\n numViews = 0;\r\n result = imodel2.views.iterateViews({ from: \"BisCore.ViewDefinition2d\" }, (_view: ViewDefinition) => {\r\n ++numViews;\r\n return true;\r\n });\r\n\r\n expect(result).to.be.true;\r\n expect(numViews).to.equal(0);\r\n\r\n // Terminate iteration on first view\r\n numViews = 0;\r\n result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\r\n ++numViews;\r\n return false;\r\n });\r\n\r\n expect(result).to.be.false;\r\n expect(numViews).to.equal(1);\r\n });\r\n\r\n it(\"read view thumbnail\", () => {\r\n const imodel5 = trackMutableIModel(createIModelFromSeed(\"views-mirukuru-thumbnail.bim\", \"mirukuru.ibim\"));\r\n const viewId = \"0x24\";\r\n const thumbnail = imodel5.views.getThumbnail(viewId);\r\n assert.exists(thumbnail);\r\n if (!thumbnail)\r\n return;\r\n assert.equal(thumbnail.format, \"jpeg\");\r\n assert.equal(thumbnail.height, 768);\r\n assert.equal(thumbnail.width, 768);\r\n assert.equal(thumbnail.image.length, 18062);\r\n\r\n thumbnail.width = 100;\r\n thumbnail.height = 200;\r\n thumbnail.format = \"png\";\r\n thumbnail.image = new Uint8Array(200);\r\n thumbnail.image.fill(12);\r\n const stat = imodel5.views.saveThumbnail(viewId, thumbnail);\r\n assert.equal(stat, 0, \"save thumbnail\");\r\n\r\n const thumbnail2 = imodel5.views.getThumbnail(viewId);\r\n assert.exists(thumbnail2);\r\n if (!thumbnail2)\r\n return;\r\n assert.equal(thumbnail2.format, \"png\");\r\n assert.equal(thumbnail2.height, 200);\r\n assert.equal(thumbnail2.width, 100);\r\n assert.equal(thumbnail2.image.length, 200);\r\n assert.equal(thumbnail2.image[0], 12);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"IModelViews.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelViews.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, expect } from \"chai\";\nimport {\n BisCodeSpec, ColorDef, DisplayStyleProps, DisplayStyleSettings, DisplayStyleSettingsProps, IModel, MapImageryProps,\n RenderMode, SpatialViewDefinitionProps, ViewDefinitionProps, ViewFlagProps, ViewFlags,\n} from \"@itwin/core-common\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { DictionaryModel, DisplayStyle3d, DisplayStyleCreationOptions, IModelDb, SnapshotDb, ViewDefinition } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, openReadonlySeedCopy } from \"./IModelTestFixtures\";\n\n\ndescribe(\"iModel views\", () => {\n let compatibilityReadonly: SnapshotDb;\n const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();\n\n before(async () => {\n await TestUtils.startBackend();\n IModelTestUtils.registerTestBimSchema();\n\n compatibilityReadonly = await openReadonlySeedCopy(\"views-CompatibilityTestSeed.bim\", \"CompatibilityTestSeed.bim\");\n });\n\n after(() => {\n closeIfOpen(compatibilityReadonly);\n closeTrackedIModels();\n });\n\n afterEach(() => {\n closeTrackedIModels();\n });\n\n it(\"should insert a DisplayStyle\", () => {\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-insert-display-style.bim\", \"CompatibilityTestSeed.bim\"));\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const settings: DisplayStyleSettingsProps = {\n backgroundColor: ColorDef.blue.toJSON(),\n viewflags: ViewFlags.fromJSON({\n renderMode: RenderMode.SolidFill,\n }),\n };\n\n const props: DisplayStyleProps = {\n classFullName: DisplayStyle3d.classFullName,\n model: IModel.dictionaryId,\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: \"test style\" },\n isPrivate: false,\n jsonProperties: {\n styles: settings,\n },\n };\n\n const txn = new EditTxn(imodel2, \"insert and update DisplayStyle\");\n txn.start();\n const styleId = txn.insertElement(props);\n let style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);\n expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;\n\n const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });\n style.settings.viewFlags = newFlags;\n style.settings.backgroundColor = ColorDef.red;\n style.settings.monochromeColor = ColorDef.green;\n expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);\n\n txn.updateElement(style.toJSON());\n txn.end();\n style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);\n expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;\n expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;\n });\n\n it(\"should create display styles\", () => {\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-create-display-styles.bim\", \"CompatibilityTestSeed.bim\"));\n const defaultViewFlags = new ViewFlags().toJSON();\n const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;\n\n const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });\n const viewflags: ViewFlagProps = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };\n\n const mapImagery: MapImageryProps = {\n backgroundBase: ColorDef.red.tbgr,\n backgroundLayers: [{\n name: \"x\",\n url: \"y\",\n transparency: 0.5,\n formatId: \"WMS\",\n visible: true,\n }],\n };\n\n const props: DisplayStyleSettingsProps = {\n mapImagery,\n excludedElements: [\"0x123\", \"0xfed\"],\n timePoint: 42,\n backgroundColor: ColorDef.green.tbgr,\n };\n\n type TestCase = [DisplayStyleCreationOptions | undefined, ViewFlagProps, boolean];\n const testCases: TestCase[] = [\n [undefined, defaultViewFlags, false],\n [{ viewFlags }, viewFlags.toJSON(), false],\n [{ viewflags }, viewflags, false],\n [{ viewflags, viewFlags }, viewFlags.toJSON(), false],\n [props, defaultViewFlags, false],\n [{ ...props, viewflags }, viewflags, false],\n [{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],\n ];\n\n let suffix = 123;\n withEditTxn(imodel2, (txn) => {\n for (const test of testCases) {\n const expected = test[0] ?? {};\n const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);\n const style = imodel2.elements.getElement<DisplayStyle3d>(styleId).toJSON();\n expect(style.jsonProperties.styles).not.to.be.undefined;\n\n expect(style.jsonProperties).not.to.be.undefined;\n expect(style.jsonProperties.styles).not.to.be.undefined;\n const actual = style.jsonProperties.styles!;\n\n expect(actual.viewflags).not.to.be.undefined;\n const expectedVf = ViewFlags.fromJSON(test[1]);\n const actualVf = ViewFlags.fromJSON(actual.viewflags);\n expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());\n\n const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;\n expect(actual.backgroundColor).to.equal(expectedBGColor);\n\n // DisplayStyleSettings constructor always initializes json.mapImagery.\n expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);\n expect(actual.excludedElements).to.deep.equal(expected.excludedElements);\n expect(actual.timePoint).to.deep.equal(expected.timePoint);\n }\n });\n });\n\n it(\"should be able to query for ViewDefinitionProps\", () => {\n const imodel2 = compatibilityReadonly;\n const viewDefinitionProps: ViewDefinitionProps[] = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions\n assert.isAtLeast(viewDefinitionProps.length, 3);\n assert.isTrue(viewDefinitionProps[0].classFullName.includes(\"ViewDefinition\"));\n assert.isFalse(viewDefinitionProps[1].isPrivate);\n\n const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps(\"BisCore.SpatialViewDefinition\") as SpatialViewDefinitionProps[]; // limit query to SpatialViewDefinitions\n assert.isAtLeast(spatialViewDefinitionProps.length, 3);\n assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);\n });\n\n it(\"should iterate ViewDefinitions\", () => {\n const imodel2 = compatibilityReadonly;\n // imodel2 contains 3 SpatialViewDefinitions and no other views.\n let numViews = 0;\n let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for spatial views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.SpatialViewDefinition\" }, (view: ViewDefinition) => {\n if (view.isSpatialView())\n ++numViews;\n\n return view.isSpatialView();\n });\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for 2d views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.ViewDefinition2d\" }, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(0);\n\n // Terminate iteration on first view\n numViews = 0;\n result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return false;\n });\n\n expect(result).to.be.false;\n expect(numViews).to.equal(1);\n });\n\n it(\"read view thumbnail\", () => {\n const imodel5 = trackMutableIModel(createIModelFromSeed(\"views-mirukuru-thumbnail.bim\", \"mirukuru.ibim\"));\n const viewId = \"0x24\";\n const thumbnail = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail);\n if (!thumbnail)\n return;\n assert.equal(thumbnail.format, \"jpeg\");\n assert.equal(thumbnail.height, 768);\n assert.equal(thumbnail.width, 768);\n assert.equal(thumbnail.image.length, 18062);\n\n thumbnail.width = 100;\n thumbnail.height = 200;\n thumbnail.format = \"png\";\n thumbnail.image = new Uint8Array(200);\n thumbnail.image.fill(12);\n const stat = imodel5.views.saveThumbnail(viewId, thumbnail);\n assert.equal(stat, 0, \"save thumbnail\");\n\n const thumbnail2 = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail2);\n if (!thumbnail2)\n return;\n assert.equal(thumbnail2.format, \"png\");\n assert.equal(thumbnail2.height, 200);\n assert.equal(thumbnail2.width, 100);\n assert.equal(thumbnail2.image.length, 200);\n assert.equal(thumbnail2.image[0], 12);\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectExtents.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ProjectExtents.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 { expect } from \"chai\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { GeometricElement3dProps, Placement3d } from \"@itwin/core-common\";\r\nimport { GeometricElement3d, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../index\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\n\r\ndescribe(\"computeProjectExtents\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\"), IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"should return requested information\", () => {\r\n const projectExtents = imodel.projectExtents;\r\n const args = [undefined, false, true];\r\n for (const reportExtentsWithOutliers of args) {\r\n for (const reportOutliers of args) {\r\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers, reportOutliers });\r\n expect(result.extents.isAlmostEqual(projectExtents)).to.be.true;\r\n\r\n expect(undefined !== result.extentsWithOutliers).to.equal(true === reportExtentsWithOutliers);\r\n if (undefined !== result.extentsWithOutliers)\r\n expect(result.extentsWithOutliers.isAlmostEqual(projectExtents)).to.be.true;\r\n\r\n expect(undefined !== result.outliers).to.equal(true === reportOutliers);\r\n if (undefined !== result.outliers)\r\n expect(result.outliers.length).to.equal(0);\r\n }\r\n }\r\n });\r\n\r\n it(\"should report outliers\", () => {\r\n const elemProps = imodel.elements.getElementProps<GeometricElement3dProps>({ id: \"0x39\", wantGeometry: true });\r\n elemProps.id = Id64.invalid;\r\n const placement = Placement3d.fromJSON(elemProps.placement);\r\n const originalOrigin = placement.origin.clone();\r\n const mult = 1000000;\r\n placement.origin.x *= mult;\r\n placement.origin.y *= mult;\r\n placement.origin.z *= mult;\r\n elemProps.placement = placement;\r\n elemProps.geom![2].sphere!.radius = 0.000001;\r\n const newId = withEditTxn(imodel, (txn) => txn.insertElement(elemProps));\r\n expect(Id64.isValid(newId)).to.be.true;\r\n\r\n const newElem = imodel.elements.getElement<GeometricElement3d>(newId);\r\n expect(newElem).instanceof(GeometricElement3d);\r\n expect(newElem.placement.origin.x).to.equal(originalOrigin.x * mult);\r\n expect(newElem.placement.origin.y).to.equal(originalOrigin.y * mult);\r\n expect(newElem.placement.origin.z).to.equal(originalOrigin.z * mult);\r\n\r\n const outlierRange = placement.calculateRange();\r\n const originalExtents = imodel.projectExtents;\r\n const extentsWithOutlier = originalExtents.clone();\r\n extentsWithOutlier.extendRange(outlierRange);\r\n\r\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers: true, reportOutliers: true });\r\n expect(result.outliers!.length).to.equal(1);\r\n expect(result.outliers![0]).to.equal(newId);\r\n expect(result.extents.isAlmostEqual(originalExtents)).to.be.true;\r\n expect(result.extentsWithOutliers!.isAlmostEqual(originalExtents)).to.be.false;\r\n expect(result.extentsWithOutliers!.low.isAlmostEqual(extentsWithOutlier.low)).to.be.true;\r\n expect(result.extentsWithOutliers!.high.isAlmostEqual(extentsWithOutlier.high, 20)).to.be.true;\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ProjectExtents.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ProjectExtents.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 { expect } from \"chai\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { GeometricElement3dProps, Placement3d } from \"@itwin/core-common\";\nimport { GeometricElement3d, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../index\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"computeProjectExtents\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\"), IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should return requested information\", () => {\n const projectExtents = imodel.projectExtents;\n const args = [undefined, false, true];\n for (const reportExtentsWithOutliers of args) {\n for (const reportOutliers of args) {\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers, reportOutliers });\n expect(result.extents.isAlmostEqual(projectExtents)).to.be.true;\n\n expect(undefined !== result.extentsWithOutliers).to.equal(true === reportExtentsWithOutliers);\n if (undefined !== result.extentsWithOutliers)\n expect(result.extentsWithOutliers.isAlmostEqual(projectExtents)).to.be.true;\n\n expect(undefined !== result.outliers).to.equal(true === reportOutliers);\n if (undefined !== result.outliers)\n expect(result.outliers.length).to.equal(0);\n }\n }\n });\n\n it(\"should report outliers\", () => {\n const elemProps = imodel.elements.getElementProps<GeometricElement3dProps>({ id: \"0x39\", wantGeometry: true });\n elemProps.id = Id64.invalid;\n const placement = Placement3d.fromJSON(elemProps.placement);\n const originalOrigin = placement.origin.clone();\n const mult = 1000000;\n placement.origin.x *= mult;\n placement.origin.y *= mult;\n placement.origin.z *= mult;\n elemProps.placement = placement;\n elemProps.geom![2].sphere!.radius = 0.000001;\n const newId = withEditTxn(imodel, (txn) => txn.insertElement(elemProps));\n expect(Id64.isValid(newId)).to.be.true;\n\n const newElem = imodel.elements.getElement<GeometricElement3d>(newId);\n expect(newElem).instanceof(GeometricElement3d);\n expect(newElem.placement.origin.x).to.equal(originalOrigin.x * mult);\n expect(newElem.placement.origin.y).to.equal(originalOrigin.y * mult);\n expect(newElem.placement.origin.z).to.equal(originalOrigin.z * mult);\n\n const outlierRange = placement.calculateRange();\n const originalExtents = imodel.projectExtents;\n const extentsWithOutlier = originalExtents.clone();\n extentsWithOutlier.extendRange(outlierRange);\n\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers: true, reportOutliers: true });\n expect(result.outliers!.length).to.equal(1);\n expect(result.outliers![0]).to.equal(newId);\n expect(result.extents.isAlmostEqual(originalExtents)).to.be.true;\n expect(result.extentsWithOutliers!.isAlmostEqual(originalExtents)).to.be.false;\n expect(result.extentsWithOutliers!.low.isAlmostEqual(extentsWithOutlier.low)).to.be.true;\n expect(result.extentsWithOutliers!.high.isAlmostEqual(extentsWithOutlier.high, 20)).to.be.true;\n });\n});\n"]}
@@ -81,19 +81,19 @@ describe("Schema XML Import Tests", () => {
81
81
  const testFileName = IModelTestUtils.prepareOutputFile("SchemaXMLImport", "RatioFormatRoundtrip.bim");
82
82
  const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: "RatioFormatTest" } });
83
83
  try {
84
- const schemaXml = `<?xml version="1.0" encoding="UTF-8"?>
85
- <ECSchema schemaName="RatioFormatTest" alias="rft" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
86
- <ECSchemaReference name="Units" version="01.00.09" alias="u"/>
87
- <Format typeName="TestRatioFormat" type="Ratio" ratioType="OneToN" ratioSeparator=":" ratioFormatType="Decimal" precision="4" formatTraits="trailZeroes|showUnitLabel">
88
- <Composite>
89
- <Unit>u:M</Unit>
90
- </Composite>
91
- </Format>
92
- <Format typeName="TestRatioFormat2" type="Ratio" ratioType="NToOne" ratioSeparator="=" ratioFormatType="Fractional" precision="8" formatTraits="keepSingleZero">
93
- <Composite>
94
- <Unit>u:M</Unit>
95
- </Composite>
96
- </Format>
84
+ const schemaXml = `<?xml version="1.0" encoding="UTF-8"?>
85
+ <ECSchema schemaName="RatioFormatTest" alias="rft" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
86
+ <ECSchemaReference name="Units" version="01.00.09" alias="u"/>
87
+ <Format typeName="TestRatioFormat" type="Ratio" ratioType="OneToN" ratioSeparator=":" ratioFormatType="Decimal" precision="4" formatTraits="trailZeroes|showUnitLabel">
88
+ <Composite>
89
+ <Unit>u:M</Unit>
90
+ </Composite>
91
+ </Format>
92
+ <Format typeName="TestRatioFormat2" type="Ratio" ratioType="NToOne" ratioSeparator="=" ratioFormatType="Fractional" precision="8" formatTraits="keepSingleZero">
93
+ <Composite>
94
+ <Unit>u:M</Unit>
95
+ </Composite>
96
+ </Format>
97
97
  </ECSchema>`;
98
98
  // Import schema into iModel
99
99
  await testIModel.importSchemaStrings([schemaXml]);
@@ -115,14 +115,14 @@ describe("Schema XML Import Tests", () => {
115
115
  });
116
116
  });
117
117
  describe("exportSchemaXmlString", () => {
118
- const schemaXml32 = `<?xml version="1.0" encoding="UTF-8"?>
119
- <ECSchema schemaName="TestSchema" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
120
- <ECSchemaReference name="BisCore" version="1.0.23" alias="bis"/>
121
-
122
- <ECEntityClass typeName="TestClass">
123
- <BaseClass>bis:GraphicalElement2d</BaseClass>
124
- <ECProperty propertyName="Name" typeName="string"/>
125
- </ECEntityClass>
118
+ const schemaXml32 = `<?xml version="1.0" encoding="UTF-8"?>
119
+ <ECSchema schemaName="TestSchema" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
120
+ <ECSchemaReference name="BisCore" version="1.0.23" alias="bis"/>
121
+
122
+ <ECEntityClass typeName="TestClass">
123
+ <BaseClass>bis:GraphicalElement2d</BaseClass>
124
+ <ECProperty propertyName="Name" typeName="string"/>
125
+ </ECEntityClass>
126
126
  </ECSchema>`;
127
127
  let imodel;
128
128
  before(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAiB,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,CAAC,GAAG,EAAE;QACV,qBAAqB;QACrB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAEtG,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAE7D,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,0CAA0C;YAE5F,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;YACpG,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAElC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YAE7C,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtG,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;QACnG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAEpG,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,KAAK,EAAE,QAAoB,EAAE,SAAmB,EAAE,YAAqB,EAAE,EAAE;gBAChG,IAAI,CAAC;oBACH,iEAAiE;oBACjE,IAAI,YAAY;wBACd,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;;wBAE9C,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,oDAAoD;YACpD,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,oHAAoH,QAAQ,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,QAAQ,oCAAoC,CAAC,CAAC;gBAC3O,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,QAAQ,kCAAkC,CAAC,CAAC;YACvH,CAAC;YAED,sEAAsE;YACtE,CAAC;gBACC,MAAM,UAAU,GAAG,CAAC,2HAA2H;oBAC7I,2HAA2H;oBAC3H,2HAA2H,CAAC,CAAC;gBAE/H,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,0CAA0C,CAAC,CAAC;gBACtG,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;gBACxH,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;gBACxH,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;YAC1H,CAAC;YAED,yCAAyC;YACzC,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,oHAAoH,QAAQ,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,QAAQ,gCAAgC,CAAC,CAAC;gBACpO,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,UAAU,QAAQ,8BAA8B,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC7D,yCAAyC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;QACtG,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAEtG,IAAI,CAAC;YACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;kBAaN,CAAC;YAEb,4BAA4B;YAC5B,MAAM,UAAU,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAElD,wDAAwD;YACxD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YACxG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;YAExD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;YACzG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;;;;;;;;gBAQN,CAAC;IAEf,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,CAAC;QACzG,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,uDAAuD,CAAC,CAAC;QAClG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,yCAAyC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAI,EAAE,oBAAoB,EAAE,6DAA6D,CAAC,CAAC;QACxG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,kEAAkE,CAAC,CAAC;QACrG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,wDAAwD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACtE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACtE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { ECSpecVersion, EntityClass, Format } from \"@itwin/ecschema-metadata\";\r\n\r\ndescribe(\"Schema XML Import Tests\", () => {\r\n before(() => {\r\n // initialize logging\r\n if (false) {\r\n Logger.initializeToConsole();\r\n Logger.setLevelDefault(LogLevel.Error);\r\n }\r\n });\r\n\r\n it(\"should import schema XML\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\r\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\r\n\r\n try {\r\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\r\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\r\n\r\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\r\n\r\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\r\n assert.isDefined(testDomainClass);\r\n\r\n assert.isDefined(testDomainClass?.baseClass);\r\n\r\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\r\n } finally {\r\n imodel.close();\r\n }\r\n });\r\n\r\n it(\"Schema import for newer ECXml Versions\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\r\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\r\n\r\n try {\r\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\r\n try {\r\n // ECObjects is expected to throw for schemas that fail to import\r\n if (importSchema)\r\n await imodelDb.importSchemaStrings(xmlSchema);\r\n else\r\n imodelDb.getSchemaProps(xmlSchema[0]);\r\n } catch {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n // Incrementing major ECXml version is not supported\r\n for (const testCase of [`4.1`, `5.10`]) {\r\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\r\n }\r\n\r\n // Importing a set of schemas should all fail if any one of them fails\r\n {\r\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\r\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\r\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\r\n\r\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\r\n }\r\n\r\n // Schema should be imported successfully\r\n for (const testCase of [`3.2`, `3.5`]) {\r\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\r\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\r\n }\r\n } finally {\r\n imodel.close();\r\n }\r\n });\r\n\r\n it.skip(\"should roundtrip ratio format properties\", async () => {\r\n // Create a separate iModel for this test\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\r\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\r\n\r\n try {\r\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\r\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\r\n <Composite>\r\n <Unit>u:M</Unit>\r\n </Composite>\r\n </Format>\r\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\r\n <Composite>\r\n <Unit>u:M</Unit>\r\n </Composite>\r\n </Format>\r\n </ECSchema>`;\r\n\r\n // Import schema into iModel\r\n await testIModel.importSchemaStrings([schemaXml]);\r\n\r\n // Read back the format from the iModel's schema context\r\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\r\n assert.isDefined(format1);\r\n assert.strictEqual(format1?.ratioType, \"OneToN\");\r\n assert.strictEqual(format1?.ratioSeparator, \":\");\r\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\r\n\r\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\r\n assert.isDefined(format2);\r\n assert.strictEqual(format2?.ratioType, \"NToOne\");\r\n assert.strictEqual(format2?.ratioSeparator, \"=\");\r\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\r\n } finally {\r\n testIModel.close();\r\n }\r\n });\r\n});\r\n\r\ndescribe(\"exportSchemaXmlString\", () => {\r\n const schemaXml32 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.23\" alias=\"bis\"/>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n let imodel: SnapshotDb;\r\n\r\n before(async () => {\r\n const filePath = IModelTestUtils.prepareOutputFile(\"exportSchemaXmlString\", \"exportSchemaXmlString.bim\");\r\n imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"exportSchemaXmlStringTest\" } });\r\n await imodel.importSchemaStrings([schemaXml32]);\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"default ECSpecVersion arg return an 3.2 XML\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\r\n assert.isDefined(xml, \"expected a non-undefined result for an existing schema\");\r\n assert.include(xml, \"Bentley.ECXML.3.2\", \"expected EC 3.2 namespace when no version is supplied\");\r\n assert.include(xml, \"TestSchema\", \"schema name should be present in output\");\r\n });\r\n\r\n it(\"returns undefined for a schema that does not exist\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"NonExistentSchema\");\r\n assert.isUndefined(xml, \"expected undefined for an unknown schema name\");\r\n });\r\n\r\n it(\"test returned XML contains the entity class\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\r\n assert.isDefined(xml);\r\n assert.match(xml!, /^<\\?xml|^<ECSchema/, \"output should start with an XML declaration or root element\");\r\n assert.include(xml, \"TestClass\", \"ECEntityClass 'TestClass' should be present in serialised output\");\r\n assert.include(xml, \"Name\", \"property 'Name' should be present in serialised output\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.2 version returns 3.2 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 2 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.2\");\r\n assert.include(xml, \"TestSchema\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.1 version returns 3.1 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 1 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.1\", \"expected EC 3.1 namespace\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.1\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.0 version returns 3.0 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 0 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.0\", \"expected EC 3.0 namespace\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.0\");\r\n });\r\n\r\n it(\"ECSpecVersion 2.0 version returns 2.0 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 2, writeVersion: 0 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml, \"expected a result for EC 2.0 export\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.\", \"EC 2.0 output should not contain an EC 3.x namespace URI\");\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAiB,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,CAAC,GAAG,EAAE;QACV,qBAAqB;QACrB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAEtG,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAE7D,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,0CAA0C;YAE5F,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;YACpG,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAElC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YAE7C,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtG,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;QACnG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAEpG,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,KAAK,EAAE,QAAoB,EAAE,SAAmB,EAAE,YAAqB,EAAE,EAAE;gBAChG,IAAI,CAAC;oBACH,iEAAiE;oBACjE,IAAI,YAAY;wBACd,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;;wBAE9C,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,oDAAoD;YACpD,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,oHAAoH,QAAQ,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,QAAQ,oCAAoC,CAAC,CAAC;gBAC3O,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,QAAQ,kCAAkC,CAAC,CAAC;YACvH,CAAC;YAED,sEAAsE;YACtE,CAAC;gBACC,MAAM,UAAU,GAAG,CAAC,2HAA2H;oBAC7I,2HAA2H;oBAC3H,2HAA2H,CAAC,CAAC;gBAE/H,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,0CAA0C,CAAC,CAAC;gBACtG,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;gBACxH,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;gBACxH,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,sDAAsD,CAAC,CAAC;YAC1H,CAAC;YAED,yCAAyC;YACzC,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,oHAAoH,QAAQ,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,QAAQ,gCAAgC,CAAC,CAAC;gBACpO,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,UAAU,QAAQ,8BAA8B,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC7D,yCAAyC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;QACtG,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAEtG,IAAI,CAAC;YACH,MAAM,SAAS,GAAG;;;;;;;;;;;;;kBAaN,CAAC;YAEb,4BAA4B;YAC5B,MAAM,UAAU,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAElD,wDAAwD;YACxD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YACxG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;YAExD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;YACzG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;;;;;;;;gBAQN,CAAC;IAEf,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,CAAC;QACzG,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,uDAAuD,CAAC,CAAC;QAClG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,yCAAyC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAI,EAAE,oBAAoB,EAAE,6DAA6D,CAAC,CAAC;QACxG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,kEAAkE,CAAC,CAAC;QACrG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,wDAAwD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACtE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACtE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAkB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECSpecVersion, EntityClass, Format } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Schema XML Import Tests\", () => {\n before(() => {\n // initialize logging\n if (false) {\n Logger.initializeToConsole();\n Logger.setLevelDefault(LogLevel.Error);\n }\n });\n\n it(\"should import schema XML\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\n\n try {\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\n\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\n } finally {\n imodel.close();\n }\n });\n\n it(\"Schema import for newer ECXml Versions\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\n\n try {\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\n try {\n // ECObjects is expected to throw for schemas that fail to import\n if (importSchema)\n await imodelDb.importSchemaStrings(xmlSchema);\n else\n imodelDb.getSchemaProps(xmlSchema[0]);\n } catch {\n return false;\n }\n return true;\n };\n\n // Incrementing major ECXml version is not supported\n for (const testCase of [`4.1`, `5.10`]) {\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\n }\n\n // Importing a set of schemas should all fail if any one of them fails\n {\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\n\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\n }\n\n // Schema should be imported successfully\n for (const testCase of [`3.2`, `3.5`]) {\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\n }\n } finally {\n imodel.close();\n }\n });\n\n it.skip(\"should roundtrip ratio format properties\", async () => {\n // Create a separate iModel for this test\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\n\n try {\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n </ECSchema>`;\n\n // Import schema into iModel\n await testIModel.importSchemaStrings([schemaXml]);\n\n // Read back the format from the iModel's schema context\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\n assert.isDefined(format1);\n assert.strictEqual(format1?.ratioType, \"OneToN\");\n assert.strictEqual(format1?.ratioSeparator, \":\");\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\n\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\n assert.isDefined(format2);\n assert.strictEqual(format2?.ratioType, \"NToOne\");\n assert.strictEqual(format2?.ratioSeparator, \"=\");\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\n } finally {\n testIModel.close();\n }\n });\n});\n\ndescribe(\"exportSchemaXmlString\", () => {\n const schemaXml32 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.23\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n let imodel: SnapshotDb;\n\n before(async () => {\n const filePath = IModelTestUtils.prepareOutputFile(\"exportSchemaXmlString\", \"exportSchemaXmlString.bim\");\n imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"exportSchemaXmlStringTest\" } });\n await imodel.importSchemaStrings([schemaXml32]);\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"default ECSpecVersion arg return an 3.2 XML\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml, \"expected a non-undefined result for an existing schema\");\n assert.include(xml, \"Bentley.ECXML.3.2\", \"expected EC 3.2 namespace when no version is supplied\");\n assert.include(xml, \"TestSchema\", \"schema name should be present in output\");\n });\n\n it(\"returns undefined for a schema that does not exist\", () => {\n const xml = imodel.exportSchemaXmlString(\"NonExistentSchema\");\n assert.isUndefined(xml, \"expected undefined for an unknown schema name\");\n });\n\n it(\"test returned XML contains the entity class\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml);\n assert.match(xml!, /^<\\?xml|^<ECSchema/, \"output should start with an XML declaration or root element\");\n assert.include(xml, \"TestClass\", \"ECEntityClass 'TestClass' should be present in serialised output\");\n assert.include(xml, \"Name\", \"property 'Name' should be present in serialised output\");\n });\n\n it(\"ECSpecVersion 3.2 version returns 3.2 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 2 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.2\");\n assert.include(xml, \"TestSchema\");\n });\n\n it(\"ECSpecVersion 3.1 version returns 3.1 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 1 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.1\", \"expected EC 3.1 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.1\");\n });\n\n it(\"ECSpecVersion 3.0 version returns 3.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.0\", \"expected EC 3.0 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.0\");\n });\n\n it(\"ECSpecVersion 2.0 version returns 2.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 2, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml, \"expected a result for EC 2.0 export\");\n assert.notInclude(xml, \"Bentley.ECXML.3.\", \"EC 2.0 output should not contain an EC 3.x namespace URI\");\n });\n});\n"]}