@itwin/core-backend 5.0.0-dev.99 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -1
- package/lib/cjs/BackendHubAccess.d.ts +1 -1
- package/lib/cjs/BackendHubAccess.js +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BriefcaseManager.d.ts +10 -2
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +12 -0
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.d.ts +103 -0
- package/lib/cjs/CatalogDb.d.ts.map +1 -0
- package/lib/cjs/CatalogDb.js +271 -0
- package/lib/cjs/CatalogDb.js.map +1 -0
- package/lib/cjs/Category.d.ts +41 -4
- package/lib/cjs/Category.d.ts.map +1 -1
- package/lib/cjs/Category.js +77 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/CheckpointManager.d.ts +12 -10
- package/lib/cjs/CheckpointManager.d.ts.map +1 -1
- package/lib/cjs/CheckpointManager.js +17 -41
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +1 -1
- package/lib/cjs/ClassRegistry.js +1 -1
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +104 -20
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +157 -46
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +1 -1
- package/lib/cjs/CodeSpecs.js +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +9 -4
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +30 -3
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +4 -4
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +4 -4
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.d.ts +1 -1
- package/lib/cjs/ECSchemaXmlContext.js +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +6 -6
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +4 -4
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +217 -61
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +561 -60
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +8 -8
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +8 -8
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/Entity.d.ts +52 -8
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +63 -5
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/ExportGraphics.d.ts +54 -8
- package/lib/cjs/ExportGraphics.d.ts.map +1 -1
- package/lib/cjs/ExportGraphics.js +158 -59
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +42 -54
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +164 -93
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +16 -3
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +9 -3
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/Material.d.ts +20 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +30 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +64 -28
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +115 -27
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeHost.d.ts.map +1 -1
- package/lib/cjs/NativeHost.js +4 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/SQLiteDb.d.ts +1 -1
- package/lib/cjs/SQLiteDb.d.ts.map +1 -1
- package/lib/cjs/SQLiteDb.js +6 -5
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/SqliteStatement.d.ts +1 -1
- package/lib/cjs/SqliteStatement.d.ts.map +1 -1
- package/lib/cjs/SqliteStatement.js +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/TextAnnotationElement.d.ts +2 -2
- package/lib/cjs/TextAnnotationElement.js +2 -2
- package/lib/cjs/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +4 -4
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +2 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +114 -14
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +222 -14
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js +3 -3
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.d.ts.map +1 -1
- package/lib/cjs/ViewStore.js +27 -27
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -1
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +21 -1
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +4 -4
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.d.ts +28 -0
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -0
- package/lib/cjs/internal/ElementLRUCache.js +120 -0
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -0
- package/lib/cjs/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
- package/lib/cjs/internal/HubMock.d.ts.map +1 -0
- package/lib/cjs/{HubMock.js → internal/HubMock.js} +22 -11
- package/lib/cjs/internal/HubMock.js.map +1 -0
- package/lib/cjs/internal/Symbols.d.ts +2 -2
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +3 -3
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +2 -16
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +35 -104
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +3 -3
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +6 -13
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +2 -7
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +1 -1
- package/lib/esm/BackendHubAccess.js +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +10 -2
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +12 -0
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.d.ts +103 -0
- package/lib/esm/CatalogDb.d.ts.map +1 -0
- package/lib/esm/CatalogDb.js +267 -0
- package/lib/esm/CatalogDb.js.map +1 -0
- package/lib/esm/Category.d.ts +41 -4
- package/lib/esm/Category.d.ts.map +1 -1
- package/lib/esm/Category.js +77 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/CheckpointManager.d.ts +12 -10
- package/lib/esm/CheckpointManager.d.ts.map +1 -1
- package/lib/esm/CheckpointManager.js +18 -42
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +1 -1
- package/lib/esm/ClassRegistry.js +1 -1
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +104 -20
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +157 -46
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +1 -1
- package/lib/esm/CodeSpecs.js +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +9 -4
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +30 -3
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +4 -4
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +4 -4
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.d.ts +1 -1
- package/lib/esm/ECSchemaXmlContext.js +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts +6 -6
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +4 -4
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.d.ts +217 -61
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +564 -63
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +8 -8
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +8 -8
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/Entity.d.ts +52 -8
- package/lib/esm/Entity.d.ts.map +1 -1
- package/lib/esm/Entity.js +63 -5
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/ExportGraphics.d.ts +54 -8
- package/lib/esm/ExportGraphics.d.ts.map +1 -1
- package/lib/esm/ExportGraphics.js +156 -58
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +42 -54
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +167 -96
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +16 -3
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +9 -3
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/Material.d.ts +20 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +31 -2
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +64 -28
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +116 -28
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeHost.d.ts.map +1 -1
- package/lib/esm/NativeHost.js +4 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/SQLiteDb.d.ts +1 -1
- package/lib/esm/SQLiteDb.d.ts.map +1 -1
- package/lib/esm/SQLiteDb.js +6 -5
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/SqliteStatement.d.ts +1 -1
- package/lib/esm/SqliteStatement.d.ts.map +1 -1
- package/lib/esm/SqliteStatement.js +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/TextAnnotationElement.d.ts +2 -2
- package/lib/esm/TextAnnotationElement.js +2 -2
- package/lib/esm/TextAnnotationElement.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +4 -4
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +2 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +114 -14
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +223 -15
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js +3 -3
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.d.ts.map +1 -1
- package/lib/esm/ViewStore.js +28 -28
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -1
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +21 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +5 -5
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.d.ts +28 -0
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -0
- package/lib/esm/internal/ElementLRUCache.js +116 -0
- package/lib/esm/internal/ElementLRUCache.js.map +1 -0
- package/lib/esm/{HubMock.d.ts → internal/HubMock.d.ts} +4 -5
- package/lib/esm/internal/HubMock.d.ts.map +1 -0
- package/lib/esm/{HubMock.js → internal/HubMock.js} +22 -11
- package/lib/esm/internal/HubMock.js.map +1 -0
- package/lib/esm/internal/Symbols.d.ts +2 -2
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +2 -2
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +2 -16
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +36 -100
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.d.ts +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js +3 -3
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts +2 -2
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.d.ts +2 -0
- package/lib/esm/test/ElementLRUCache.test.d.ts.map +1 -0
- package/lib/esm/test/ElementLRUCache.test.js +212 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -0
- package/lib/esm/test/IModelTestUtils.d.ts +6 -2
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +27 -6
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.d.ts +1 -1
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js +4 -4
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +0 -23
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js +4 -3
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +51 -13
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +58 -41
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js +49 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.d.ts +2 -0
- package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
- package/lib/esm/test/standalone/IModelWrite.test.js +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js +25 -5
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +4 -3
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +6 -13
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +2 -7
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +13 -13
- package/lib/cjs/HubMock.d.ts.map +0 -1
- package/lib/cjs/HubMock.js.map +0 -1
- package/lib/esm/HubMock.d.ts.map +0 -1
- package/lib/esm/HubMock.js.map +0 -1
- package/lib/esm/test/CloudSqliteMock.d.ts +0 -37
- package/lib/esm/test/CloudSqliteMock.d.ts.map +0 -1
- package/lib/esm/test/CloudSqliteMock.js +0 -117
- package/lib/esm/test/CloudSqliteMock.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.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 { expect } from \"chai\";\nimport * as fs from \"fs\";\nimport * as sinon from \"sinon\";\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\nimport { FontFile } from \"../../FontFile\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\nimport { CodeService } from \"../../CodeService\";\nimport { HubMock } from \"../../HubMock\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { BriefcaseManager } from \"../../BriefcaseManager\";\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\n\ndescribe(\"IModelDbFonts\", () => {\n let db: IModelDb;\n\n class MockCodeService {\n public static enable = false;\n public static nextFaceDataId = 10;\n public static nextFontId = 100;\n\n public static reset() {\n this.enable = false;\n this.nextFaceDataId = 10;\n this.nextFontId = 100;\n }\n\n public static get internalCodes() {\n if (!MockCodeService.enable) {\n return undefined;\n }\n\n const obj = {\n reserveFontId: () => MockCodeService.nextFontId++,\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\n };\n\n (obj as any).writeLocker = obj;\n return obj;\n }\n\n public static close() { }\n\n }\n\n before(() => {\n HubMock.startup(\"IModelDbFontsTest\", KnownTestLocations.outputDir);\n });\n after(() => HubMock.shutdown());\n\n beforeEach(async () => {\n CodeService.createForIModel = () => MockCodeService as any;\n const iModelId = await HubMock.createNewIModel({ iModelName: \"IModelDbFontsTest\", iTwinId: HubMock.iTwinId });\n const bcProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test\", iTwinId: HubMock.iTwinId, iModelId });\n db = await BriefcaseDb.open({ fileName: bcProps.fileName});\n });\n\n afterEach(() => {\n db.abandonChanges();\n db.close();\n MockCodeService.reset();\n CodeService.createForIModel = undefined;\n });\n\n function createTTFile(fontName: string): FontFile {\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\n }\n\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\n return { familyName, faceName, type: FontType.TrueType, subId };\n }\n\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\n const fonts = Array.from(db.fonts.queryEmbeddedFontFiles());\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\n\n expect(actualFaceProps).to.deep.equal(expected);\n\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\n return list.map((x) => {\n return {\n familyName: x.familyName,\n isBold: x.faceName.startsWith(\"bold\"),\n isItalic: x.faceName.endsWith(\"italic\"),\n };\n });\n });\n\n const actualFaces = fonts.map((x) => x.faces);\n expect(actualFaces).to.deep.equal(expectedFaces);\n }\n\n describe(\"embedFontFile\", () => {\n it(\"embeds font files\", async () => {\n expectEmbeddedFontFiles([]);\n\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\n\n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\n await db.fonts.embedFontFile({ file });\n expectedFiles.push(expectedFaces);\n expectEmbeddedFontFiles(expectedFiles);\n }\n\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const blob = fs.readFileSync(fileName);\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\n familyName: \"Cdm\",\n type: FontType.Shx,\n faceName: \"regular\",\n subId: 0,\n }]);\n\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\n\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]);\n\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\n\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\n const encoding: RscFontEncodingProps = {\n degree: 5,\n plusMinus: 100,\n };\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\n familyName: \"ENGINEERING\",\n type: FontType.Rsc,\n faceName: \"regular\",\n subId: 0,\n encoding: {\n ...encoding,\n // omitted properties get default values\n diameter: 216,\n codePage: -1,\n }\n }]);\n });\n\n it(\"is a no-op if file is already embedded\", async () => {\n expectEmbeddedFontFiles([]);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n });\n\n it(\"throws if font is not embeddable\", async () => {\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n });\n\n it(\"allocates font Ids unless otherwise specified\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\n expect(db.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\n for (const name of sitkaFamilies) {\n expect(db.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\n }\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(db.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(spy.callCount).to.equal(1);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"obtains face data Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n\n expect(spy.callCount).to.equal(0);\n expect(MockCodeService.nextFaceDataId).to.equal(12);\n });\n\n it(\"round-trips font data\", async () => {\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\n await db.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\n\n const embeddedFiles = Array.from(db.fonts.queryEmbeddedFontFiles());\n expect(embeddedFiles.length).to.equal(1);\n const embeddedFile = embeddedFiles[0];\n\n const embeddedData = embeddedFile[_getData]();\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\n });\n });\n\n describe(\"acquireId\", () => {\n it(\"assigns font Ids\", async () => {\n expect(db.fonts.findDescriptor(1)).to.be.undefined;\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n expect(db.fonts.findId(cdmShx)).to.be.undefined;\n\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(1);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n expect(db.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\n expect(db.fonts.findId(cdmShx)).to.equal(cdmShxId);\n\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\n expect(db.fonts.findId(cdmRsc)).to.be.undefined;\n\n const cdmRscId = await db.fonts.acquireId(cdmRsc);\n expect(cdmRscId).to.equal(2);\n\n expect(db.fonts.findId(cdmRsc)).to.equal(cdmRscId);\n expect(db.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\n\n const arial = { name: \"Arial\", type: FontType.TrueType };\n const arialId = await db.fonts.acquireId(arial);\n expect(arialId).to.equal(3);\n expect(db.fonts.findId(arial)).to.equal(arialId);\n expect(db.fonts.findDescriptor(arialId)).to.deep.equal(arial);\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"acquires font Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(100);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n const arialId = await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(arialId).to.equal(101);\n\n expect(spy.callCount).to.equal(0);\n });\n });\n\n describe(\"findId\", () => {\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\n const shx = await db.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(shx);\n\n const tt = await db.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n\n const rsc = await db.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.equal(rsc);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n });\n });\n\n describe(\"queryMappedFamilies\", () => {\n it(\"omits entries with no embedded face data by default\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\n const actual = Array.from(db.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\n expect(actual).to.deep.equal(expected.sort());\n }\n\n expectFamilies([\"Karla\"]);\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.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 { expect } from \"chai\";\nimport * as fs from \"fs\";\nimport * as sinon from \"sinon\";\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\nimport { FontFile } from \"../../FontFile\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\nimport { CodeService } from \"../../CodeService\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { BriefcaseManager } from \"../../BriefcaseManager\";\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\n\ndescribe(\"IModelDbFonts\", () => {\n let db: IModelDb;\n\n class MockCodeService {\n public static enable = false;\n public static nextFaceDataId = 10;\n public static nextFontId = 100;\n\n public static reset() {\n this.enable = false;\n this.nextFaceDataId = 10;\n this.nextFontId = 100;\n }\n\n public static get internalCodes() {\n if (!MockCodeService.enable) {\n return undefined;\n }\n\n const obj = {\n reserveFontId: () => MockCodeService.nextFontId++,\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\n };\n\n (obj as any).writeLocker = obj;\n return obj;\n }\n\n public static close() { }\n\n }\n\n before(() => {\n HubMock.startup(\"IModelDbFontsTest\", KnownTestLocations.outputDir);\n });\n after(() => HubMock.shutdown());\n\n beforeEach(async () => {\n CodeService.createForIModel = () => MockCodeService as any;\n const iModelId = await HubMock.createNewIModel({ iModelName: \"IModelDbFontsTest\", iTwinId: HubMock.iTwinId });\n const bcProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test\", iTwinId: HubMock.iTwinId, iModelId });\n db = await BriefcaseDb.open({ fileName: bcProps.fileName});\n });\n\n afterEach(() => {\n db.abandonChanges();\n db.close();\n MockCodeService.reset();\n CodeService.createForIModel = undefined;\n });\n\n function createTTFile(fontName: string): FontFile {\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\n }\n\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\n return { familyName, faceName, type: FontType.TrueType, subId };\n }\n\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\n const fonts = Array.from(db.fonts.queryEmbeddedFontFiles());\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\n\n expect(actualFaceProps).to.deep.equal(expected);\n\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\n return list.map((x) => {\n return {\n familyName: x.familyName,\n isBold: x.faceName.startsWith(\"bold\"),\n isItalic: x.faceName.endsWith(\"italic\"),\n };\n });\n });\n\n const actualFaces = fonts.map((x) => x.faces);\n expect(actualFaces).to.deep.equal(expectedFaces);\n }\n\n describe(\"embedFontFile\", () => {\n it(\"embeds font files\", async () => {\n expectEmbeddedFontFiles([]);\n\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\n\n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\n await db.fonts.embedFontFile({ file });\n expectedFiles.push(expectedFaces);\n expectEmbeddedFontFiles(expectedFiles);\n }\n\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const blob = fs.readFileSync(fileName);\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\n familyName: \"Cdm\",\n type: FontType.Shx,\n faceName: \"regular\",\n subId: 0,\n }]);\n\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\n\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]);\n\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\n\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\n const encoding: RscFontEncodingProps = {\n degree: 5,\n plusMinus: 100,\n };\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\n familyName: \"ENGINEERING\",\n type: FontType.Rsc,\n faceName: \"regular\",\n subId: 0,\n encoding: {\n ...encoding,\n // omitted properties get default values\n diameter: 216,\n codePage: -1,\n }\n }]);\n });\n\n it(\"is a no-op if file is already embedded\", async () => {\n expectEmbeddedFontFiles([]);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n });\n\n it(\"throws if font is not embeddable\", async () => {\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n });\n\n it(\"allocates font Ids unless otherwise specified\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\n expect(db.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\n for (const name of sitkaFamilies) {\n expect(db.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\n }\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(db.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(spy.callCount).to.equal(1);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"obtains face data Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n\n expect(spy.callCount).to.equal(0);\n expect(MockCodeService.nextFaceDataId).to.equal(12);\n });\n\n it(\"round-trips font data\", async () => {\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\n await db.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\n\n const embeddedFiles = Array.from(db.fonts.queryEmbeddedFontFiles());\n expect(embeddedFiles.length).to.equal(1);\n const embeddedFile = embeddedFiles[0];\n\n const embeddedData = embeddedFile[_getData]();\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\n });\n });\n\n describe(\"acquireId\", () => {\n it(\"assigns font Ids\", async () => {\n expect(db.fonts.findDescriptor(1)).to.be.undefined;\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n expect(db.fonts.findId(cdmShx)).to.be.undefined;\n\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(1);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n expect(db.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\n expect(db.fonts.findId(cdmShx)).to.equal(cdmShxId);\n\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\n expect(db.fonts.findId(cdmRsc)).to.be.undefined;\n\n const cdmRscId = await db.fonts.acquireId(cdmRsc);\n expect(cdmRscId).to.equal(2);\n\n expect(db.fonts.findId(cdmRsc)).to.equal(cdmRscId);\n expect(db.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\n\n const arial = { name: \"Arial\", type: FontType.TrueType };\n const arialId = await db.fonts.acquireId(arial);\n expect(arialId).to.equal(3);\n expect(db.fonts.findId(arial)).to.equal(arialId);\n expect(db.fonts.findDescriptor(arialId)).to.deep.equal(arial);\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"acquires font Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(100);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n const arialId = await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(arialId).to.equal(101);\n\n expect(spy.callCount).to.equal(0);\n });\n });\n\n describe(\"findId\", () => {\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\n const shx = await db.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(shx);\n\n const tt = await db.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n\n const rsc = await db.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.equal(rsc);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n });\n });\n\n describe(\"queryMappedFamilies\", () => {\n it(\"omits entries with no embedded face data by default\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\n const actual = Array.from(db.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\n expect(actual).to.deep.equal(expected.sort());\n }\n\n expectFamilies([\"Karla\"]);\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\n });\n });\n});\n"]}
|
|
@@ -7,7 +7,7 @@ import { Guid } from "@itwin/core-bentley";
|
|
|
7
7
|
import { BriefcaseIdValue } from "@itwin/core-common";
|
|
8
8
|
import { HubWrappers, IModelTestUtils } from "../IModelTestUtils";
|
|
9
9
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
10
|
-
import { HubMock } from "../../HubMock";
|
|
10
|
+
import { HubMock } from "../../internal/HubMock";
|
|
11
11
|
import { TestChangeSetUtility } from "../TestChangeSetUtility";
|
|
12
12
|
import { _nativeDb, ChannelControl } from "../../core-backend";
|
|
13
13
|
describe("BriefcaseManager", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\nimport { Element } from \"../../Element\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../HubMock\";\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\n\ndescribe(\"BriefcaseManager\", async () => {\n const testITwinId: string = Guid.createValue();\n const managerAccessToken = \"manager mock token\";\n const accessToken = \"access token\";\n\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\n afterEach(() => HubMock.shutdown());\n\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\n let iModelName = \"iModel Name With Spaces\";\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n const args = { accessToken, iTwinId: testITwinId, iModelId };\n assert.isDefined(iModelId);\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name With :\\/<>?* Characters\";\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name Thats Excessively Long \" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\n // Note: iModelHub does not accept a name that's longer than 255 characters.\n assert.equal(255, iModelName.length);\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n iModel.close();\n });\n\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\n\n try {\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\n\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\n try {\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"db is not open\"), \"iModel2Dup failure must be due to db not being open\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId1 = iModel1.briefcaseId;\n iModel1.close(); // Keeps the briefcase by default\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId3 = iModel3.briefcaseId;\n assert.strictEqual(briefcaseId3, briefcaseId1);\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\";\n const userToken2 = \"super manager token\";\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\n await testUtility.createTestIModel();\n\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\n const changesetPullAndPush = iModelPullAndPush.changeset;\n iModelPullAndPush.close();\n\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\n const changesetPullOnly = iModelPullOnly.changeset;\n iModelPullOnly.close();\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\n\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\n const changesetPullOnly2 = iModelPullOnly2.changeset;\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\n\n // Delete iModel from the Hub and disk\n await testUtility.deleteTestIModel();\n });\n\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\n const userToken2 = \"super manager token\"; // User2 is used for the test\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\n await testUtility.createTestIModel();\n\n // User2 opens the iModel pullAndPush and is able to edit and save changes\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.exists(iModelPullAndPush);\n const briefcaseId = iModelPullAndPush.briefcaseId;\n const pathname = iModelPullAndPush.pathName;\n\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\n rootEl.userLabel = `${rootEl.userLabel}changed`;\n iModelPullAndPush.elements.updateElement(rootEl.toJSON());\n\n assert.isTrue(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isFalse(iModelPullAndPush[_nativeDb].hasPendingTxns());\n iModelPullAndPush.saveChanges();\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n iModelPullAndPush.close();\n\n // User2 should be able to re-open the iModel pullAndPush again\n // - the changes will still be there\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush = iModelPullAndPush.changeset;\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User2 should be able to re-open the iModel\n await HubWrappers.openBriefcaseUsingRpc(args);\n\n // User2 closes and reopens the iModel pullAndPush as of the newer version\n // - the changes will still be there, AND\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\n iModelPullAndPush.close();\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User2 should be able to push the changes now\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\n\n // Delete iModel from the Hub and disk\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\n await testUtility.deleteTestIModel();\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\nimport { Element } from \"../../Element\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\n\ndescribe(\"BriefcaseManager\", async () => {\n const testITwinId: string = Guid.createValue();\n const managerAccessToken = \"manager mock token\";\n const accessToken = \"access token\";\n\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\n afterEach(() => HubMock.shutdown());\n\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\n let iModelName = \"iModel Name With Spaces\";\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n const args = { accessToken, iTwinId: testITwinId, iModelId };\n assert.isDefined(iModelId);\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name With :\\/<>?* Characters\";\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name Thats Excessively Long \" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\n // Note: iModelHub does not accept a name that's longer than 255 characters.\n assert.equal(255, iModelName.length);\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n iModel.close();\n });\n\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\n assert.equal(BriefcaseIdValue.Unassigned, iModel1.getBriefcaseId(), \"checkpoint should be 0\");\n\n try {\n const iModelFailure = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModelFailure);\n assert.fail(\"iModelFailure should fail due to iModel1 already being open as a SnapshotDb\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"iModel is already open as a SnapshotDb\"), \"iModelFailure failure must be due to db being open as a SnapshotDb\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\n\n const iModel2Dup = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\n try {\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2Dup);\n assert.fail(\"iModel2Dup failure should fail due to already being closed when iModel2 closed\");\n } catch (err: any) {\n assert.isTrue(err.message.includes(\"db is not open\"), \"iModel2Dup failure must be due to db not being open\");\n }\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId1 = iModel1.briefcaseId;\n iModel1.close(); // Keeps the briefcase by default\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId3 = iModel3.briefcaseId;\n assert.strictEqual(briefcaseId3, briefcaseId1);\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\";\n const userToken2 = \"super manager token\";\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\n await testUtility.createTestIModel();\n\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\n const changesetPullAndPush = iModelPullAndPush.changeset;\n iModelPullAndPush.close();\n\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\n const changesetPullOnly = iModelPullOnly.changeset;\n iModelPullOnly.close();\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\n\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\n const changesetPullOnly2 = iModelPullOnly2.changeset;\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\n\n // Delete iModel from the Hub and disk\n await testUtility.deleteTestIModel();\n });\n\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\n const userToken2 = \"super manager token\"; // User2 is used for the test\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\n await testUtility.createTestIModel();\n\n // User2 opens the iModel pullAndPush and is able to edit and save changes\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.exists(iModelPullAndPush);\n const briefcaseId = iModelPullAndPush.briefcaseId;\n const pathname = iModelPullAndPush.pathName;\n\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\n rootEl.userLabel = `${rootEl.userLabel}changed`;\n iModelPullAndPush.elements.updateElement(rootEl.toJSON());\n\n assert.isTrue(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isFalse(iModelPullAndPush[_nativeDb].hasPendingTxns());\n iModelPullAndPush.saveChanges();\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n iModelPullAndPush.close();\n\n // User2 should be able to re-open the iModel pullAndPush again\n // - the changes will still be there\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush = iModelPullAndPush.changeset;\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User2 should be able to re-open the iModel\n await HubWrappers.openBriefcaseUsingRpc(args);\n\n // User2 closes and reopens the iModel pullAndPush as of the newer version\n // - the changes will still be there, AND\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\n iModelPullAndPush.close();\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User2 should be able to push the changes now\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\n\n // Delete iModel from the Hub and disk\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\n await testUtility.deleteTestIModel();\n });\n});\n"]}
|
|
@@ -6,8 +6,9 @@ import { assert } from "chai";
|
|
|
6
6
|
import * as path from "path";
|
|
7
7
|
import * as sinon from "sinon";
|
|
8
8
|
import { Guid } from "@itwin/core-bentley";
|
|
9
|
-
import {
|
|
9
|
+
import { V2CheckpointManager } from "../../CheckpointManager";
|
|
10
10
|
import { IModelJsFs } from "../../IModelJsFs";
|
|
11
|
+
import { IModelTestUtils } from "../IModelTestUtils";
|
|
11
12
|
describe("Checkpoint Manager", () => {
|
|
12
13
|
afterEach(() => {
|
|
13
14
|
sinon.restore();
|
|
@@ -22,7 +23,7 @@ describe("Checkpoint Manager", () => {
|
|
|
22
23
|
localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),
|
|
23
24
|
checkpoint,
|
|
24
25
|
};
|
|
25
|
-
const db =
|
|
26
|
+
const db = IModelTestUtils.tryOpenLocalFile(request);
|
|
26
27
|
assert.isUndefined(db);
|
|
27
28
|
});
|
|
28
29
|
it("open a bad bim file should return undefined", async () => {
|
|
@@ -44,7 +45,7 @@ describe("Checkpoint Manager", () => {
|
|
|
44
45
|
localFile: outputFile,
|
|
45
46
|
checkpoint,
|
|
46
47
|
};
|
|
47
|
-
const db =
|
|
48
|
+
const db = IModelTestUtils.tryOpenLocalFile(request);
|
|
48
49
|
assert.isUndefined(db);
|
|
49
50
|
});
|
|
50
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACzE,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAChG,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,UAAU;YACrB,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,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*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { _hubAccess, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"Checkpoint Manager\", () => {\n\n afterEach(() => {\n sinon.restore();\n });\n\n it(\"open missing local file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n const request = {\n localFile: path.join(V2CheckpointManager.getFolder(), Guid.createValue()),\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"open a bad bim file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n\n // Setup a local file\n const folder = path.join(V2CheckpointManager.getFolder(), checkpoint.iModelId);\n if (!IModelJsFs.existsSync(folder))\n IModelJsFs.recursiveMkDirSync(folder);\n\n const outputFile = path.join(V2CheckpointManager.getFolder(), `${checkpoint.changeset.id}.bim`);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\n\n // Attempt to open the file\n const request = {\n localFile: outputFile,\n checkpoint,\n };\n const db = IModelTestUtils.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n});\n"]}
|
|
@@ -62,9 +62,9 @@ import { DbResult, Guid, Id64, IModelStatus, Logger, OpenMode, ProcessDetector }
|
|
|
62
62
|
import { BisCodeSpec, BriefcaseIdValue, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DisplayStyleSettings, EcefLocation, FontMap, FontType, GeoCoordStatus, GeographicCRS, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, RelatedElement, RenderMode, SchemaState, SubCategoryAppearance, TextureMapping, TextureMapUnits, ViewFlags, } from "@itwin/core-common";
|
|
63
63
|
import { Geometry, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, YawPitchRollAngles, } from "@itwin/core-geometry";
|
|
64
64
|
import { V2CheckpointManager } from "../../CheckpointManager";
|
|
65
|
-
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
65
|
+
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
66
66
|
import { BriefcaseDb } from "../../IModelDb";
|
|
67
|
-
import { HubMock } from "../../HubMock";
|
|
67
|
+
import { HubMock } from "../../internal/HubMock";
|
|
68
68
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
69
69
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
70
70
|
import { DisableNativeAssertions } from "../TestUtils";
|
|
@@ -87,7 +87,17 @@ function expectIModelError(expectedErrorNumber, error) {
|
|
|
87
87
|
expect(error).instanceof(IModelError);
|
|
88
88
|
expect(error.errorNumber).to.equal(expectedErrorNumber);
|
|
89
89
|
}
|
|
90
|
+
async function generateTestSnapshot(targetFileName, seedAssetName) {
|
|
91
|
+
const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);
|
|
92
|
+
const snapshotFile = IModelTestUtils.prepareOutputFile("IModel", targetFileName);
|
|
93
|
+
const imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);
|
|
94
|
+
const schemaPathname = path.join(KnownTestLocations.assetsDir, "TestBim.ecschema.xml");
|
|
95
|
+
await imodel.importSchemas([schemaPathname]); // will throw an exception if import fails
|
|
96
|
+
imodel.saveChanges();
|
|
97
|
+
return imodel;
|
|
98
|
+
}
|
|
90
99
|
describe("iModel", () => {
|
|
100
|
+
//TODO: These imodels are used and modified across multiple tests. This is not a good practice and should be refactored.
|
|
91
101
|
let imodel1;
|
|
92
102
|
let imodel2;
|
|
93
103
|
let imodel3;
|
|
@@ -97,13 +107,11 @@ describe("iModel", () => {
|
|
|
97
107
|
before(async () => {
|
|
98
108
|
originalEnv = { ...process.env };
|
|
99
109
|
IModelTestUtils.registerTestBimSchema();
|
|
100
|
-
imodel1 =
|
|
110
|
+
imodel1 = await generateTestSnapshot("test.bim", "test.bim");
|
|
101
111
|
imodel2 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile("IModel", "CompatibilityTestSeed.bim"), IModelTestUtils.resolveAssetFile("CompatibilityTestSeed.bim"));
|
|
102
112
|
imodel3 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile("GetSetAutoHandledStructProperties.bim"));
|
|
103
113
|
imodel4 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile("IModel", "GetSetAutoHandledArrayProperties.bim"), IModelTestUtils.resolveAssetFile("GetSetAutoHandledArrayProperties.bim"));
|
|
104
114
|
imodel5 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile("IModel", "mirukuru.ibim"), IModelTestUtils.resolveAssetFile("mirukuru.ibim"));
|
|
105
|
-
const schemaPathname = path.join(KnownTestLocations.assetsDir, "TestBim.ecschema.xml");
|
|
106
|
-
await imodel1.importSchemas([schemaPathname]); // will throw an exception if import fails
|
|
107
115
|
});
|
|
108
116
|
after(() => {
|
|
109
117
|
process.env = originalEnv;
|
|
@@ -1984,6 +1992,7 @@ describe("iModel", () => {
|
|
|
1984
1992
|
getCurrentChangeset: () => changeset,
|
|
1985
1993
|
setIModelDb: () => { },
|
|
1986
1994
|
closeFile: () => { },
|
|
1995
|
+
clearECDbCache: () => { },
|
|
1987
1996
|
};
|
|
1988
1997
|
const errorLogStub = sinon.stub(Logger, "logError").callsFake(() => { });
|
|
1989
1998
|
const infoLogStub = sinon.stub(Logger, "logInfo").callsFake(() => { });
|
|
@@ -2077,6 +2086,33 @@ describe("iModel", () => {
|
|
|
2077
2086
|
db.abandonChanges();
|
|
2078
2087
|
db.close();
|
|
2079
2088
|
});
|
|
2089
|
+
it("Cache cleared on abandonChanges", () => {
|
|
2090
|
+
const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "StandaloneReadWrite.bim");
|
|
2091
|
+
const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "Standalone" } });
|
|
2092
|
+
db.saveChanges();
|
|
2093
|
+
const code = Code.createEmpty();
|
|
2094
|
+
code.value = "foo";
|
|
2095
|
+
const props = {
|
|
2096
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2097
|
+
model: IModel.dictionaryId,
|
|
2098
|
+
code,
|
|
2099
|
+
};
|
|
2100
|
+
const id = db.elements.insertElement(props);
|
|
2101
|
+
const element1 = db.elements.getElementProps(id);
|
|
2102
|
+
db.abandonChanges();
|
|
2103
|
+
code.value = "bar";
|
|
2104
|
+
const props2 = {
|
|
2105
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2106
|
+
model: IModel.dictionaryId,
|
|
2107
|
+
code,
|
|
2108
|
+
};
|
|
2109
|
+
const id2 = db.elements.insertElement(props2);
|
|
2110
|
+
expect(id2).to.equal(id);
|
|
2111
|
+
const element2 = db.elements.getElementProps(id2);
|
|
2112
|
+
expect(element2).to.not.equal(element1);
|
|
2113
|
+
db.abandonChanges();
|
|
2114
|
+
db.close();
|
|
2115
|
+
});
|
|
2080
2116
|
it("Standalone iModel properties", () => {
|
|
2081
2117
|
const standaloneRootSubjectName = "Standalone";
|
|
2082
2118
|
const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");
|
|
@@ -2104,14 +2140,15 @@ describe("iModel", () => {
|
|
|
2104
2140
|
standaloneDb1.close();
|
|
2105
2141
|
assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));
|
|
2106
2142
|
});
|
|
2107
|
-
it("Snapshot iModel properties", () => {
|
|
2143
|
+
it("Snapshot iModel properties", async () => {
|
|
2108
2144
|
const snapshotRootSubjectName = "Snapshot";
|
|
2109
2145
|
const snapshotFile1 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot1.bim");
|
|
2110
2146
|
const snapshotFile2 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot2.bim");
|
|
2111
2147
|
const snapshotFile3 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot3.bim");
|
|
2148
|
+
const imodel = await generateTestSnapshot("test_for_snapshot.bim", "test.bim");
|
|
2112
2149
|
let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true });
|
|
2113
2150
|
let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);
|
|
2114
|
-
let snapshotDb3 = SnapshotDb.createFrom(
|
|
2151
|
+
let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });
|
|
2115
2152
|
assert.isTrue(snapshotDb1.isSnapshotDb());
|
|
2116
2153
|
assert.isTrue(snapshotDb2.isSnapshotDb());
|
|
2117
2154
|
assert.isTrue(snapshotDb3.isSnapshotDb());
|
|
@@ -2124,7 +2161,7 @@ describe("iModel", () => {
|
|
|
2124
2161
|
assert.equal(snapshotDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);
|
|
2125
2162
|
assert.equal(snapshotDb2.getBriefcaseId(), BriefcaseIdValue.Unassigned);
|
|
2126
2163
|
assert.equal(snapshotDb3.getBriefcaseId(), BriefcaseIdValue.Unassigned);
|
|
2127
|
-
assert.equal(
|
|
2164
|
+
assert.equal(imodel.getBriefcaseId(), BriefcaseIdValue.Unassigned);
|
|
2128
2165
|
assert.equal(snapshotDb1.pathName, snapshotFile1);
|
|
2129
2166
|
assert.equal(snapshotDb2.pathName, snapshotFile2);
|
|
2130
2167
|
assert.equal(snapshotDb3.pathName, snapshotFile3);
|
|
@@ -2139,10 +2176,10 @@ describe("iModel", () => {
|
|
|
2139
2176
|
const rootSubjectName1 = snapshotDb1.elements.getRootSubject().code.value;
|
|
2140
2177
|
const rootSubjectName2 = snapshotDb2.elements.getRootSubject().code.value;
|
|
2141
2178
|
const rootSubjectName3 = snapshotDb3.elements.getRootSubject().code.value;
|
|
2142
|
-
const
|
|
2179
|
+
const imodelRootSubjectName = imodel.elements.getRootSubject().code.value;
|
|
2143
2180
|
assert.equal(rootSubjectName1, snapshotRootSubjectName);
|
|
2144
2181
|
assert.equal(rootSubjectName1, rootSubjectName2, "Expect a snapshot to maintain the root Subject name from its seed");
|
|
2145
|
-
assert.equal(rootSubjectName3,
|
|
2182
|
+
assert.equal(rootSubjectName3, imodelRootSubjectName, "Expect a snapshot to maintain the root Subject name from its seed");
|
|
2146
2183
|
assert.isTrue(snapshotDb1.isOpen);
|
|
2147
2184
|
assert.isTrue(snapshotDb2.isOpen);
|
|
2148
2185
|
assert.isTrue(snapshotDb3.isOpen);
|
|
@@ -2177,6 +2214,7 @@ describe("iModel", () => {
|
|
|
2177
2214
|
assert.isTrue(hasClassView(snapshotDb1, "bis.ElementRefersToElements"));
|
|
2178
2215
|
assert.isFalse(hasClassView(snapshotDb2, "bis.Element"));
|
|
2179
2216
|
assert.isTrue(hasClassView(snapshotDb3, "bis.Element"));
|
|
2217
|
+
imodel.close();
|
|
2180
2218
|
snapshotDb1.close();
|
|
2181
2219
|
snapshotDb2.close();
|
|
2182
2220
|
snapshotDb3.close();
|
|
@@ -2384,7 +2422,7 @@ describe("iModel", () => {
|
|
|
2384
2422
|
expect(elProps.code.scope).equal(element.code.scope);
|
|
2385
2423
|
expect(elProps.code.spec).equal(element.code.spec);
|
|
2386
2424
|
expect(elProps.federationGuid).equal(element.federationGuid);
|
|
2387
|
-
expect(elProps.isPrivate).undefined;
|
|
2425
|
+
expect(elProps.isPrivate).to.be.oneOf([false, undefined]);
|
|
2388
2426
|
expect(elProps.isInstanceOfEntity).undefined;
|
|
2389
2427
|
// remove userlabel by setting it to the blank string
|
|
2390
2428
|
element.userLabel = "";
|
|
@@ -2562,12 +2600,12 @@ describe("iModel", () => {
|
|
|
2562
2600
|
expect(imodel.codeValueBehavior).to.equal("trim-unicode-whitespace");
|
|
2563
2601
|
const code1 = getNumberedCodeValAndProps(1);
|
|
2564
2602
|
const categ1Id = imodel.elements.insertElement(code1.props);
|
|
2565
|
-
const categ1 = imodel.elements.
|
|
2603
|
+
const categ1 = imodel.elements.getElementProps({ id: categ1Id });
|
|
2566
2604
|
expect(categ1.code.value).to.equal(code1.trimmedCodeVal);
|
|
2567
2605
|
imodel.codeValueBehavior = "exact";
|
|
2568
2606
|
const code2 = getNumberedCodeValAndProps(2);
|
|
2569
2607
|
const categ2Id = imodel.elements.insertElement(code2.props);
|
|
2570
|
-
const categ2 = imodel.elements.
|
|
2608
|
+
const categ2 = imodel.elements.getElementProps({ id: categ2Id });
|
|
2571
2609
|
expect(categ2.code.value).to.equal(code2.untrimmedCodeVal);
|
|
2572
2610
|
imodel.codeValueBehavior = "trim-unicode-whitespace";
|
|
2573
2611
|
const code3 = getNumberedCodeValAndProps(3);
|