@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.2
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/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +124 -124
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { expect } from \"chai\";\r\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { AnnotationTextStyleProps, FieldRun, FontType, FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps, VersionedJSON } from \"@itwin/core-common\";\r\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\r\nimport { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\r\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { DefinitionModel } from \"../../Model\";\r\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\r\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\r\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\r\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\r\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\r\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\r\nimport { IModelElementCloneContext } from \"../../IModelElementCloneContext\";\r\nimport * as fs from \"fs\";\r\n\r\nfunction mockIModel(): IModelDb {\r\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\r\n fonts: {\r\n findId: () => 0,\r\n } as any,\r\n computeRangesForText: computeTextRangeAsStringLength,\r\n forEachMetaData: () => undefined,\r\n };\r\n\r\n return iModel as IModelDb;\r\n}\r\n\r\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\r\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\r\n const block = textBlock ?? TextBlock.create({ styleOverrides });\r\n if (!textBlock) {\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\r\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\r\n }\r\n\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\r\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\r\n annotation.offset = Point3d.create(10, -5, 0);\r\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\r\n return annotation;\r\n}\r\n\r\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\r\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\r\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n return subj;\r\n}\r\n\r\n\r\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\r\n\r\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\r\n const viewRange = new Range2d(0, 0, 500, 500);\r\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\r\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\r\n\r\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\r\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\r\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\r\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\r\n const iModel = StandaloneDb.createEmpty(filePath, {\r\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\r\n client: \"integration tests\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n await iModel.fonts.embedFontFile({\r\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\r\n })\r\n\r\n return iModel;\r\n}\r\n\r\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModelId: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\r\n return AnnotationTextStyle.create(\r\n iModel,\r\n {\r\n definitionModelId,\r\n name,\r\n settings,\r\n description: \"description\",\r\n }\r\n )\r\n}\r\n\r\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\r\n const placement: Placement2dProps = {\r\n origin: { x: 0, y: 0 },\r\n angle: Angle.createDegrees(0).toJSON(),\r\n };\r\n\r\n return TextAnnotation2d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\r\n const placement: Placement3dProps = {\r\n origin: { x: 0, y: 0, z: 0 },\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\r\n };\r\n\r\n return TextAnnotation3d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\ndescribe(\"TextAnnotation element\", () => {\r\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\r\n return TextAnnotation2d.fromJSON({\r\n category: \"0x12\",\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n },\r\n classFullName: TextAnnotation2d.classFullName,\r\n placement: {\r\n origin: { x: 0, y: 0 },\r\n angle: 0,\r\n },\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n describe(\"versioning\", () => {\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"0.0.1\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);\r\n });\r\n })\r\n\r\n describe(\"getAnnotation\", () => {\r\n it(\"returns undefined if not provided\", () => {\r\n expect(makeElement().getAnnotation()).to.be.undefined;\r\n });\r\n\r\n it(\"converts JSON string to class instance\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\r\n });\r\n\r\n const anno = elem.getAnnotation()!;\r\n expect(anno).not.to.be.undefined;\r\n expect(anno.textBlock.isEmpty).to.be.true;\r\n expect(elem.defaultTextStyle).not.to.be.undefined;\r\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\r\n });\r\n\r\n it(\"produces a new object each time it is called\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n });\r\n\r\n const anno1 = elem.getAnnotation()!;\r\n const anno2 = elem.getAnnotation()!;\r\n expect(anno1).not.to.equal(anno2);\r\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\r\n });\r\n });\r\n\r\n describe(\"setAnnotation\", () => {\r\n it(\"updates properties\", () => {\r\n const elem = makeElement();\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\r\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\r\n elem.setAnnotation(annotation);\r\n\r\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\r\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\r\n });\r\n });\r\n\r\n describe(\"getReferenceIds\", () => {\r\n function expectReferenceIds(expected: Id64String[], element: TextAnnotation2d): void {\r\n const actual = Array.from(element.getReferenceIds()).sort();\r\n\r\n // reference Ids get a prefix indicating their type ('e' for 'element')\r\n expected = expected.map((id) => `e${id}`);\r\n\r\n // the superclasses provide some reference Ids (code spec, model, category)\r\n const baseIds = [\"e0x12\", \"e0x78\", \"m0x34\"];\r\n expected.push(...baseIds);\r\n\r\n expected = expected.sort();\r\n expect(actual).to.deep.equal(expected);\r\n }\r\n\r\n it(\"reports default text style and field hosts\", () => {\r\n // makeElement sets defaultTextStyle to \"0x21\"\r\n const elem = makeElement();\r\n expectReferenceIds([\"0x21\"], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0x123\");\r\n expectReferenceIds([\"0x123\"], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x456\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x789\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n expectReferenceIds([\"0x123\", \"0x456\", \"0x789\"], elem);\r\n\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([\"0x456\", \"0x789\"], elem);\r\n\r\n elem.setAnnotation(TextAnnotation.create());\r\n expectReferenceIds([], elem);\r\n });\r\n\r\n it(\"does not report invalid Ids\", () => {\r\n const elem = makeElement();\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0\");\r\n expectReferenceIds([], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x123\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n\r\n expectReferenceIds([\"0x123\"], elem);\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation3d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement3d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\r\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\r\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\r\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement3d(el0, false);\r\n\r\n const elId = el0.insert()\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n\r\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation2d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation2d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement2d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement2d(imodel, createElement2dArgs);\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement2d(el0, false);\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n\r\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"defaultTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModelId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModelId = definitionModel;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n describe(\"TextAnnotation2d\", () => {\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement2d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n describe(\"onCloned\", () => {\r\n function insertStyledElement(styleId: Id64String | undefined, db: IModelDb): TextAnnotation2d {\r\n const args = { ...createElement2dArgs, defaultTextStyleId: styleId }\r\n const elem = createElement2d(db, args);\r\n elem.insert();\r\n imodel.saveChanges();\r\n return elem;\r\n }\r\n\r\n describe(\"within a single iModel\", () => {\r\n it(\"leaves property hosts intact\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock, });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x123\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xabc\");\r\n\r\n });\r\n\r\n it(\"leaves default text style intact\", async () => {\r\n async function clone(styleId: Id64String | undefined, expectedStyleId: Id64String | undefined): Promise<void> {\r\n const elem = insertStyledElement(styleId, imodel);\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n\r\n if (styleId) {\r\n // Even an explicit remapping is ignored when cloning within a single iModel\r\n // (per the examples set by most other elements, excluding RenderMaterial).\r\n context.remapElement(styleId, \"0x99887\");\r\n const props2 = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n }\r\n }\r\n\r\n await clone(seedStyleId, seedStyleId);\r\n await clone(undefined, undefined);\r\n await clone(\"0x12345\", \"0x12345\");\r\n await clone(Id64.invalid, undefined);\r\n });\r\n });\r\n\r\n describe(\"between iModels\", () => {\r\n let dstDb: StandaloneDb;\r\n let dstDefModel: Id64String;\r\n let dstElemArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n dstDb = await createIModel(\"CloneTarget\");\r\n const jobSubjectId = createJobSubjectElement(dstDb, \"Job\").insert();\r\n dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, \"Definition\");\r\n\r\n const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);\r\n expect(category).not.to.equal(createElement2dArgs.category);\r\n expect(model).not.to.equal(createElement2dArgs.model);\r\n\r\n dstElemArgs = { category, model };\r\n });\r\n\r\n after(() => dstDb.close());\r\n\r\n it(\"remaps property hosts\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x456\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xdef\");\r\n });\r\n\r\n it(\"sets default text style to undefined if source style does not exist\", async () => {\r\n const elem = insertStyledElement(\"0x12345\", imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n it(\"remaps to an existing text style with the same code if present\", async () => {\r\n const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, \"test\", { font: { name: \"Karla\" } }).insert();\r\n expect(dstStyleId).not.to.equal(seedStyleId);\r\n\r\n const srcElem = insertStyledElement(seedStyleId, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(dstStyleId);\r\n });\r\n\r\n it(\"throws an error if definition model is not remapped\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n await expect(context.cloneElement(srcElem)).to.be.rejectedWith(\"Invalid target model\");\r\n });\r\n\r\n it(\"imports default text style if necessary\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n const dstStyleId = props.defaultTextStyle!.id;\r\n expect(dstStyleId).not.to.be.undefined;\r\n expect(dstStyleId).not.to.equal(seedStyleId2);\r\n expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;\r\n });\r\n\r\n it(\"remaps multiple occurrences of same style to same Id\", async () => {\r\n const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, \"styyyle\", { font: { name: \"Karla\" } }).insert();\r\n const srcElem1 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem2 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem3 = insertStyledElement(srcStyleId, imodel);\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props1 = await context.cloneElement(srcElem1) as TextAnnotation2dProps;\r\n const props2 = await context.cloneElement(srcElem2) as TextAnnotation2dProps;\r\n expect(props1.defaultTextStyle).not.to.be.undefined;\r\n expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);\r\n expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n\r\n const context2 = new IModelElementCloneContext(imodel, dstDb);\r\n context2.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context2.remapElement(seedDefinitionModelId, dstDefModel);\r\n const props3 = await context2.cloneElement(srcElem3) as TextAnnotation2dProps;\r\n expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n });\r\n });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d\", () => {\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement3d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"AnnotationTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModel: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"AnnotationTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModel = definitionModel;\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"inserts a style and round-trips through JSON\", async () => {\r\n const textStyle = TextStyleSettings.fromJSON({\r\n font: { name: \"Totally Real Font\" },\r\n isUnderlined: true,\r\n textHeight: 0.5\r\n })\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n const style = el1.settings;\r\n expect(style).not.to.be.undefined;\r\n\r\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\r\n });\r\n\r\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\r\n // Default style should fail since it has no font\r\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // font is required\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // textHeight should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // stackedFractionScale should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n });\r\n\r\n it(\"does not allow updating of elements to invalid styles\", async () => {\r\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\r\n\r\n const elId = annotationTextStyle.insert();\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\r\n\r\n el1.update();\r\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\r\n });\r\n\r\n it(\"uses default style if none specified\", async () => {\r\n const el0 = AnnotationTextStyle.fromJSON({\r\n classFullName: AnnotationTextStyle.classFullName,\r\n model: seedSubjectId,\r\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\r\n }, imodel);\r\n expect(el0.settings).not.to.be.undefined;\r\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n\r\n it(\"can update style via cloning\", async () => {\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\r\n const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });\r\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\r\n el0.settings = newStyle;\r\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\r\n });\r\n\r\n describe(\"versioning\", () => {\r\n function makeStyle(props?: Partial<AnnotationTextStyleProps>): AnnotationTextStyle {\r\n return AnnotationTextStyle.fromJSON({\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n value: \"style\"\r\n },\r\n classFullName: AnnotationTextStyle.classFullName,\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: TEXT_STYLE_SETTINGS_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"should migrate text style settings from 1.0.0\", () => {\r\n const oldStyleData: TextStyleSettingsProps = {\r\n ...TextStyleSettings.defaultProps,\r\n leader: {\r\n ...TextStyleSettings.defaultProps.leader,\r\n // Explicitly remove terminatorShape to simulate old data\r\n terminatorShape: undefined\r\n }\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.0\",\r\n data: oldStyleData\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const jsonVersion = JSON.parse(jsonStyleData.settings).version;\r\n expect(jsonVersion).to.equal(TEXT_STYLE_SETTINGS_JSON_VERSION);\r\n }\r\n\r\n expect(migratedStyle.settings.leader.terminatorShape).to.not.be.undefined;\r\n\r\n });\r\n\r\n it(\"should return same data when version is 1.0.1\", () => {\r\n const styleData: VersionedJSON<TextStyleSettingsProps> = {\r\n version: \"1.0.1\",\r\n data: TextStyleSettings.defaultProps\r\n\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: styleData.version,\r\n data: styleData.data\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const parsedJson = JSON.parse(jsonStyleData.settings);\r\n expect(parsedJson.version).to.equal(styleData.version);\r\n expect(parsedJson.data).to.deep.equal(styleData.data);\r\n }\r\n });\r\n\r\n it(\"should return defaultProps when styleData is unrecognized\", () => {\r\n const textStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.1\",\r\n data: { invalid: \"data\" }\r\n }),\r\n });\r\n expect(textStyle.settings).to.be.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n })\r\n\r\n describe(\"onCloned\", () => {\r\n let targetDb: StandaloneDb;\r\n let targetDefModel: string;\r\n\r\n before(async () => {\r\n // The source and target iModel will both contain the Karla font family.\r\n targetDb = await createIModel(\"AnnotationTextStyleTargetDb\");\r\n const jobSubjectId = createJobSubjectElement(targetDb, \"Job\").insert();\r\n targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, \"Definition\");\r\n\r\n // Embed a font into the source iModel that doesn't exist in the target iModel.\r\n const shxName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const shxBlob = fs.readFileSync(shxName);\r\n const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: \"Cdm\" });\r\n await imodel.fonts.embedFontFile({ file: shxFile });\r\n });\r\n\r\n after(() => targetDb.close());\r\n\r\n it(\"embeds font into target Db if not already embedded\", async () => {\r\n const getFontCounts = () => {\r\n let files = 0;\r\n for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {\r\n files++;\r\n }\r\n\r\n let families = 0;\r\n for (const _ of targetDb.fonts.queryMappedFamilies()) {\r\n families++;\r\n }\r\n\r\n return { files, families };\r\n }\r\n\r\n const initialCounts = getFontCounts();\r\n\r\n const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"karla-style\", TextStyleSettings.fromJSON({ font: { name: \"Karla\" } }));\r\n karlaStyle.insert();\r\n const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cdm-style\", TextStyleSettings.fromJSON({ font: { name: \"Cdm\", type: FontType.Shx } }));\r\n cdmStyle.insert();\r\n\r\n const context = new IModelElementCloneContext(imodel, targetDb);\r\n context.remapElement(seedDefinitionModel, targetDefModel);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Karla\" })).not.to.be.undefined;\r\n await context.cloneElement(karlaStyle);\r\n expect(getFontCounts()).to.deep.equal(initialCounts);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).to.be.undefined;\r\n await context.cloneElement(cdmStyle);\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).not.to.be.undefined;\r\n const finalCounts = getFontCounts();\r\n expect(finalCounts.files).greaterThan(initialCounts.files);\r\n expect(finalCounts.families).greaterThan(initialCounts.families);\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"appendTextAnnotationGeometry\", () => {\r\n let imodel: StandaloneDb;\r\n let seedDefinitionModelId: string;\r\n let seedCategoryId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedDefinitionModelId = definitionModel;\r\n seedCategoryId = category;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n });\r\n\r\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\r\n const builder = new MockBuilder();\r\n\r\n const resolver = new TextStyleResolver({\r\n textBlock: annotation.textBlock,\r\n textStyleId: styleId,\r\n iModel: imodel,\r\n });\r\n\r\n const layout = layoutTextBlock({\r\n textBlock: annotation.textBlock,\r\n iModel: imodel,\r\n textStyleResolver: resolver,\r\n });\r\n\r\n const result = appendTextAnnotationGeometry({\r\n annotationProps: annotation.toJSON(),\r\n layout,\r\n textStyleResolver: resolver,\r\n scaleFactor,\r\n builder,\r\n categoryId: seedCategoryId,\r\n });\r\n\r\n expect(result).to.be.true;\r\n return builder;\r\n }\r\n\r\n it(\"produces the same geometry when given the same inputs\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n\r\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces no geometry when given an empty annotation\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.geometries).to.be.empty;\r\n expect(builder.params).to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const styleId = createAnnotationTextStyle(\r\n imodel,\r\n seedDefinitionModelId,\r\n \"empty anno style\",\r\n {\r\n font: { name: \"Totally Real Font\" },\r\n frame: {\r\n shape: \"rectangle\",\r\n }\r\n }\r\n ).insert();\r\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\r\n\r\n expect(builder.geometries).not.to.be.empty;\r\n expect(builder.params).not.to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n\r\n it(\"produces different geometry when given different text-content in annotations\", () => {\r\n const anno1 = createAnnotation();\r\n const anno2 = createAnnotation();\r\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\r\n\r\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces different geometry when given different default styles\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"accounts for style overrides in the text\", () => {\r\n const block = TextBlock.create();\r\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } }\r\n block.appendParagraph();\r\n block.children[0].styleOverrides = { isBold: true };\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n block.appendParagraph();\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\r\n\r\n const annotation = createAnnotation(block);\r\n\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.textStrings.length).to.equal(2);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n // From override on paragraph\r\n expect(builder.textStrings[0].bold).to.be.true;\r\n // From default style\r\n expect(builder.textStrings[0].italic).to.be.true;\r\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\r\n // From default style\r\n expect(builder.textStrings[1].bold).to.be.false;\r\n // From override on run\r\n expect(builder.textStrings[1].italic).to.be.false;\r\n });\r\n\r\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\r\n const block = TextBlock.create();\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n\r\n const annotation = createAnnotation(block);\r\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\r\n\r\n expect(builder.textStrings.length).to.equal(1);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\r\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\r\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\r\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\r\n });\r\n\r\n it(\"scales geometry correctly\", () => {\r\n const annotation = createAnnotation();\r\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\r\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\r\n\r\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\r\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { AnnotationTextStyleProps, FieldRun, FontType, FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps, VersionedJSON } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\nimport { IModelElementCloneContext } from \"../../IModelElementCloneContext\";\nimport * as fs from \"fs\";\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\n const block = textBlock ?? TextBlock.create({ styleOverrides });\n if (!textBlock) {\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n }\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModelId: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n {\n definitionModelId,\n name,\n settings,\n description: \"description\",\n }\n )\n}\n\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\n const placement: Placement2dProps = {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n };\n\n return TextAnnotation2d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\n const placement: Placement3dProps = {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n };\n\n return TextAnnotation3d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\n ...props,\n }, mockIModel());\n }\n\n describe(\"versioning\", () => {\n it(\"throws if the JSON has no version\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(\"JSON version is missing or invalid.\");\n });\n\n it(\"throws if the JSON has no data\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n }),\n })).to.throw(\"JSON data is missing or invalid.\");\n });\n\n it(\"throws if the JSON version is too new\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: \"999.999.999\",\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);\n });\n\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: \"0.0.1\",\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);\n });\n })\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(elem.defaultTextStyle).not.to.be.undefined;\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"getReferenceIds\", () => {\n function expectReferenceIds(expected: Id64String[], element: TextAnnotation2d): void {\n const actual = Array.from(element.getReferenceIds()).sort();\n\n // reference Ids get a prefix indicating their type ('e' for 'element')\n expected = expected.map((id) => `e${id}`);\n\n // the superclasses provide some reference Ids (code spec, model, category)\n const baseIds = [\"e0x12\", \"e0x78\", \"m0x34\"];\n expected.push(...baseIds);\n\n expected = expected.sort();\n expect(actual).to.deep.equal(expected);\n }\n\n it(\"reports default text style and field hosts\", () => {\n // makeElement sets defaultTextStyle to \"0x21\"\n const elem = makeElement();\n expectReferenceIds([\"0x21\"], elem);\n\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0x123\");\n expectReferenceIds([\"0x123\"], elem);\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(FieldRun.create({\n propertyHost: { elementId: \"0x456\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n propertyPath: { propertyName: \"CodeValue\" },\n }));\n textBlock.appendRun(FieldRun.create({\n propertyHost: { elementId: \"0x789\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n propertyPath: { propertyName: \"LastMod\" },\n }));\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\n expectReferenceIds([\"0x123\", \"0x456\", \"0x789\"], elem);\n\n elem.defaultTextStyle = undefined;\n expectReferenceIds([\"0x456\", \"0x789\"], elem);\n\n elem.setAnnotation(TextAnnotation.create());\n expectReferenceIds([], elem);\n });\n\n it(\"does not report invalid Ids\", () => {\n const elem = makeElement();\n elem.defaultTextStyle = undefined;\n expectReferenceIds([], elem);\n\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0\");\n expectReferenceIds([], elem);\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(FieldRun.create({\n propertyHost: { elementId: \"0\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n propertyPath: { propertyName: \"CodeValue\" },\n }));\n textBlock.appendRun(FieldRun.create({\n propertyHost: { elementId: \"0x123\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n propertyPath: { propertyName: \"LastMod\" },\n }));\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\n\n expectReferenceIds([\"0x123\"], elem);\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n createElement3dArgs = { category, model };\n });\n\n after(() => imodel.close());\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n const el = createElement3d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n\n createElement2dArgs = { category, model };\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n const el = createElement2d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d(imodel, createElement2dArgs);\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"defaultTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModelId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModelId = definitionModel;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n describe(\"TextAnnotation2d\", () => {\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement2dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement2d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n\n describe(\"onCloned\", () => {\n function insertStyledElement(styleId: Id64String | undefined, db: IModelDb): TextAnnotation2d {\n const args = { ...createElement2dArgs, defaultTextStyleId: styleId }\n const elem = createElement2d(db, args);\n elem.insert();\n imodel.saveChanges();\n return elem;\n }\n\n describe(\"within a single iModel\", () => {\n it(\"leaves property hosts intact\", async () => {\n const textBlock = TextBlock.create({\n styleOverrides: { font: { name: \"Karla\" } },\n children: [{\n children: [{\n type: \"field\",\n propertyHost: {\n elementId: \"0x123\",\n schemaName: \"Fields\",\n className: \"TestElement\",\n },\n propertyPath: { propertyName: \"intProp\" },\n }, {\n type: \"field\",\n propertyHost: {\n elementId: \"0xabc\",\n schemaName: \"BisCore\",\n className: \"Element\",\n },\n propertyPath: { propertyName: \"CodeValue\" },\n }],\n }],\n });\n\n const annotation = TextAnnotation.create({ textBlock, });\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\n elem.insert();\n imodel.saveChanges();\n\n const context = new IModelElementCloneContext(imodel);\n context.remapElement(\"0x123\", \"0x456\");\n context.remapElement(\"0xabc\", \"0xdef\");\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\n\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\n expect(props.textAnnotationData).not.to.be.undefined;\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\n const para = anno.textBlock.children[0];\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x123\");\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xabc\");\n\n });\n\n it(\"leaves default text style intact\", async () => {\n async function clone(styleId: Id64String | undefined, expectedStyleId: Id64String | undefined): Promise<void> {\n const elem = insertStyledElement(styleId, imodel);\n const context = new IModelElementCloneContext(imodel);\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\n expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);\n\n if (styleId) {\n // Even an explicit remapping is ignored when cloning within a single iModel\n // (per the examples set by most other elements, excluding RenderMaterial).\n context.remapElement(styleId, \"0x99887\");\n const props2 = await context.cloneElement(elem) as TextAnnotation2dProps;\n expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);\n }\n }\n\n await clone(seedStyleId, seedStyleId);\n await clone(undefined, undefined);\n await clone(\"0x12345\", \"0x12345\");\n await clone(Id64.invalid, undefined);\n });\n });\n\n describe(\"between iModels\", () => {\n let dstDb: StandaloneDb;\n let dstDefModel: Id64String;\n let dstElemArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n dstDb = await createIModel(\"CloneTarget\");\n const jobSubjectId = createJobSubjectElement(dstDb, \"Job\").insert();\n dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, \"Definition\");\n\n const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);\n expect(category).not.to.equal(createElement2dArgs.category);\n expect(model).not.to.equal(createElement2dArgs.model);\n\n dstElemArgs = { category, model };\n });\n\n after(() => dstDb.close());\n\n it(\"remaps property hosts\", async () => {\n const textBlock = TextBlock.create({\n styleOverrides: { font: { name: \"Karla\" } },\n children: [{\n children: [{\n type: \"field\",\n propertyHost: {\n elementId: \"0x123\",\n schemaName: \"Fields\",\n className: \"TestElement\",\n },\n propertyPath: { propertyName: \"intProp\" },\n }, {\n type: \"field\",\n propertyHost: {\n elementId: \"0xabc\",\n schemaName: \"BisCore\",\n className: \"Element\",\n },\n propertyPath: { propertyName: \"CodeValue\" },\n }],\n }],\n });\n\n const annotation = TextAnnotation.create({ textBlock });\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\n elem.insert();\n imodel.saveChanges();\n\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(\"0x123\", \"0x456\");\n context.remapElement(\"0xabc\", \"0xdef\");\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\n expect(props.textAnnotationData).not.to.be.undefined;\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\n const para = anno.textBlock.children[0];\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x456\");\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xdef\");\n });\n\n it(\"sets default text style to undefined if source style does not exist\", async () => {\n const elem = insertStyledElement(\"0x12345\", imodel);\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\n expect(props.defaultTextStyle).to.be.undefined;\n });\n\n it(\"remaps to an existing text style with the same code if present\", async () => {\n const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, \"test\", { font: { name: \"Karla\" } }).insert();\n expect(dstStyleId).not.to.equal(seedStyleId);\n\n const srcElem = insertStyledElement(seedStyleId, imodel);\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\n expect(props.defaultTextStyle?.id).to.equal(dstStyleId);\n });\n\n it(\"throws an error if definition model is not remapped\", async () => {\n const srcElem = insertStyledElement(seedStyleId2, imodel);\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n\n await expect(context.cloneElement(srcElem)).to.be.rejectedWith(\"Invalid target model\");\n });\n\n it(\"imports default text style if necessary\", async () => {\n const srcElem = insertStyledElement(seedStyleId2, imodel);\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n context.remapElement(seedDefinitionModelId, dstDefModel);\n\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\n const dstStyleId = props.defaultTextStyle!.id;\n expect(dstStyleId).not.to.be.undefined;\n expect(dstStyleId).not.to.equal(seedStyleId2);\n expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;\n });\n\n it(\"remaps multiple occurrences of same style to same Id\", async () => {\n const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, \"styyyle\", { font: { name: \"Karla\" } }).insert();\n const srcElem1 = insertStyledElement(srcStyleId, imodel);\n const srcElem2 = insertStyledElement(srcStyleId, imodel);\n const srcElem3 = insertStyledElement(srcStyleId, imodel);\n\n const context = new IModelElementCloneContext(imodel, dstDb);\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\n context.remapElement(seedDefinitionModelId, dstDefModel);\n\n const props1 = await context.cloneElement(srcElem1) as TextAnnotation2dProps;\n const props2 = await context.cloneElement(srcElem2) as TextAnnotation2dProps;\n expect(props1.defaultTextStyle).not.to.be.undefined;\n expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);\n expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\n\n const context2 = new IModelElementCloneContext(imodel, dstDb);\n context2.remapElement(createElement2dArgs.model, dstElemArgs.model);\n context2.remapElement(seedDefinitionModelId, dstDefModel);\n const props3 = await context2.cloneElement(srcElem3) as TextAnnotation2dProps;\n expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\n });\n });\n });\n });\n\n describe(\"TextAnnotation3d\", () => {\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement3dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement3d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n font: { name: \"Totally Real Font\" },\n isUnderlined: true,\n textHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\n expect(() => annotationTextStyle.insert()).to.throw();\n // textHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\n const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n\n describe(\"versioning\", () => {\n function makeStyle(props?: Partial<AnnotationTextStyleProps>): AnnotationTextStyle {\n return AnnotationTextStyle.fromJSON({\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n value: \"style\"\n },\n classFullName: AnnotationTextStyle.classFullName,\n ...props,\n }, mockIModel());\n }\n\n it(\"throws if the JSON has no version\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n data: TextStyleSettings.defaultProps\n }),\n })).to.throw(\"JSON version is missing or invalid.\");\n });\n\n it(\"throws if the JSON has no data\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n version: TEXT_STYLE_SETTINGS_JSON_VERSION,\n }),\n })).to.throw(\"JSON data is missing or invalid.\");\n });\n\n it(\"throws if the JSON version is too new\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n version: \"999.999.999\",\n data: TextStyleSettings.defaultProps\n }),\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);\n });\n\n it(\"should migrate text style settings from 1.0.0\", () => {\n const oldStyleData: TextStyleSettingsProps = {\n ...TextStyleSettings.defaultProps,\n leader: {\n ...TextStyleSettings.defaultProps.leader,\n // Explicitly remove terminatorShape to simulate old data\n terminatorShape: undefined\n }\n };\n const migratedStyle = makeStyle({\n settings: JSON.stringify({\n version: \"1.0.0\",\n data: oldStyleData\n }),\n })\n const jsonStyleData = migratedStyle.toJSON();\n if (jsonStyleData.settings) {\n const jsonVersion = JSON.parse(jsonStyleData.settings).version;\n expect(jsonVersion).to.equal(TEXT_STYLE_SETTINGS_JSON_VERSION);\n }\n\n expect(migratedStyle.settings.leader.terminatorShape).to.not.be.undefined;\n\n });\n\n it(\"should return same data when version is 1.0.1\", () => {\n const styleData: VersionedJSON<TextStyleSettingsProps> = {\n version: \"1.0.1\",\n data: TextStyleSettings.defaultProps\n\n };\n const migratedStyle = makeStyle({\n settings: JSON.stringify({\n version: styleData.version,\n data: styleData.data\n }),\n })\n const jsonStyleData = migratedStyle.toJSON();\n if (jsonStyleData.settings) {\n const parsedJson = JSON.parse(jsonStyleData.settings);\n expect(parsedJson.version).to.equal(styleData.version);\n expect(parsedJson.data).to.deep.equal(styleData.data);\n }\n });\n\n it(\"should return defaultProps when styleData is unrecognized\", () => {\n const textStyle = makeStyle({\n settings: JSON.stringify({\n version: \"1.0.1\",\n data: { invalid: \"data\" }\n }),\n });\n expect(textStyle.settings).to.be.deep.equal(TextStyleSettings.defaultProps);\n });\n })\n\n describe(\"onCloned\", () => {\n let targetDb: StandaloneDb;\n let targetDefModel: string;\n\n before(async () => {\n // The source and target iModel will both contain the Karla font family.\n targetDb = await createIModel(\"AnnotationTextStyleTargetDb\");\n const jobSubjectId = createJobSubjectElement(targetDb, \"Job\").insert();\n targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, \"Definition\");\n\n // Embed a font into the source iModel that doesn't exist in the target iModel.\n const shxName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const shxBlob = fs.readFileSync(shxName);\n const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: \"Cdm\" });\n await imodel.fonts.embedFontFile({ file: shxFile });\n });\n\n after(() => targetDb.close());\n\n it(\"embeds font into target Db if not already embedded\", async () => {\n const getFontCounts = () => {\n let files = 0;\n for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {\n files++;\n }\n\n let families = 0;\n for (const _ of targetDb.fonts.queryMappedFamilies()) {\n families++;\n }\n\n return { files, families };\n }\n\n const initialCounts = getFontCounts();\n\n const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"karla-style\", TextStyleSettings.fromJSON({ font: { name: \"Karla\" } }));\n karlaStyle.insert();\n const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cdm-style\", TextStyleSettings.fromJSON({ font: { name: \"Cdm\", type: FontType.Shx } }));\n cdmStyle.insert();\n\n const context = new IModelElementCloneContext(imodel, targetDb);\n context.remapElement(seedDefinitionModel, targetDefModel);\n\n expect(targetDb.fonts.findId({ name: \"Karla\" })).not.to.be.undefined;\n await context.cloneElement(karlaStyle);\n expect(getFontCounts()).to.deep.equal(initialCounts);\n\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).to.be.undefined;\n await context.cloneElement(cdmStyle);\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).not.to.be.undefined;\n const finalCounts = getFontCounts();\n expect(finalCounts.files).greaterThan(initialCounts.files);\n expect(finalCounts.families).greaterThan(initialCounts.families);\n });\n });\n});\n\ndescribe(\"appendTextAnnotationGeometry\", () => {\n let imodel: StandaloneDb;\n let seedDefinitionModelId: string;\n let seedCategoryId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedDefinitionModelId = definitionModel;\n seedCategoryId = category;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\n const builder = new MockBuilder();\n\n const resolver = new TextStyleResolver({\n textBlock: annotation.textBlock,\n textStyleId: styleId,\n iModel: imodel,\n });\n\n const layout = layoutTextBlock({\n textBlock: annotation.textBlock,\n iModel: imodel,\n textStyleResolver: resolver,\n });\n\n const result = appendTextAnnotationGeometry({\n annotationProps: annotation.toJSON(),\n layout,\n textStyleResolver: resolver,\n scaleFactor,\n builder,\n categoryId: seedCategoryId,\n });\n\n expect(result).to.be.true;\n return builder;\n }\n\n it(\"produces the same geometry when given the same inputs\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\n });\n\n it(\"produces no geometry when given an empty annotation\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.geometries).to.be.empty;\n expect(builder.params).to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const styleId = createAnnotationTextStyle(\n imodel,\n seedDefinitionModelId,\n \"empty anno style\",\n {\n font: { name: \"Totally Real Font\" },\n frame: {\n shape: \"rectangle\",\n }\n }\n ).insert();\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\n\n expect(builder.geometries).not.to.be.empty;\n expect(builder.params).not.to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n\n it(\"produces different geometry when given different text-content in annotations\", () => {\n const anno1 = createAnnotation();\n const anno2 = createAnnotation();\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\n\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"produces different geometry when given different default styles\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"accounts for style overrides in the text\", () => {\n const block = TextBlock.create();\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } }\n block.appendParagraph();\n block.children[0].styleOverrides = { isBold: true };\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.appendParagraph();\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\n\n const annotation = createAnnotation(block);\n\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.textStrings.length).to.equal(2);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n // From override on paragraph\n expect(builder.textStrings[0].bold).to.be.true;\n // From default style\n expect(builder.textStrings[0].italic).to.be.true;\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\n // From default style\n expect(builder.textStrings[1].bold).to.be.false;\n // From override on run\n expect(builder.textStrings[1].italic).to.be.false;\n });\n\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\n const block = TextBlock.create();\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n\n const annotation = createAnnotation(block);\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\n\n expect(builder.textStrings.length).to.equal(1);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\n });\n\n it(\"scales geometry correctly\", () => {\n const annotation = createAnnotation();\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\n\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\n });\n});\n"]}
|