@itwin/core-backend 5.12.0-dev.6 → 5.12.0-dev.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/lib/cjs/ChangesetReader.d.ts +65 -23
- package/lib/cjs/ChangesetReader.d.ts.map +1 -1
- package/lib/cjs/ChangesetReader.js +162 -102
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ECDb.js +2 -2
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/IModelDb.js +2 -2
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +65 -23
- package/lib/esm/ChangesetReader.d.ts.map +1 -1
- package/lib/esm/ChangesetReader.js +163 -103
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ECDb.js +2 -2
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/IModelDb.js +2 -2
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +4 -4
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +725 -110
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModel.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModel.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport * as semver from \"semver\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Guid, GuidString, Id64, Id64String, IModelStatus, Logger, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n AxisAlignedBox3d, BisCodeSpec, BriefcaseIdValue, ChangesetIdWithIndex, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DefinitionElementProps,\n DisplayStyleProps, DisplayStyleSettings, DisplayStyleSettingsProps, EcefLocation, ElementProps, EntityProps, FilePropertyProps,\n FontMap, FontType, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, GeometricElementProps, GeometryParams, GeometryStreamBuilder,\n ImageSourceFormat, IModel, IModelCoordinatesRequestProps, IModelError, LightLocationProps, MapImageryProps, PhysicalElementProps,\n PointWithStatus, QueryBinder, RelatedElement, RelationshipProps, RenderMode, SchemaState, SpatialViewDefinitionProps, SubCategoryAppearance, SubjectProps, TextureMapping,\n TextureMapProps, TextureMapUnits, TypeDefinitionElementProps, ViewDefinitionProps, ViewFlagProps, ViewFlags,\n} from \"@itwin/core-common\";\nimport {\n Geometry, GeometryQuery, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, XYZProps, YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport { V2CheckpointAccessProps } from \"../../BackendHubAccess\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport {\n _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions,\n DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DisplayStyleCreationOptions, DocumentPartition, DrawingGraphic, ECSqlStatement,\n Element, ElementDrivesElement, ElementGroupsMembers, ElementGroupsMembersProps, ElementOwnsChildElements, Entity, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d,\n GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LightLocation,\n LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, SpatialCategory,\n SqliteStatement, SqliteValue, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, ViewDefinition,\n} from \"../../core-backend\";\nimport { BriefcaseDb, SnapshotDbOpenArgs } from \"../../IModelDb\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { DisableNativeAssertions, TestUtils } from \"../TestUtils\";\nimport { samplePngTexture } from \"../imageData\";\nimport { performance } from \"perf_hooks\";\nimport { _cache, _hubAccess, _instanceKeyCache } from \"../../internal/Symbols\";\nimport { CustomAttributeClass, ECVersion, EntityClass, PrimitiveArrayProperty, PrimitiveOrEnumPropertyBase, PropertyType, propertyTypeToString, SchemaItemType } from \"@itwin/ecschema-metadata\";\n\n// spell-checker: disable\n\nasync function getIModelError<T>(promise: Promise<T>): Promise<IModelError | undefined> {\n try {\n await promise;\n return undefined;\n } catch (err) {\n return err instanceof IModelError ? err : undefined;\n }\n}\n\nfunction expectIModelError(expectedErrorNumber: IModelStatus | DbResult, error: IModelError | undefined): void {\n expect(error).not.to.be.undefined;\n expect(error).instanceof(IModelError);\n expect(error!.errorNumber).to.equal(expectedErrorNumber);\n}\n\nasync function generateTestSnapshot(targetFileName: string, seedAssetName: string): Promise<SnapshotDb> {\n const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", targetFileName);\n const imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n return imodel;\n}\n\ndescribe(\"iModel\", () => {\n //TODO: These imodels are used and modified across multiple tests. This is not a good practice and should be refactored.\n let imodel1: SnapshotDb;\n let imodel2: SnapshotDb;\n let imodel3: SnapshotDb;\n let imodel4: SnapshotDb;\n let imodel5: SnapshotDb;\n let originalEnv: any;\n\n before(async () => {\n originalEnv = { ...process.env };\n\n // Several tests in this suite (ECEF location, geolocation, and coordinate reprojection) rely on\n // GCS data loaded from cloud workspaces, so restart the backend with GCS workspaces enabled\n // (the test harness disables them by default to avoid network calls).\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\n\n IModelTestUtils.registerTestBimSchema();\n imodel1 = await generateTestSnapshot(\"test.bim\", \"test.bim\");\n imodel2 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"CompatibilityTestSeed.bim\"), IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\"));\n imodel3 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"GetSetAutoHandledStructProperties.bim\"));\n imodel4 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"GetSetAutoHandledArrayProperties.bim\"), IModelTestUtils.resolveAssetFile(\"GetSetAutoHandledArrayProperties.bim\"));\n imodel5 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\n });\n\n after(async () => {\n process.env = originalEnv;\n imodel1.close();\n imodel2.close();\n imodel3.close();\n imodel4.close();\n imodel5.close();\n\n // Restore the default test backend so subsequent test suites aren't left with GCS enabled.\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n afterEach(() => {\n sinon.restore();\n });\n\n /** Roundtrip the entity through a json string and back to a new entity. */\n const roundtripThroughJson = (entity1: Entity): Entity => {\n const string1 = JSON.stringify(entity1);\n const props1 = JSON.parse(string1) as EntityProps;\n const entity2 = new (entity1.constructor as any)(props1, entity1.iModel); // create a new entity from the EntityProps\n const string2 = JSON.stringify(entity2);\n assert.equal(string1, string2);\n return entity2;\n };\n\n it(\"should be able to get properties of an iIModel\", () => {\n expect(imodel1.name).equals(\"TBD\"); // That's the name of the root subject!\n const extents: AxisAlignedBox3d = imodel1.projectExtents;\n assert(!extents.isNull);\n\n // make sure we can construct a new element even if we haven't loaded its metadata (will be loaded in ctor)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isUndefined(imodel1.classMetaDataRegistry.find(\"biscore:lightlocation\"));\n const e1 = imodel1.constructEntity<LightLocation, LightLocationProps>({ category: \"0x11\", classFullName: \"BisCore:LightLocation\", model: \"0x01\", code: Code.createEmpty() });\n assert.isDefined(e1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isDefined(imodel1.classMetaDataRegistry.find(\"biscore:lightlocation\")); // should have been loaded in ctor\n });\n\n it(\"should use schema to look up classes by name\", () => {\n const elementClass = ClassRegistry.findRegisteredClass(Element.classFullName);\n const categoryClass = ClassRegistry.findRegisteredClass(Category.classFullName);\n assert.isDefined(elementClass);\n assert.isDefined(categoryClass);\n assert.equal(elementClass!.schema, BisCoreSchema);\n assert.equal(categoryClass!.schema, BisCoreSchema);\n assert.equal(elementClass!.className, \"Element\");\n assert.equal(categoryClass!.className, \"Category\");\n });\n\n it(\"Fonts\", () => {\n const dbFonts = imodel1.fonts;\n expect(Array.from(dbFonts.queryMappedFamilies({ includeNonEmbedded: true })).length).to.equal(4);\n expect(dbFonts.findDescriptor(1)).to.deep.equal({ name: \"Arial\", type: FontType.TrueType });\n expect(dbFonts.findId({ name: \"Arial\" })).to.equal(1);\n expect(dbFonts.findId({ name: \"arial\" })).to.equal(1);\n\n expect(dbFonts.findDescriptor(2)).to.deep.equal({ name: \"Font0\", type: FontType.Rsc });\n expect(dbFonts.findId({ name: \"Font0\" })).to.equal(2);\n expect(dbFonts.findId({ name: \"fOnt0\" })).to.equal(2);\n\n expect(dbFonts.findDescriptor(3)).to.deep.equal({ name: \"ShxFont0\", type: FontType.Shx });\n expect(dbFonts.findId({ name: \"ShxFont0\" })).to.equal(3);\n expect(dbFonts.findId({ name: \"shxfont0\" })).to.equal(3);\n\n expect(dbFonts.findDescriptor(4)).to.deep.equal({ name: \"Calibri\", type: FontType.TrueType });\n expect(dbFonts.findId({ name: \"Calibri\" })).to.equal(4);\n expect(dbFonts.findId({ name: \"cAlIbRi\" })).to.equal(4);\n\n expect(dbFonts.findId({ name: \"notfound\" })).to.be.undefined;\n\n const fonts1 = imodel1.fontMap; // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(fonts1.fonts.size, 4, \"font map size should be 4\");\n assert.equal(FontType.TrueType, fonts1.getFont(1)!.type, \"get font 1 type is TrueType\");\n assert.equal(\"Arial\", fonts1.getFont(1)!.name, \"get Font 1 name\");\n assert.equal(1, fonts1.getFont(\"Arial\")!.id, \"get Font 1, by name\");\n assert.equal(1, fonts1.getFont(\"arial\")!.id, \"get Font 1, by name case insensitive\");\n\n assert.equal(FontType.Rsc, fonts1.getFont(2)!.type, \"get font 2 type is Rsc\");\n assert.equal(\"Font0\", fonts1.getFont(2)!.name, \"get Font 2 name\");\n assert.equal(2, fonts1.getFont(\"Font0\")!.id, \"get Font 2, by name\");\n assert.equal(2, fonts1.getFont(\"fOnt0\")!.id, \"get Font 2, by name case insensitive\");\n\n assert.equal(FontType.Shx, fonts1.getFont(3)!.type, \"get font 1 type is Shx\");\n assert.equal(\"ShxFont0\", fonts1.getFont(3)!.name, \"get Font 3 name\");\n assert.equal(3, fonts1.getFont(\"ShxFont0\")!.id, \"get Font 3, by name\");\n assert.equal(3, fonts1.getFont(\"shxfont0\")!.id, \"get Font 3, by name case insensitive\");\n\n assert.equal(FontType.TrueType, fonts1.getFont(4)!.type, \"get font 4 type is TrueType\");\n assert.equal(\"Calibri\", fonts1.getFont(4)!.name, \"get Font 4 name\");\n assert.equal(4, fonts1.getFont(\"Calibri\")!.id, \"get Font 4, by name\");\n assert.equal(4, fonts1.getFont(\"cAlIbRi\")!.id, \"get Font 4, by name case insensitive\");\n\n assert.isUndefined(fonts1.getFont(\"notfound\"), \"attempt lookup of a font that should not be found\");\n\n assert.deepEqual(new FontMap(fonts1.toJSON()), fonts1, \"toJSON on FontMap\"); // eslint-disable-line @typescript-eslint/no-deprecated\n });\n\n it(\"should load a known element by Id from an existing iModel\", () => {\n assert.exists(imodel1.elements);\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\n const el = imodel1.elements.getElement(code1);\n assert.exists(el);\n const el2ById = imodel1.elements.getElement(\"0x34\");\n assert.exists(el2ById);\n const badCode = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1_does_not_exist.dgn\" });\n\n try {\n imodel1.elements.getElement(badCode); // throws Error\n assert.fail(); // this line should be skipped\n } catch (error: any) {\n assert.instanceOf(error, Error);\n assert.instanceOf(error, IModelError);\n assert.equal(error.errorNumber, IModelStatus.NotFound);\n }\n\n const element1 = imodel1.elements.tryGetElement(code1);\n const element2 = imodel1.elements.tryGetElement(\"0x34\");\n const element3 = imodel1.elements.tryGetElement(badCode);\n assert.isDefined(element1);\n assert.isDefined(element2);\n assert.isUndefined(element3);\n const elementProps1 = imodel1.elements.tryGetElementProps(code1);\n const elementProps2 = imodel1.elements.tryGetElementProps(\"0x34\");\n const elementProps3 = imodel1.elements.tryGetElementProps(badCode);\n assert.isDefined(elementProps1);\n assert.isDefined(elementProps2);\n assert.isUndefined(elementProps3);\n\n const model1 = imodel1.models.tryGetModel(IModel.dictionaryId);\n const modelProps1 = imodel1.models.tryGetModelProps(IModel.dictionaryId);\n const subModel1 = imodel1.models.tryGetSubModel(IModel.dictionaryId);\n assert.isDefined(model1);\n assert.isDefined(modelProps1);\n assert.isDefined(subModel1);\n const badModel1 = imodel1.models.tryGetModel(Id64.fromUint32Pair(999, 999));\n const badModelProps1 = imodel1.models.tryGetModelProps(Id64.fromUint32Pair(999, 999));\n const badSubModel1 = imodel1.models.tryGetSubModel(IModel.rootSubjectId);\n const badSubModel2 = imodel1.models.tryGetSubModel(badCode);\n assert.isUndefined(badModel1);\n assert.isUndefined(badModelProps1);\n assert.isUndefined(badSubModel1);\n assert.isUndefined(badSubModel2);\n\n const subCat = imodel1.elements.getElement(\"0x2e\");\n assert.isTrue(subCat instanceof SubCategory);\n if (subCat instanceof SubCategory) {\n assert.isTrue(subCat.appearance.color.tbgr === 16777215);\n assert.isTrue(subCat.appearance.weight === 2);\n assert.equal(Id64.getLocalId(subCat.id), 46);\n assert.equal(Id64.getBriefcaseId(subCat.id), 0);\n assert.equal(Id64.getLocalId(subCat.code.spec), 30);\n assert.equal(Id64.getBriefcaseId(subCat.code.spec), 0);\n assert.isTrue(subCat.code.scope === \"0x2d\");\n assert.isTrue(subCat.code.value === \"A-Z013-G-Legn\");\n roundtripThroughJson(subCat);\n }\n\n /// Get the parent Category of the subcategory.\n const cat = imodel1.elements.getElement((subCat as SubCategory).getCategoryId());\n assert.isTrue(cat instanceof Category);\n if (cat instanceof Category) {\n assert.equal(Id64.getLocalId(cat.id), 45);\n assert.equal(Id64.getBriefcaseId(cat.id), 0);\n assert.isTrue(cat.description === \"Legends, symbols keys\");\n assert.equal(Id64.getLocalId(cat.code.spec), 22);\n assert.equal(Id64.getBriefcaseId(cat.code.spec), 0);\n assert.isTrue(cat.code.value === \"A-Z013-G-Legn\");\n roundtripThroughJson(cat);\n }\n\n const phys = imodel1.elements.getElement(\"0x38\");\n assert.isTrue(phys instanceof GeometricElement3d);\n\n const locateMsg = phys.getToolTipMessage();\n assert.isDefined(locateMsg);\n\n const a2 = imodel2.elements.getElement(\"0x1d\");\n assert.exists(a2);\n expect(a2.federationGuid).equal(\"18eb4650-b074-414f-b961-d9cfaa6c8746\");\n const el3 = imodel2.elements.getElement(a2.federationGuid!);\n assert.exists(el3);\n assert.notEqual(a2, el3);\n assert.equal(a2.id, el3.id);\n roundtripThroughJson(el3);\n const txn = new EditTxn(imodel2, \"code scope mutation test\");\n txn.start();\n\n const newEl = el3.toJSON();\n newEl.federationGuid = undefined;\n newEl.code = { scope: \"bad scope\", spec: \"0x10\", value: \"new code\" };\n expect(() => txn.insertElement(newEl)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n newEl.code.scope = \"0x34322\"; // valid id, but element doesn't exist\n expect(() => txn.insertElement(newEl)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n\n newEl.code.scope = el3.federationGuid!;\n const newId = txn.insertElement(newEl); // code scope from FederationGuid should get converted to ElementId\n const a4 = imodel2.elements.getElementProps(newId);\n expect(a4.code.scope).equal(el3.id);\n\n a4.code.scope = \"0x13343\";\n expect(() => txn.updateElement(a4)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n\n a4.code.scope = \"0x1\";\n txn.updateElement(a4); // should change the code scope to new element\n let a5 = imodel2.elements.getElementProps(newId);\n expect(a5.code.scope).equal(\"0x1\");\n\n // only pass minimum, but expect model and classFullName to be added.\n const newProps = { id: a4.id, code: a4.code, classFullName: undefined, model: undefined };\n newProps.code.scope = el3.federationGuid!; // should convert FederationGuid to ElementId\n txn.updateElement(newProps);\n expect(newProps.classFullName).eq(a4.classFullName);\n expect(newProps.model).eq(a4.model);\n\n a5 = imodel2.elements.getElementProps(newId);\n expect(a5.code.scope).equal(el3.id);\n txn.end();\n });\n\n it(\"should optionally detect class mismatches\", () => {\n // tryGetElement\n const subjectUnvalidated = imodel1.elements.tryGetElement<Subject>(IModel.rootSubjectId);\n assert.isDefined(subjectUnvalidated);\n const subjectValidated = imodel1.elements.tryGetElement<Subject>(IModel.rootSubjectId, Subject);\n assert.isDefined(subjectValidated);\n const physicalElementUnvalidated = imodel1.elements.tryGetElement<PhysicalElement>(IModel.rootSubjectId);\n assert.isDefined(physicalElementUnvalidated); // wrong type, but class to validate was not passed\n const physicalElementValidated = imodel1.elements.tryGetElement<PhysicalElement>(IModel.rootSubjectId, PhysicalElement); // abstract class\n assert.isUndefined(physicalElementValidated); // wrong type\n const physicalObjectUnvalidated = imodel1.elements.tryGetElement<PhysicalObject>(IModel.rootSubjectId);\n assert.isDefined(physicalObjectUnvalidated); // wrong type, but class to validate was not passed\n const physicalObjectValidated = imodel1.elements.tryGetElement<PhysicalObject>(IModel.rootSubjectId, PhysicalObject); // concrete class\n assert.isUndefined(physicalObjectValidated); // wrong type\n // tryGetModel\n const dictionaryUnvalidated = imodel1.models.tryGetModel<DictionaryModel>(IModel.dictionaryId);\n assert.isDefined(dictionaryUnvalidated);\n const dictionaryValidated = imodel1.models.tryGetModel<DictionaryModel>(IModel.dictionaryId, DictionaryModel);\n assert.isDefined(dictionaryValidated);\n const geometricModelUnvalidated = imodel1.models.tryGetModel<GeometricModel>(IModel.dictionaryId);\n assert.isDefined(geometricModelUnvalidated); // wrong type, but class to validate was not passed\n const geometricModelValidated = imodel1.models.tryGetModel<GeometricModel>(IModel.dictionaryId, GeometricModel); // abstract class\n assert.isUndefined(geometricModelValidated); // wrong type\n const physicalModelUnvalidated = imodel1.models.tryGetModel<PhysicalModel>(IModel.dictionaryId);\n assert.isDefined(physicalModelUnvalidated); // wrong type, but class to validate was not passed\n const physicalModelValidated = imodel1.models.tryGetModel<PhysicalModel>(IModel.dictionaryId, PhysicalModel); // concrete class\n assert.isUndefined(physicalModelValidated); // wrong type\n // tryGetSubModel\n const dictionarySubUnvalidated = imodel1.models.tryGetSubModel<DictionaryModel>(IModel.dictionaryId);\n assert.isDefined(dictionarySubUnvalidated);\n const dictionarySubValidated = imodel1.models.tryGetSubModel<DictionaryModel>(IModel.dictionaryId, DictionaryModel);\n assert.isDefined(dictionarySubValidated);\n const geometricSubModelUnvalidated = imodel1.models.tryGetSubModel<GeometricModel>(IModel.dictionaryId);\n assert.isDefined(geometricSubModelUnvalidated); // wrong type, but class to validate was not passed\n const geometricSubModelValidated = imodel1.models.tryGetSubModel<GeometricModel>(IModel.dictionaryId, GeometricModel); // abstract class\n assert.isUndefined(geometricSubModelValidated); // wrong type\n const physicalSubModelUnvalidated = imodel1.models.tryGetSubModel<PhysicalModel>(IModel.dictionaryId);\n assert.isDefined(physicalSubModelUnvalidated); // wrong type, but class to validate was not passed\n const physicalSubModelValidated = imodel1.models.tryGetSubModel<PhysicalModel>(IModel.dictionaryId, PhysicalModel); // concrete class\n assert.isUndefined(physicalSubModelValidated); // wrong type\n });\n\n it(\"should create elements\", () => {\n const seedElement = imodel2.elements.getElement<GeometricElement3d>(\"0x1d\");\n assert.exists(seedElement);\n assert.isTrue(seedElement.federationGuid! === \"18eb4650-b074-414f-b961-d9cfaa6c8746\");\n\n withEditTxn(imodel2, (txn) => {\n for (let i = 0; i < 25; i++) {\n const elementProps: GeometricElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: seedElement.model,\n category: seedElement.category,\n code: Code.createEmpty(),\n federationGuid: Guid.createValue(),\n userLabel: `UserLabel-${i}`,\n };\n\n const element: Element = imodel2.elements.createElement(elementProps);\n element.setUserProperties(\"performanceTest\", { s: `String-${i}`, n: i });\n\n const elementId = txn.insertElement(element.toJSON());\n assert.isTrue(Id64.isValidId64(elementId));\n }\n });\n });\n\n it(\"should insert a RenderMaterial\", () => {\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const testMaterialName = \"test material name\";\n const testPaletteName = \"test palette name\";\n const testDescription = \"test description\";\n const color = [0.3, 0.7, 0.8];\n const specularColor = [0.1, 1, 0];\n const finish = 0.4;\n const transmit = 0.1;\n const diffuse = 0.24;\n const specular = 0.9;\n const reflect = 0.3;\n const reflectColor = [1, 0, 0.5];\n /* eslint-disable @typescript-eslint/naming-convention */\n const textureMapProps: TextureMapProps = {\n pattern_angle: 3.0,\n pattern_u_flip: false,\n pattern_flip: false,\n pattern_scale: [1.0, 1.0],\n pattern_offset: [0.0, 0.0],\n pattern_scalemode: TextureMapUnits.Inches,\n pattern_mapping: TextureMapping.Mode.Planar,\n pattern_weight: 0.5,\n TextureId: \"test_textureid\",\n };\n\n /* eslint-enable @typescript-eslint/naming-convention */\n const renderMaterialParams: RenderMaterialElementParams = {\n paletteName: testPaletteName,\n description: testDescription,\n color,\n specularColor,\n finish,\n transmit,\n diffuse,\n specular,\n reflect,\n reflectColor,\n patternMap: textureMapProps,\n };\n\n const renderMaterialId = withEditTxn(imodel2, (txn) => RenderMaterialElement.insert(txn, IModel.dictionaryId, testMaterialName, renderMaterialParams));\n\n const renderMaterial = imodel2.elements.getElement<RenderMaterialElement>(renderMaterialId);\n assert((renderMaterial instanceof RenderMaterialElement) === true, \"did not retrieve an instance of RenderMaterial\");\n expect(renderMaterial.paletteName).to.equal(testPaletteName);\n expect(renderMaterial.description).to.equal(testDescription);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasBaseColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.color)).to.equal(JSON.stringify(color));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasSpecularColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.specular_color)).to.equal(JSON.stringify(specularColor));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasFinish).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.finish).to.equal(finish);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasTransmit).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.transmit).to.equal(transmit);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasDiffuse).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.diffuse).to.equal(diffuse);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasSpecular).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.specular).to.equal(specular);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasReflect).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.reflect).to.equal(reflect);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasReflectColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.reflect_color)).to.equal(JSON.stringify(reflectColor));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.Map).not.to.be.undefined;\n\n const patternMap = renderMaterial.jsonProperties.materialAssets.renderMaterial.Map.Pattern;\n expect(patternMap).not.to.be.undefined;\n expect(patternMap.pattern_angle).to.equal(textureMapProps.pattern_angle);\n expect(patternMap.pattern_u_flip).to.equal(textureMapProps.pattern_u_flip);\n expect(patternMap.pattern_flip).to.equal(textureMapProps.pattern_flip);\n expect(JSON.stringify(patternMap.pattern_scale)).to.equal(JSON.stringify(textureMapProps.pattern_scale));\n expect(JSON.stringify(patternMap.pattern_offset)).to.equal(JSON.stringify(textureMapProps.pattern_offset));\n expect(patternMap.pattern_scalemode).to.equal(textureMapProps.pattern_scalemode);\n expect(patternMap.pattern_mapping).to.equal(textureMapProps.pattern_mapping);\n expect(patternMap.pattern_weight).to.equal(textureMapProps.pattern_weight);\n expect(patternMap.TextureId).to.equal(textureMapProps.TextureId);\n });\n\n it(\"attempt to apply material to new element in imodel5\", () => {\n const testTextureName = \"fake texture name\";\n const testTextureFormat = ImageSourceFormat.Png;\n const testTextureDescription = \"empty description\";\n const txn = new EditTxn(imodel5, \"apply material to new element\");\n txn.start();\n\n const texId = Texture.insertTexture(txn, IModel.dictionaryId, testTextureName, testTextureFormat, samplePngTexture.base64, testTextureDescription);\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const matId = RenderMaterialElement.insert(txn, IModel.dictionaryId, \"test material name\",\n {\n paletteName: \"TestPaletteName\",\n patternMap: {\n TextureId: texId,\n pattern_offset: [0, 0],\n pattern_scale: [1, 1],\n pattern_scalemode: TextureMapUnits.Relative,\n },\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n\n /** Create a simple flat mesh with 4 points (2x2) */\n const width = imodel5.projectExtents.xLength() * 0.2;\n const height = imodel5.projectExtents.yLength() * 0.2;\n let shape: GeometryQuery;\n const doPolyface = true;\n if (doPolyface) {\n const options = StrokeOptions.createForFacets();\n options.shouldTriangulate = false;\n const builder = PolyfaceBuilder.create(options);\n\n const quad = [\n Point3d.create(0.0, 0.0, 0.0),\n Point3d.create(width, 0.0, 0.0),\n Point3d.create(width, height, 0.0),\n Point3d.create(0.0, height, 0.0),\n ];\n\n builder.addQuadFacet(quad);\n shape = builder.claimPolyface();\n } else {\n shape = Loop.create(LineString3d.create([\n Point3d.create(0, 0, 0),\n Point3d.create(width, 0, 0),\n Point3d.create(width, height, 0),\n Point3d.create(0, height, 0),\n Point3d.create(0, 0, 0),\n ]));\n }\n\n const modelId = PhysicalModel.insert(txn, IModelDb.rootSubjectId, \"test_render_material_model_name\");\n\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"GeoJSON Feature\", { color: ColorDef.white.toJSON() });\n\n /** generate a geometry stream containing the polyface */\n const gsBuilder = new GeometryStreamBuilder();\n const params = new GeometryParams(categoryId);\n params.materialId = matId;\n gsBuilder.appendGeometryParamsChange(params);\n gsBuilder.appendGeometry(shape);\n const geometry = gsBuilder.geometryStream;\n // geometry[0].material = { materialId: matId };\n\n const props: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n placement: { origin: imodel5.projectExtents.center, angles: new YawPitchRollAngles() },\n model: modelId,\n code: Code.createEmpty(),\n category: categoryId,\n geom: geometry,\n };\n txn.insertElement(props);\n txn.end();\n });\n\n it(\"should insert a DisplayStyle\", () => {\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const settings: DisplayStyleSettingsProps = {\n backgroundColor: ColorDef.blue.toJSON(),\n viewflags: ViewFlags.fromJSON({\n renderMode: RenderMode.SolidFill,\n }),\n };\n\n const props: DisplayStyleProps = {\n classFullName: DisplayStyle3d.classFullName,\n model: IModel.dictionaryId,\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: \"test style\" },\n isPrivate: false,\n jsonProperties: {\n styles: settings,\n },\n };\n\n const txn = new EditTxn(imodel2, \"insert and update DisplayStyle\");\n txn.start();\n const styleId = txn.insertElement(props);\n let style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);\n expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;\n\n const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });\n style.settings.viewFlags = newFlags;\n style.settings.backgroundColor = ColorDef.red;\n style.settings.monochromeColor = ColorDef.green;\n expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);\n\n txn.updateElement(style.toJSON());\n txn.end();\n style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);\n expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;\n expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;\n });\n\n it(\"should create display styles\", () => {\n const defaultViewFlags = new ViewFlags().toJSON();\n const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;\n\n const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });\n const viewflags: ViewFlagProps = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };\n\n const mapImagery: MapImageryProps = {\n backgroundBase: ColorDef.red.tbgr,\n backgroundLayers: [{\n name: \"x\",\n url: \"y\",\n transparency: 0.5,\n formatId: \"WMS\",\n visible: true,\n }],\n };\n\n const props: DisplayStyleSettingsProps = {\n mapImagery,\n excludedElements: [\"0x123\", \"0xfed\"],\n timePoint: 42,\n backgroundColor: ColorDef.green.tbgr,\n };\n\n type TestCase = [DisplayStyleCreationOptions | undefined, ViewFlagProps, boolean];\n const testCases: TestCase[] = [\n [undefined, defaultViewFlags, false],\n [{ viewFlags }, viewFlags.toJSON(), false],\n [{ viewflags }, viewflags, false],\n [{ viewflags, viewFlags }, viewFlags.toJSON(), false],\n [props, defaultViewFlags, false],\n [{ ...props, viewflags }, viewflags, false],\n [{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],\n ];\n\n let suffix = 123;\n withEditTxn(imodel2, (txn) => {\n for (const test of testCases) {\n const expected = test[0] ?? {};\n const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);\n const style = imodel2.elements.getElement<DisplayStyle3d>(styleId).toJSON();\n expect(style.jsonProperties.styles).not.to.be.undefined;\n\n expect(style.jsonProperties).not.to.be.undefined;\n expect(style.jsonProperties.styles).not.to.be.undefined;\n const actual = style.jsonProperties.styles!;\n\n expect(actual.viewflags).not.to.be.undefined;\n const expectedVf = ViewFlags.fromJSON(test[1]);\n const actualVf = ViewFlags.fromJSON(actual.viewflags);\n expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());\n\n const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;\n expect(actual.backgroundColor).to.equal(expectedBGColor);\n\n // DisplayStyleSettings constructor always initializes json.mapImagery.\n expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);\n expect(actual.excludedElements).to.deep.equal(expected.excludedElements);\n expect(actual.timePoint).to.deep.equal(expected.timePoint);\n }\n });\n });\n\n it(\"should have a valid root subject element\", () => {\n const rootSubject = imodel1.elements.getRootSubject();\n assert.exists(rootSubject);\n assert.isTrue(rootSubject instanceof Subject);\n assert.isAtLeast(rootSubject.code.value.length, 1);\n assert.isFalse(imodel1.elements.hasSubModel(IModel.rootSubjectId));\n\n try {\n imodel1.models.getSubModel(rootSubject.id); // throws error\n assert.fail(); // this line should be skipped\n } catch (error: any) {\n assert.isTrue(error instanceof Error);\n assert.isTrue(error instanceof IModelError);\n assert.equal(error.errorNumber, IModelStatus.NotFound);\n }\n\n const childIds: Id64String[] = imodel1.elements.queryChildren(rootSubject.id);\n assert.isAtLeast(childIds.length, 1);\n for (const childId of childIds) {\n const childElement = imodel1.elements.getElement(childId);\n assert.exists(childElement);\n assert.isTrue(childElement instanceof Element);\n\n roundtripThroughJson(childElement);\n assert.equal(rootSubject.id, childElement.parent!.id);\n\n const childLocalId = Id64.getLocalId(childId);\n const childBcId = Id64.getBriefcaseId(childId);\n if (childElement instanceof InformationPartitionElement) {\n assert.isTrue(imodel1.elements.hasSubModel(childElement.id));\n const childSubModel: Model = imodel1.models.getSubModel(childElement.id);\n assert.exists(childSubModel, \"InformationPartitionElements should have a subModel\");\n\n if (childLocalId === 16 && childBcId === 0) {\n assert.isTrue(childElement instanceof DefinitionPartition, \"ChildId 0x00000010 should be a DefinitionPartition\");\n assert.isTrue(childElement.code.value === \"BisCore.DictionaryModel\", \"Definition Partition should have code value of BisCore.DictionaryModel\");\n } else if (childLocalId === 14 && childBcId === 0) {\n assert.isTrue(childElement instanceof LinkPartition);\n assert.isTrue(childElement.code.value === \"BisCore.RealityDataSources\");\n } else if (childLocalId === 17 && childBcId === 0) {\n assert.isTrue(childElement instanceof LinkPartition, \"ChildId 0x000000011 should be a LinkPartition\");\n assert.isTrue(childElement.code.value === \"Repository Links\");\n }\n } else if (childElement instanceof Subject) {\n assert.isFalse(imodel1.elements.hasSubModel(childElement.id));\n if (childLocalId === 19 && childBcId === 0) {\n assert.isTrue(childElement instanceof Subject);\n assert.isTrue(childElement.code.value === \"DgnV8:mf3, A\", \"Subject should have code value of DgnV8:mf3, A\");\n assert.isTrue(childElement.jsonProperties.Subject.Job.DgnV8.V8File === \"mf3.dgn\", \"Subject should have jsonProperty Subject.Job.DgnV.V8File\");\n assert.isTrue(childElement.jsonProperties.Subject.Job.DgnV8.V8RootModel === \"A\", \"Subject should have jsonProperty Subject.Job.DgnV.V8RootModel\");\n }\n }\n }\n });\n\n it(\"should load a known model by Id from an existing iModel\", () => {\n assert.exists(imodel1.models);\n const model2 = imodel1.models.getModel(\"0x1c\");\n assert.exists(model2);\n const formatter = model2.getJsonProperty(\"formatter\");\n assert.exists(formatter, \"formatter should exist as json property\");\n assert.equal(formatter.fmtFlags.angMode, 1, \"fmtFlags\");\n assert.equal(formatter.mastUnit.label, \"m\", \"mastUnit is meters\");\n roundtripThroughJson(model2);\n let model = imodel1.models.getModel(IModel.repositoryModelId);\n assert.exists(model);\n roundtripThroughJson(model);\n const code1 = new Code({ spec: \"0x1d\", scope: \"0x1d\", value: \"A\" });\n model = imodel1.models.getSubModel(code1);\n // By this point, we expect the submodel's class to be in the class registry *cache*\n const geomModel = ClassRegistry.getClass(PhysicalModel.classFullName, imodel1);\n assert.exists(model);\n assert.isTrue(model instanceof geomModel);\n roundtripThroughJson(model);\n const modelExtents: AxisAlignedBox3d = (model as PhysicalModel).queryExtents();\n\n assert.isBelow(modelExtents.low.x, modelExtents.high.x);\n assert.isBelow(modelExtents.low.y, modelExtents.high.y);\n assert.isBelow(modelExtents.low.z, modelExtents.high.z);\n });\n\n it(\"should find a tile tree for a geometric model\", async () => {\n // Note: this is an empty model.\n const tree = await imodel1.tiles.requestTileTreeProps(\"0x1c\");\n expect(tree).not.to.be.undefined;\n\n expect(tree.id).to.equal(\"0x1c\");\n expect(tree.maxTilesToSkip).to.equal(1);\n expect(tree.rootTile).not.to.be.undefined;\n\n // Empty model => identity transform\n const tf = Transform.fromJSON(tree.location);\n expect(tf.matrix.isIdentity).to.be.true;\n expect(tf.origin.x).to.equal(0);\n expect(tf.origin.y).to.equal(0);\n expect(tf.origin.z).to.equal(0);\n\n expect(tree.rootTile.contentId).to.equal(\"0/0/0/0/1\");\n\n // Empty model => null range\n const range = Range3d.fromJSON(tree.rootTile.range);\n expect(range.isNull).to.be.true;\n\n expect(tree.rootTile.maximumSize).to.equal(0.0); // empty model => undisplayable root tile => size = 0.0\n expect(tree.rootTile.isLeaf).to.be.true; // empty model => empty tile\n expect(tree.rootTile.contentRange).to.be.undefined;\n });\n\n it(\"should throw on invalid tile requests\", async () => {\n using _r = new DisableNativeAssertions();\n let error = await getIModelError(imodel1.tiles.requestTileTreeProps(\"0x12345\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileTreeProps(\"NotAValidId\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"0/0/0/0\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x12345\", \"0/0/0/0/1\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"V/W/X/Y/Z\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"NotAValidId\"));\n expectIModelError(IModelStatus.InvalidId, error);\n });\n\n // NOTE: this test can be removed when the deprecated executeQuery method is removed\n it(\"should produce an array of rows\", () => {\n const rows: any[] = IModelTestUtils.executeQuery(imodel1, `SELECT * FROM ${Category.classFullName}`);\n assert.exists(rows);\n assert.isArray(rows);\n assert.isAtLeast(rows.length, 1);\n assert.exists(rows[0].id);\n assert.notEqual(rows[0].id.value, \"\");\n });\n\n it(\"should be some categories\", () => {\n const categorySql = `SELECT ECInstanceId FROM ${Category.classFullName}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel1.withPreparedStatement(categorySql, (categoryStatement: ECSqlStatement): void => {\n let numCategories = 0;\n while (DbResult.BE_SQLITE_ROW === categoryStatement.step()) {\n numCategories++;\n const categoryId = categoryStatement.getValue(0).getId();\n const category: Element = imodel1.elements.getElement(categoryId);\n assert.isTrue(category instanceof Category, \"Should be instance of Category\");\n\n // verify the default subcategory.\n const defaultSubCategoryId = (category as Category).myDefaultSubCategoryId();\n const defaultSubCategory: Element = imodel1.elements.getElement(defaultSubCategoryId);\n assert.isTrue(defaultSubCategory instanceof SubCategory, \"defaultSubCategory should be instance of SubCategory\");\n if (defaultSubCategory instanceof SubCategory) {\n assert.isTrue(defaultSubCategory.parent!.id === categoryId, \"defaultSubCategory id should be prescribed value\");\n assert.isTrue(defaultSubCategory.getSubCategoryName() === category.code.value, \"DefaultSubcategory name should match that of Category\");\n assert.isTrue(defaultSubCategory.isDefaultSubCategory, \"isDefaultSubCategory should return true\");\n }\n\n // get the subcategories\n const subCategorySql = `SELECT ECInstanceId FROM ${SubCategory.classFullName} WHERE Parent.Id=:parentId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel1.withPreparedStatement(subCategorySql, (subCategoryStatement: ECSqlStatement): void => {\n let numSubCategories = 0;\n subCategoryStatement.bindId(\"parentId\", categoryId);\n while (DbResult.BE_SQLITE_ROW === subCategoryStatement.step()) {\n numSubCategories++;\n const subCategoryId = subCategoryStatement.getValue(0).getId();\n const subCategory: Element = imodel1.elements.getElement(subCategoryId);\n assert.isTrue(subCategory instanceof SubCategory);\n assert.isTrue(subCategory.parent!.id === categoryId);\n }\n assert.isAtLeast(numSubCategories, 1, \"Expected query to find at least one SubCategory\");\n });\n }\n assert.isAtLeast(numCategories, 1, \"Expected query to find some categories\");\n });\n });\n\n it(\"should be some 2d elements\", () => {\n const sql = `SELECT ECInstanceId FROM ${DrawingGraphic.classFullName}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(sql, (statement: ECSqlStatement): void => {\n let numDrawingGraphics = 0;\n let found25: boolean = false;\n let found26: boolean = false;\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n numDrawingGraphics++;\n const drawingGraphicId = statement.getValue(0).getId();\n const drawingGraphic = imodel2.elements.getElement<GeometricElement2d>({ id: drawingGraphicId, wantGeometry: true });\n assert.exists(drawingGraphic);\n assert.isTrue(drawingGraphic.className === \"DrawingGraphic\", \"Should be instance of DrawingGraphic\");\n assert.isTrue(drawingGraphic instanceof DrawingGraphic, \"Is instance of DrawingGraphic\");\n assert.isTrue(drawingGraphic instanceof GeometricElement2d, \"Is instance of GeometricElement2d\");\n if (Id64.getLocalId(drawingGraphic.id) === 0x25) {\n found25 = true;\n assert.isTrue(drawingGraphic.placement.origin.x === 0.0);\n assert.isTrue(drawingGraphic.placement.origin.y === 0.0);\n assert.isTrue(drawingGraphic.placement.angle.radians === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.x === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.y === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.x === 1.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.y === 1.0);\n assert.isDefined(drawingGraphic.geom);\n } else if (Id64.getLocalId(drawingGraphic.id) === 0x26) {\n found26 = true;\n assert.isTrue(drawingGraphic.placement.origin.x === 1.0);\n assert.isTrue(drawingGraphic.placement.origin.y === 1.0);\n assert.isTrue(drawingGraphic.placement.angle.radians === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.x === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.y === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.x === 2.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.y === 2.0);\n assert.isDefined(drawingGraphic.geom);\n }\n }\n assert.isAtLeast(numDrawingGraphics, 1, \"Expected query to find some DrawingGraphics\");\n assert.isTrue(found25, \"Expected to find a specific element\");\n assert.isTrue(found26, \"Expected to find a specific element\");\n });\n });\n\n it(\"should be able to query for ViewDefinitionProps\", () => {\n const viewDefinitionProps: ViewDefinitionProps[] = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions\n assert.isAtLeast(viewDefinitionProps.length, 3);\n assert.isTrue(viewDefinitionProps[0].classFullName.includes(\"ViewDefinition\"));\n assert.isFalse(viewDefinitionProps[1].isPrivate);\n\n const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps(\"BisCore.SpatialViewDefinition\") as SpatialViewDefinitionProps[]; // limit query to SpatialViewDefinitions\n assert.isAtLeast(spatialViewDefinitionProps.length, 3);\n assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);\n });\n\n it(\"should iterate ViewDefinitions\", () => {\n // imodel2 contains 3 SpatialViewDefinitions and no other views.\n let numViews = 0;\n let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for spatial views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.SpatialViewDefinition\" }, (view: ViewDefinition) => {\n if (view.isSpatialView())\n ++numViews;\n\n return view.isSpatialView();\n });\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for 2d views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.ViewDefinition2d\" }, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(0);\n\n // Terminate iteration on first view\n numViews = 0;\n result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return false;\n });\n\n expect(result).to.be.false;\n expect(numViews).to.equal(1);\n });\n\n it(\"should be children of RootSubject\", () => {\n const sql = `SELECT ECInstanceId FROM ${Model.classFullName} WHERE ParentModel.Id=:parentModelId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(sql, (statement: ECSqlStatement): void => {\n statement.bindId(\"parentModelId\", IModel.repositoryModelId);\n let numModels = 0;\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n numModels++;\n const modelId = statement.getValue(0).getId();\n const model = imodel2.models.getModel(modelId);\n assert.exists(model, \"Model should exist\");\n assert.isTrue(model instanceof Model);\n\n // should be an element with the same Id.\n const modeledElement = imodel2.elements.getElement(modelId);\n assert.exists(modeledElement, \"Modeled Element should exist\");\n\n if (model.className === \"LinkModel\") {\n // expect LinkModel to be accompanied by LinkPartition\n assert.isTrue(modeledElement instanceof LinkPartition);\n continue;\n } else if (model.className === \"DictionaryModel\") {\n assert.isTrue(modeledElement instanceof DefinitionPartition);\n continue;\n } else if (model.className === \"PhysicalModel\") {\n assert.isTrue(modeledElement instanceof PhysicalPartition);\n continue;\n } else if (model.className === \"GroupModel\") {\n assert.isTrue(modeledElement instanceof GroupInformationPartition);\n continue;\n } else if (model.className === \"DocumentListModel\") {\n assert.isTrue(modeledElement instanceof DocumentPartition);\n continue;\n } else if (model.className === \"DefinitionModel\") {\n assert.isTrue(modeledElement instanceof DefinitionPartition);\n continue;\n } else {\n assert.isTrue(false, \"Expected a known model type\");\n }\n }\n assert.isAtLeast(numModels, 1, \"Expected query to find some Models\");\n });\n });\n\n it(\"should insert and update auto-handled properties\", () => {\n const testElem = imodel4.elements.getElement(\"0x14\");\n assert.isDefined(testElem);\n assert.equal(testElem.classFullName, \"DgnPlatformTest:TestElementWithNoHandler\");\n assert.isUndefined(testElem.asAny.integerProperty1);\n\n const newTestElem = roundtripThroughJson(testElem) as Element;\n assert.equal(newTestElem.classFullName, testElem.classFullName);\n newTestElem.asAny.integerProperty1 = 999;\n assert.isTrue(testElem.asAny.arrayOfPoint3d[0].isAlmostEqual(newTestElem.asAny.arrayOfPoint3d[0]));\n\n const loc1 = { street: \"Elm Street\", city: { name: \"Downingtown\", state: \"PA\" } };\n const loc2 = { street: \"Oak Street\", city: { name: \"Downingtown\", state: \"PA\" } };\n const loc3 = { street: \"Chestnut Street\", city: { name: \"Philadelphia\", state: \"PA\" } };\n const arrayOfStructs = [loc2, loc3];\n newTestElem.asAny.location = loc1;\n newTestElem.asAny.arrayOfStructs = arrayOfStructs;\n newTestElem.asAny.dtUtc = new Date(\"2015-03-25\");\n newTestElem.asAny.p3d = new Point3d(1, 2, 3);\n\n const txn = new EditTxn(imodel4, \"insert and update auto-handled properties\");\n txn.start();\n const newTestElemId = txn.insertElement(newTestElem.toJSON());\n\n assert.isTrue(Id64.isValidId64(newTestElemId), \"insert worked\");\n\n const newTestElemFetched = imodel4.elements.getElement(newTestElemId);\n assert.isDefined(newTestElemFetched);\n assert.isTrue(newTestElemFetched.id === newTestElemId);\n assert.equal(newTestElemFetched.classFullName, newTestElem.classFullName);\n assert.isDefined(newTestElemFetched.asAny.integerProperty1);\n assert.equal(newTestElemFetched.asAny.integerProperty1, newTestElem.asAny.integerProperty1);\n assert.isTrue(newTestElemFetched.asAny.arrayOfPoint3d[0].isAlmostEqual(newTestElem.asAny.arrayOfPoint3d[0]));\n assert.deepEqual(newTestElemFetched.asAny.location, loc1);\n assert.deepEqual(newTestElem.asAny.arrayOfStructs, arrayOfStructs);\n // TODO: getElement must convert date ISO string to Date object assert.deepEqual(newTestElemFetched.dtUtc, newTestElem.dtUtc);\n assert.deepEqual(newTestElemFetched.asAny.dtUtc, newTestElem.asAny.dtUtc.toJSON());\n assert.isTrue(newTestElemFetched.asAny.p3d.isAlmostEqual(newTestElem.asAny.p3d));\n\n // ----------- updates ----------------\n const wasp3d = newTestElemFetched.asAny.p3d;\n const editElem = newTestElemFetched;\n editElem.asAny.location = loc2;\n try {\n txn.updateElement(editElem.toJSON());\n } catch {\n assert.fail(\"Element.update failed\");\n }\n const afterUpdateElemFetched = imodel4.elements.getElement(editElem.id);\n assert.deepEqual(afterUpdateElemFetched.asAny.location, loc2, \" location property should be the new one\");\n assert.deepEqual(afterUpdateElemFetched.asAny.id, editElem.id, \" the id should not have changed.\");\n assert.deepEqual(afterUpdateElemFetched.asAny.p3d, wasp3d, \" p3d property should not have changed\");\n\n // Make array shorter\n assert.equal(afterUpdateElemFetched.asAny.arrayOfInt.length, 300);\n\n afterUpdateElemFetched.asAny.arrayOfInt = [99, 3];\n txn.updateElement(afterUpdateElemFetched.toJSON());\n\n const afterShortenArray = imodel4.elements.getElement(afterUpdateElemFetched.id);\n assert.equal(afterUpdateElemFetched.asAny.arrayOfInt.length, 2);\n assert.deepEqual(afterShortenArray.asAny.arrayOfInt, [99, 3]);\n\n // Make array longer\n afterShortenArray.asAny.arrayOfInt = [1, 2, 3];\n txn.updateElement(afterShortenArray.toJSON());\n const afterLengthenArray = imodel4.elements.getElement(afterShortenArray.id);\n assert.equal(afterLengthenArray.asAny.arrayOfInt.length, 3);\n assert.deepEqual(afterLengthenArray.asAny.arrayOfInt, [1, 2, 3]);\n\n // ------------ delete -----------------\n const elid = afterUpdateElemFetched.id;\n txn.deleteElement(elid);\n assert.throws(() => imodel4.elements.getElement(elid), IModelError);\n txn.end();\n });\n\n it(\"should handle parent and child deletion properly\", () => {\n const txn = new EditTxn(imodel4, \"handle parent and child deletion\");\n txn.start();\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MyTestCategory\", new SubCategoryAppearance());\n const category = imodel4.elements.getElement<SpatialCategory>(categoryId);\n const subCategory = imodel4.elements.getElement<SubCategory>(category.myDefaultSubCategoryId());\n expect(() => txn.deleteElement(categoryId)).throws(\"error deleting element\").to.have.property(\"metadata\");\n assert.exists(imodel4.elements.getElement(categoryId), \"Category deletes should be blocked in native code\");\n assert.exists(imodel4.elements.getElement(subCategory.id), \"Children should not be deleted if parent delete is blocked\");\n\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"MyTestPhysicalModel\");\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n category: categoryId,\n code: Code.createEmpty(),\n };\n const parentId = txn.insertElement(elementProps);\n elementProps.parent = new ElementOwnsChildElements(parentId);\n const childId1 = txn.insertElement(elementProps);\n const childId2 = txn.insertElement(elementProps);\n assert.exists(imodel4.elements.getElement(parentId));\n assert.exists(imodel4.elements.getElement(childId1));\n assert.exists(imodel4.elements.getElement(childId2));\n txn.deleteElement(parentId);\n assert.throws(() => imodel4.elements.getElement(parentId), IModelError);\n assert.throws(() => imodel4.elements.getElement(childId1), IModelError);\n assert.throws(() => imodel4.elements.getElement(childId2), IModelError);\n txn.end();\n });\n\n function checkElementMetaData(entityClass: EntityClass) {\n assert.isNotNull(entityClass);\n assert.equal(entityClass.fullName, Element.classFullName.replace(\":\", \".\"));\n assert.isUndefined(entityClass.baseClass);\n\n let foundClassHasHandler = false;\n let foundClassHasCurrentTimeStampProperty = false;\n if (entityClass.customAttributes !== undefined) {\n if (entityClass.customAttributes.has(\"BisCore.ClassHasHandler\"))\n foundClassHasHandler = true;\n if (entityClass.customAttributes.has(\"CoreCustomAttributes.ClassHasCurrentTimeStampProperty\"))\n foundClassHasCurrentTimeStampProperty = true;\n }\n assert.isTrue(foundClassHasHandler);\n assert.isTrue(foundClassHasCurrentTimeStampProperty);\n const federationGuid = entityClass.getPropertySync(\"federationGuid\", false);\n if (federationGuid !== undefined) {\n assert.isTrue(federationGuid.isPrimitive());\n assert.equal(federationGuid.propertyType, PropertyType.Binary);\n assert.equal((federationGuid as PrimitiveOrEnumPropertyBase).extendedTypeName, \"BeGuid\");\n }\n }\n\n it(\"should get metadata for a relationship\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"relationshipMetadata.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } });\n\n await withEditTxn(imodel, async (txn) => {\n const partitionId = txn.insertElement({\n classFullName: \"BisCore:PhysicalPartition\",\n model: IModel.repositoryModelId,\n parent: {\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\n id: IModel.rootSubjectId,\n },\n code: new Code({\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\n scope: IModel.rootSubjectId,\n value: \"physical model\",\n }),\n });\n\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\n const relId = txn.insertRelationship({\n classFullName: \"BisCore:ElementHasLinks\",\n sourceId: partitionId,\n targetId: row.ECInstanceId,\n });\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const metadata = await relationship.getMetaData();\n assert.isDefined(metadata, \"metadata should be defined\");\n }\n });\n imodel.close();\n });\n\n it(\"should get metadata for class\", () => {\n const metaData = imodel1.schemaContext.getSchemaItemSync(Element.classFullName, EntityClass);\n assert.exists(metaData);\n if (metaData !== undefined)\n checkElementMetaData(metaData);\n });\n\n it(\"should iterate through metadata for a relationship\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"relationshipMetadata.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } });\n\n await withEditTxn(imodel, async (txn) => {\n const partitionId = txn.insertElement({\n classFullName: \"BisCore:PhysicalPartition\",\n model: IModel.repositoryModelId,\n parent: {\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\n id: IModel.rootSubjectId,\n },\n code: new Code({\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\n scope: IModel.rootSubjectId,\n value: \"physical model\",\n }),\n });\n\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\n const relId = txn.insertRelationship({\n classFullName: \"BisCore:ElementHasLinks\",\n sourceId: partitionId,\n targetId: row.ECInstanceId,\n });\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n relationship.forEach((propName, propMeta) => {\n assert.isDefined(propName, \"Property name should be defined\");\n assert.isDefined(propMeta, \"Property metadata should be defined\");\n });\n }\n });\n\n imodel.close();\n });\n\n it(\"update the project extents\", async () => {\n const originalExtents = imodel1.projectExtents;\n const newExtents = Range3d.create(originalExtents.low, originalExtents.high);\n newExtents.low.x -= 50;\n newExtents.low.y -= 25;\n newExtents.low.z -= 189;\n newExtents.high.x += 1087;\n newExtents.high.y += 19;\n newExtents.high.z += .001;\n await withEditTxn(imodel1, async (txn) => txn.updateProjectExtents(newExtents));\n\n const updatedProps = imodel1[_nativeDb].getIModelProps();\n assert.isTrue(updatedProps.hasOwnProperty(\"projectExtents\"), \"Returned property JSON object has project extents\");\n const updatedExtents = Range3d.fromJSON(updatedProps.projectExtents);\n assert.isTrue(newExtents.isAlmostEqual(updatedExtents), \"Project extents successfully updated in database\");\n });\n\n it(\"read view thumbnail\", () => {\n const viewId = \"0x24\";\n const thumbnail = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail);\n if (!thumbnail)\n return;\n assert.equal(thumbnail.format, \"jpeg\");\n assert.equal(thumbnail.height, 768);\n assert.equal(thumbnail.width, 768);\n assert.equal(thumbnail.image.length, 18062);\n\n thumbnail.width = 100;\n thumbnail.height = 200;\n thumbnail.format = \"png\";\n thumbnail.image = new Uint8Array(200);\n thumbnail.image.fill(12);\n const stat = imodel5.views.saveThumbnail(viewId, thumbnail);\n assert.equal(stat, 0, \"save thumbnail\");\n\n const thumbnail2 = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail2);\n if (!thumbnail2)\n return;\n assert.equal(thumbnail2.format, \"png\");\n assert.equal(thumbnail2.height, 200);\n assert.equal(thumbnail2.width, 100);\n assert.equal(thumbnail2.image.length, 200);\n assert.equal(thumbnail2.image[0], 12);\n });\n\n it(\"ecefLocation for iModels\", () => {\n assert.isTrue(imodel5.isGeoLocated);\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\n const ecefPt = imodel5.spatialToEcef(center);\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\n\n const z2 = imodel5.ecefToSpatial(ecefPt);\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\n\n const carto = imodel5.spatialToCartographicFromEcef(center);\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\n\n imodel5.cartographicToSpatialFromEcef(carto, z2);\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\n\n assert.isTrue(imodel5.geographicCoordinateSystem !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\n });\n\n function checkClassHasHandlerMetaData(classToCheck: CustomAttributeClass) {\n assert.isDefined(classToCheck);\n\n const propertiesArray = Array.from(classToCheck.getPropertiesSync(true));\n assert.equal(propertiesArray.length, 1);\n\n const restrictionProperty = propertiesArray[0];\n assert.isDefined(restrictionProperty);\n assert.equal(restrictionProperty.name, \"Restrictions\");\n assert.equal(propertyTypeToString(restrictionProperty.propertyType), \"PrimitiveArrayProperty\");\n assert.equal((restrictionProperty as PrimitiveArrayProperty).minOccurs, 0);\n }\n\n it(\"should get metadata for CA class just as well (and we'll see a array-typed property)\", () => {\n const metaData = imodel1.schemaContext.getSchemaItemSync(\"BisCore.ClassHasHandler\", CustomAttributeClass);\n assert.exists(metaData);\n if (metaData !== undefined) {\n assert.equal(metaData.schemaItemType, SchemaItemType.CustomAttributeClass);\n checkClassHasHandlerMetaData(metaData);\n }\n });\n\n it(\"should exercise ECSqlStatement (backend only)\", () => {\n // Reject an invalid statement\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.prepareStatement(\"select no_such_property, codeValue from bis.element\", false);\n assert.fail(\"prepare should have failed with an exception\");\n } catch (err: any) {\n assert.isTrue(err.constructor.name === \"IModelError\");\n assert.notEqual(err.status, DbResult.BE_SQLITE_OK);\n }\n let lastId: string = \"\";\n let firstCodeValue: string = \"\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element\", (stmt: ECSqlStatement) => {\n assert.isNotNull(stmt);\n // Reject an attempt to bind when there are no placeholders in the statement\n try {\n stmt.bindStruct(1, { foo: 1 });\n assert.fail(\"bindStruct should have failed with an exception\");\n } catch (err2: any) {\n assert.isTrue(err2.constructor.name === \"IModelError\");\n assert.notEqual(err2.status, DbResult.BE_SQLITE_OK);\n }\n\n // Verify that we get a bunch of rows with the expected shape\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const row = stmt.getRow();\n assert.isNotNull(row);\n assert.isObject(row);\n assert.isTrue(row.id !== undefined);\n assert.isTrue(Id64.isValid(Id64.fromJSON(row.id)));\n lastId = row.id;\n if (row.codeValue !== undefined)\n firstCodeValue = row.codeValue;\n count = count + 1;\n }\n assert.isTrue(count > 1);\n assert.notEqual(lastId, \"\");\n assert.notEqual(firstCodeValue, \"\");\n\n // Try iterator style\n let firstCodeValueIter: string = \"\";\n let iteratorCount = 0;\n let lastIterId: string = \"\";\n stmt.reset();\n for (const row of stmt) {\n assert.isNotNull(row);\n assert.isObject(row);\n assert.isTrue(row.id !== undefined);\n assert.isTrue(Id64.isValid(Id64.fromJSON(row.id)));\n lastIterId = row.id;\n iteratorCount = iteratorCount + 1;\n if (row.codeValue !== undefined)\n firstCodeValueIter = row.codeValue;\n }\n assert.equal(iteratorCount, count, \"iterator loop should find the same number of rows as the step loop\");\n assert.equal(lastIterId, lastId, \"iterator loop should see the same last row as the step loop\");\n assert.equal(firstCodeValueIter, firstCodeValue, \"iterator loop should find the first non-null code value as the step loop\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element WHERE (ecinstanceid=?)\", (stmt3: ECSqlStatement) => {\n // Now try a statement with a placeholder\n const idToFind = Id64.fromJSON(lastId);\n stmt3.bindId(1, idToFind);\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt3.step()) {\n count = count + 1;\n const row = stmt3.getRow();\n // Verify that we got the row that we asked for\n assert.isTrue(idToFind === Id64.fromJSON(row.id));\n }\n // Verify that we got the row that we asked for\n assert.equal(count, 1);\n });\n\n let firstCodeValueId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element WHERE (codeValue = :codevalue)\", (stmt4: ECSqlStatement) => {\n // Try a named placeholder\n const codeValueToFind = firstCodeValue;\n stmt4.bindString(\"codeValue\", codeValueToFind);\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt4.step()) {\n count = count + 1;\n const row = stmt4.getRow();\n // Verify that we got the row that we asked for\n assert.equal(row.codeValue, codeValueToFind);\n firstCodeValueId = row.id;\n }\n // Verify that we got the row that we asked for\n assert.equal(count, 1);\n });\n\n // make sure we can use parameterized values for queryEnityId (test on parameterized codevalue)\n const ids = imodel2.queryEntityIds({ from: \"bis.element\", where: \"codevalue=:cv\", bindings: { cv: firstCodeValue } });\n assert.equal(ids.values().next().value, firstCodeValueId);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid as id, codevalue from bis.element\", (stmt5: ECSqlStatement) => {\n while (DbResult.BE_SQLITE_ROW === stmt5.step()) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select codevalue from bis.element where ecinstanceid=?\", (stmt6: ECSqlStatement) => {\n stmt6.bindId(1, stmt5.getRow().id);\n while (DbResult.BE_SQLITE_ROW === stmt6.step()) {\n assert.equal(stmt6.getRow().codevalue, stmt5.getRow().codevalue);\n }\n });\n }\n });\n\n // make sure queryEnityIds works fine when all params are specified\n const physicalObjectIds = imodel2.queryEntityIds({ from: \"generic.PhysicalObject\", where: \"codevalue is null\", limit: 1, offset: 1, only: true, orderBy: \"ecinstanceid desc\" });\n assert.equal(physicalObjectIds.size, 1);\n });\n\n it(\"validate BisCodeSpecs\", async () => {\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.nullCodeSpec).scopeType, CodeScopeSpec.Type.Repository);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subCategory).scopeType, CodeScopeSpec.Type.ParentElement);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.viewDefinition).scopeType, CodeScopeSpec.Type.Model);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subject).scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\n });\n\n it(\"should create and insert CodeSpecs\", () => {\n const testImodel = imodel2;\n const txn = new EditTxn(testImodel, \"create and insert CodeSpecs\");\n txn.start();\n const codeSpec = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\n const codeSpecId = testImodel.codeSpecs.insert(txn, codeSpec); // throws in case of error\n assert.deepEqual(codeSpecId, codeSpec.id);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\n\n // Should not be able to insert a duplicate.\n const codeSpecDup = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\n assert.throws(() => testImodel.codeSpecs.insert(txn, codeSpecDup), \"CodeSpec already exists\");\n\n // We should be able to insert another CodeSpec with a different name.\n const codeSpec2 = CodeSpec.create(testImodel, \"CodeSpec2\", CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpec2Id = testImodel.codeSpecs.insert(txn, codeSpec2); // throws in case of error\n assert.deepEqual(codeSpec2Id, codeSpec2.id);\n assert.notDeepEqual(codeSpec2Id, codeSpecId);\n\n // make sure CodeScopeSpec.Type.Repository works\n const codeSpec3 = CodeSpec.create(testImodel, \"CodeSpec3\", CodeScopeSpec.Type.Repository, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpec3Id = testImodel.codeSpecs.insert(txn, codeSpec3); // throws in case of error\n assert.notDeepEqual(codeSpec2Id, codeSpec3Id);\n\n const codeSpec4 = testImodel.codeSpecs.getById(codeSpec3Id);\n codeSpec4.name = \"CodeSpec4\";\n const codeSpec4Id = testImodel.codeSpecs.insert(txn, codeSpec4); // throws in case of error\n assert.notDeepEqual(codeSpec3Id, codeSpec4Id);\n assert.equal(codeSpec4.scopeType, CodeScopeSpec.Type.Repository);\n assert.equal(codeSpec4.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const copyOfCodeSpec4 = testImodel.codeSpecs.getById(codeSpec4Id);\n assert.deepEqual(codeSpec4, copyOfCodeSpec4);\n\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec1\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec2\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec3\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec4\"));\n assert.isFalse(testImodel.codeSpecs.hasName(\"CodeSpec5\"));\n\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec2.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec3.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec4.id));\n assert.isFalse(testImodel.codeSpecs.hasId(Id64.invalid));\n txn.end();\n });\n\n it(\"validate CodeSpec properties\", async () => {\n const iModelFileName: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"ReadWriteCodeSpec.bim\");\n const codeSpecName = \"CodeSpec1\";\n\n // Write new CodeSpec to iModel\n if (true) {\n const iModelDb = IModelTestUtils.createSnapshotFromSeed(iModelFileName, IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\"));\n const codeSpec = CodeSpec.create(iModelDb, codeSpecName, CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpecId = withEditTxn(iModelDb, (txn) => iModelDb.codeSpecs.insert(txn, codeSpec));\n assert.isTrue(Id64.isValidId64(codeSpec.id));\n assert.equal(codeSpec.id, codeSpecId);\n assert.equal(codeSpec.name, codeSpecName);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n iModelDb.close();\n }\n\n // Reopen iModel (ensure CodeSpec cache is cleared) and reconfirm CodeSpec properties\n if (true) {\n const iModelDb = SnapshotDb.openFile(iModelFileName);\n const codeSpec = iModelDb.codeSpecs.getByName(codeSpecName);\n assert.isTrue(Id64.isValidId64(codeSpec.id));\n assert.equal(codeSpec.name, codeSpecName);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n iModelDb.close();\n }\n });\n\n it(\"snapping\", async () => {\n const worldToView = Matrix4d.createIdentity();\n const response = await imodel2.requestSnap(\"0x222\", { testPoint: { x: 1, y: 2, z: 3 }, closePoint: { x: 1, y: 2, z: 3 }, id: \"0x111\", worldToView: worldToView.toJSON() });\n assert.isDefined(response.status);\n });\n\n it(\"should import schemas\", async () => {\n const metaData = await imodel1.schemaContext.getSchemaItem(\"TestBim:TestDocument\", EntityClass);\n assert.isDefined(metaData);\n if (metaData !== undefined) {\n const property = await metaData.getProperty(\"testDocumentProperty\");\n assert.isDefined(property);\n if (property !== undefined)\n assert.isDefined(property.propertyType, propertyTypeToString(PropertyType.Integer));\n }\n });\n\n it(\"should do CRUD on models\", () => {\n\n const testImodel = imodel2;\n const txn = new EditTxn(testImodel, \"CRUD on models\");\n txn.start();\n\n const [modeledElementId, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n\n const newModelPersist = testImodel.models.getModel(newModelId);\n\n // Check that it has the properties that we set.\n assert.equal(newModelPersist.classFullName, PhysicalModel.classFullName);\n assert.isTrue(newModelPersist.isPrivate);\n assert.deepEqual(newModelPersist.modeledElement.id, modeledElementId);\n\n // Update the model\n newModelPersist.isPrivate = false;\n txn.updateModel(newModelPersist.toJSON());\n // ... and check that it updated the model in the db\n const newModelPersist2 = testImodel.models.getModel(newModelId);\n assert.isFalse(newModelPersist2.isPrivate);\n\n // Delete the model\n txn.deleteModel(newModelId);\n\n // Test insertModel error handling\n try {\n txn.insertModel({\n classFullName: DefinitionModel.classFullName,\n modeledElement: { id: \"0x10000000bad\" },\n });\n } catch (error: any) {\n assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);\n }\n\n txn.end();\n\n });\n\n it(\"should create model with custom relationship to modeled element\", async () => {\n const testImodel = imodel1;\n const txn = new EditTxn(testImodel, \"custom relationship to modeled element\");\n\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestModelModelsElement\", EntityClass), \"TestModelModelsElement is expected to be defined in TestBim.ecschema.xml\");\n\n txn.start();\n const newPartition1 = IModelTestUtils.createAndInsertPhysicalPartition(txn, Code.createEmpty());\n const relClassName1 = \"TestBim:TestModelModelsElement\";\n const modeledElementRef = new RelatedElement({ id: newPartition1, relClassName: relClassName1 });\n const newModelId1 = IModelTestUtils.createAndInsertPhysicalModel(txn, modeledElementRef);\n assert.isTrue(Id64.isValidId64(newModelId1));\n const [, newModelId2] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty());\n txn.end();\n const newModel2 = testImodel.models.getModel(newModelId2);\n const relClassName2 = newModel2.modeledElement.relClassName;\n\n const model1 = testImodel.models.getModel(newModelId1);\n const model2 = testImodel.models.getModel(newModelId2);\n\n const foundRelClassName1 = model1.modeledElement.relClassName;\n const foundRelClassName2 = model2.modeledElement.relClassName;\n\n assert.equal(foundRelClassName1, relClassName1);\n assert.equal(foundRelClassName2, relClassName2);\n });\n\n it(\"should create link table relationship instances\", () => {\n const snapshotFile2: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"CreateLinkTable.bim\");\n const testImodel = StandaloneDb.createEmpty(snapshotFile2, { rootSubject: { name: \"test1\" }, enableTransactions: true });\n const txn = new EditTxn(testImodel, \"link table relationship instances\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n const id2 = txn.insertElement(elementProps);\n\n const geometricModel = testImodel.models.getModel<GeometricModel>(newModelId);\n assert.throws(() => geometricModel.queryExtents()); // no geometry\n\n // Create grouping relationships from 0 to 1 and from 0 to 2\n const r1 = ElementGroupsMembers.create(testImodel, id0, id1, 1);\n r1.id = txn.insertRelationship(r1.toJSON());\n const r2 = ElementGroupsMembers.create(testImodel, id0, id2);\n r2.id = txn.insertRelationship(r2.toJSON());\n\n // Look up by id\n const g1 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n const g2 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r2.id);\n\n assert.deepEqual(g1.id, r1.id);\n assert.equal(g1.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g1.memberPriority, 1, \"g1.memberPriority\");\n assert.deepEqual(g2.id, r2.id);\n assert.equal(g2.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g2.memberPriority, 0, \"g2.memberPriority\"); // The memberPriority parameter defaults to 0 in ElementGroupsMembers.create\n\n // Look up by source and target\n const g1byst = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, { sourceId: r1.sourceId, targetId: r1.targetId });\n assert.deepEqual(g1byst, g1);\n\n // Update relationship instance property\n r1.asAny.memberPriority = 2;\n txn.updateRelationship(r1.toJSON());\n\n const g11 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n assert.equal(g11.memberPriority, 2, \"g11.memberPriority\");\n txn.saveChanges(\"step 1\");\n\n // Delete relationship instance property\n txn.deleteRelationship(g11.toJSON());\n txn.saveChanges(\"step 2\");\n assert.throws(() => ElementGroupsMembers.getInstance(testImodel, r1.id), IModelError);\n\n const d0 = txn.insertElement(elementProps);\n const d1 = txn.insertElement(elementProps);\n const ede1 = ElementDrivesElement.create(testImodel, d0, d1, 0);\n ede1.id = txn.insertRelationship(ede1.toJSON());\n txn.saveChanges(\"step 3\");\n\n txn.deleteRelationship(ede1.toJSON());\n txn.end(\"save\", \"step 4\");\n testImodel.close();\n });\n\n it(\"should insert DefinitionSets\", () => {\n const iModelFileName: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"DefinitionSets.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"DefinitionSets\" }, createClassViews: true });\n const txn = new EditTxn(iModelDb, \"definition sets\");\n txn.start();\n const definitionContainerId = DefinitionContainer.insert(txn, IModel.dictionaryId, Code.createEmpty());\n assert.exists(iModelDb.elements.getElement<DefinitionContainer>(definitionContainerId));\n assert.exists(iModelDb.models.getModel<DefinitionModel>(definitionContainerId));\n const categoryId1 = SpatialCategory.insert(txn, definitionContainerId, \"Category1\", new SubCategoryAppearance());\n const categoryId2 = SpatialCategory.insert(txn, definitionContainerId, \"Category2\", new SubCategoryAppearance());\n const categoryId3 = SpatialCategory.insert(txn, definitionContainerId, \"Category3\", new SubCategoryAppearance());\n const definitionGroupId = DefinitionGroup.create(iModelDb, definitionContainerId, Code.createEmpty()).insert(txn);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId1);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId2);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId3);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const numMembers = iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${DefinitionGroupGroupsDefinitions.classFullName}`, (statement: ECSqlStatement): number => {\n return statement.step() === DbResult.BE_SQLITE_ROW ? statement.getValue(0).getInteger() : 0;\n });\n assert.equal(numMembers, 3);\n txn.end();\n iModelDb.close();\n });\n\n it(\"should set EC properties of various types\", async () => {\n\n const testImodel = imodel1;\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestPhysicalObject\", EntityClass), \"TestPhysicalObject is expected to be defined in TestBim.ecschema.xml\");\n const txn = new EditTxn(testImodel, \"set EC properties of various types\");\n txn.start();\n\n // Create a new physical model\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n\n // Find or create a SpatialCategory\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")!;\n if (undefined === spatialCategoryId) {\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\n }\n\n const trelClassName = \"TestBim:TestPhysicalObjectRelatedToTestPhysicalObject\";\n\n let id1: Id64String;\n let id2: Id64String;\n\n if (true) {\n // Create a couple of TestPhysicalObjects\n const elementProps: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n id1 = txn.insertElement(testImodel.elements.createElement(elementProps).toJSON());\n assert.isTrue(Id64.isValidId64(id1));\n\n // The second one should point to the first.\n elementProps.id = Id64.invalid;\n (elementProps as any).relatedElement = { id: id1, relClassName: trelClassName };\n elementProps.parent = { id: id1, relClassName: trelClassName };\n (elementProps as any).longProp = 4294967295; // make sure that we can save values in the range 0 ... UINT_MAX\n\n id2 = txn.insertElement(testImodel.elements.createElement(elementProps).toJSON());\n assert.isTrue(Id64.isValidId64(id2));\n }\n\n if (true) {\n // Test that el2 points to el1\n const el2 = testImodel.elements.getElement(id2);\n assert.equal(el2.classFullName, \"TestBim:TestPhysicalObject\");\n assert.isTrue(\"relatedElement\" in el2);\n assert.isTrue(\"id\" in el2.asAny.relatedElement);\n assert.deepEqual(el2.asAny.relatedElement.id, id1);\n assert.equal(el2.asAny.longProp, 4294967295);\n\n // Even though I didn't set it, the platform knows the relationship class and reports it.\n assert.isTrue(\"relClassName\" in el2.asAny.relatedElement);\n assert.equal(el2.asAny.relatedElement.relClassName.replace(\".\", \":\"), trelClassName);\n }\n\n if (true) {\n // Change el2 to point to itself.\n const el2Modified = testImodel.elements.getElement(id2);\n el2Modified.asAny.relatedElement = { id: id2, relClassName: trelClassName };\n txn.updateElement(el2Modified.toJSON());\n // Test that el2 points to itself.\n const el2after: Element = testImodel.elements.getElement(id2);\n assert.deepEqual(el2after.asAny.relatedElement.id, id2);\n assert.equal(el2after.asAny.relatedElement.relClassName.replace(\".\", \":\"), trelClassName);\n }\n\n if (true) {\n // Test that we can null out the navigation property\n const el2Modified = testImodel.elements.getElement(id2);\n el2Modified.asAny.relatedElement = null;\n txn.updateElement(el2Modified.toJSON());\n // Test that el2 has no relatedElement property value\n const el2after: Element = testImodel.elements.getElement(id2);\n assert.isUndefined(el2after.asAny.relatedElement);\n }\n\n txn.end();\n });\n\n it(\"should be able to create a snapshot IModel\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot.bim\"), args);\n assert.equal(iModel.iModelId, args.guid);\n assert.equal(iModel.rootSubject.name, args.rootSubject.name);\n assert.equal(iModel.rootSubject.description, args.rootSubject.description);\n assert.equal(iModel.projectExtents.low.x, args.projectExtents.low.x);\n assert.equal(iModel.projectExtents.low.y, args.projectExtents.low.y);\n assert.equal(iModel.projectExtents.low.z, args.projectExtents.low.z);\n assert.equal(iModel.globalOrigin.x, args.globalOrigin.x);\n assert.equal(iModel.globalOrigin.y, args.globalOrigin.y);\n assert.equal(iModel.globalOrigin.z, 0);\n\n const client = iModel.queryFilePropertyString({ name: \"Client\", namespace: \"dgn_Db\" });\n assert.equal(client, args.client, \"query Client property\");\n\n const dbguid = iModel.queryFilePropertyBlob({ name: \"DbGuid\", namespace: \"be_Db\" });\n assert.equal(dbguid!.byteLength, 16, \"query guid property\");\n\n const myPropsStr: FilePropertyProps = { name: \"MyProp\", namespace: \"test1\", id: 1, subId: 1 };\n const myStrVal = \"this is a test\";\n const myPropsBlob: FilePropertyProps = { name: \"MyBlob\", namespace: \"test1\", id: 10 };\n const testRange = new Uint8Array(500);\n testRange.fill(11);\n withEditTxn(iModel, (txn) => {\n txn.saveFileProperty(myPropsStr, myStrVal);\n const readFromDb = iModel.queryFilePropertyString(myPropsStr);\n assert.equal(readFromDb, myStrVal, \"query string after save\");\n\n txn.saveFileProperty(myPropsBlob, undefined, testRange);\n const blobFromDb = iModel.queryFilePropertyBlob(myPropsBlob);\n assert.deepEqual(blobFromDb, testRange, \"query blob after save\");\n\n let next = iModel.queryNextAvailableFileProperty(myPropsBlob);\n assert.equal(11, next, \"queryNextAvailableFileProperty blob\");\n\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(2, next, \"queryNextAvailableFileProperty str\");\n txn.deleteFileProperty(myPropsStr);\n assert.isUndefined(iModel.queryFilePropertyString(myPropsStr), \"property was deleted\");\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(0, next, \"queryNextAvailableFileProperty, should return 0 when none present\");\n });\n\n const testLocal = \"TestLocal\";\n const testValue = \"this is a test\";\n const nativeDb = iModel[_nativeDb];\n assert.isUndefined(nativeDb.queryLocalValue(testLocal));\n nativeDb.saveLocalValue(testLocal, testValue);\n assert.equal(nativeDb.queryLocalValue(testLocal), testValue);\n\n iModel.close();\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n let eventListenedTo = false;\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\n assert.equal(previousGCS, undefined);\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\n eventListenedTo = true;\n };\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\n\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\n\n assert.isFalse(eventListenedTo);\n\n iModel.geographicCoordinateSystem = gcs;\n\n assert.isTrue(eventListenedTo);\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n\n // The reloaded gcs will be different as the datum definition will have been expanded\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\n\n // But other properties will be identical\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\n\n // The following were not in initial definition but were completed after storage.\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\n\n // When a gcs is present then the ECEF is automatically defined.\n assert.isTrue(iModel2.ecefLocation !== undefined);\n\n iModel2.close();\n });\n\n describe(\"async coordinate conversions\", () => {\n it(\"should output same number of points as input\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await imodel5.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.geoCoords.length).to.equal(numPts);\n\n const iModelResponse = await imodel5.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n\n it(\"should always have fromCache = 0\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await imodel5.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.fromCache).to.equal(0);\n\n const iModelResponse = await imodel5.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n expect(iModelResponse.fromCache).to.equal(0);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n });\n\n if (!ProcessDetector.isIOSAppBackend) {\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\n\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 0.0, y: 0.0 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n let datumOrGCS: string;\n if (typeof datum === \"object\")\n datumOrGCS = JSON.stringify(datum);\n else\n datumOrGCS = datum;\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n withEditTxn(iModel, (txn) => {\n iModel.setGeographicCoordinateSystem(fileGCS);\n txn.updateIModelProps();\n });\n\n const testPoint1: XYZProps[] = [];\n testPoint1.push(inputCoord);\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\n\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\n\n // If success or warning we compare result\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\n\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\n\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\n expect(Math.abs(expectedPt1.z - outPt1.z) < 0.0001).to.be.true;\n\n // No point testing reversal when Out of useful range since reversibility is doubtful\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\n const testPoint2: XYZProps[] = [];\n testPoint2.push(outputCoord.p);\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\n\n const expectedPt2 = Point3d.fromJSON(inputCoord);\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\n\n expect(expectedPt2.distanceXY(outPt2) < 0.001).to.be.true;\n expect(Math.abs(expectedPt2.z - outPt2.z) < 0.001).to.be.true;\n }\n }\n\n iModel.close();\n };\n\n const EWRGCS: GeographicCRSProps = {\n horizontalCRS: {\n id: \"EPSG:27700\",\n description: \"OSGB 1936 / British National Grid\",\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n datumId: \"EPSG:6277\",\n datum: {\n id: \"EPSG:6277\",\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n deprecated: true,\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n ellipsoidId: \"EPSG:7001\",\n ellipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n description: \"Airy 1830\",\n source: \"EPSG, Version 6 [EPSG]\",\n },\n transforms: [\n {\n method: \"PositionalVector\",\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n polarRadius: 6356752.3142,\n id: \"WGS84\",\n },\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n }],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n falseEasting: 400000,\n falseNorthing: -100000,\n centralMeridian: -2,\n latitudeOfOrigin: 49,\n scaleFactor: 0.999601272737422,\n },\n extent: {\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n },\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 284597.3343,\n translationY: 79859.4651,\n translationZ: 0,\n rotDeg: 0.5263624458992088,\n scale: 0.9996703340508721,\n },\n },\n };\n\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\n {\n horizontalCRS: {\n id: \"HS2-MOCK\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"HS2SD_2015\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -1.5,\n latitudeOfOrigin: 52.30,\n scaleFactor: 1.0,\n falseEasting: 198873.0046,\n falseNorthing: 375064.3871,\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\n {\n horizontalCRS: {\n id: \"California2\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"NAD83\",\n unit: \"Meter\",\n projection: {\n method: \"LambertConformalConicTwoParallels\",\n longitudeOfOrigin: -122,\n latitudeOfOrigin: 37.66666666667,\n standardParallel1: 39.833333333333336,\n standardParallel2: 38.333333333333336,\n falseEasting: 2000000.0,\n falseNorthing: 500000.0,\n },\n extent: {\n southWest: {\n latitude: 35,\n longitude: -125,\n },\n northEast: {\n latitude: 39.1,\n longitude: -120.45,\n },\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n\n // Do some test that return errors\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\n\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\n // -6618.5925260757449, 36058.097489683532\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\n horizontalCRS: {\n id: \"User1\",\n datumId: \"UserDatum1\",\n datum: {\n id: \"UserDatum1\",\n ellipsoidId: \"CLRK66\",\n transforms: [\n {\n method: \"GridFiles\",\n sourceEllipsoid: {\n id: \"CLRK66\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n targetEllipsoid: {\n id: \"WGS84\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n gridFile: {\n files: [\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\n ],\n },\n },\n ],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 1.0,\n falseNorthing: 2.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n }, verticalCRS: { id: \"ELLIPSOID\" },\n };\n\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\n\n // The model GCS is not valid\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n // The given GCS is not valid\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n });\n }\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 0, pitch: 0, roll: 0 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"presence of a GCS imposes the ecef value\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\n\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\n\n iModel2.geographicCoordinateSystem = gcs;\n\n withEditTxn(iModel2, (txn) => {\n txn.updateIModelProps();\n });\n iModel2.close();\n\n const iModel3 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\n\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\n assert.isTrue(iModel3.ecefLocation !== undefined);\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\n\n iModel3.close();\n });\n\n it(\"should be able to open checkpoints for RPC\", async () => {\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\n const iTwinId = \"fakeIModelId\";\n const iModelId = \"fakeIModelId\";\n const cloudContainer = { accessToken: \"sas\" };\n const fakeSnapshotDb: any =\n {\n cloudContainer,\n isReadonly: () => true,\n isOpen: () => true,\n getIModelId: () => iModelId,\n getITwinId: () => iTwinId,\n getCurrentChangeset: () => changeset,\n hasUnsavedChanges: () => false,\n setIModelDb: () => { },\n closeFile: () => { },\n clearECDbCache: () => { },\n };\n\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\n\n // Mock iModelHub\n const mockCheckpointV2: V2CheckpointAccessProps = {\n accountName: \"testAccount\",\n containerId: \"imodelblocks-123\",\n sasToken: \"testSAS\",\n dbName: \"testDb\",\n storageType: \"azure?sas=1\",\n };\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: { accessToken: \"sas\" } as any };\n });\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n\n const accessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId, iModelId, changeset });\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const props = checkpoint.getRpcProps();\n assert.equal(props.iModelId, iModelId);\n assert.equal(props.iTwinId, iTwinId);\n assert.equal(props.changeset?.id, changeset.id);\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n\n errorLogStub.resetHistory();\n expect(cloudContainer.accessToken).equal(\"sas\");\n await checkpoint.refreshContainerForRpc(accessToken);\n expect(cloudContainer.accessToken).equal(\"testSAS\");\n\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n assert.equal(infoLogStub.callCount, 2);\n assert.include(infoLogStub.args[0][1], \"attempting to refresh\");\n assert.include(infoLogStub.args[1][1], \"refreshed checkpoint\");\n\n errorLogStub.resetHistory();\n queryStub.callsFake(async () => {\n throw new Error(\"no checkpoint\");\n });\n await expect(checkpoint.refreshContainerForRpc(accessToken)).to.eventually.be.rejectedWith(\"no checkpoint\");\n\n checkpoint.close();\n });\n\n it(\"should throw for missing/invalid checkpoint in hub\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\n\n const accessToken = \"token\";\n const error = await getIModelError(SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId: Guid.createValue(), iModelId: Guid.createValue(), changeset: IModelTestUtils.generateChangeSetId() }));\n expectIModelError(IModelStatus.NotFound, error);\n });\n\n it(\"attempting to re-attach a non-checkpoint snapshot should be a no-op\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n const accessToken = \"token\";\n await imodel1.refreshContainerForRpc(accessToken);\n });\n\n function hasClassView(db: IModelDb, name: string): boolean {\n try {\n return db.withSqliteStatement(`SELECT ECInstanceId FROM [${name}]`, (): boolean => true, false);\n } catch {\n return false;\n }\n }\n\n it(\"Check busyTimeout option\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const tryOpen = (fileName: string, options?: SnapshotDbOpenArgs) => {\n const start = performance.now();\n let didThrow = false;\n try {\n StandaloneDb.openFile(fileName, OpenMode.ReadWrite, options);\n } catch (e: any) {\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\n didThrow = true;\n }\n assert.isTrue(didThrow);\n return performance.now() - start;\n };\n const seconds = (s: number) => s * 1000;\n\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"busy timeout test\");\n txn.start();\n // lock db so another connection cannot write to it.\n txn.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\n\n assert.isAtMost(tryOpen(standaloneFile, { busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\n\n txn.end(\"abandon\");\n db.close();\n });\n\n it(\"Cache cleared on abandonChanges\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"cache cleared on abandonChanges\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n const element1 = db.elements.getElementProps(id);\n txn.end(\"abandon\");\n\n code.value = \"bar\";\n const props2: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const retryTxn = new EditTxn(db, \"cache cleared on abandonChanges retry\");\n retryTxn.start();\n const id2 = retryTxn.insertElement(props2);\n expect(id2).to.equal(id);\n const element2 = db.elements.getElementProps(id2);\n expect(element2).to.not.equal(element1);\n\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n retryTxn.end(\"abandon\");\n db.close();\n });\n\n it(\"Only instance caches should be cleared with clearCaches instanceCachesOnly parameter\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"clearCaches instanceCachesOnly\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n db.elements.getElementProps(id);\n db.models.getModelProps(IModel.dictionaryId);\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n expect(db.elements[_cache].size).to.be.greaterThan(0);\n expect(db.models[_cache].size).to.be.greaterThan(0);\n expect(db.elements[_instanceKeyCache].size).to.be.greaterThan(0);\n expect(db.models[_instanceKeyCache].size).to.be.greaterThan(0);\n\n db.clearCaches({ instanceCachesOnly: true });\n\n expect(db.elements[_cache].size).to.equal(0);\n expect(db.models[_cache].size).to.equal(0);\n expect(db.elements[_instanceKeyCache].size).to.equal(0);\n expect(db.models[_instanceKeyCache].size).to.equal(0);\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n txn.end(\"abandon\");\n db.close();\n });\n\n it(\"inserting a second element with an empty code must not evict the first from the element props cache\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"EmptyCodeCacheCollision.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"EmptyCodeCacheCollision\" } });\n\n withEditTxn(db, (txn) => {\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n const emptyCodeProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n category: categoryId,\n code: Code.createEmpty(),\n };\n\n // Insert the first element\n const id1 = txn.insertElement({ ...emptyCodeProps });\n db.elements.getElementProps(id1); // populate the element props cache\n const cacheSizeAfterFirstInsertAndRead = db.elements[_cache].size;\n expect(cacheSizeAfterFirstInsertAndRead).to.be.greaterThan(0, \"cache should be populated after getElementProps\");\n\n // Insert a second element with the same empty code\n const id2 = txn.insertElement({ ...emptyCodeProps });\n\n // The first element must still be in the cache.\n const cached1 = db.elements[_cache].get({ id: id1 });\n expect(cached1, \"first element should still be in cache after inserting second element with the same empty code\").to.not.be.undefined;\n expect(cached1!.elProps.id).to.equal(id1);\n\n expect(Id64.isValidId64(id1)).to.be.true;\n expect(Id64.isValidId64(id2)).to.be.true;\n expect(id1).to.not.equal(id2);\n });\n\n db.close();\n });\n\n it(\"Standalone iModel properties\", () => {\n const standaloneRootSubjectName = \"Standalone\";\n const standaloneFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Standalone1.bim\");\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } })\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n }\n let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });\n assert.isTrue(standaloneDb1.isStandaloneDb());\n assert.isTrue(standaloneDb1.isStandalone);\n assert.isFalse(standaloneDb1.isReadonly, \"Expect standalone iModels to be read-write during create\");\n assert.equal(standaloneDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(standaloneDb1.pathName, standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key), \"Should be in the list of open StandaloneDbs\");\n assert.equal(standaloneDb1.elements.getRootSubject().code.value, standaloneRootSubjectName);\n assert.isTrue(standaloneDb1.isOpen);\n assert.isTrue(Guid.isV4Guid(standaloneDb1.iModelId));\n assert.equal(standaloneDb1.iTwinId, Guid.empty);\n assert.strictEqual(\"\", standaloneDb1.changeset.id);\n assert.strictEqual(0, standaloneDb1.changeset.index);\n assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, \"standalone ecefLocation should be set\");\n assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"standalone coordinate system should be set\");\n assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);\n standaloneDb1.close();\n assert.isFalse(standaloneDb1.isOpen);\n standaloneDb1.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n standaloneDb1 = StandaloneDb.openFile(standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key));\n assert.isFalse(standaloneDb1.isReadonly, \"By default, StandaloneDbs are opened read/write\");\n standaloneDb1.close();\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n });\n\n it(\"Snapshot iModel properties\", async () => {\n const snapshotRootSubjectName = \"Snapshot\";\n const snapshotFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot1.bim\");\n const snapshotFile2 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot2.bim\");\n const snapshotFile3 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot3.bim\");\n const imodel = await generateTestSnapshot(\"test_for_snapshot.bim\", \"test.bim\");\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } })\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n }\n let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });\n let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);\n let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });\n assert.isTrue(snapshotDb1.isSnapshotDb());\n assert.isTrue(snapshotDb2.isSnapshotDb());\n assert.isTrue(snapshotDb3.isSnapshotDb());\n assert.isTrue(snapshotDb1.isSnapshot);\n assert.isTrue(snapshotDb2.isSnapshot);\n assert.isTrue(snapshotDb3.isSnapshot);\n assert.isFalse(snapshotDb1.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb2.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb3.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.equal(snapshotDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb2.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb3.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(imodel.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb1.pathName, snapshotFile1);\n assert.equal(snapshotDb2.pathName, snapshotFile2);\n assert.equal(snapshotDb3.pathName, snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n const iModelGuid1: GuidString = snapshotDb1.iModelId;\n const iModelGuid2: GuidString = snapshotDb2.iModelId;\n const iModelGuid3: GuidString = snapshotDb3.iModelId;\n assert.notEqual(iModelGuid1, iModelGuid2, \"Expect different iModel GUIDs for each snapshot\");\n assert.notEqual(iModelGuid2, iModelGuid3, \"Expect different iModel GUIDs for each snapshot\");\n const rootSubjectName1 = snapshotDb1.elements.getRootSubject().code.value;\n const rootSubjectName2 = snapshotDb2.elements.getRootSubject().code.value;\n const rootSubjectName3 = snapshotDb3.elements.getRootSubject().code.value;\n const imodelRootSubjectName = imodel.elements.getRootSubject().code.value;\n assert.equal(rootSubjectName1, snapshotRootSubjectName);\n assert.equal(rootSubjectName1, rootSubjectName2, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.equal(rootSubjectName3, imodelRootSubjectName, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.isTrue(snapshotDb1.isOpen);\n assert.isTrue(snapshotDb2.isOpen);\n assert.isTrue(snapshotDb3.isOpen);\n assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, \"snapshot ecefLocation should be set\");\n assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"snapshot coordinate system should be set\");\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n assert.isFalse(snapshotDb1.isOpen);\n assert.isFalse(snapshotDb2.isOpen);\n assert.isFalse(snapshotDb3.isOpen);\n snapshotDb1.close(); // calling `close()` a second time is a no-op\n snapshotDb2.close(); // calling `close()` a second time is a no-op\n snapshotDb3.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n snapshotDb1 = SnapshotDb.openFile(snapshotFile1);\n snapshotDb2 = SnapshotDb.openFile(snapshotFile2);\n snapshotDb3 = SnapshotDb.openFile(snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, SnapshotDb.findByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, IModelDb.findByKey(snapshotDb3.key));\n assert.throws(() => BriefcaseDb.findByKey(snapshotDb1.key)); // lookup of key for SnapshotDb via BriefcaseDb should throw\n assert.throws(() => StandaloneDb.findByKey(snapshotDb1.key)); // likewise for StandaloneDb\n assert.isTrue(snapshotDb1.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb2.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb3.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementAspect\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Model\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementRefersToElements\"));\n assert.isFalse(hasClassView(snapshotDb2, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb3, \"bis.Element\"));\n\n imodel.close();\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n });\n\n it(\"upgrade the domain schema in a StandaloneDb\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"UpgradeIModel\", \"testImodel.bim\");\n const seedFileName = IModelTestUtils.resolveAssetFile(\"testImodel.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n let iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\n iModel.close();\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\n iModel.close();\n });\n\n it(\"Run plain SQL\", () => {\n withEditTxn(imodel1, () => {\n imodel1.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"Dummy 1\");\n stmt.bindValue(2, 100);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValues([\"Dummy 2\", 200]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValue(\":p1\", \"Dummy 3\");\n stmt.bindValue(\":p2\", 300);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n imodel1.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n assert.equal(stmt.getColumnCount(), 3);\n const val0: SqliteValue = stmt.getValue(0);\n assert.equal(val0.columnName, \"Id\");\n assert.equal(val0.type, SqliteValueType.Integer);\n assert.isFalse(val0.isNull);\n assert.equal(val0.getInteger(), i);\n\n const val1: SqliteValue = stmt.getValue(1);\n assert.equal(val1.columnName, \"Name\");\n assert.equal(val1.type, SqliteValueType.String);\n assert.isFalse(val1.isNull);\n assert.equal(val1.getString(), `Dummy ${i}`);\n\n const val2: SqliteValue = stmt.getValue(2);\n assert.equal(val2.columnName, \"Code\");\n assert.equal(val2.type, SqliteValueType.Integer);\n assert.isFalse(val2.isNull);\n assert.equal(val2.getInteger(), i * 100);\n\n const row: any = stmt.getRow();\n assert.equal(row.id, i);\n assert.equal(row.name, `Dummy ${i}`);\n assert.equal(row.code, i * 100);\n }\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"SELECT 1 FROM ec_CustomAttribute WHERE ContainerId=? AND Instance LIKE '<IsMixin%' COLLATE NOCASE\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"0x1f\");\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n it(\"Run plain SQL against readonly connection\", () => {\n let iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"sqlitesqlreadonlyconnection.bim\"), { rootSubject: { name: \"test\" } });\n const iModelPath = iModel.pathName;\n iModel.close();\n iModel = SnapshotDb.openFile(iModelPath);\n\n iModel.withPreparedSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace='ec_Db'\", (stmt: SqliteStatement) => {\n let rowCount: number = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n assert.equal(stmt.getColumnCount(), 2);\n const nameVal: SqliteValue = stmt.getValue(0);\n assert.equal(nameVal.columnName, \"Name\");\n assert.equal(nameVal.type, SqliteValueType.String);\n assert.isFalse(nameVal.isNull);\n const name: string = nameVal.getString();\n\n const versionVal: SqliteValue = stmt.getValue(1);\n assert.equal(versionVal.columnName, \"StrData\");\n assert.equal(versionVal.type, SqliteValueType.String);\n assert.isFalse(versionVal.isNull);\n const profileVersion: any = JSON.parse(versionVal.getString());\n\n assert.isTrue(name === \"SchemaVersion\" || name === \"InitialSchemaVersion\");\n if (name === \"SchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n } else if (name === \"InitialSchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n }\n }\n assert.equal(rowCount, 2);\n });\n iModel.close();\n });\n\n it(\"tryPrepareStatement\", () => {\n const sql = `SELECT * FROM ${Element.classFullName} LIMIT 1`;\n const invalidSql = \"SELECT * FROM InvalidSchemaName:InvalidClassName LIMIT 1\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throws(() => imodel1.prepareStatement(invalidSql, false));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isUndefined(imodel1.tryPrepareStatement(invalidSql));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using statement: ECSqlStatement | undefined = imodel1.tryPrepareStatement(sql);\n assert.isDefined(statement);\n assert.isTrue(statement?.isPrepared);\n });\n\n it(\"containsClass\", () => {\n assert.isTrue(imodel1.containsClass(Element.classFullName));\n assert.isTrue(imodel1.containsClass(\"BisCore:Element\"));\n assert.isTrue(imodel1.containsClass(\"BisCore.Element\"));\n assert.isTrue(imodel1.containsClass(\"biscore:element\"));\n assert.isTrue(imodel1.containsClass(\"biscore.element\"));\n assert.isTrue(imodel1.containsClass(\"bis:Element\"));\n assert.isTrue(imodel1.containsClass(\"bis.Element\"));\n assert.isTrue(imodel1.containsClass(\"bis:element\"));\n assert.isTrue(imodel1.containsClass(\"bis.element\"));\n assert.isFalse(imodel1.containsClass(\"BisCore:Element:InvalidExtra\"));\n assert.isFalse(imodel1.containsClass(\"BisCore\"));\n assert.isFalse(imodel1.containsClass(\":Element\"));\n assert.isFalse(imodel1.containsClass(\"BisCore:InvalidClassName\"));\n assert.isFalse(imodel1.containsClass(\"InvalidSchemaName:Element\"));\n });\n\n it(\"should update Element code\", () => {\n const txn = new EditTxn(imodel4, \"update element code\");\n txn.start();\n const elementId = txn.insertElement({\n classFullName: \"DgnPlatformTest:TestInformationRecord\",\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n });\n let element = imodel4.elements.getElement<InformationRecordElement>(elementId, InformationRecordElement);\n assert.isTrue(Code.isValid(element.code));\n assert.isTrue(Code.isEmpty(element.code));\n const codeSpecId = imodel4.codeSpecs.insert(txn, \"TestCodeSpec\", CodeScopeSpec.Type.Model);\n const codeValue = `${element.className}-1`;\n element.code = new Code({ spec: codeSpecId, scope: IModel.repositoryModelId, value: codeValue });\n element.update(txn);\n txn.end();\n element = imodel4.elements.getElement<InformationRecordElement>(elementId, InformationRecordElement);\n assert.isTrue(Code.isValid(element.code));\n assert.isFalse(Code.isEmpty(element.code));\n assert.equal(element.code.value, codeValue);\n });\n\n it(\"should update UserLabel\", () => {\n const txn = new EditTxn(imodel1, \"update user label\");\n txn.start();\n // type coercion reminder!\n const s: string = \"\";\n assert.isTrue(s === \"\");\n assert.isFalse(s ? true : false);\n\n // insert element with an undefined UserLabel\n const elementProps: DefinitionElementProps = {\n classFullName: SpatialCategory.classFullName,\n model: IModel.dictionaryId,\n code: SpatialCategory.createCode(imodel1, IModel.dictionaryId, \"TestCategoryForClearUserLabel\"),\n };\n const elementId = txn.insertElement(elementProps);\n let element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.userLabel);\n\n // update element with a defined userLabel\n element.userLabel = \"UserLabel\";\n element.update(txn);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.userLabel, \"UserLabel\");\n\n // make sure userLabel is not updated when not part of the specified ElementProps\n txn.updateElement({\n id: element.id,\n classFullName: element.classFullName,\n model: element.model,\n code: element.code,\n });\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.userLabel, \"UserLabel\"); // NOTE: userLabel is not modified when userLabel is not part of the input ElementProps\n\n const elProps = imodel1.elements.getElementProps({ id: elementId, onlyBaseProperties: true });\n expect(elProps.userLabel).equal(element.userLabel);\n expect(elProps.classFullName).equal(SpatialCategory.classFullName);\n expect(elProps.model).equal(element.model);\n expect(elProps.code.value).equal(element.code.value);\n expect(elProps.code.scope).equal(element.code.scope);\n expect(elProps.code.spec).equal(element.code.spec);\n expect(elProps.federationGuid).equal(element.federationGuid);\n expect((elProps as any).isPrivate).to.be.oneOf([false, undefined]);\n expect((elProps as any).isInstanceOfEntity).undefined;\n\n // remove userlabel by setting it to the blank string\n element.userLabel = \"\";\n element.update(txn);\n txn.end();\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.userLabel); // NOTE: userLabel is cleared when the empty string is specified\n });\n\n it(\"should update FederationGuid\", () => {\n const txn = new EditTxn(imodel1, \"update federation guid\");\n txn.start();\n // insert element with an undefined FederationGuid\n const elementProps: DefinitionElementProps = {\n classFullName: SpatialCategory.classFullName,\n model: IModel.dictionaryId,\n federationGuid: Guid.empty,\n code: SpatialCategory.createCode(imodel1, IModel.dictionaryId, \"TestCategoryForClearFederationGuid\"),\n };\n const elementId = txn.insertElement(elementProps);\n let element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.federationGuid);\n assert.isFalse(element.isPrivate);\n\n // update element with a defined FederationGuid\n const federationGuid = Guid.createValue();\n element.federationGuid = federationGuid;\n element.isPrivate = true;\n element.update(txn);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.federationGuid, federationGuid);\n assert.isTrue(element.isPrivate);\n\n // make sure FederationGuid is not updated when not part of the specified ElementProps\n txn.updateElement({\n id: element.id,\n classFullName: element.classFullName,\n model: element.model,\n code: element.code,\n });\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.federationGuid, federationGuid);\n assert.isTrue(element.isPrivate);\n\n // remove federationGuid by setting it to undefined in ElementProps\n const elProps = element.toJSON();\n elProps.federationGuid = undefined;\n txn.updateElement(elProps);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.federationGuid);\n\n // ensure that update doesn't change federationGuid from an element immediately after insert (toJSON should remove undefined value)\n const subject5 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject5\");\n const s5Id = subject5.insert(txn);\n const s5pre = imodel1.elements.getElement<Subject>(s5Id);\n subject5.description = \"new descr\";\n subject5.update(txn);\n txn.end();\n const s5post = imodel1.elements.getElement<Subject>(s5Id);\n expect(s5pre.federationGuid).equal(s5post.federationGuid);\n expect(s5post.description).equal(subject5.description);\n });\n\n it(\"should support partial update\", () => {\n const txn = new EditTxn(imodel1, \"partial element update\");\n txn.start();\n // Insert Subject elements - initializing Description and UserLabel to similar values\n let subject1 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject1\", \"Description1\");\n let subject2 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject2\", \"Description2\");\n let subject3 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject3\", \"\");\n let subject4 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject4\");\n subject1.userLabel = \"UserLabel1\";\n subject2.userLabel = \"UserLabel2\";\n subject3.userLabel = \"\";\n subject4.userLabel = undefined;\n const federationGuid1 = Guid.createValue();\n const federationGuid2 = Guid.createValue();\n subject1.federationGuid = federationGuid1;\n subject2.federationGuid = federationGuid2;\n subject3.federationGuid = \"\";\n subject4.federationGuid = Guid.empty;\n const subjectId1 = subject1.insert(txn);\n const subjectId2 = subject2.insert(txn);\n const subjectId3 = subject3.insert(txn);\n const subjectId4 = subject4.insert(txn);\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n\n // Subject.Description is an auto-handled property\n assert.equal(subject1.description, \"Description1\");\n assert.equal(subject2.description, \"Description2\");\n assert.equal(subject3.description, \"\"); // NOTE: different behavior between auto-handled and custom-handled\n assert.isUndefined(subject4.description);\n\n // Test toJSON\n assert.equal(subject1.toJSON().description, \"Description1\");\n assert.equal(subject2.toJSON().description, \"Description2\");\n assert.equal(subject3.toJSON().description, \"\");\n assert.isUndefined(subject4.toJSON().description);\n\n // Element.UserLabel is a custom-handled property\n assert.equal(subject1.userLabel, \"UserLabel1\");\n assert.equal(subject2.userLabel, \"UserLabel2\");\n assert.isUndefined(subject3.userLabel); // NOTE: different behavior between auto-handled and custom-handled\n assert.isUndefined(subject4.userLabel);\n\n // Element.FederationGuid is a custom-handled property\n assert.equal(subject1.federationGuid, federationGuid1);\n assert.equal(subject2.federationGuid, federationGuid2);\n assert.isUndefined(subject4.federationGuid);\n\n // test partial update of Description (auto-handled)\n txn.updateElement<SubjectProps>({ id: subject1.id, description: \"Description1-Updated\" });\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n assert.equal(subject1.description, \"Description1-Updated\"); // should have been updated\n assert.isDefined(subject1.model);\n assert.isDefined(subject1.parent);\n assert.equal(subject1.code.value, \"Subject1\"); // should not have changed\n assert.equal(subject1.userLabel, \"UserLabel1\"); // should not have changed\n assert.equal(subject1.federationGuid, federationGuid1); // should not have changed\n\n // test partial update of UserLabel (custom-handled)\n txn.updateElement<SubjectProps>({ id: subject2.id, userLabel: \"UserLabel2-Updated\" });\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n assert.isDefined(subject2.model);\n assert.isDefined(subject2.parent);\n assert.equal(subject2.userLabel, \"UserLabel2-Updated\"); // should have been updated\n assert.equal(subject2.code.value, \"Subject2\"); // should not have changed\n assert.equal(subject2.description, \"Description2\"); // should not have changed\n assert.equal(subject2.federationGuid, federationGuid2); // should not have changed\n\n // Update Subject elements - setting Description and UserLabel to similar values\n subject1.description = undefined;\n subject2.description = \"\";\n subject3.description = \"Description3\";\n subject4.description = \"Description4\";\n subject2.userLabel = \"\";\n subject3.userLabel = \"UserLabel3\";\n subject4.userLabel = \"UserLabel4\";\n subject1.update(txn);\n subject2.update(txn);\n subject3.update(txn);\n subject4.update(txn);\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n\n // Subject.Description is an auto-handled property\n assert.isUndefined(subject1.description);\n assert.equal(subject2.description, \"\"); // NOTE: different behavior between auto-handled and custom-handled\n assert.equal(subject3.description, \"Description3\");\n assert.equal(subject4.description, \"Description4\");\n\n // Element.UserLabel is a custom-handled property\n assert.isUndefined(subject2.userLabel); // NOTE: different behavior between auto-handled and custom-handled\n assert.equal(subject3.userLabel, \"UserLabel3\");\n assert.equal(subject4.userLabel, \"UserLabel4\");\n\n // test partial update of Description to undefined\n const s3Fed = subject3.federationGuid;\n txn.updateElement<SubjectProps>({ id: subject3.id, description: undefined });\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n assert.isUndefined(subject3.description); // should have been updated\n assert.isDefined(subject3.model);\n assert.isDefined(subject3.parent);\n assert.equal(subject3.code.value, \"Subject3\"); // should not have changed\n assert.equal(subject3.userLabel, \"UserLabel3\"); // should not have changed\n assert.equal(subject3.federationGuid, s3Fed); // should not have changed\n\n // test partial update of UserLabel to undefined\n txn.updateElement<SubjectProps>({ id: subject4.id, userLabel: undefined });\n txn.end();\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n assert.isDefined(subject4.model);\n assert.isDefined(subject4.parent);\n // assert.isUndefined(subject4.userLabel); // should have been updated - WIP WIP WIP\n assert.equal(subject4.code.value, \"Subject4\"); // should not have changed\n assert.equal(subject4.description, \"Description4\"); // should not have changed\n assert.isUndefined(subject4.federationGuid); // should not have changed\n\n });\n\n it('should allow untrimmed codes when using \"exact\" codeValueBehavior', () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"codeValueBehavior.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"codeValueBehaviors\" } });\n const txn = new EditTxn(imodel, \"codeValueBehavior\");\n txn.start();\n\n const getNumberedCodeValAndProps = (n: number) => {\n const trimmedCodeVal = `CodeValue${n}`;\n const untrimmedCodeVal = `${trimmedCodeVal}\\xa0`;\n const spec = imodel.codeSpecs.getByName(SpatialCategory.getCodeSpecName()).id;\n const props: ElementProps = {\n // the [[Code]] class still (as it always has) trims unicode space, so avoid it\n code: { spec, scope: IModelDb.dictionaryId, value: untrimmedCodeVal },\n model: IModelDb.dictionaryId,\n classFullName: SpatialCategory.classFullName,\n };\n return { trimmedCodeVal, untrimmedCodeVal, props };\n };\n\n expect(imodel.codeValueBehavior).to.equal(\"trim-unicode-whitespace\");\n\n const code1 = getNumberedCodeValAndProps(1);\n const categ1Id = txn.insertElement(code1.props);\n const categ1 = imodel.elements.getElementProps({ id: categ1Id });\n expect(categ1.code.value).to.equal(code1.trimmedCodeVal);\n\n imodel.codeValueBehavior = \"exact\";\n const code2 = getNumberedCodeValAndProps(2);\n const categ2Id = txn.insertElement(code2.props);\n const categ2 = imodel.elements.getElementProps({ id: categ2Id });\n expect(categ2.code.value).to.equal(code2.untrimmedCodeVal);\n\n imodel.codeValueBehavior = \"trim-unicode-whitespace\";\n const code3 = getNumberedCodeValAndProps(3);\n const categ3Id = txn.insertElement(code3.props);\n const categ3 = imodel.elements.getElement({ id: categ3Id });\n expect(categ3.code.value).to.equal(code3.trimmedCodeVal);\n\n txn.end();\n imodel.close();\n });\n\n it(\"should throw iTwinErrors on element CRUD opertion fails\", async () => {\n const txn = new EditTxn(imodel1, \"element CRUD failure cases\");\n txn.start();\n const code = Code.createEmpty();\n code.value = \"foo\";\n\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n txn.insertElement(props);\n\n expect(() => txn.insertElement(props)).throws(\"Error inserting element [duplicate code]\").to.have.property(\"iTwinErrorId\");\n const updateProps: TypeDefinitionElementProps = {\n id: Id64.fromString(\"0x111111\"),\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n expect(() => txn.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property(\"iTwinErrorId\");\n expect(() => txn.deleteElement(updateProps.id!)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property(\"iTwinErrorId\");\n\n expect(() => txn.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: \"0x10000000bad\" } })).throws(\"Error inserting model [error=10004], class=BisCore:DefinitionModel\").to.have.property(\"iTwinErrorId\");\n expect(() => txn.updateModel({\n id: Id64.fromString(\"0x111111\"),\n modeledElement: { id: Id64.fromString(\"0x111111\") },\n classFullName: \"\"\n })).throws(`Error updating model [missing id], id: ${Id64.fromString(\"0x111111\")}`).to.have.property(\"iTwinErrorId\");\n expect(() => txn.deleteModel(Id64.fromString(\"0x111111\"))).throws(`Error deleting model [missing id], id: ${Id64.fromString(\"0x111111\")}`).to.have.property(\"iTwinErrorId\");\n txn.end(\"abandon\");\n });\n\n it(\"throws NotFound when attempting to access element props after closing the iModel\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"accessAfterClose.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"accessAfterClose\" } });\n\n const elem = imodel.elements.getElement<Subject>(IModel.rootSubjectId);\n expect(elem.id).to.equal(IModel.rootSubjectId);\n\n imodel.close();\n\n expect(() => imodel.elements.getElement<Subject>(IModel.rootSubjectId)).to.throw(IModelError, \"Element=0x1\", \"Not Found\");\n });\n\n it(\"should throw \\\"constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)\\\" when inserting a relationsip instance with the same prop twice\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"insertDuplicateInstance.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"insertDuplicateInstance\" } });\n const txn = new EditTxn(imodel, \"insert duplicate relationship instance\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n\n const props: ElementGroupsMembersProps = {\n classFullName: \"BisCore:ElementGroupsMembers\",\n sourceId: id0,\n targetId: id1,\n memberPriority: 1,\n };\n\n txn.insertRelationship(props);\n expect(() => txn.insertRelationship(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);\n\n txn.end(\"abandon\");\n imodel.close();\n });\n\n function createElemProps(_imodel: IModelDb, modId: Id64String, catId: Id64String, className: string): GeometricElementProps {\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n return elementProps;\n }\n\n function insertElement(imodel: IModelDb, mId: Id64String, cId: Id64String, cName: string, propName: string, txn: EditTxn): Id64String {\n const elementProps = createElemProps(imodel, mId, cId, cName);\n const geomElement = imodel.elements.createElement(elementProps);\n (geomElement as any).name = propName; // Add a custom property to the element\n const id = txn.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert failed\");\n return id;\n }\n\n function validateADrivesBRowCount(imodel: IModelDb, expectedRows: number): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);\n assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);\n }\n\n function validateNavProp(imodel: IModelDb, expectedNavPropValue: any): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);\n assert.strictEqual(reader.length, 1);\n assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be \"${expectedNavPropValue}\"`);\n }\n\n it(\"Validate invalid relationship classes being inserted/updated\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"invalidRelationshipClass.bim\");\n\n if (IModelJsFs.existsSync(imodelPath))\n IModelJsFs.unlinkSync(imodelPath);\n\n const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"invalidRelationshipClass\" } });\n\n await testImodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestRelationSchema\" alias=\"trs\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\" />\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildA\" >\n <BaseClass>TestElement</BaseClass>\n <ECNavigationProperty propertyName=\"NavPropChildB\" relationshipName=\"ADrivesB\" direction=\"Forward\" readOnly=\"True\">\n </ECNavigationProperty>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildB\" >\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ADrivesB\" strengthDirection=\"Backward\" strength=\"referencing\" modifier=\"Sealed\">\n <Source multiplicity=\"(0..*)\" polymorphic=\"true\" roleLabel=\"drives\">\n <Class class=\"ChildA\"/>\n </Source>\n <Target multiplicity=\"(0..1)\" polymorphic=\"true\" roleLabel=\"is driven by\">\n <Class class=\"ChildB\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECEntityClass typeName=\"ChildC\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildD\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"CIsRelatedToD\" strength=\"referencing\" modifier=\"Sealed\">\n <BaseClass>bis:ElementRefersToElements</BaseClass>\n <Source multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo\" polymorphic=\"true\">\n <Class class=\"ChildC\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo (Reversed)\" polymorphic=\"true\">\n <Class class=\"ChildD\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`]);\n\n // Enable ECSQL write validation and verify it's set\n const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);\n assert.exists(pragmaRows);\n assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);\n\n // Ensure ADrivesB table is empty before test\n validateADrivesBRowCount(testImodel, 0);\n\n // Create a physical model and spatial category if needed\n const setupTxn = new EditTxn(testImodel, \"setup invalid relationship class test\");\n setupTxn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(setupTxn, Code.createEmpty(), true);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")\n ?? SpatialCategory.insert(setupTxn,\n IModel.dictionaryId,\n \"MySpatialCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() })\n );\n const idB = insertElement(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildB\", \"ChildBElement\", setupTxn);\n setupTxn.end();\n assert.isTrue(Id64.isValidId64(idB), \"Insert ChildBElement failed\");\n\n // Prepare base props for ChildA\n const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildA\");\n\n // Test various relationship class names for navigation property\n const testCases = [\n { name: \"trs:ADrivesB\", shouldSucceed: true, expectedRows: 1 },\n { name: \"trs.FakeClass\", shouldSucceed: true, expectedRows: 0 },\n { name: \"trs:ChildA\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:ChildB\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:CIsRelatedToD\", shouldSucceed: false, expectedRows: 0 },\n ];\n\n for (const { name, shouldSucceed, expectedRows } of testCases) {\n const txn = new EditTxn(testImodel, `invalid relationship class ${name}`);\n txn.start();\n try {\n const elemRef = new RelatedElement({ id: idB, relClassName: name });\n (elementProps as any).navPropChildB = elemRef;\n (elementProps as any).name = \"ChildAElement\";\n const geomElement = testImodel.elements.createElement(elementProps);\n\n let idA: Id64String | undefined;\n try {\n idA = txn.insertElement(geomElement.toJSON());\n if (shouldSucceed)\n assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);\n else\n assert.fail(`Insert should have failed for ${name}.`);\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);\n\n // If should not succeed, error is expected\n }\n\n // Validate row count in ADrivesB table\n validateADrivesBRowCount(testImodel, expectedRows);\n\n // If insert succeeded, test update and delete scenarios\n if (expectedRows === 1 && idA !== undefined) {\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editElem: any = testImodel.elements.getElement(idA);\n editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: \"trs.FakeClass\" });\n editElem.name = \"ChildAElementUpdated\";\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 1);\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editedElem: any = testImodel.elements.getElement(idA);\n assert.equal(editedElem.name, \"ChildAElementUpdated\", `Expected name to be \"ChildAElementUpdated\" after update, but got \"${editedElem.name}\"`);\n assert.strictEqual(editedElem.navPropChildB.relClassName, \"TestRelationSchema.ADrivesB\", `Expected navPropChildB to be \"TestRelationSchema.ADrivesB\" after update, but got \"${editedElem.navPropChildB}\"`);\n\n // Set the nav prop value to null\n editElem.name = \"ChildAElementNulled\";\n editElem.navPropChildB = null;\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 0);\n const nulledElem: any = testImodel.elements.getElement(idA);\n assert.equal(nulledElem.name, \"ChildAElementNulled\", `Expected name to be \"ChildAElementNulled\" after nulling, but got \"${nulledElem.name}\"`);\n assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got \"${nulledElem.navPropChildB}\"`);\n\n if (shouldSucceed) {\n txn.deleteElement(idA);\n assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);\n }\n }\n } finally {\n txn.end(\"abandon\");\n }\n }\n testImodel.close();\n });\n\n it(\"should update codeValues that are switched between elements\", async () => {\n const dbFileName = IModelTestUtils.prepareOutputFile(\"IModel\", \"change-codeValues.bim\");\n const imodelDb = SnapshotDb.createEmpty(dbFileName, {\n rootSubject: { name: \"change-codeValues\" },\n });\n let categoryA = SpatialCategory.create(\n imodelDb,\n IModel.dictionaryId,\n \"A\"\n );\n let categoryB = SpatialCategory.create(\n imodelDb,\n IModel.dictionaryId,\n \"B\"\n );\n categoryA.userLabel = \"A\";\n categoryB.userLabel = \"B\";\n const txn = new EditTxn(imodelDb, \"change codeValues\");\n txn.start();\n categoryA.insert(txn);\n categoryB.insert(txn);\n txn.saveChanges();\n\n categoryA = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"A\")\n );\n categoryB = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"B\")\n );\n categoryA.code.value = \"temp\";\n categoryA.update(txn);\n categoryB.code.value = \"A\";\n categoryB.update(txn);\n categoryA.code.value = \"B\";\n categoryA.update(txn);\n txn.end();\n\n categoryA = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"A\")\n );\n categoryB = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"B\")\n );\n\n expect(categoryA.userLabel).to.equal(\"B\", `categoryA.userLabel mismatch in ${imodelDb.name}`);\n expect(categoryB.userLabel).to.equal(\"A\", `categoryB.userLabel mismatch in ${imodelDb.name}`);\n imodelDb.close();\n });\n\n it(\"should provide meaningful error when querying a closed iModel\", () => {\n const testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"QueryingClosedImodel.bim\"), { rootSubject: { name: \"QueryClosedTest\" } });\n assert.isTrue(testImodel.isOpen);\n\n // Close the iModel for the tests\n testImodel.close();\n assert.isFalse(testImodel.isOpen);\n\n const closedDbError = \"Cannot query a closed Db\";\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.prepareSqliteStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.prepareStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.elements.queryChildren(IModel.rootSubjectId)).to.throw(\"db not open\");\n expect(() => testImodel.elements.getAspects(\"0x1\", \"WrongSchema:WrongClass\")).to.throw(\"db is not open\");\n expect(() => testImodel.createQueryReader(\"SELECT 1\")).to.throw(\"db not open\");\n });\n\n describe(\"Delete relationship instances\", () => {\n let testImodel: SnapshotDb;\n const relationshipClasses = [\n \"BisCore:ElementGroupsMembers\",\n \"BisCore:ElementDrivesElement\",\n \"BisCore:ElementRefersToDocuments\"\n ];\n\n afterEach(() => {\n if (testImodel !== undefined) {\n const iModelPath = testImodel.pathName;\n if (testImodel.isOpen)\n testImodel.close();\n IModelJsFs.unlinkSync(iModelPath);\n }\n });\n\n function setupRelationships(numOfRelationships: number, multipleClasses: boolean = false): RelationshipProps[] {\n testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"DeleteRelationshipInstances.bim\"), { rootSubject: { name: \"DeleteRelationshipInstances\" } });\n assert.isTrue(testImodel.isOpen);\n\n const txn = new EditTxn(testImodel, \"setup delete relationships\");\n txn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\");\n if (!spatialCategoryId) {\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\n }\n\n const relationships: RelationshipProps[] = [];\n for (let i = 0; i < numOfRelationships; ++i) {\n const sourceProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const sourceId = txn.insertElement(sourceProps);\n\n const targetProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const targetId = txn.insertElement(targetProps);\n\n let relationshipClass = \"BisCore:ElementGroupsMembers\";\n if (multipleClasses)\n relationshipClass = relationshipClasses[i % relationshipClasses.length];\n\n const relationshipProps: RelationshipProps = {\n classFullName: relationshipClass,\n sourceId,\n targetId,\n };\n\n relationshipProps.id = txn.insertRelationship(relationshipProps);\n relationships.push(relationshipProps);\n }\n txn.end();\n return relationships;\n }\n\n async function getRelationshipCount(iModel: IModelDb, relationshipClass: string): Promise<number> {\n const reader = iModel.createQueryReader(`SELECT COUNT(*) AS [count] FROM ${relationshipClass}`);\n await reader.step();\n return reader.current.count;\n }\n\n it(\"deleteInstances with an empty array\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([]);\n });\n\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n });\n\n it(\"deleteInstances with a single relationship instance\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"Should delete exactly one relationship\");\n\n // Delete just one relationship using deleteInstances method\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([relationships[0]]);\n });\n\n const remainingCount = await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\");\n assert.equal(remainingCount, relationships.length - 1, \"Should delete exactly one relationship\");\n });\n\n it(\"deleteInstances with different relationship classes\", async () => {\n const relationships = setupRelationships(500, true);\n\n // Verify relationships were created across different classes\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Test deleteInstances with mixed relationship classes\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationships);\n });\n\n // Verify all relationships were deleted regardless of their class\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"All ElementGroupsMembers relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\"), \"All ElementDrivesElement relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\"), \"All ElementRefersToDocuments relationships should be deleted\");\n });\n\n it(\"deleteInstances for random relationship instances\", async () => {\n const relationships = setupRelationships(1000, true);\n\n // Verify relationships exist before deletion\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Create a subset of random relationship entries to delete\n const relationshipsToDelete: RelationshipProps[] = [];\n for (let i = 0; i < 250; ++i) {\n relationshipsToDelete.push(relationships[Math.floor(Math.random() * relationships.length)]);\n }\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationshipsToDelete);\n });\n\n // Verify all relationships were deleted\n for (const relClass of relationshipsToDelete) {\n const reader = testImodel.createQueryReader(`SELECT ECInstanceId FROM ${relClass.classFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, new QueryBinder().bindId(1, relClass.sourceId).bindId(2, relClass.targetId));\n assert.isFalse(await reader.step(), `Relationship ${relClass.id} should be deleted`); // No row should be returned\n }\n });\n });\n});\n\ndescribe(\"IModelDb.requireMinimumSchemaVersion\", () => {\n let imodel: SnapshotDb;\n\n before(() => imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"MinSchemaVer.bim\"), { rootSubject: { name: \"MinSchemaVer\" } }));\n after(() => imodel.close());\n\n it(\"throws if the schema does not exist\", () => {\n expect(\n () => imodel.requireMinimumSchemaVersion(\"FakeSchema\", new ECVersion(1, 0, 0), \"Scrobbles\")\n ).to.throw(\"Scrobbles requires FakeSchema v01.00.00 or newer\");\n });\n\n it(\"throws IFF the schema version is older than the minimum\", () => {\n function test(minVer: ECVersion, expectError: boolean): void {\n expect(imodel.meetsMinimumSchemaVersion(\"BisCore\", minVer)).to.equal(!expectError);\n const require = () => imodel.requireMinimumSchemaVersion(\"BisCore\", minVer, \"Scrobbles\");\n if (expectError) {\n expect(require).to.throw(`Scrobbles requires BisCore v${minVer.toString()} or newer`);\n } else {\n require();\n }\n }\n\n const bisVer = imodel.querySchemaVersionNumbers(\"BisCore\")!;\n expect(bisVer.read).to.equal(1);\n expect(bisVer.write).to.equal(0);\n expect(bisVer.minor).to.least(24);\n\n test(bisVer, false);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor - 1), false);\n test(new ECVersion(0, 0, 1), false);\n\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read + 1, bisVer.write + 1, bisVer.minor), true);\n });\n});\n\n\n\n\n"]}
|
|
1
|
+
{"version":3,"file":"IModel.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModel.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as path from \"path\";\nimport * as semver from \"semver\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Guid, GuidString, Id64, Id64String, IModelStatus, Logger, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport {\n AxisAlignedBox3d, BisCodeSpec, BriefcaseIdValue, ChangesetIdWithIndex, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DefinitionElementProps,\n DisplayStyleProps, DisplayStyleSettings, DisplayStyleSettingsProps, EcefLocation, ElementProps, EntityProps, FilePropertyProps,\n FontMap, FontType, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, GeometricElementProps, GeometryParams, GeometryStreamBuilder,\n ImageSourceFormat, IModel, IModelCoordinatesRequestProps, IModelError, LightLocationProps, MapImageryProps, PhysicalElementProps,\n PointWithStatus, QueryBinder, RelatedElement, RelationshipProps, RenderMode, SchemaState, SpatialViewDefinitionProps, SubCategoryAppearance, SubjectProps, TextureMapping,\n TextureMapProps, TextureMapUnits, TypeDefinitionElementProps, ViewDefinitionProps, ViewFlagProps, ViewFlags,\n} from \"@itwin/core-common\";\nimport {\n Geometry, GeometryQuery, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, XYZProps, YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport { V2CheckpointAccessProps } from \"../../BackendHubAccess\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport {\n _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions,\n DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DisplayStyleCreationOptions, DocumentPartition, DrawingGraphic, ECSqlStatement,\n Element, ElementDrivesElement, ElementGroupsMembers, ElementGroupsMembersProps, ElementOwnsChildElements, Entity, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d,\n GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LightLocation,\n LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, RenderMaterialElementParams, SnapshotDb, SpatialCategory,\n SqliteStatement, SqliteValue, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, ViewDefinition,\n} from \"../../core-backend\";\nimport { BriefcaseDb, SnapshotDbOpenArgs } from \"../../IModelDb\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { DisableNativeAssertions, TestUtils } from \"../TestUtils\";\nimport { samplePngTexture } from \"../imageData\";\nimport { performance } from \"perf_hooks\";\nimport { _cache, _hubAccess, _instanceKeyCache } from \"../../internal/Symbols\";\nimport { CustomAttributeClass, ECVersion, EntityClass, PrimitiveArrayProperty, PrimitiveOrEnumPropertyBase, PropertyType, propertyTypeToString, SchemaItemType } from \"@itwin/ecschema-metadata\";\n\n// spell-checker: disable\n\nasync function getIModelError<T>(promise: Promise<T>): Promise<IModelError | undefined> {\n try {\n await promise;\n return undefined;\n } catch (err) {\n return err instanceof IModelError ? err : undefined;\n }\n}\n\nfunction expectIModelError(expectedErrorNumber: IModelStatus | DbResult, error: IModelError | undefined): void {\n expect(error).not.to.be.undefined;\n expect(error).instanceof(IModelError);\n expect(error!.errorNumber).to.equal(expectedErrorNumber);\n}\n\nasync function generateTestSnapshot(targetFileName: string, seedAssetName: string): Promise<SnapshotDb> {\n const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", targetFileName);\n const imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n return imodel;\n}\n\ndescribe(\"iModel\", () => {\n //TODO: These imodels are used and modified across multiple tests. This is not a good practice and should be refactored.\n let imodel1: SnapshotDb;\n let imodel2: SnapshotDb;\n let imodel3: SnapshotDb;\n let imodel4: SnapshotDb;\n let imodel5: SnapshotDb;\n let originalEnv: any;\n\n before(async () => {\n originalEnv = { ...process.env };\n\n // Several tests in this suite (ECEF location, geolocation, and coordinate reprojection) rely on\n // GCS data loaded from cloud workspaces, so restart the backend with GCS workspaces enabled\n // (the test harness disables them by default to avoid network calls).\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\n\n IModelTestUtils.registerTestBimSchema();\n imodel1 = await generateTestSnapshot(\"test.bim\", \"test.bim\");\n imodel2 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"CompatibilityTestSeed.bim\"), IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\"));\n imodel3 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"GetSetAutoHandledStructProperties.bim\"));\n imodel4 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"GetSetAutoHandledArrayProperties.bim\"), IModelTestUtils.resolveAssetFile(\"GetSetAutoHandledArrayProperties.bim\"));\n imodel5 = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\n });\n\n after(async () => {\n process.env = originalEnv;\n imodel1.close();\n imodel2.close();\n imodel3.close();\n imodel4.close();\n imodel5.close();\n\n // Restore the default test backend so subsequent test suites aren't left with GCS enabled.\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n afterEach(() => {\n sinon.restore();\n });\n\n /** Roundtrip the entity through a json string and back to a new entity. */\n const roundtripThroughJson = (entity1: Entity): Entity => {\n const string1 = JSON.stringify(entity1);\n const props1 = JSON.parse(string1) as EntityProps;\n const entity2 = new (entity1.constructor as any)(props1, entity1.iModel); // create a new entity from the EntityProps\n const string2 = JSON.stringify(entity2);\n assert.equal(string1, string2);\n return entity2;\n };\n\n it(\"should be able to get properties of an iIModel\", () => {\n expect(imodel1.name).equals(\"TBD\"); // That's the name of the root subject!\n const extents: AxisAlignedBox3d = imodel1.projectExtents;\n assert(!extents.isNull);\n\n // make sure we can construct a new element even if we haven't loaded its metadata (will be loaded in ctor)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isUndefined(imodel1.classMetaDataRegistry.find(\"biscore:lightlocation\"));\n const e1 = imodel1.constructEntity<LightLocation, LightLocationProps>({ category: \"0x11\", classFullName: \"BisCore:LightLocation\", model: \"0x01\", code: Code.createEmpty() });\n assert.isDefined(e1);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isDefined(imodel1.classMetaDataRegistry.find(\"biscore:lightlocation\")); // should have been loaded in ctor\n });\n\n it(\"should use schema to look up classes by name\", () => {\n const elementClass = ClassRegistry.findRegisteredClass(Element.classFullName);\n const categoryClass = ClassRegistry.findRegisteredClass(Category.classFullName);\n assert.isDefined(elementClass);\n assert.isDefined(categoryClass);\n assert.equal(elementClass!.schema, BisCoreSchema);\n assert.equal(categoryClass!.schema, BisCoreSchema);\n assert.equal(elementClass!.className, \"Element\");\n assert.equal(categoryClass!.className, \"Category\");\n });\n\n it(\"Fonts\", () => {\n const dbFonts = imodel1.fonts;\n expect(Array.from(dbFonts.queryMappedFamilies({ includeNonEmbedded: true })).length).to.equal(4);\n expect(dbFonts.findDescriptor(1)).to.deep.equal({ name: \"Arial\", type: FontType.TrueType });\n expect(dbFonts.findId({ name: \"Arial\" })).to.equal(1);\n expect(dbFonts.findId({ name: \"arial\" })).to.equal(1);\n\n expect(dbFonts.findDescriptor(2)).to.deep.equal({ name: \"Font0\", type: FontType.Rsc });\n expect(dbFonts.findId({ name: \"Font0\" })).to.equal(2);\n expect(dbFonts.findId({ name: \"fOnt0\" })).to.equal(2);\n\n expect(dbFonts.findDescriptor(3)).to.deep.equal({ name: \"ShxFont0\", type: FontType.Shx });\n expect(dbFonts.findId({ name: \"ShxFont0\" })).to.equal(3);\n expect(dbFonts.findId({ name: \"shxfont0\" })).to.equal(3);\n\n expect(dbFonts.findDescriptor(4)).to.deep.equal({ name: \"Calibri\", type: FontType.TrueType });\n expect(dbFonts.findId({ name: \"Calibri\" })).to.equal(4);\n expect(dbFonts.findId({ name: \"cAlIbRi\" })).to.equal(4);\n\n expect(dbFonts.findId({ name: \"notfound\" })).to.be.undefined;\n\n const fonts1 = imodel1.fontMap; // eslint-disable-line @typescript-eslint/no-deprecated\n assert.equal(fonts1.fonts.size, 4, \"font map size should be 4\");\n assert.equal(FontType.TrueType, fonts1.getFont(1)!.type, \"get font 1 type is TrueType\");\n assert.equal(\"Arial\", fonts1.getFont(1)!.name, \"get Font 1 name\");\n assert.equal(1, fonts1.getFont(\"Arial\")!.id, \"get Font 1, by name\");\n assert.equal(1, fonts1.getFont(\"arial\")!.id, \"get Font 1, by name case insensitive\");\n\n assert.equal(FontType.Rsc, fonts1.getFont(2)!.type, \"get font 2 type is Rsc\");\n assert.equal(\"Font0\", fonts1.getFont(2)!.name, \"get Font 2 name\");\n assert.equal(2, fonts1.getFont(\"Font0\")!.id, \"get Font 2, by name\");\n assert.equal(2, fonts1.getFont(\"fOnt0\")!.id, \"get Font 2, by name case insensitive\");\n\n assert.equal(FontType.Shx, fonts1.getFont(3)!.type, \"get font 1 type is Shx\");\n assert.equal(\"ShxFont0\", fonts1.getFont(3)!.name, \"get Font 3 name\");\n assert.equal(3, fonts1.getFont(\"ShxFont0\")!.id, \"get Font 3, by name\");\n assert.equal(3, fonts1.getFont(\"shxfont0\")!.id, \"get Font 3, by name case insensitive\");\n\n assert.equal(FontType.TrueType, fonts1.getFont(4)!.type, \"get font 4 type is TrueType\");\n assert.equal(\"Calibri\", fonts1.getFont(4)!.name, \"get Font 4 name\");\n assert.equal(4, fonts1.getFont(\"Calibri\")!.id, \"get Font 4, by name\");\n assert.equal(4, fonts1.getFont(\"cAlIbRi\")!.id, \"get Font 4, by name case insensitive\");\n\n assert.isUndefined(fonts1.getFont(\"notfound\"), \"attempt lookup of a font that should not be found\");\n\n assert.deepEqual(new FontMap(fonts1.toJSON()), fonts1, \"toJSON on FontMap\"); // eslint-disable-line @typescript-eslint/no-deprecated\n });\n\n it(\"should load a known element by Id from an existing iModel\", () => {\n assert.exists(imodel1.elements);\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\n const el = imodel1.elements.getElement(code1);\n assert.exists(el);\n const el2ById = imodel1.elements.getElement(\"0x34\");\n assert.exists(el2ById);\n const badCode = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1_does_not_exist.dgn\" });\n\n try {\n imodel1.elements.getElement(badCode); // throws Error\n assert.fail(); // this line should be skipped\n } catch (error: any) {\n assert.instanceOf(error, Error);\n assert.instanceOf(error, IModelError);\n assert.equal(error.errorNumber, IModelStatus.NotFound);\n }\n\n const element1 = imodel1.elements.tryGetElement(code1);\n const element2 = imodel1.elements.tryGetElement(\"0x34\");\n const element3 = imodel1.elements.tryGetElement(badCode);\n assert.isDefined(element1);\n assert.isDefined(element2);\n assert.isUndefined(element3);\n const elementProps1 = imodel1.elements.tryGetElementProps(code1);\n const elementProps2 = imodel1.elements.tryGetElementProps(\"0x34\");\n const elementProps3 = imodel1.elements.tryGetElementProps(badCode);\n assert.isDefined(elementProps1);\n assert.isDefined(elementProps2);\n assert.isUndefined(elementProps3);\n\n const model1 = imodel1.models.tryGetModel(IModel.dictionaryId);\n const modelProps1 = imodel1.models.tryGetModelProps(IModel.dictionaryId);\n const subModel1 = imodel1.models.tryGetSubModel(IModel.dictionaryId);\n assert.isDefined(model1);\n assert.isDefined(modelProps1);\n assert.isDefined(subModel1);\n const badModel1 = imodel1.models.tryGetModel(Id64.fromUint32Pair(999, 999));\n const badModelProps1 = imodel1.models.tryGetModelProps(Id64.fromUint32Pair(999, 999));\n const badSubModel1 = imodel1.models.tryGetSubModel(IModel.rootSubjectId);\n const badSubModel2 = imodel1.models.tryGetSubModel(badCode);\n assert.isUndefined(badModel1);\n assert.isUndefined(badModelProps1);\n assert.isUndefined(badSubModel1);\n assert.isUndefined(badSubModel2);\n\n const subCat = imodel1.elements.getElement(\"0x2e\");\n assert.isTrue(subCat instanceof SubCategory);\n if (subCat instanceof SubCategory) {\n assert.isTrue(subCat.appearance.color.tbgr === 16777215);\n assert.isTrue(subCat.appearance.weight === 2);\n assert.equal(Id64.getLocalId(subCat.id), 46);\n assert.equal(Id64.getBriefcaseId(subCat.id), 0);\n assert.equal(Id64.getLocalId(subCat.code.spec), 30);\n assert.equal(Id64.getBriefcaseId(subCat.code.spec), 0);\n assert.isTrue(subCat.code.scope === \"0x2d\");\n assert.isTrue(subCat.code.value === \"A-Z013-G-Legn\");\n roundtripThroughJson(subCat);\n }\n\n /// Get the parent Category of the subcategory.\n const cat = imodel1.elements.getElement((subCat as SubCategory).getCategoryId());\n assert.isTrue(cat instanceof Category);\n if (cat instanceof Category) {\n assert.equal(Id64.getLocalId(cat.id), 45);\n assert.equal(Id64.getBriefcaseId(cat.id), 0);\n assert.isTrue(cat.description === \"Legends, symbols keys\");\n assert.equal(Id64.getLocalId(cat.code.spec), 22);\n assert.equal(Id64.getBriefcaseId(cat.code.spec), 0);\n assert.isTrue(cat.code.value === \"A-Z013-G-Legn\");\n roundtripThroughJson(cat);\n }\n\n const phys = imodel1.elements.getElement(\"0x38\");\n assert.isTrue(phys instanceof GeometricElement3d);\n\n const locateMsg = phys.getToolTipMessage();\n assert.isDefined(locateMsg);\n\n const a2 = imodel2.elements.getElement(\"0x1d\");\n assert.exists(a2);\n expect(a2.federationGuid).equal(\"18eb4650-b074-414f-b961-d9cfaa6c8746\");\n const el3 = imodel2.elements.getElement(a2.federationGuid!);\n assert.exists(el3);\n assert.notEqual(a2, el3);\n assert.equal(a2.id, el3.id);\n roundtripThroughJson(el3);\n const txn = new EditTxn(imodel2, \"code scope mutation test\");\n txn.start();\n\n const newEl = el3.toJSON();\n newEl.federationGuid = undefined;\n newEl.code = { scope: \"bad scope\", spec: \"0x10\", value: \"new code\" };\n expect(() => txn.insertElement(newEl)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n newEl.code.scope = \"0x34322\"; // valid id, but element doesn't exist\n expect(() => txn.insertElement(newEl)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n\n newEl.code.scope = el3.federationGuid!;\n const newId = txn.insertElement(newEl); // code scope from FederationGuid should get converted to ElementId\n const a4 = imodel2.elements.getElementProps(newId);\n expect(a4.code.scope).equal(el3.id);\n\n a4.code.scope = \"0x13343\";\n expect(() => txn.updateElement(a4)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n\n a4.code.scope = \"0x1\";\n txn.updateElement(a4); // should change the code scope to new element\n let a5 = imodel2.elements.getElementProps(newId);\n expect(a5.code.scope).equal(\"0x1\");\n\n // only pass minimum, but expect model and classFullName to be added.\n const newProps = { id: a4.id, code: a4.code, classFullName: undefined, model: undefined };\n newProps.code.scope = el3.federationGuid!; // should convert FederationGuid to ElementId\n txn.updateElement(newProps);\n expect(newProps.classFullName).eq(a4.classFullName);\n expect(newProps.model).eq(a4.model);\n\n a5 = imodel2.elements.getElementProps(newId);\n expect(a5.code.scope).equal(el3.id);\n txn.end();\n });\n\n it(\"should optionally detect class mismatches\", () => {\n // tryGetElement\n const subjectUnvalidated = imodel1.elements.tryGetElement<Subject>(IModel.rootSubjectId);\n assert.isDefined(subjectUnvalidated);\n const subjectValidated = imodel1.elements.tryGetElement<Subject>(IModel.rootSubjectId, Subject);\n assert.isDefined(subjectValidated);\n const physicalElementUnvalidated = imodel1.elements.tryGetElement<PhysicalElement>(IModel.rootSubjectId);\n assert.isDefined(physicalElementUnvalidated); // wrong type, but class to validate was not passed\n const physicalElementValidated = imodel1.elements.tryGetElement<PhysicalElement>(IModel.rootSubjectId, PhysicalElement); // abstract class\n assert.isUndefined(physicalElementValidated); // wrong type\n const physicalObjectUnvalidated = imodel1.elements.tryGetElement<PhysicalObject>(IModel.rootSubjectId);\n assert.isDefined(physicalObjectUnvalidated); // wrong type, but class to validate was not passed\n const physicalObjectValidated = imodel1.elements.tryGetElement<PhysicalObject>(IModel.rootSubjectId, PhysicalObject); // concrete class\n assert.isUndefined(physicalObjectValidated); // wrong type\n // tryGetModel\n const dictionaryUnvalidated = imodel1.models.tryGetModel<DictionaryModel>(IModel.dictionaryId);\n assert.isDefined(dictionaryUnvalidated);\n const dictionaryValidated = imodel1.models.tryGetModel<DictionaryModel>(IModel.dictionaryId, DictionaryModel);\n assert.isDefined(dictionaryValidated);\n const geometricModelUnvalidated = imodel1.models.tryGetModel<GeometricModel>(IModel.dictionaryId);\n assert.isDefined(geometricModelUnvalidated); // wrong type, but class to validate was not passed\n const geometricModelValidated = imodel1.models.tryGetModel<GeometricModel>(IModel.dictionaryId, GeometricModel); // abstract class\n assert.isUndefined(geometricModelValidated); // wrong type\n const physicalModelUnvalidated = imodel1.models.tryGetModel<PhysicalModel>(IModel.dictionaryId);\n assert.isDefined(physicalModelUnvalidated); // wrong type, but class to validate was not passed\n const physicalModelValidated = imodel1.models.tryGetModel<PhysicalModel>(IModel.dictionaryId, PhysicalModel); // concrete class\n assert.isUndefined(physicalModelValidated); // wrong type\n // tryGetSubModel\n const dictionarySubUnvalidated = imodel1.models.tryGetSubModel<DictionaryModel>(IModel.dictionaryId);\n assert.isDefined(dictionarySubUnvalidated);\n const dictionarySubValidated = imodel1.models.tryGetSubModel<DictionaryModel>(IModel.dictionaryId, DictionaryModel);\n assert.isDefined(dictionarySubValidated);\n const geometricSubModelUnvalidated = imodel1.models.tryGetSubModel<GeometricModel>(IModel.dictionaryId);\n assert.isDefined(geometricSubModelUnvalidated); // wrong type, but class to validate was not passed\n const geometricSubModelValidated = imodel1.models.tryGetSubModel<GeometricModel>(IModel.dictionaryId, GeometricModel); // abstract class\n assert.isUndefined(geometricSubModelValidated); // wrong type\n const physicalSubModelUnvalidated = imodel1.models.tryGetSubModel<PhysicalModel>(IModel.dictionaryId);\n assert.isDefined(physicalSubModelUnvalidated); // wrong type, but class to validate was not passed\n const physicalSubModelValidated = imodel1.models.tryGetSubModel<PhysicalModel>(IModel.dictionaryId, PhysicalModel); // concrete class\n assert.isUndefined(physicalSubModelValidated); // wrong type\n });\n\n it(\"should create elements\", () => {\n const seedElement = imodel2.elements.getElement<GeometricElement3d>(\"0x1d\");\n assert.exists(seedElement);\n assert.isTrue(seedElement.federationGuid! === \"18eb4650-b074-414f-b961-d9cfaa6c8746\");\n\n withEditTxn(imodel2, (txn) => {\n for (let i = 0; i < 25; i++) {\n const elementProps: GeometricElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n model: seedElement.model,\n category: seedElement.category,\n code: Code.createEmpty(),\n federationGuid: Guid.createValue(),\n userLabel: `UserLabel-${i}`,\n };\n\n const element: Element = imodel2.elements.createElement(elementProps);\n element.setUserProperties(\"performanceTest\", { s: `String-${i}`, n: i });\n\n const elementId = txn.insertElement(element.toJSON());\n assert.isTrue(Id64.isValidId64(elementId));\n }\n });\n });\n\n it(\"should insert a RenderMaterial\", () => {\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const testMaterialName = \"test material name\";\n const testPaletteName = \"test palette name\";\n const testDescription = \"test description\";\n const color = [0.3, 0.7, 0.8];\n const specularColor = [0.1, 1, 0];\n const finish = 0.4;\n const transmit = 0.1;\n const diffuse = 0.24;\n const specular = 0.9;\n const reflect = 0.3;\n const reflectColor = [1, 0, 0.5];\n /* eslint-disable @typescript-eslint/naming-convention */\n const textureMapProps: TextureMapProps = {\n pattern_angle: 3.0,\n pattern_u_flip: false,\n pattern_flip: false,\n pattern_scale: [1.0, 1.0],\n pattern_offset: [0.0, 0.0],\n pattern_scalemode: TextureMapUnits.Inches,\n pattern_mapping: TextureMapping.Mode.Planar,\n pattern_weight: 0.5,\n TextureId: \"test_textureid\",\n };\n\n /* eslint-enable @typescript-eslint/naming-convention */\n const renderMaterialParams: RenderMaterialElementParams = {\n paletteName: testPaletteName,\n description: testDescription,\n color,\n specularColor,\n finish,\n transmit,\n diffuse,\n specular,\n reflect,\n reflectColor,\n patternMap: textureMapProps,\n };\n\n const renderMaterialId = withEditTxn(imodel2, (txn) => RenderMaterialElement.insert(txn, IModel.dictionaryId, testMaterialName, renderMaterialParams));\n\n const renderMaterial = imodel2.elements.getElement<RenderMaterialElement>(renderMaterialId);\n assert((renderMaterial instanceof RenderMaterialElement) === true, \"did not retrieve an instance of RenderMaterial\");\n expect(renderMaterial.paletteName).to.equal(testPaletteName);\n expect(renderMaterial.description).to.equal(testDescription);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasBaseColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.color)).to.equal(JSON.stringify(color));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasSpecularColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.specular_color)).to.equal(JSON.stringify(specularColor));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasFinish).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.finish).to.equal(finish);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasTransmit).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.transmit).to.equal(transmit);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasDiffuse).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.diffuse).to.equal(diffuse);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasSpecular).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.specular).to.equal(specular);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasReflect).to.equal(true);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.reflect).to.equal(reflect);\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.HasReflectColor).to.equal(true);\n expect(JSON.stringify(renderMaterial.jsonProperties.materialAssets.renderMaterial.reflect_color)).to.equal(JSON.stringify(reflectColor));\n expect(renderMaterial.jsonProperties.materialAssets.renderMaterial.Map).not.to.be.undefined;\n\n const patternMap = renderMaterial.jsonProperties.materialAssets.renderMaterial.Map.Pattern;\n expect(patternMap).not.to.be.undefined;\n expect(patternMap.pattern_angle).to.equal(textureMapProps.pattern_angle);\n expect(patternMap.pattern_u_flip).to.equal(textureMapProps.pattern_u_flip);\n expect(patternMap.pattern_flip).to.equal(textureMapProps.pattern_flip);\n expect(JSON.stringify(patternMap.pattern_scale)).to.equal(JSON.stringify(textureMapProps.pattern_scale));\n expect(JSON.stringify(patternMap.pattern_offset)).to.equal(JSON.stringify(textureMapProps.pattern_offset));\n expect(patternMap.pattern_scalemode).to.equal(textureMapProps.pattern_scalemode);\n expect(patternMap.pattern_mapping).to.equal(textureMapProps.pattern_mapping);\n expect(patternMap.pattern_weight).to.equal(textureMapProps.pattern_weight);\n expect(patternMap.TextureId).to.equal(textureMapProps.TextureId);\n });\n\n it(\"attempt to apply material to new element in imodel5\", () => {\n const testTextureName = \"fake texture name\";\n const testTextureFormat = ImageSourceFormat.Png;\n const testTextureDescription = \"empty description\";\n const txn = new EditTxn(imodel5, \"apply material to new element\");\n txn.start();\n\n const texId = Texture.insertTexture(txn, IModel.dictionaryId, testTextureName, testTextureFormat, samplePngTexture.base64, testTextureDescription);\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const matId = RenderMaterialElement.insert(txn, IModel.dictionaryId, \"test material name\",\n {\n paletteName: \"TestPaletteName\",\n patternMap: {\n TextureId: texId,\n pattern_offset: [0, 0],\n pattern_scale: [1, 1],\n pattern_scalemode: TextureMapUnits.Relative,\n },\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n\n /** Create a simple flat mesh with 4 points (2x2) */\n const width = imodel5.projectExtents.xLength() * 0.2;\n const height = imodel5.projectExtents.yLength() * 0.2;\n let shape: GeometryQuery;\n const doPolyface = true;\n if (doPolyface) {\n const options = StrokeOptions.createForFacets();\n options.shouldTriangulate = false;\n const builder = PolyfaceBuilder.create(options);\n\n const quad = [\n Point3d.create(0.0, 0.0, 0.0),\n Point3d.create(width, 0.0, 0.0),\n Point3d.create(width, height, 0.0),\n Point3d.create(0.0, height, 0.0),\n ];\n\n builder.addQuadFacet(quad);\n shape = builder.claimPolyface();\n } else {\n shape = Loop.create(LineString3d.create([\n Point3d.create(0, 0, 0),\n Point3d.create(width, 0, 0),\n Point3d.create(width, height, 0),\n Point3d.create(0, height, 0),\n Point3d.create(0, 0, 0),\n ]));\n }\n\n const modelId = PhysicalModel.insert(txn, IModelDb.rootSubjectId, \"test_render_material_model_name\");\n\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"GeoJSON Feature\", { color: ColorDef.white.toJSON() });\n\n /** generate a geometry stream containing the polyface */\n const gsBuilder = new GeometryStreamBuilder();\n const params = new GeometryParams(categoryId);\n params.materialId = matId;\n gsBuilder.appendGeometryParamsChange(params);\n gsBuilder.appendGeometry(shape);\n const geometry = gsBuilder.geometryStream;\n // geometry[0].material = { materialId: matId };\n\n const props: PhysicalElementProps = {\n classFullName: \"Generic:PhysicalObject\",\n placement: { origin: imodel5.projectExtents.center, angles: new YawPitchRollAngles() },\n model: modelId,\n code: Code.createEmpty(),\n category: categoryId,\n geom: geometry,\n };\n txn.insertElement(props);\n txn.end();\n });\n\n it(\"should insert a DisplayStyle\", () => {\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const settings: DisplayStyleSettingsProps = {\n backgroundColor: ColorDef.blue.toJSON(),\n viewflags: ViewFlags.fromJSON({\n renderMode: RenderMode.SolidFill,\n }),\n };\n\n const props: DisplayStyleProps = {\n classFullName: DisplayStyle3d.classFullName,\n model: IModel.dictionaryId,\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: \"test style\" },\n isPrivate: false,\n jsonProperties: {\n styles: settings,\n },\n };\n\n const txn = new EditTxn(imodel2, \"insert and update DisplayStyle\");\n txn.start();\n const styleId = txn.insertElement(props);\n let style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);\n expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;\n\n const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });\n style.settings.viewFlags = newFlags;\n style.settings.backgroundColor = ColorDef.red;\n style.settings.monochromeColor = ColorDef.green;\n expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);\n\n txn.updateElement(style.toJSON());\n txn.end();\n style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);\n expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;\n expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;\n });\n\n it(\"should create display styles\", () => {\n const defaultViewFlags = new ViewFlags().toJSON();\n const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;\n\n const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });\n const viewflags: ViewFlagProps = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };\n\n const mapImagery: MapImageryProps = {\n backgroundBase: ColorDef.red.tbgr,\n backgroundLayers: [{\n name: \"x\",\n url: \"y\",\n transparency: 0.5,\n formatId: \"WMS\",\n visible: true,\n }],\n };\n\n const props: DisplayStyleSettingsProps = {\n mapImagery,\n excludedElements: [\"0x123\", \"0xfed\"],\n timePoint: 42,\n backgroundColor: ColorDef.green.tbgr,\n };\n\n type TestCase = [DisplayStyleCreationOptions | undefined, ViewFlagProps, boolean];\n const testCases: TestCase[] = [\n [undefined, defaultViewFlags, false],\n [{ viewFlags }, viewFlags.toJSON(), false],\n [{ viewflags }, viewflags, false],\n [{ viewflags, viewFlags }, viewFlags.toJSON(), false],\n [props, defaultViewFlags, false],\n [{ ...props, viewflags }, viewflags, false],\n [{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],\n ];\n\n let suffix = 123;\n withEditTxn(imodel2, (txn) => {\n for (const test of testCases) {\n const expected = test[0] ?? {};\n const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);\n const style = imodel2.elements.getElement<DisplayStyle3d>(styleId).toJSON();\n expect(style.jsonProperties.styles).not.to.be.undefined;\n\n expect(style.jsonProperties).not.to.be.undefined;\n expect(style.jsonProperties.styles).not.to.be.undefined;\n const actual = style.jsonProperties.styles!;\n\n expect(actual.viewflags).not.to.be.undefined;\n const expectedVf = ViewFlags.fromJSON(test[1]);\n const actualVf = ViewFlags.fromJSON(actual.viewflags);\n expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());\n\n const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;\n expect(actual.backgroundColor).to.equal(expectedBGColor);\n\n // DisplayStyleSettings constructor always initializes json.mapImagery.\n expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);\n expect(actual.excludedElements).to.deep.equal(expected.excludedElements);\n expect(actual.timePoint).to.deep.equal(expected.timePoint);\n }\n });\n });\n\n it(\"should have a valid root subject element\", () => {\n const rootSubject = imodel1.elements.getRootSubject();\n assert.exists(rootSubject);\n assert.isTrue(rootSubject instanceof Subject);\n assert.isAtLeast(rootSubject.code.value.length, 1);\n assert.isFalse(imodel1.elements.hasSubModel(IModel.rootSubjectId));\n\n try {\n imodel1.models.getSubModel(rootSubject.id); // throws error\n assert.fail(); // this line should be skipped\n } catch (error: any) {\n assert.isTrue(error instanceof Error);\n assert.isTrue(error instanceof IModelError);\n assert.equal(error.errorNumber, IModelStatus.NotFound);\n }\n\n const childIds: Id64String[] = imodel1.elements.queryChildren(rootSubject.id);\n assert.isAtLeast(childIds.length, 1);\n for (const childId of childIds) {\n const childElement = imodel1.elements.getElement(childId);\n assert.exists(childElement);\n assert.isTrue(childElement instanceof Element);\n\n roundtripThroughJson(childElement);\n assert.equal(rootSubject.id, childElement.parent!.id);\n\n const childLocalId = Id64.getLocalId(childId);\n const childBcId = Id64.getBriefcaseId(childId);\n if (childElement instanceof InformationPartitionElement) {\n assert.isTrue(imodel1.elements.hasSubModel(childElement.id));\n const childSubModel: Model = imodel1.models.getSubModel(childElement.id);\n assert.exists(childSubModel, \"InformationPartitionElements should have a subModel\");\n\n if (childLocalId === 16 && childBcId === 0) {\n assert.isTrue(childElement instanceof DefinitionPartition, \"ChildId 0x00000010 should be a DefinitionPartition\");\n assert.isTrue(childElement.code.value === \"BisCore.DictionaryModel\", \"Definition Partition should have code value of BisCore.DictionaryModel\");\n } else if (childLocalId === 14 && childBcId === 0) {\n assert.isTrue(childElement instanceof LinkPartition);\n assert.isTrue(childElement.code.value === \"BisCore.RealityDataSources\");\n } else if (childLocalId === 17 && childBcId === 0) {\n assert.isTrue(childElement instanceof LinkPartition, \"ChildId 0x000000011 should be a LinkPartition\");\n assert.isTrue(childElement.code.value === \"Repository Links\");\n }\n } else if (childElement instanceof Subject) {\n assert.isFalse(imodel1.elements.hasSubModel(childElement.id));\n if (childLocalId === 19 && childBcId === 0) {\n assert.isTrue(childElement instanceof Subject);\n assert.isTrue(childElement.code.value === \"DgnV8:mf3, A\", \"Subject should have code value of DgnV8:mf3, A\");\n assert.isTrue(childElement.jsonProperties.Subject.Job.DgnV8.V8File === \"mf3.dgn\", \"Subject should have jsonProperty Subject.Job.DgnV.V8File\");\n assert.isTrue(childElement.jsonProperties.Subject.Job.DgnV8.V8RootModel === \"A\", \"Subject should have jsonProperty Subject.Job.DgnV.V8RootModel\");\n }\n }\n }\n });\n\n it(\"should load a known model by Id from an existing iModel\", () => {\n assert.exists(imodel1.models);\n const model2 = imodel1.models.getModel(\"0x1c\");\n assert.exists(model2);\n const formatter = model2.getJsonProperty(\"formatter\");\n assert.exists(formatter, \"formatter should exist as json property\");\n assert.equal(formatter.fmtFlags.angMode, 1, \"fmtFlags\");\n assert.equal(formatter.mastUnit.label, \"m\", \"mastUnit is meters\");\n roundtripThroughJson(model2);\n let model = imodel1.models.getModel(IModel.repositoryModelId);\n assert.exists(model);\n roundtripThroughJson(model);\n const code1 = new Code({ spec: \"0x1d\", scope: \"0x1d\", value: \"A\" });\n model = imodel1.models.getSubModel(code1);\n // By this point, we expect the submodel's class to be in the class registry *cache*\n const geomModel = ClassRegistry.getClass(PhysicalModel.classFullName, imodel1);\n assert.exists(model);\n assert.isTrue(model instanceof geomModel);\n roundtripThroughJson(model);\n const modelExtents: AxisAlignedBox3d = (model as PhysicalModel).queryExtents();\n\n assert.isBelow(modelExtents.low.x, modelExtents.high.x);\n assert.isBelow(modelExtents.low.y, modelExtents.high.y);\n assert.isBelow(modelExtents.low.z, modelExtents.high.z);\n });\n\n it(\"should find a tile tree for a geometric model\", async () => {\n // Note: this is an empty model.\n const tree = await imodel1.tiles.requestTileTreeProps(\"0x1c\");\n expect(tree).not.to.be.undefined;\n\n expect(tree.id).to.equal(\"0x1c\");\n expect(tree.maxTilesToSkip).to.equal(1);\n expect(tree.rootTile).not.to.be.undefined;\n\n // Empty model => identity transform\n const tf = Transform.fromJSON(tree.location);\n expect(tf.matrix.isIdentity).to.be.true;\n expect(tf.origin.x).to.equal(0);\n expect(tf.origin.y).to.equal(0);\n expect(tf.origin.z).to.equal(0);\n\n expect(tree.rootTile.contentId).to.equal(\"0/0/0/0/1\");\n\n // Empty model => null range\n const range = Range3d.fromJSON(tree.rootTile.range);\n expect(range.isNull).to.be.true;\n\n expect(tree.rootTile.maximumSize).to.equal(0.0); // empty model => undisplayable root tile => size = 0.0\n expect(tree.rootTile.isLeaf).to.be.true; // empty model => empty tile\n expect(tree.rootTile.contentRange).to.be.undefined;\n });\n\n it(\"should throw on invalid tile requests\", async () => {\n using _r = new DisableNativeAssertions();\n let error = await getIModelError(imodel1.tiles.requestTileTreeProps(\"0x12345\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileTreeProps(\"NotAValidId\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"0/0/0/0\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x12345\", \"0/0/0/0/1\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"V/W/X/Y/Z\"));\n expectIModelError(IModelStatus.InvalidId, error);\n\n error = await getIModelError(imodel1.tiles.requestTileContent(\"0x1c\", \"NotAValidId\"));\n expectIModelError(IModelStatus.InvalidId, error);\n });\n\n // NOTE: this test can be removed when the deprecated executeQuery method is removed\n it(\"should produce an array of rows\", () => {\n const rows: any[] = IModelTestUtils.executeQuery(imodel1, `SELECT * FROM ${Category.classFullName}`);\n assert.exists(rows);\n assert.isArray(rows);\n assert.isAtLeast(rows.length, 1);\n assert.exists(rows[0].id);\n assert.notEqual(rows[0].id.value, \"\");\n });\n\n it(\"should be some categories\", () => {\n const categorySql = `SELECT ECInstanceId FROM ${Category.classFullName}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel1.withPreparedStatement(categorySql, (categoryStatement: ECSqlStatement): void => {\n let numCategories = 0;\n while (DbResult.BE_SQLITE_ROW === categoryStatement.step()) {\n numCategories++;\n const categoryId = categoryStatement.getValue(0).getId();\n const category: Element = imodel1.elements.getElement(categoryId);\n assert.isTrue(category instanceof Category, \"Should be instance of Category\");\n\n // verify the default subcategory.\n const defaultSubCategoryId = (category as Category).myDefaultSubCategoryId();\n const defaultSubCategory: Element = imodel1.elements.getElement(defaultSubCategoryId);\n assert.isTrue(defaultSubCategory instanceof SubCategory, \"defaultSubCategory should be instance of SubCategory\");\n if (defaultSubCategory instanceof SubCategory) {\n assert.isTrue(defaultSubCategory.parent!.id === categoryId, \"defaultSubCategory id should be prescribed value\");\n assert.isTrue(defaultSubCategory.getSubCategoryName() === category.code.value, \"DefaultSubcategory name should match that of Category\");\n assert.isTrue(defaultSubCategory.isDefaultSubCategory, \"isDefaultSubCategory should return true\");\n }\n\n // get the subcategories\n const subCategorySql = `SELECT ECInstanceId FROM ${SubCategory.classFullName} WHERE Parent.Id=:parentId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel1.withPreparedStatement(subCategorySql, (subCategoryStatement: ECSqlStatement): void => {\n let numSubCategories = 0;\n subCategoryStatement.bindId(\"parentId\", categoryId);\n while (DbResult.BE_SQLITE_ROW === subCategoryStatement.step()) {\n numSubCategories++;\n const subCategoryId = subCategoryStatement.getValue(0).getId();\n const subCategory: Element = imodel1.elements.getElement(subCategoryId);\n assert.isTrue(subCategory instanceof SubCategory);\n assert.isTrue(subCategory.parent!.id === categoryId);\n }\n assert.isAtLeast(numSubCategories, 1, \"Expected query to find at least one SubCategory\");\n });\n }\n assert.isAtLeast(numCategories, 1, \"Expected query to find some categories\");\n });\n });\n\n it(\"should be some 2d elements\", () => {\n const sql = `SELECT ECInstanceId FROM ${DrawingGraphic.classFullName}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(sql, (statement: ECSqlStatement): void => {\n let numDrawingGraphics = 0;\n let found25: boolean = false;\n let found26: boolean = false;\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n numDrawingGraphics++;\n const drawingGraphicId = statement.getValue(0).getId();\n const drawingGraphic = imodel2.elements.getElement<GeometricElement2d>({ id: drawingGraphicId, wantGeometry: true });\n assert.exists(drawingGraphic);\n assert.isTrue(drawingGraphic.className === \"DrawingGraphic\", \"Should be instance of DrawingGraphic\");\n assert.isTrue(drawingGraphic instanceof DrawingGraphic, \"Is instance of DrawingGraphic\");\n assert.isTrue(drawingGraphic instanceof GeometricElement2d, \"Is instance of GeometricElement2d\");\n if (Id64.getLocalId(drawingGraphic.id) === 0x25) {\n found25 = true;\n assert.isTrue(drawingGraphic.placement.origin.x === 0.0);\n assert.isTrue(drawingGraphic.placement.origin.y === 0.0);\n assert.isTrue(drawingGraphic.placement.angle.radians === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.x === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.y === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.x === 1.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.y === 1.0);\n assert.isDefined(drawingGraphic.geom);\n } else if (Id64.getLocalId(drawingGraphic.id) === 0x26) {\n found26 = true;\n assert.isTrue(drawingGraphic.placement.origin.x === 1.0);\n assert.isTrue(drawingGraphic.placement.origin.y === 1.0);\n assert.isTrue(drawingGraphic.placement.angle.radians === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.x === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.low.y === 0.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.x === 2.0);\n assert.isTrue(drawingGraphic.placement.bbox.high.y === 2.0);\n assert.isDefined(drawingGraphic.geom);\n }\n }\n assert.isAtLeast(numDrawingGraphics, 1, \"Expected query to find some DrawingGraphics\");\n assert.isTrue(found25, \"Expected to find a specific element\");\n assert.isTrue(found26, \"Expected to find a specific element\");\n });\n });\n\n it(\"should be able to query for ViewDefinitionProps\", () => {\n const viewDefinitionProps: ViewDefinitionProps[] = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions\n assert.isAtLeast(viewDefinitionProps.length, 3);\n assert.isTrue(viewDefinitionProps[0].classFullName.includes(\"ViewDefinition\"));\n assert.isFalse(viewDefinitionProps[1].isPrivate);\n\n const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps(\"BisCore.SpatialViewDefinition\") as SpatialViewDefinitionProps[]; // limit query to SpatialViewDefinitions\n assert.isAtLeast(spatialViewDefinitionProps.length, 3);\n assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);\n });\n\n it(\"should iterate ViewDefinitions\", () => {\n // imodel2 contains 3 SpatialViewDefinitions and no other views.\n let numViews = 0;\n let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for spatial views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.SpatialViewDefinition\" }, (view: ViewDefinition) => {\n if (view.isSpatialView())\n ++numViews;\n\n return view.isSpatialView();\n });\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for 2d views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.ViewDefinition2d\" }, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(0);\n\n // Terminate iteration on first view\n numViews = 0;\n result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return false;\n });\n\n expect(result).to.be.false;\n expect(numViews).to.equal(1);\n });\n\n it(\"should be children of RootSubject\", () => {\n const sql = `SELECT ECInstanceId FROM ${Model.classFullName} WHERE ParentModel.Id=:parentModelId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(sql, (statement: ECSqlStatement): void => {\n statement.bindId(\"parentModelId\", IModel.repositoryModelId);\n let numModels = 0;\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n numModels++;\n const modelId = statement.getValue(0).getId();\n const model = imodel2.models.getModel(modelId);\n assert.exists(model, \"Model should exist\");\n assert.isTrue(model instanceof Model);\n\n // should be an element with the same Id.\n const modeledElement = imodel2.elements.getElement(modelId);\n assert.exists(modeledElement, \"Modeled Element should exist\");\n\n if (model.className === \"LinkModel\") {\n // expect LinkModel to be accompanied by LinkPartition\n assert.isTrue(modeledElement instanceof LinkPartition);\n continue;\n } else if (model.className === \"DictionaryModel\") {\n assert.isTrue(modeledElement instanceof DefinitionPartition);\n continue;\n } else if (model.className === \"PhysicalModel\") {\n assert.isTrue(modeledElement instanceof PhysicalPartition);\n continue;\n } else if (model.className === \"GroupModel\") {\n assert.isTrue(modeledElement instanceof GroupInformationPartition);\n continue;\n } else if (model.className === \"DocumentListModel\") {\n assert.isTrue(modeledElement instanceof DocumentPartition);\n continue;\n } else if (model.className === \"DefinitionModel\") {\n assert.isTrue(modeledElement instanceof DefinitionPartition);\n continue;\n } else {\n assert.isTrue(false, \"Expected a known model type\");\n }\n }\n assert.isAtLeast(numModels, 1, \"Expected query to find some Models\");\n });\n });\n\n it(\"should insert and update auto-handled properties\", () => {\n const testElem = imodel4.elements.getElement(\"0x14\");\n assert.isDefined(testElem);\n assert.equal(testElem.classFullName, \"DgnPlatformTest:TestElementWithNoHandler\");\n assert.isUndefined(testElem.asAny.integerProperty1);\n\n const newTestElem = roundtripThroughJson(testElem) as Element;\n assert.equal(newTestElem.classFullName, testElem.classFullName);\n newTestElem.asAny.integerProperty1 = 999;\n assert.isTrue(testElem.asAny.arrayOfPoint3d[0].isAlmostEqual(newTestElem.asAny.arrayOfPoint3d[0]));\n\n const loc1 = { street: \"Elm Street\", city: { name: \"Downingtown\", state: \"PA\" } };\n const loc2 = { street: \"Oak Street\", city: { name: \"Downingtown\", state: \"PA\" } };\n const loc3 = { street: \"Chestnut Street\", city: { name: \"Philadelphia\", state: \"PA\" } };\n const arrayOfStructs = [loc2, loc3];\n newTestElem.asAny.location = loc1;\n newTestElem.asAny.arrayOfStructs = arrayOfStructs;\n newTestElem.asAny.dtUtc = new Date(\"2015-03-25\");\n newTestElem.asAny.p3d = new Point3d(1, 2, 3);\n\n const txn = new EditTxn(imodel4, \"insert and update auto-handled properties\");\n txn.start();\n const newTestElemId = txn.insertElement(newTestElem.toJSON());\n\n assert.isTrue(Id64.isValidId64(newTestElemId), \"insert worked\");\n\n const newTestElemFetched = imodel4.elements.getElement(newTestElemId);\n assert.isDefined(newTestElemFetched);\n assert.isTrue(newTestElemFetched.id === newTestElemId);\n assert.equal(newTestElemFetched.classFullName, newTestElem.classFullName);\n assert.isDefined(newTestElemFetched.asAny.integerProperty1);\n assert.equal(newTestElemFetched.asAny.integerProperty1, newTestElem.asAny.integerProperty1);\n assert.isTrue(newTestElemFetched.asAny.arrayOfPoint3d[0].isAlmostEqual(newTestElem.asAny.arrayOfPoint3d[0]));\n assert.deepEqual(newTestElemFetched.asAny.location, loc1);\n assert.deepEqual(newTestElem.asAny.arrayOfStructs, arrayOfStructs);\n // TODO: getElement must convert date ISO string to Date object assert.deepEqual(newTestElemFetched.dtUtc, newTestElem.dtUtc);\n assert.deepEqual(newTestElemFetched.asAny.dtUtc, newTestElem.asAny.dtUtc.toJSON());\n assert.isTrue(newTestElemFetched.asAny.p3d.isAlmostEqual(newTestElem.asAny.p3d));\n\n // ----------- updates ----------------\n const wasp3d = newTestElemFetched.asAny.p3d;\n const editElem = newTestElemFetched;\n editElem.asAny.location = loc2;\n try {\n txn.updateElement(editElem.toJSON());\n } catch {\n assert.fail(\"Element.update failed\");\n }\n const afterUpdateElemFetched = imodel4.elements.getElement(editElem.id);\n assert.deepEqual(afterUpdateElemFetched.asAny.location, loc2, \" location property should be the new one\");\n assert.deepEqual(afterUpdateElemFetched.asAny.id, editElem.id, \" the id should not have changed.\");\n assert.deepEqual(afterUpdateElemFetched.asAny.p3d, wasp3d, \" p3d property should not have changed\");\n\n // Make array shorter\n assert.equal(afterUpdateElemFetched.asAny.arrayOfInt.length, 300);\n\n afterUpdateElemFetched.asAny.arrayOfInt = [99, 3];\n txn.updateElement(afterUpdateElemFetched.toJSON());\n\n const afterShortenArray = imodel4.elements.getElement(afterUpdateElemFetched.id);\n assert.equal(afterUpdateElemFetched.asAny.arrayOfInt.length, 2);\n assert.deepEqual(afterShortenArray.asAny.arrayOfInt, [99, 3]);\n\n // Make array longer\n afterShortenArray.asAny.arrayOfInt = [1, 2, 3];\n txn.updateElement(afterShortenArray.toJSON());\n const afterLengthenArray = imodel4.elements.getElement(afterShortenArray.id);\n assert.equal(afterLengthenArray.asAny.arrayOfInt.length, 3);\n assert.deepEqual(afterLengthenArray.asAny.arrayOfInt, [1, 2, 3]);\n\n // ------------ delete -----------------\n const elid = afterUpdateElemFetched.id;\n txn.deleteElement(elid);\n assert.throws(() => imodel4.elements.getElement(elid), IModelError);\n txn.end();\n });\n\n it(\"should handle parent and child deletion properly\", () => {\n const txn = new EditTxn(imodel4, \"handle parent and child deletion\");\n txn.start();\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MyTestCategory\", new SubCategoryAppearance());\n const category = imodel4.elements.getElement<SpatialCategory>(categoryId);\n const subCategory = imodel4.elements.getElement<SubCategory>(category.myDefaultSubCategoryId());\n expect(() => txn.deleteElement(categoryId)).throws(\"error deleting element\").to.have.property(\"metadata\");\n assert.exists(imodel4.elements.getElement(categoryId), \"Category deletes should be blocked in native code\");\n assert.exists(imodel4.elements.getElement(subCategory.id), \"Children should not be deleted if parent delete is blocked\");\n\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"MyTestPhysicalModel\");\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n category: categoryId,\n code: Code.createEmpty(),\n };\n const parentId = txn.insertElement(elementProps);\n elementProps.parent = new ElementOwnsChildElements(parentId);\n const childId1 = txn.insertElement(elementProps);\n const childId2 = txn.insertElement(elementProps);\n assert.exists(imodel4.elements.getElement(parentId));\n assert.exists(imodel4.elements.getElement(childId1));\n assert.exists(imodel4.elements.getElement(childId2));\n txn.deleteElement(parentId);\n assert.throws(() => imodel4.elements.getElement(parentId), IModelError);\n assert.throws(() => imodel4.elements.getElement(childId1), IModelError);\n assert.throws(() => imodel4.elements.getElement(childId2), IModelError);\n txn.end();\n });\n\n function checkElementMetaData(entityClass: EntityClass) {\n assert.isNotNull(entityClass);\n assert.equal(entityClass.fullName, Element.classFullName.replace(\":\", \".\"));\n assert.isUndefined(entityClass.baseClass);\n\n let foundClassHasHandler = false;\n let foundClassHasCurrentTimeStampProperty = false;\n if (entityClass.customAttributes !== undefined) {\n if (entityClass.customAttributes.has(\"BisCore.ClassHasHandler\"))\n foundClassHasHandler = true;\n if (entityClass.customAttributes.has(\"CoreCustomAttributes.ClassHasCurrentTimeStampProperty\"))\n foundClassHasCurrentTimeStampProperty = true;\n }\n assert.isTrue(foundClassHasHandler);\n assert.isTrue(foundClassHasCurrentTimeStampProperty);\n const federationGuid = entityClass.getPropertySync(\"federationGuid\", false);\n if (federationGuid !== undefined) {\n assert.isTrue(federationGuid.isPrimitive());\n assert.equal(federationGuid.propertyType, PropertyType.Binary);\n assert.equal((federationGuid as PrimitiveOrEnumPropertyBase).extendedTypeName, \"BeGuid\");\n }\n }\n\n it(\"should get metadata for a relationship\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"relationshipMetadata.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } });\n\n await withEditTxn(imodel, async (txn) => {\n const partitionId = txn.insertElement({\n classFullName: \"BisCore:PhysicalPartition\",\n model: IModel.repositoryModelId,\n parent: {\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\n id: IModel.rootSubjectId,\n },\n code: new Code({\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\n scope: IModel.rootSubjectId,\n value: \"physical model\",\n }),\n });\n\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\n const relId = txn.insertRelationship({\n classFullName: \"BisCore:ElementHasLinks\",\n sourceId: partitionId,\n targetId: row.ECInstanceId,\n });\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const metadata = await relationship.getMetaData();\n assert.isDefined(metadata, \"metadata should be defined\");\n }\n });\n imodel.close();\n });\n\n it(\"should get metadata for class\", () => {\n const metaData = imodel1.schemaContext.getSchemaItemSync(Element.classFullName, EntityClass);\n assert.exists(metaData);\n if (metaData !== undefined)\n checkElementMetaData(metaData);\n });\n\n it(\"should iterate through metadata for a relationship\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"relationshipMetadata.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } });\n\n await withEditTxn(imodel, async (txn) => {\n const partitionId = txn.insertElement({\n classFullName: \"BisCore:PhysicalPartition\",\n model: IModel.repositoryModelId,\n parent: {\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\n id: IModel.rootSubjectId,\n },\n code: new Code({\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\n scope: IModel.rootSubjectId,\n value: \"physical model\",\n }),\n });\n\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\n const relId = txn.insertRelationship({\n classFullName: \"BisCore:ElementHasLinks\",\n sourceId: partitionId,\n targetId: row.ECInstanceId,\n });\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n relationship.forEach((propName, propMeta) => {\n assert.isDefined(propName, \"Property name should be defined\");\n assert.isDefined(propMeta, \"Property metadata should be defined\");\n });\n }\n });\n\n imodel.close();\n });\n\n it(\"update the project extents\", async () => {\n const originalExtents = imodel1.projectExtents;\n const newExtents = Range3d.create(originalExtents.low, originalExtents.high);\n newExtents.low.x -= 50;\n newExtents.low.y -= 25;\n newExtents.low.z -= 189;\n newExtents.high.x += 1087;\n newExtents.high.y += 19;\n newExtents.high.z += .001;\n await withEditTxn(imodel1, async (txn) => txn.updateProjectExtents(newExtents));\n\n const updatedProps = imodel1[_nativeDb].getIModelProps();\n assert.isTrue(updatedProps.hasOwnProperty(\"projectExtents\"), \"Returned property JSON object has project extents\");\n const updatedExtents = Range3d.fromJSON(updatedProps.projectExtents);\n assert.isTrue(newExtents.isAlmostEqual(updatedExtents), \"Project extents successfully updated in database\");\n });\n\n it(\"read view thumbnail\", () => {\n const viewId = \"0x24\";\n const thumbnail = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail);\n if (!thumbnail)\n return;\n assert.equal(thumbnail.format, \"jpeg\");\n assert.equal(thumbnail.height, 768);\n assert.equal(thumbnail.width, 768);\n assert.equal(thumbnail.image.length, 18062);\n\n thumbnail.width = 100;\n thumbnail.height = 200;\n thumbnail.format = \"png\";\n thumbnail.image = new Uint8Array(200);\n thumbnail.image.fill(12);\n const stat = imodel5.views.saveThumbnail(viewId, thumbnail);\n assert.equal(stat, 0, \"save thumbnail\");\n\n const thumbnail2 = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail2);\n if (!thumbnail2)\n return;\n assert.equal(thumbnail2.format, \"png\");\n assert.equal(thumbnail2.height, 200);\n assert.equal(thumbnail2.width, 100);\n assert.equal(thumbnail2.image.length, 200);\n assert.equal(thumbnail2.image[0], 12);\n });\n\n it(\"ecefLocation for iModels\", () => {\n assert.isTrue(imodel5.isGeoLocated);\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\n const ecefPt = imodel5.spatialToEcef(center);\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\n\n const z2 = imodel5.ecefToSpatial(ecefPt);\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\n\n const carto = imodel5.spatialToCartographicFromEcef(center);\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\n\n imodel5.cartographicToSpatialFromEcef(carto, z2);\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\n\n assert.isTrue(imodel5.geographicCoordinateSystem !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\n assert.isTrue(imodel5.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\n assert.isTrue(imodel5.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\n });\n\n function checkClassHasHandlerMetaData(classToCheck: CustomAttributeClass) {\n assert.isDefined(classToCheck);\n\n const propertiesArray = Array.from(classToCheck.getPropertiesSync(true));\n assert.equal(propertiesArray.length, 1);\n\n const restrictionProperty = propertiesArray[0];\n assert.isDefined(restrictionProperty);\n assert.equal(restrictionProperty.name, \"Restrictions\");\n assert.equal(propertyTypeToString(restrictionProperty.propertyType), \"PrimitiveArrayProperty\");\n assert.equal((restrictionProperty as PrimitiveArrayProperty).minOccurs, 0);\n }\n\n it(\"should get metadata for CA class just as well (and we'll see a array-typed property)\", () => {\n const metaData = imodel1.schemaContext.getSchemaItemSync(\"BisCore.ClassHasHandler\", CustomAttributeClass);\n assert.exists(metaData);\n if (metaData !== undefined) {\n assert.equal(metaData.schemaItemType, SchemaItemType.CustomAttributeClass);\n checkClassHasHandlerMetaData(metaData);\n }\n });\n\n it(\"should exercise ECSqlStatement (backend only)\", () => {\n // Reject an invalid statement\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.prepareStatement(\"select no_such_property, codeValue from bis.element\", false);\n assert.fail(\"prepare should have failed with an exception\");\n } catch (err: any) {\n assert.isTrue(err.constructor.name === \"IModelError\");\n assert.notEqual(err.status, DbResult.BE_SQLITE_OK);\n }\n let lastId: string = \"\";\n let firstCodeValue: string = \"\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element\", (stmt: ECSqlStatement) => {\n assert.isNotNull(stmt);\n // Reject an attempt to bind when there are no placeholders in the statement\n try {\n stmt.bindStruct(1, { foo: 1 });\n assert.fail(\"bindStruct should have failed with an exception\");\n } catch (err2: any) {\n assert.isTrue(err2.constructor.name === \"IModelError\");\n assert.notEqual(err2.status, DbResult.BE_SQLITE_OK);\n }\n\n // Verify that we get a bunch of rows with the expected shape\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const row = stmt.getRow();\n assert.isNotNull(row);\n assert.isObject(row);\n assert.isTrue(row.id !== undefined);\n assert.isTrue(Id64.isValid(Id64.fromJSON(row.id)));\n lastId = row.id;\n if (row.codeValue !== undefined)\n firstCodeValue = row.codeValue;\n count = count + 1;\n }\n assert.isTrue(count > 1);\n assert.notEqual(lastId, \"\");\n assert.notEqual(firstCodeValue, \"\");\n\n // Try iterator style\n let firstCodeValueIter: string = \"\";\n let iteratorCount = 0;\n let lastIterId: string = \"\";\n stmt.reset();\n for (const row of stmt) {\n assert.isNotNull(row);\n assert.isObject(row);\n assert.isTrue(row.id !== undefined);\n assert.isTrue(Id64.isValid(Id64.fromJSON(row.id)));\n lastIterId = row.id;\n iteratorCount = iteratorCount + 1;\n if (row.codeValue !== undefined)\n firstCodeValueIter = row.codeValue;\n }\n assert.equal(iteratorCount, count, \"iterator loop should find the same number of rows as the step loop\");\n assert.equal(lastIterId, lastId, \"iterator loop should see the same last row as the step loop\");\n assert.equal(firstCodeValueIter, firstCodeValue, \"iterator loop should find the first non-null code value as the step loop\");\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element WHERE (ecinstanceid=?)\", (stmt3: ECSqlStatement) => {\n // Now try a statement with a placeholder\n const idToFind = Id64.fromJSON(lastId);\n stmt3.bindId(1, idToFind);\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt3.step()) {\n count = count + 1;\n const row = stmt3.getRow();\n // Verify that we got the row that we asked for\n assert.isTrue(idToFind === Id64.fromJSON(row.id));\n }\n // Verify that we got the row that we asked for\n assert.equal(count, 1);\n });\n\n let firstCodeValueId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid, codeValue from bis.element WHERE (codeValue = :codevalue)\", (stmt4: ECSqlStatement) => {\n // Try a named placeholder\n const codeValueToFind = firstCodeValue;\n stmt4.bindString(\"codeValue\", codeValueToFind);\n let count = 0;\n while (DbResult.BE_SQLITE_ROW === stmt4.step()) {\n count = count + 1;\n const row = stmt4.getRow();\n // Verify that we got the row that we asked for\n assert.equal(row.codeValue, codeValueToFind);\n firstCodeValueId = row.id;\n }\n // Verify that we got the row that we asked for\n assert.equal(count, 1);\n });\n\n // make sure we can use parameterized values for queryEnityId (test on parameterized codevalue)\n const ids = imodel2.queryEntityIds({ from: \"bis.element\", where: \"codevalue=:cv\", bindings: { cv: firstCodeValue } });\n assert.equal(ids.values().next().value, firstCodeValueId);\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select ecinstanceid as id, codevalue from bis.element\", (stmt5: ECSqlStatement) => {\n while (DbResult.BE_SQLITE_ROW === stmt5.step()) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel2.withPreparedStatement(\"select codevalue from bis.element where ecinstanceid=?\", (stmt6: ECSqlStatement) => {\n stmt6.bindId(1, stmt5.getRow().id);\n while (DbResult.BE_SQLITE_ROW === stmt6.step()) {\n assert.equal(stmt6.getRow().codevalue, stmt5.getRow().codevalue);\n }\n });\n }\n });\n\n // make sure queryEnityIds works fine when all params are specified\n const physicalObjectIds = imodel2.queryEntityIds({ from: \"generic.PhysicalObject\", where: \"codevalue is null\", limit: 1, offset: 1, only: true, orderBy: \"ecinstanceid desc\" });\n assert.equal(physicalObjectIds.size, 1);\n });\n\n it(\"validate BisCodeSpecs\", async () => {\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.nullCodeSpec).scopeType, CodeScopeSpec.Type.Repository);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subCategory).scopeType, CodeScopeSpec.Type.ParentElement);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.viewDefinition).scopeType, CodeScopeSpec.Type.Model);\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subject).scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\n });\n\n it(\"should create and insert CodeSpecs\", () => {\n const testImodel = imodel2;\n const txn = new EditTxn(testImodel, \"create and insert CodeSpecs\");\n txn.start();\n const codeSpec = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\n const codeSpecId = testImodel.codeSpecs.insert(txn, codeSpec); // throws in case of error\n assert.deepEqual(codeSpecId, codeSpec.id);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\n\n // Should not be able to insert a duplicate.\n const codeSpecDup = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\n assert.throws(() => testImodel.codeSpecs.insert(txn, codeSpecDup), \"CodeSpec already exists\");\n\n // We should be able to insert another CodeSpec with a different name.\n const codeSpec2 = CodeSpec.create(testImodel, \"CodeSpec2\", CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpec2Id = testImodel.codeSpecs.insert(txn, codeSpec2); // throws in case of error\n assert.deepEqual(codeSpec2Id, codeSpec2.id);\n assert.notDeepEqual(codeSpec2Id, codeSpecId);\n\n // make sure CodeScopeSpec.Type.Repository works\n const codeSpec3 = CodeSpec.create(testImodel, \"CodeSpec3\", CodeScopeSpec.Type.Repository, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpec3Id = testImodel.codeSpecs.insert(txn, codeSpec3); // throws in case of error\n assert.notDeepEqual(codeSpec2Id, codeSpec3Id);\n\n const codeSpec4 = testImodel.codeSpecs.getById(codeSpec3Id);\n codeSpec4.name = \"CodeSpec4\";\n const codeSpec4Id = testImodel.codeSpecs.insert(txn, codeSpec4); // throws in case of error\n assert.notDeepEqual(codeSpec3Id, codeSpec4Id);\n assert.equal(codeSpec4.scopeType, CodeScopeSpec.Type.Repository);\n assert.equal(codeSpec4.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const copyOfCodeSpec4 = testImodel.codeSpecs.getById(codeSpec4Id);\n assert.deepEqual(codeSpec4, copyOfCodeSpec4);\n\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec1\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec2\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec3\"));\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec4\"));\n assert.isFalse(testImodel.codeSpecs.hasName(\"CodeSpec5\"));\n\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec2.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec3.id));\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec4.id));\n assert.isFalse(testImodel.codeSpecs.hasId(Id64.invalid));\n txn.end();\n });\n\n it(\"validate CodeSpec properties\", async () => {\n const iModelFileName: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"ReadWriteCodeSpec.bim\");\n const codeSpecName = \"CodeSpec1\";\n\n // Write new CodeSpec to iModel\n if (true) {\n const iModelDb = IModelTestUtils.createSnapshotFromSeed(iModelFileName, IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\"));\n const codeSpec = CodeSpec.create(iModelDb, codeSpecName, CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\n const codeSpecId = withEditTxn(iModelDb, (txn) => iModelDb.codeSpecs.insert(txn, codeSpec));\n assert.isTrue(Id64.isValidId64(codeSpec.id));\n assert.equal(codeSpec.id, codeSpecId);\n assert.equal(codeSpec.name, codeSpecName);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n iModelDb.close();\n }\n\n // Reopen iModel (ensure CodeSpec cache is cleared) and reconfirm CodeSpec properties\n if (true) {\n const iModelDb = SnapshotDb.openFile(iModelFileName);\n const codeSpec = iModelDb.codeSpecs.getByName(codeSpecName);\n assert.isTrue(Id64.isValidId64(codeSpec.id));\n assert.equal(codeSpec.name, codeSpecName);\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\n iModelDb.close();\n }\n });\n\n it(\"snapping\", async () => {\n const worldToView = Matrix4d.createIdentity();\n const response = await imodel2.requestSnap(\"0x222\", { testPoint: { x: 1, y: 2, z: 3 }, closePoint: { x: 1, y: 2, z: 3 }, id: \"0x111\", worldToView: worldToView.toJSON() });\n assert.isDefined(response.status);\n });\n\n it(\"should import schemas\", async () => {\n const metaData = await imodel1.schemaContext.getSchemaItem(\"TestBim:TestDocument\", EntityClass);\n assert.isDefined(metaData);\n if (metaData !== undefined) {\n const property = await metaData.getProperty(\"testDocumentProperty\");\n assert.isDefined(property);\n if (property !== undefined)\n assert.isDefined(property.propertyType, propertyTypeToString(PropertyType.Integer));\n }\n });\n\n it(\"should do CRUD on models\", () => {\n\n const testImodel = imodel2;\n const txn = new EditTxn(testImodel, \"CRUD on models\");\n txn.start();\n\n const [modeledElementId, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n\n const newModelPersist = testImodel.models.getModel(newModelId);\n\n // Check that it has the properties that we set.\n assert.equal(newModelPersist.classFullName, PhysicalModel.classFullName);\n assert.isTrue(newModelPersist.isPrivate);\n assert.deepEqual(newModelPersist.modeledElement.id, modeledElementId);\n\n // Update the model\n newModelPersist.isPrivate = false;\n txn.updateModel(newModelPersist.toJSON());\n // ... and check that it updated the model in the db\n const newModelPersist2 = testImodel.models.getModel(newModelId);\n assert.isFalse(newModelPersist2.isPrivate);\n\n // Delete the model\n txn.deleteModel(newModelId);\n\n // Test insertModel error handling\n try {\n txn.insertModel({\n classFullName: DefinitionModel.classFullName,\n modeledElement: { id: \"0x10000000bad\" },\n });\n } catch (error: any) {\n assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);\n }\n\n txn.end();\n\n });\n\n it(\"should create model with custom relationship to modeled element\", async () => {\n const testImodel = imodel1;\n const txn = new EditTxn(testImodel, \"custom relationship to modeled element\");\n\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestModelModelsElement\", EntityClass), \"TestModelModelsElement is expected to be defined in TestBim.ecschema.xml\");\n\n txn.start();\n const newPartition1 = IModelTestUtils.createAndInsertPhysicalPartition(txn, Code.createEmpty());\n const relClassName1 = \"TestBim:TestModelModelsElement\";\n const modeledElementRef = new RelatedElement({ id: newPartition1, relClassName: relClassName1 });\n const newModelId1 = IModelTestUtils.createAndInsertPhysicalModel(txn, modeledElementRef);\n assert.isTrue(Id64.isValidId64(newModelId1));\n const [, newModelId2] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty());\n txn.end();\n const newModel2 = testImodel.models.getModel(newModelId2);\n const relClassName2 = newModel2.modeledElement.relClassName;\n\n const model1 = testImodel.models.getModel(newModelId1);\n const model2 = testImodel.models.getModel(newModelId2);\n\n const foundRelClassName1 = model1.modeledElement.relClassName;\n const foundRelClassName2 = model2.modeledElement.relClassName;\n\n assert.equal(foundRelClassName1, relClassName1);\n assert.equal(foundRelClassName2, relClassName2);\n });\n\n it(\"should create link table relationship instances\", () => {\n const snapshotFile2: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"CreateLinkTable.bim\");\n const testImodel = StandaloneDb.createEmpty(snapshotFile2, { rootSubject: { name: \"test1\" }, enableTransactions: true });\n const txn = new EditTxn(testImodel, \"link table relationship instances\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n const id2 = txn.insertElement(elementProps);\n\n const geometricModel = testImodel.models.getModel<GeometricModel>(newModelId);\n assert.throws(() => geometricModel.queryExtents()); // no geometry\n\n // Create grouping relationships from 0 to 1 and from 0 to 2\n const r1 = ElementGroupsMembers.create(testImodel, id0, id1, 1);\n r1.id = txn.insertRelationship(r1.toJSON());\n const r2 = ElementGroupsMembers.create(testImodel, id0, id2);\n r2.id = txn.insertRelationship(r2.toJSON());\n\n // Look up by id\n const g1 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n const g2 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r2.id);\n\n assert.deepEqual(g1.id, r1.id);\n assert.equal(g1.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g1.memberPriority, 1, \"g1.memberPriority\");\n assert.deepEqual(g2.id, r2.id);\n assert.equal(g2.classFullName, ElementGroupsMembers.classFullName);\n assert.equal(g2.memberPriority, 0, \"g2.memberPriority\"); // The memberPriority parameter defaults to 0 in ElementGroupsMembers.create\n\n // Look up by source and target\n const g1byst = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, { sourceId: r1.sourceId, targetId: r1.targetId });\n assert.deepEqual(g1byst, g1);\n\n // Update relationship instance property\n r1.asAny.memberPriority = 2;\n txn.updateRelationship(r1.toJSON());\n\n const g11 = ElementGroupsMembers.getInstance<ElementGroupsMembers>(testImodel, r1.id);\n assert.equal(g11.memberPriority, 2, \"g11.memberPriority\");\n txn.saveChanges(\"step 1\");\n\n // Delete relationship instance property\n txn.deleteRelationship(g11.toJSON());\n txn.saveChanges(\"step 2\");\n assert.throws(() => ElementGroupsMembers.getInstance(testImodel, r1.id), IModelError);\n\n const d0 = txn.insertElement(elementProps);\n const d1 = txn.insertElement(elementProps);\n const ede1 = ElementDrivesElement.create(testImodel, d0, d1, 0);\n ede1.id = txn.insertRelationship(ede1.toJSON());\n txn.saveChanges(\"step 3\");\n\n txn.deleteRelationship(ede1.toJSON());\n txn.end(\"save\", \"step 4\");\n testImodel.close();\n });\n\n it(\"should insert DefinitionSets\", () => {\n const iModelFileName: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"DefinitionSets.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"DefinitionSets\" }, createClassViews: true });\n const txn = new EditTxn(iModelDb, \"definition sets\");\n txn.start();\n const definitionContainerId = DefinitionContainer.insert(txn, IModel.dictionaryId, Code.createEmpty());\n assert.exists(iModelDb.elements.getElement<DefinitionContainer>(definitionContainerId));\n assert.exists(iModelDb.models.getModel<DefinitionModel>(definitionContainerId));\n const categoryId1 = SpatialCategory.insert(txn, definitionContainerId, \"Category1\", new SubCategoryAppearance());\n const categoryId2 = SpatialCategory.insert(txn, definitionContainerId, \"Category2\", new SubCategoryAppearance());\n const categoryId3 = SpatialCategory.insert(txn, definitionContainerId, \"Category3\", new SubCategoryAppearance());\n const definitionGroupId = DefinitionGroup.create(iModelDb, definitionContainerId, Code.createEmpty()).insert(txn);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId1);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId2);\n DefinitionGroupGroupsDefinitions.insert(txn, definitionGroupId, categoryId3);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const numMembers = iModelDb.withPreparedStatement(`SELECT COUNT(*) FROM ${DefinitionGroupGroupsDefinitions.classFullName}`, (statement: ECSqlStatement): number => {\n return statement.step() === DbResult.BE_SQLITE_ROW ? statement.getValue(0).getInteger() : 0;\n });\n assert.equal(numMembers, 3);\n txn.end();\n iModelDb.close();\n });\n\n it(\"should set EC properties of various types\", async () => {\n\n const testImodel = imodel1;\n assert.doesNotThrow(() => testImodel.schemaContext.getSchemaItemSync(\"TestBim:TestPhysicalObject\", EntityClass), \"TestPhysicalObject is expected to be defined in TestBim.ecschema.xml\");\n const txn = new EditTxn(testImodel, \"set EC properties of various types\");\n txn.start();\n\n // Create a new physical model\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n\n // Find or create a SpatialCategory\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")!;\n if (undefined === spatialCategoryId) {\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\n }\n\n const trelClassName = \"TestBim:TestPhysicalObjectRelatedToTestPhysicalObject\";\n\n let id1: Id64String;\n let id2: Id64String;\n\n if (true) {\n // Create a couple of TestPhysicalObjects\n const elementProps: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n id1 = txn.insertElement(testImodel.elements.createElement(elementProps).toJSON());\n assert.isTrue(Id64.isValidId64(id1));\n\n // The second one should point to the first.\n elementProps.id = Id64.invalid;\n (elementProps as any).relatedElement = { id: id1, relClassName: trelClassName };\n elementProps.parent = { id: id1, relClassName: trelClassName };\n (elementProps as any).longProp = 4294967295; // make sure that we can save values in the range 0 ... UINT_MAX\n\n id2 = txn.insertElement(testImodel.elements.createElement(elementProps).toJSON());\n assert.isTrue(Id64.isValidId64(id2));\n }\n\n if (true) {\n // Test that el2 points to el1\n const el2 = testImodel.elements.getElement(id2);\n assert.equal(el2.classFullName, \"TestBim:TestPhysicalObject\");\n assert.isTrue(\"relatedElement\" in el2);\n assert.isTrue(\"id\" in el2.asAny.relatedElement);\n assert.deepEqual(el2.asAny.relatedElement.id, id1);\n assert.equal(el2.asAny.longProp, 4294967295);\n\n // Even though I didn't set it, the platform knows the relationship class and reports it.\n assert.isTrue(\"relClassName\" in el2.asAny.relatedElement);\n assert.equal(el2.asAny.relatedElement.relClassName.replace(\".\", \":\"), trelClassName);\n }\n\n if (true) {\n // Change el2 to point to itself.\n const el2Modified = testImodel.elements.getElement(id2);\n el2Modified.asAny.relatedElement = { id: id2, relClassName: trelClassName };\n txn.updateElement(el2Modified.toJSON());\n // Test that el2 points to itself.\n const el2after: Element = testImodel.elements.getElement(id2);\n assert.deepEqual(el2after.asAny.relatedElement.id, id2);\n assert.equal(el2after.asAny.relatedElement.relClassName.replace(\".\", \":\"), trelClassName);\n }\n\n if (true) {\n // Test that we can null out the navigation property\n const el2Modified = testImodel.elements.getElement(id2);\n el2Modified.asAny.relatedElement = null;\n txn.updateElement(el2Modified.toJSON());\n // Test that el2 has no relatedElement property value\n const el2after: Element = testImodel.elements.getElement(id2);\n assert.isUndefined(el2after.asAny.relatedElement);\n }\n\n txn.end();\n });\n\n it(\"should be able to create a snapshot IModel\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot.bim\"), args);\n assert.equal(iModel.iModelId, args.guid);\n assert.equal(iModel.rootSubject.name, args.rootSubject.name);\n assert.equal(iModel.rootSubject.description, args.rootSubject.description);\n assert.equal(iModel.projectExtents.low.x, args.projectExtents.low.x);\n assert.equal(iModel.projectExtents.low.y, args.projectExtents.low.y);\n assert.equal(iModel.projectExtents.low.z, args.projectExtents.low.z);\n assert.equal(iModel.globalOrigin.x, args.globalOrigin.x);\n assert.equal(iModel.globalOrigin.y, args.globalOrigin.y);\n assert.equal(iModel.globalOrigin.z, 0);\n\n const client = iModel.queryFilePropertyString({ name: \"Client\", namespace: \"dgn_Db\" });\n assert.equal(client, args.client, \"query Client property\");\n\n const dbguid = iModel.queryFilePropertyBlob({ name: \"DbGuid\", namespace: \"be_Db\" });\n assert.equal(dbguid!.byteLength, 16, \"query guid property\");\n\n const myPropsStr: FilePropertyProps = { name: \"MyProp\", namespace: \"test1\", id: 1, subId: 1 };\n const myStrVal = \"this is a test\";\n const myPropsBlob: FilePropertyProps = { name: \"MyBlob\", namespace: \"test1\", id: 10 };\n const testRange = new Uint8Array(500);\n testRange.fill(11);\n withEditTxn(iModel, (txn) => {\n txn.saveFileProperty(myPropsStr, myStrVal);\n const readFromDb = iModel.queryFilePropertyString(myPropsStr);\n assert.equal(readFromDb, myStrVal, \"query string after save\");\n\n txn.saveFileProperty(myPropsBlob, undefined, testRange);\n const blobFromDb = iModel.queryFilePropertyBlob(myPropsBlob);\n assert.deepEqual(blobFromDb, testRange, \"query blob after save\");\n\n let next = iModel.queryNextAvailableFileProperty(myPropsBlob);\n assert.equal(11, next, \"queryNextAvailableFileProperty blob\");\n\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(2, next, \"queryNextAvailableFileProperty str\");\n txn.deleteFileProperty(myPropsStr);\n assert.isUndefined(iModel.queryFilePropertyString(myPropsStr), \"property was deleted\");\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(0, next, \"queryNextAvailableFileProperty, should return 0 when none present\");\n });\n\n const testLocal = \"TestLocal\";\n const testValue = \"this is a test\";\n const nativeDb = iModel[_nativeDb];\n assert.isUndefined(nativeDb.queryLocalValue(testLocal));\n nativeDb.saveLocalValue(testLocal, testValue);\n assert.equal(nativeDb.queryLocalValue(testLocal), testValue);\n\n iModel.close();\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n let eventListenedTo = false;\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\n assert.equal(previousGCS, undefined);\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\n eventListenedTo = true;\n };\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\n\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\n\n assert.isFalse(eventListenedTo);\n\n iModel.geographicCoordinateSystem = gcs;\n\n assert.isTrue(eventListenedTo);\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n\n // The reloaded gcs will be different as the datum definition will have been expanded\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\n\n // But other properties will be identical\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\n\n // The following were not in initial definition but were completed after storage.\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\n\n // When a gcs is present then the ECEF is automatically defined.\n assert.isTrue(iModel2.ecefLocation !== undefined);\n\n iModel2.close();\n });\n\n describe(\"async coordinate conversions\", () => {\n it(\"should output same number of points as input\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await imodel5.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.geoCoords.length).to.equal(numPts);\n\n const iModelResponse = await imodel5.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n\n it(\"should always have fromCache = 0\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await imodel5.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.fromCache).to.equal(0);\n\n const iModelResponse = await imodel5.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n expect(iModelResponse.fromCache).to.equal(0);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n });\n\n if (!ProcessDetector.isIOSAppBackend) {\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\n\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 0.0, y: 0.0 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n let datumOrGCS: string;\n if (typeof datum === \"object\")\n datumOrGCS = JSON.stringify(datum);\n else\n datumOrGCS = datum;\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n withEditTxn(iModel, (txn) => {\n iModel.setGeographicCoordinateSystem(fileGCS);\n txn.updateIModelProps();\n });\n\n const testPoint1: XYZProps[] = [];\n testPoint1.push(inputCoord);\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\n\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\n\n // If success or warning we compare result\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\n\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\n\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\n expect(Math.abs(expectedPt1.z - outPt1.z) < 0.0001).to.be.true;\n\n // No point testing reversal when Out of useful range since reversibility is doubtful\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\n const testPoint2: XYZProps[] = [];\n testPoint2.push(outputCoord.p);\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\n\n const expectedPt2 = Point3d.fromJSON(inputCoord);\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\n\n expect(expectedPt2.distanceXY(outPt2) < 0.001).to.be.true;\n expect(Math.abs(expectedPt2.z - outPt2.z) < 0.001).to.be.true;\n }\n }\n\n iModel.close();\n };\n\n const EWRGCS: GeographicCRSProps = {\n horizontalCRS: {\n id: \"EPSG:27700\",\n description: \"OSGB 1936 / British National Grid\",\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n datumId: \"EPSG:6277\",\n datum: {\n id: \"EPSG:6277\",\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n deprecated: true,\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n ellipsoidId: \"EPSG:7001\",\n ellipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n description: \"Airy 1830\",\n source: \"EPSG, Version 6 [EPSG]\",\n },\n transforms: [\n {\n method: \"PositionalVector\",\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n polarRadius: 6356752.3142,\n id: \"WGS84\",\n },\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n }],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n falseEasting: 400000,\n falseNorthing: -100000,\n centralMeridian: -2,\n latitudeOfOrigin: 49,\n scaleFactor: 0.999601272737422,\n },\n extent: {\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n },\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 284597.3343,\n translationY: 79859.4651,\n translationZ: 0,\n rotDeg: 0.5263624458992088,\n scale: 0.9996703340508721,\n },\n },\n };\n\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\n {\n horizontalCRS: {\n id: \"HS2-MOCK\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"HS2SD_2015\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -1.5,\n latitudeOfOrigin: 52.30,\n scaleFactor: 1.0,\n falseEasting: 198873.0046,\n falseNorthing: 375064.3871,\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\n {\n horizontalCRS: {\n id: \"California2\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"NAD83\",\n unit: \"Meter\",\n projection: {\n method: \"LambertConformalConicTwoParallels\",\n longitudeOfOrigin: -122,\n latitudeOfOrigin: 37.66666666667,\n standardParallel1: 39.833333333333336,\n standardParallel2: 38.333333333333336,\n falseEasting: 2000000.0,\n falseNorthing: 500000.0,\n },\n extent: {\n southWest: {\n latitude: 35,\n longitude: -125,\n },\n northEast: {\n latitude: 39.1,\n longitude: -120.45,\n },\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n\n // Do some test that return errors\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\n\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\n // -6618.5925260757449, 36058.097489683532\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\n horizontalCRS: {\n id: \"User1\",\n datumId: \"UserDatum1\",\n datum: {\n id: \"UserDatum1\",\n ellipsoidId: \"CLRK66\",\n transforms: [\n {\n method: \"GridFiles\",\n sourceEllipsoid: {\n id: \"CLRK66\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n targetEllipsoid: {\n id: \"WGS84\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n gridFile: {\n files: [\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\n ],\n },\n },\n ],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 1.0,\n falseNorthing: 2.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n }, verticalCRS: { id: \"ELLIPSOID\" },\n };\n\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\n\n // The model GCS is not valid\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n // The given GCS is not valid\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n });\n }\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 0, pitch: 0, roll: 0 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"presence of a GCS imposes the ecef value\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\n\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\n\n iModel2.geographicCoordinateSystem = gcs;\n\n withEditTxn(iModel2, (txn) => {\n txn.updateIModelProps();\n });\n iModel2.close();\n\n const iModel3 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\n\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\n assert.isTrue(iModel3.ecefLocation !== undefined);\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\n\n iModel3.close();\n });\n\n it(\"should be able to open checkpoints for RPC\", async () => {\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\n const iTwinId = \"fakeIModelId\";\n const iModelId = \"fakeIModelId\";\n const cloudContainer = { accessToken: \"sas\" };\n const fakeSnapshotDb: any =\n {\n cloudContainer,\n isReadonly: () => true,\n isOpen: () => true,\n getIModelId: () => iModelId,\n getITwinId: () => iTwinId,\n getCurrentChangeset: () => changeset,\n hasUnsavedChanges: () => false,\n setIModelDb: () => { },\n closeFile: () => { },\n clearECDbCache: () => { },\n };\n\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\n\n // Mock iModelHub\n const mockCheckpointV2: V2CheckpointAccessProps = {\n accountName: \"testAccount\",\n containerId: \"imodelblocks-123\",\n sasToken: \"testSAS\",\n dbName: \"testDb\",\n storageType: \"azure?sas=1\",\n };\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: { accessToken: \"sas\" } as any };\n });\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n\n const accessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId, iModelId, changeset });\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const props = checkpoint.getRpcProps();\n assert.equal(props.iModelId, iModelId);\n assert.equal(props.iTwinId, iTwinId);\n assert.equal(props.changeset?.id, changeset.id);\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n\n errorLogStub.resetHistory();\n expect(cloudContainer.accessToken).equal(\"sas\");\n await checkpoint.refreshContainerForRpc(accessToken);\n expect(cloudContainer.accessToken).equal(\"testSAS\");\n\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n assert.equal(infoLogStub.callCount, 2);\n assert.include(infoLogStub.args[0][1], \"attempting to refresh\");\n assert.include(infoLogStub.args[1][1], \"refreshed checkpoint\");\n\n errorLogStub.resetHistory();\n queryStub.callsFake(async () => {\n throw new Error(\"no checkpoint\");\n });\n await expect(checkpoint.refreshContainerForRpc(accessToken)).to.eventually.be.rejectedWith(\"no checkpoint\");\n\n checkpoint.close();\n });\n\n it(\"should throw for missing/invalid checkpoint in hub\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\n\n const accessToken = \"token\";\n const error = await getIModelError(SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId: Guid.createValue(), iModelId: Guid.createValue(), changeset: IModelTestUtils.generateChangeSetId() }));\n expectIModelError(IModelStatus.NotFound, error);\n });\n\n it(\"attempting to re-attach a non-checkpoint snapshot should be a no-op\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n const accessToken = \"token\";\n await imodel1.refreshContainerForRpc(accessToken);\n });\n\n function hasClassView(db: IModelDb, name: string): boolean {\n try {\n return db.withSqliteStatement(`SELECT ECInstanceId FROM [${name}]`, (): boolean => true, false);\n } catch {\n return false;\n }\n }\n\n it(\"Check busyTimeout option\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const tryOpen = (fileName: string, options?: SnapshotDbOpenArgs) => {\n const start = performance.now();\n let didThrow = false;\n try {\n StandaloneDb.openFile(fileName, OpenMode.ReadWrite, options);\n } catch (e: any) {\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\n didThrow = true;\n }\n assert.isTrue(didThrow);\n return performance.now() - start;\n };\n const seconds = (s: number) => s * 1000;\n\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"busy timeout test\");\n txn.start();\n // lock db so another connection cannot write to it.\n txn.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\n\n assert.isAtMost(tryOpen(standaloneFile, { busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\n\n txn.end(\"abandon\");\n db.close();\n });\n\n it(\"Cache cleared on abandonChanges\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"cache cleared on abandonChanges\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n const element1 = db.elements.getElementProps(id);\n txn.end(\"abandon\");\n\n code.value = \"bar\";\n const props2: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const retryTxn = new EditTxn(db, \"cache cleared on abandonChanges retry\");\n retryTxn.start();\n const id2 = retryTxn.insertElement(props2);\n expect(id2).to.equal(id);\n const element2 = db.elements.getElementProps(id2);\n expect(element2).to.not.equal(element1);\n\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n retryTxn.end(\"abandon\");\n db.close();\n });\n\n it(\"Only instance caches should be cleared with clearCaches instanceCachesOnly parameter\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"clearCaches instanceCachesOnly\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n db.elements.getElementProps(id);\n db.models.getModelProps(IModel.dictionaryId);\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n expect(db.elements[_cache].size).to.be.greaterThan(0);\n expect(db.models[_cache].size).to.be.greaterThan(0);\n expect(db.elements[_instanceKeyCache].size).to.be.greaterThan(0);\n expect(db.models[_instanceKeyCache].size).to.be.greaterThan(0);\n\n db.clearCaches({ instanceCachesOnly: true });\n\n expect(db.elements[_cache].size).to.equal(0);\n expect(db.models[_cache].size).to.equal(0);\n expect(db.elements[_instanceKeyCache].size).to.equal(0);\n expect(db.models[_instanceKeyCache].size).to.equal(0);\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n txn.end(\"abandon\");\n db.close();\n });\n\n it(\"inserting a second element with an empty code must not evict the first from the element props cache\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"EmptyCodeCacheCollision.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"EmptyCodeCacheCollision\" } });\n\n withEditTxn(db, (txn) => {\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n const emptyCodeProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n category: categoryId,\n code: Code.createEmpty(),\n };\n\n // Insert the first element\n const id1 = txn.insertElement({ ...emptyCodeProps });\n db.elements.getElementProps(id1); // populate the element props cache\n const cacheSizeAfterFirstInsertAndRead = db.elements[_cache].size;\n expect(cacheSizeAfterFirstInsertAndRead).to.be.greaterThan(0, \"cache should be populated after getElementProps\");\n\n // Insert a second element with the same empty code\n const id2 = txn.insertElement({ ...emptyCodeProps });\n\n // The first element must still be in the cache.\n const cached1 = db.elements[_cache].get({ id: id1 });\n expect(cached1, \"first element should still be in cache after inserting second element with the same empty code\").to.not.be.undefined;\n expect(cached1!.elProps.id).to.equal(id1);\n\n expect(Id64.isValidId64(id1)).to.be.true;\n expect(Id64.isValidId64(id2)).to.be.true;\n expect(id1).to.not.equal(id2);\n });\n\n db.close();\n });\n\n it(\"Standalone iModel properties\", () => {\n const standaloneRootSubjectName = \"Standalone\";\n const standaloneFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Standalone1.bim\");\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } })\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n }\n let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });\n assert.isTrue(standaloneDb1.isStandaloneDb());\n assert.isTrue(standaloneDb1.isStandalone);\n assert.isFalse(standaloneDb1.isReadonly, \"Expect standalone iModels to be read-write during create\");\n assert.equal(standaloneDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(standaloneDb1.pathName, standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key), \"Should be in the list of open StandaloneDbs\");\n assert.equal(standaloneDb1.elements.getRootSubject().code.value, standaloneRootSubjectName);\n assert.isTrue(standaloneDb1.isOpen);\n assert.isTrue(Guid.isV4Guid(standaloneDb1.iModelId));\n assert.equal(standaloneDb1.iTwinId, Guid.empty);\n assert.strictEqual(\"\", standaloneDb1.changeset.id);\n assert.strictEqual(0, standaloneDb1.changeset.index);\n assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, \"standalone ecefLocation should be set\");\n assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"standalone coordinate system should be set\");\n assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);\n standaloneDb1.close();\n assert.isFalse(standaloneDb1.isOpen);\n standaloneDb1.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n standaloneDb1 = StandaloneDb.openFile(standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key));\n assert.isFalse(standaloneDb1.isReadonly, \"By default, StandaloneDbs are opened read/write\");\n standaloneDb1.close();\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n });\n\n it(\"Snapshot iModel properties\", async () => {\n const snapshotRootSubjectName = \"Snapshot\";\n const snapshotFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot1.bim\");\n const snapshotFile2 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot2.bim\");\n const snapshotFile3 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot3.bim\");\n const imodel = await generateTestSnapshot(\"test_for_snapshot.bim\", \"test.bim\");\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } })\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n }\n let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });\n let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);\n let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });\n assert.isTrue(snapshotDb1.isSnapshotDb());\n assert.isTrue(snapshotDb2.isSnapshotDb());\n assert.isTrue(snapshotDb3.isSnapshotDb());\n assert.isTrue(snapshotDb1.isSnapshot);\n assert.isTrue(snapshotDb2.isSnapshot);\n assert.isTrue(snapshotDb3.isSnapshot);\n assert.isFalse(snapshotDb1.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb2.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb3.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.equal(snapshotDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb2.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb3.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(imodel.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb1.pathName, snapshotFile1);\n assert.equal(snapshotDb2.pathName, snapshotFile2);\n assert.equal(snapshotDb3.pathName, snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n const iModelGuid1: GuidString = snapshotDb1.iModelId;\n const iModelGuid2: GuidString = snapshotDb2.iModelId;\n const iModelGuid3: GuidString = snapshotDb3.iModelId;\n assert.notEqual(iModelGuid1, iModelGuid2, \"Expect different iModel GUIDs for each snapshot\");\n assert.notEqual(iModelGuid2, iModelGuid3, \"Expect different iModel GUIDs for each snapshot\");\n const rootSubjectName1 = snapshotDb1.elements.getRootSubject().code.value;\n const rootSubjectName2 = snapshotDb2.elements.getRootSubject().code.value;\n const rootSubjectName3 = snapshotDb3.elements.getRootSubject().code.value;\n const imodelRootSubjectName = imodel.elements.getRootSubject().code.value;\n assert.equal(rootSubjectName1, snapshotRootSubjectName);\n assert.equal(rootSubjectName1, rootSubjectName2, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.equal(rootSubjectName3, imodelRootSubjectName, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.isTrue(snapshotDb1.isOpen);\n assert.isTrue(snapshotDb2.isOpen);\n assert.isTrue(snapshotDb3.isOpen);\n assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, \"snapshot ecefLocation should be set\");\n assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"snapshot coordinate system should be set\");\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n assert.isFalse(snapshotDb1.isOpen);\n assert.isFalse(snapshotDb2.isOpen);\n assert.isFalse(snapshotDb3.isOpen);\n snapshotDb1.close(); // calling `close()` a second time is a no-op\n snapshotDb2.close(); // calling `close()` a second time is a no-op\n snapshotDb3.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n snapshotDb1 = SnapshotDb.openFile(snapshotFile1);\n snapshotDb2 = SnapshotDb.openFile(snapshotFile2);\n snapshotDb3 = SnapshotDb.openFile(snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, SnapshotDb.findByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, IModelDb.findByKey(snapshotDb3.key));\n assert.throws(() => BriefcaseDb.findByKey(snapshotDb1.key)); // lookup of key for SnapshotDb via BriefcaseDb should throw\n assert.throws(() => StandaloneDb.findByKey(snapshotDb1.key)); // likewise for StandaloneDb\n assert.isTrue(snapshotDb1.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb2.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb3.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementAspect\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Model\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementRefersToElements\"));\n assert.isFalse(hasClassView(snapshotDb2, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb3, \"bis.Element\"));\n\n imodel.close();\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n });\n\n it(\"upgrade the domain schema in a StandaloneDb\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"UpgradeIModel\", \"testImodel.bim\");\n const seedFileName = IModelTestUtils.resolveAssetFile(\"testImodel.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n let iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\n iModel.close();\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\n iModel.close();\n });\n\n it(\"Run plain SQL\", () => {\n withEditTxn(imodel1, () => {\n imodel1.withPreparedSqliteStatement(\"CREATE TABLE Test(Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Code INTEGER)\", (stmt: SqliteStatement) => {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"Dummy 1\");\n stmt.bindValue(2, 100);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(?,?)\", (stmt: SqliteStatement) => {\n stmt.bindValues([\"Dummy 2\", 200]);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValue(\":p1\", \"Dummy 3\");\n stmt.bindValue(\":p2\", 300);\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"INSERT INTO Test(Name,Code) VALUES(:p1,:p2)\", (stmt: SqliteStatement) => {\n stmt.bindValues({ \":p1\": \"Dummy 4\", \":p2\": 400 });\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n imodel1.withPreparedSqliteStatement(\"SELECT Id,Name,Code FROM Test ORDER BY Id\", (stmt: SqliteStatement) => {\n for (let i: number = 1; i <= 4; i++) {\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\n assert.equal(stmt.getColumnCount(), 3);\n const val0: SqliteValue = stmt.getValue(0);\n assert.equal(val0.columnName, \"Id\");\n assert.equal(val0.type, SqliteValueType.Integer);\n assert.isFalse(val0.isNull);\n assert.equal(val0.getInteger(), i);\n\n const val1: SqliteValue = stmt.getValue(1);\n assert.equal(val1.columnName, \"Name\");\n assert.equal(val1.type, SqliteValueType.String);\n assert.isFalse(val1.isNull);\n assert.equal(val1.getString(), `Dummy ${i}`);\n\n const val2: SqliteValue = stmt.getValue(2);\n assert.equal(val2.columnName, \"Code\");\n assert.equal(val2.type, SqliteValueType.Integer);\n assert.isFalse(val2.isNull);\n assert.equal(val2.getInteger(), i * 100);\n\n const row: any = stmt.getRow();\n assert.equal(row.id, i);\n assert.equal(row.name, `Dummy ${i}`);\n assert.equal(row.code, i * 100);\n }\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n\n imodel1.withPreparedSqliteStatement(\"SELECT 1 FROM ec_CustomAttribute WHERE ContainerId=? AND Instance LIKE '<IsMixin%' COLLATE NOCASE\", (stmt: SqliteStatement) => {\n stmt.bindValue(1, \"0x1f\");\n assert.equal(stmt.step(), DbResult.BE_SQLITE_DONE);\n });\n });\n\n it(\"Run plain SQL against readonly connection\", () => {\n let iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"sqlitesqlreadonlyconnection.bim\"), { rootSubject: { name: \"test\" } });\n const iModelPath = iModel.pathName;\n iModel.close();\n iModel = SnapshotDb.openFile(iModelPath);\n\n iModel.withPreparedSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace='ec_Db'\", (stmt: SqliteStatement) => {\n let rowCount: number = 0;\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n rowCount++;\n assert.equal(stmt.getColumnCount(), 2);\n const nameVal: SqliteValue = stmt.getValue(0);\n assert.equal(nameVal.columnName, \"Name\");\n assert.equal(nameVal.type, SqliteValueType.String);\n assert.isFalse(nameVal.isNull);\n const name: string = nameVal.getString();\n\n const versionVal: SqliteValue = stmt.getValue(1);\n assert.equal(versionVal.columnName, \"StrData\");\n assert.equal(versionVal.type, SqliteValueType.String);\n assert.isFalse(versionVal.isNull);\n const profileVersion: any = JSON.parse(versionVal.getString());\n\n assert.isTrue(name === \"SchemaVersion\" || name === \"InitialSchemaVersion\");\n if (name === \"SchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n } else if (name === \"InitialSchemaVersion\") {\n assert.equal(profileVersion.major, 4);\n assert.equal(profileVersion.minor, 0);\n assert.equal(profileVersion.sub1, 0);\n assert.isAtLeast(profileVersion.sub2, 1);\n }\n }\n assert.equal(rowCount, 2);\n });\n iModel.close();\n });\n\n it(\"tryPrepareStatement\", () => {\n const sql = `SELECT * FROM ${Element.classFullName} LIMIT 1`;\n const invalidSql = \"SELECT * FROM InvalidSchemaName:InvalidClassName LIMIT 1\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.throws(() => imodel1.prepareStatement(invalidSql, false));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n assert.isUndefined(imodel1.tryPrepareStatement(invalidSql));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using statement: ECSqlStatement | undefined = imodel1.tryPrepareStatement(sql);\n assert.isDefined(statement);\n assert.isTrue(statement?.isPrepared);\n });\n\n it(\"containsClass\", () => {\n assert.isTrue(imodel1.containsClass(Element.classFullName));\n assert.isTrue(imodel1.containsClass(\"BisCore:Element\"));\n assert.isTrue(imodel1.containsClass(\"BisCore.Element\"));\n assert.isTrue(imodel1.containsClass(\"biscore:element\"));\n assert.isTrue(imodel1.containsClass(\"biscore.element\"));\n assert.isTrue(imodel1.containsClass(\"bis:Element\"));\n assert.isTrue(imodel1.containsClass(\"bis.Element\"));\n assert.isTrue(imodel1.containsClass(\"bis:element\"));\n assert.isTrue(imodel1.containsClass(\"bis.element\"));\n assert.isFalse(imodel1.containsClass(\"BisCore:Element:InvalidExtra\"));\n assert.isFalse(imodel1.containsClass(\"BisCore\"));\n assert.isFalse(imodel1.containsClass(\":Element\"));\n assert.isFalse(imodel1.containsClass(\"BisCore:InvalidClassName\"));\n assert.isFalse(imodel1.containsClass(\"InvalidSchemaName:Element\"));\n });\n\n it(\"should update Element code\", () => {\n const txn = new EditTxn(imodel4, \"update element code\");\n txn.start();\n const elementId = txn.insertElement({\n classFullName: \"DgnPlatformTest:TestInformationRecord\",\n model: IModel.repositoryModelId,\n code: Code.createEmpty(),\n });\n let element = imodel4.elements.getElement<InformationRecordElement>(elementId, InformationRecordElement);\n assert.isTrue(Code.isValid(element.code));\n assert.isTrue(Code.isEmpty(element.code));\n const codeSpecId = imodel4.codeSpecs.insert(txn, \"TestCodeSpec\", CodeScopeSpec.Type.Model);\n const codeValue = `${element.className}-1`;\n element.code = new Code({ spec: codeSpecId, scope: IModel.repositoryModelId, value: codeValue });\n element.update(txn);\n txn.end();\n element = imodel4.elements.getElement<InformationRecordElement>(elementId, InformationRecordElement);\n assert.isTrue(Code.isValid(element.code));\n assert.isFalse(Code.isEmpty(element.code));\n assert.equal(element.code.value, codeValue);\n });\n\n it(\"should update UserLabel\", () => {\n const txn = new EditTxn(imodel1, \"update user label\");\n txn.start();\n // type coercion reminder!\n const s: string = \"\";\n assert.isTrue(s === \"\");\n assert.isFalse(s ? true : false);\n\n // insert element with an undefined UserLabel\n const elementProps: DefinitionElementProps = {\n classFullName: SpatialCategory.classFullName,\n model: IModel.dictionaryId,\n code: SpatialCategory.createCode(imodel1, IModel.dictionaryId, \"TestCategoryForClearUserLabel\"),\n };\n const elementId = txn.insertElement(elementProps);\n let element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.userLabel);\n\n // update element with a defined userLabel\n element.userLabel = \"UserLabel\";\n element.update(txn);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.userLabel, \"UserLabel\");\n\n // make sure userLabel is not updated when not part of the specified ElementProps\n txn.updateElement({\n id: element.id,\n classFullName: element.classFullName,\n model: element.model,\n code: element.code,\n });\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.userLabel, \"UserLabel\"); // NOTE: userLabel is not modified when userLabel is not part of the input ElementProps\n\n const elProps = imodel1.elements.getElementProps({ id: elementId, onlyBaseProperties: true });\n expect(elProps.userLabel).equal(element.userLabel);\n expect(elProps.classFullName).equal(SpatialCategory.classFullName);\n expect(elProps.model).equal(element.model);\n expect(elProps.code.value).equal(element.code.value);\n expect(elProps.code.scope).equal(element.code.scope);\n expect(elProps.code.spec).equal(element.code.spec);\n expect(elProps.federationGuid).equal(element.federationGuid);\n expect((elProps as any).isPrivate).to.be.oneOf([false, undefined]);\n expect((elProps as any).isInstanceOfEntity).undefined;\n\n // remove userlabel by setting it to the blank string\n element.userLabel = \"\";\n element.update(txn);\n txn.end();\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.userLabel); // NOTE: userLabel is cleared when the empty string is specified\n });\n\n it(\"should update FederationGuid\", () => {\n const txn = new EditTxn(imodel1, \"update federation guid\");\n txn.start();\n // insert element with an undefined FederationGuid\n const elementProps: DefinitionElementProps = {\n classFullName: SpatialCategory.classFullName,\n model: IModel.dictionaryId,\n federationGuid: Guid.empty,\n code: SpatialCategory.createCode(imodel1, IModel.dictionaryId, \"TestCategoryForClearFederationGuid\"),\n };\n const elementId = txn.insertElement(elementProps);\n let element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.federationGuid);\n assert.isFalse(element.isPrivate);\n\n // update element with a defined FederationGuid\n const federationGuid = Guid.createValue();\n element.federationGuid = federationGuid;\n element.isPrivate = true;\n element.update(txn);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.federationGuid, federationGuid);\n assert.isTrue(element.isPrivate);\n\n // make sure FederationGuid is not updated when not part of the specified ElementProps\n txn.updateElement({\n id: element.id,\n classFullName: element.classFullName,\n model: element.model,\n code: element.code,\n });\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.equal(element.federationGuid, federationGuid);\n assert.isTrue(element.isPrivate);\n\n // remove federationGuid by setting it to undefined in ElementProps\n const elProps = element.toJSON();\n elProps.federationGuid = undefined;\n txn.updateElement(elProps);\n element = imodel1.elements.getElement<SpatialCategory>(elementId);\n assert.isUndefined(element.federationGuid);\n\n // ensure that update doesn't change federationGuid from an element immediately after insert (toJSON should remove undefined value)\n const subject5 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject5\");\n const s5Id = subject5.insert(txn);\n const s5pre = imodel1.elements.getElement<Subject>(s5Id);\n subject5.description = \"new descr\";\n subject5.update(txn);\n txn.end();\n const s5post = imodel1.elements.getElement<Subject>(s5Id);\n expect(s5pre.federationGuid).equal(s5post.federationGuid);\n expect(s5post.description).equal(subject5.description);\n });\n\n it(\"should support partial update\", () => {\n const txn = new EditTxn(imodel1, \"partial element update\");\n txn.start();\n // Insert Subject elements - initializing Description and UserLabel to similar values\n let subject1 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject1\", \"Description1\");\n let subject2 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject2\", \"Description2\");\n let subject3 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject3\", \"\");\n let subject4 = Subject.create(imodel1, IModel.rootSubjectId, \"Subject4\");\n subject1.userLabel = \"UserLabel1\";\n subject2.userLabel = \"UserLabel2\";\n subject3.userLabel = \"\";\n subject4.userLabel = undefined;\n const federationGuid1 = Guid.createValue();\n const federationGuid2 = Guid.createValue();\n subject1.federationGuid = federationGuid1;\n subject2.federationGuid = federationGuid2;\n subject3.federationGuid = \"\";\n subject4.federationGuid = Guid.empty;\n const subjectId1 = subject1.insert(txn);\n const subjectId2 = subject2.insert(txn);\n const subjectId3 = subject3.insert(txn);\n const subjectId4 = subject4.insert(txn);\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n\n // Subject.Description is an auto-handled property\n assert.equal(subject1.description, \"Description1\");\n assert.equal(subject2.description, \"Description2\");\n assert.equal(subject3.description, \"\"); // NOTE: different behavior between auto-handled and custom-handled\n assert.isUndefined(subject4.description);\n\n // Test toJSON\n assert.equal(subject1.toJSON().description, \"Description1\");\n assert.equal(subject2.toJSON().description, \"Description2\");\n assert.equal(subject3.toJSON().description, \"\");\n assert.isUndefined(subject4.toJSON().description);\n\n // Element.UserLabel is a custom-handled property\n assert.equal(subject1.userLabel, \"UserLabel1\");\n assert.equal(subject2.userLabel, \"UserLabel2\");\n assert.isUndefined(subject3.userLabel); // NOTE: different behavior between auto-handled and custom-handled\n assert.isUndefined(subject4.userLabel);\n\n // Element.FederationGuid is a custom-handled property\n assert.equal(subject1.federationGuid, federationGuid1);\n assert.equal(subject2.federationGuid, federationGuid2);\n assert.isUndefined(subject4.federationGuid);\n\n // test partial update of Description (auto-handled)\n txn.updateElement<SubjectProps>({ id: subject1.id, description: \"Description1-Updated\" });\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n assert.equal(subject1.description, \"Description1-Updated\"); // should have been updated\n assert.isDefined(subject1.model);\n assert.isDefined(subject1.parent);\n assert.equal(subject1.code.value, \"Subject1\"); // should not have changed\n assert.equal(subject1.userLabel, \"UserLabel1\"); // should not have changed\n assert.equal(subject1.federationGuid, federationGuid1); // should not have changed\n\n // test partial update of UserLabel (custom-handled)\n txn.updateElement<SubjectProps>({ id: subject2.id, userLabel: \"UserLabel2-Updated\" });\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n assert.isDefined(subject2.model);\n assert.isDefined(subject2.parent);\n assert.equal(subject2.userLabel, \"UserLabel2-Updated\"); // should have been updated\n assert.equal(subject2.code.value, \"Subject2\"); // should not have changed\n assert.equal(subject2.description, \"Description2\"); // should not have changed\n assert.equal(subject2.federationGuid, federationGuid2); // should not have changed\n\n // Update Subject elements - setting Description and UserLabel to similar values\n subject1.description = undefined;\n subject2.description = \"\";\n subject3.description = \"Description3\";\n subject4.description = \"Description4\";\n subject2.userLabel = \"\";\n subject3.userLabel = \"UserLabel3\";\n subject4.userLabel = \"UserLabel4\";\n subject1.update(txn);\n subject2.update(txn);\n subject3.update(txn);\n subject4.update(txn);\n subject1 = imodel1.elements.getElement<Subject>(subjectId1, Subject);\n subject2 = imodel1.elements.getElement<Subject>(subjectId2, Subject);\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n\n // Subject.Description is an auto-handled property\n assert.isUndefined(subject1.description);\n assert.equal(subject2.description, \"\"); // NOTE: different behavior between auto-handled and custom-handled\n assert.equal(subject3.description, \"Description3\");\n assert.equal(subject4.description, \"Description4\");\n\n // Element.UserLabel is a custom-handled property\n assert.isUndefined(subject2.userLabel); // NOTE: different behavior between auto-handled and custom-handled\n assert.equal(subject3.userLabel, \"UserLabel3\");\n assert.equal(subject4.userLabel, \"UserLabel4\");\n\n // test partial update of Description to undefined\n const s3Fed = subject3.federationGuid;\n txn.updateElement<SubjectProps>({ id: subject3.id, description: undefined });\n subject3 = imodel1.elements.getElement<Subject>(subjectId3, Subject);\n assert.isUndefined(subject3.description); // should have been updated\n assert.isDefined(subject3.model);\n assert.isDefined(subject3.parent);\n assert.equal(subject3.code.value, \"Subject3\"); // should not have changed\n assert.equal(subject3.userLabel, \"UserLabel3\"); // should not have changed\n assert.equal(subject3.federationGuid, s3Fed); // should not have changed\n\n // test partial update of UserLabel to undefined\n txn.updateElement<SubjectProps>({ id: subject4.id, userLabel: undefined });\n txn.end();\n subject4 = imodel1.elements.getElement<Subject>(subjectId4, Subject);\n assert.isDefined(subject4.model);\n assert.isDefined(subject4.parent);\n // assert.isUndefined(subject4.userLabel); // should have been updated - WIP WIP WIP\n assert.equal(subject4.code.value, \"Subject4\"); // should not have changed\n assert.equal(subject4.description, \"Description4\"); // should not have changed\n assert.isUndefined(subject4.federationGuid); // should not have changed\n\n });\n\n it('should allow untrimmed codes when using \"exact\" codeValueBehavior', () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"codeValueBehavior.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"codeValueBehaviors\" } });\n const txn = new EditTxn(imodel, \"codeValueBehavior\");\n txn.start();\n\n const getNumberedCodeValAndProps = (n: number) => {\n const trimmedCodeVal = `CodeValue${n}`;\n const untrimmedCodeVal = `${trimmedCodeVal}\\xa0`;\n const spec = imodel.codeSpecs.getByName(SpatialCategory.getCodeSpecName()).id;\n const props: ElementProps = {\n // the [[Code]] class still (as it always has) trims unicode space, so avoid it\n code: { spec, scope: IModelDb.dictionaryId, value: untrimmedCodeVal },\n model: IModelDb.dictionaryId,\n classFullName: SpatialCategory.classFullName,\n };\n return { trimmedCodeVal, untrimmedCodeVal, props };\n };\n\n expect(imodel.codeValueBehavior).to.equal(\"trim-unicode-whitespace\");\n\n const code1 = getNumberedCodeValAndProps(1);\n const categ1Id = txn.insertElement(code1.props);\n const categ1 = imodel.elements.getElementProps({ id: categ1Id });\n expect(categ1.code.value).to.equal(code1.trimmedCodeVal);\n\n imodel.codeValueBehavior = \"exact\";\n const code2 = getNumberedCodeValAndProps(2);\n const categ2Id = txn.insertElement(code2.props);\n const categ2 = imodel.elements.getElementProps({ id: categ2Id });\n expect(categ2.code.value).to.equal(code2.untrimmedCodeVal);\n\n imodel.codeValueBehavior = \"trim-unicode-whitespace\";\n const code3 = getNumberedCodeValAndProps(3);\n const categ3Id = txn.insertElement(code3.props);\n const categ3 = imodel.elements.getElement({ id: categ3Id });\n expect(categ3.code.value).to.equal(code3.trimmedCodeVal);\n\n txn.end();\n imodel.close();\n });\n\n it(\"should throw iTwinErrors on element CRUD opertion fails\", async () => {\n const txn = new EditTxn(imodel1, \"element CRUD failure cases\");\n txn.start();\n const code = Code.createEmpty();\n code.value = \"foo\";\n\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n txn.insertElement(props);\n\n expect(() => txn.insertElement(props)).throws(\"Error inserting element [duplicate code]\").to.have.property(\"iTwinErrorId\");\n const updateProps: TypeDefinitionElementProps = {\n id: Id64.fromString(\"0x111111\"),\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n expect(() => txn.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property(\"iTwinErrorId\");\n expect(() => txn.deleteElement(updateProps.id!)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property(\"iTwinErrorId\");\n\n expect(() => txn.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: \"0x10000000bad\" } })).throws(\"Error inserting model [error=10004], class=BisCore:DefinitionModel\").to.have.property(\"iTwinErrorId\");\n expect(() => txn.updateModel({\n id: Id64.fromString(\"0x111111\"),\n modeledElement: { id: Id64.fromString(\"0x111111\") },\n classFullName: \"\"\n })).throws(`Error updating model [missing id], id: ${Id64.fromString(\"0x111111\")}`).to.have.property(\"iTwinErrorId\");\n expect(() => txn.deleteModel(Id64.fromString(\"0x111111\"))).throws(`Error deleting model [missing id], id: ${Id64.fromString(\"0x111111\")}`).to.have.property(\"iTwinErrorId\");\n txn.end(\"abandon\");\n });\n\n it(\"throws NotFound when attempting to access element props after closing the iModel\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"accessAfterClose.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"accessAfterClose\" } });\n\n const elem = imodel.elements.getElement<Subject>(IModel.rootSubjectId);\n expect(elem.id).to.equal(IModel.rootSubjectId);\n\n imodel.close();\n\n expect(() => imodel.elements.getElement<Subject>(IModel.rootSubjectId)).to.throw(IModelError, \"Element=0x1\", \"Not Found\");\n });\n\n it(\"should throw \\\"constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)\\\" when inserting a relationsip instance with the same prop twice\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"insertDuplicateInstance.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"insertDuplicateInstance\" } });\n const txn = new EditTxn(imodel, \"insert duplicate relationship instance\");\n txn.start();\n // Create a new physical model\n const newModelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n // create a SpatialCategory\n const spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorByName.darkRed }));\n\n // Create a couple of physical elements.\n const elementProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: newModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n\n const id0 = txn.insertElement(elementProps);\n const id1 = txn.insertElement(elementProps);\n\n const props: ElementGroupsMembersProps = {\n classFullName: \"BisCore:ElementGroupsMembers\",\n sourceId: id0,\n targetId: id1,\n memberPriority: 1,\n };\n\n txn.insertRelationship(props);\n expect(() => txn.insertRelationship(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);\n\n txn.end(\"abandon\");\n imodel.close();\n });\n\n function createElemProps(_imodel: IModelDb, modId: Id64String, catId: Id64String, className: string): GeometricElementProps {\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: className,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n return elementProps;\n }\n\n function insertElement(imodel: IModelDb, mId: Id64String, cId: Id64String, cName: string, propName: string, txn: EditTxn): Id64String {\n const elementProps = createElemProps(imodel, mId, cId, cName);\n const geomElement = imodel.elements.createElement(elementProps);\n (geomElement as any).name = propName; // Add a custom property to the element\n const id = txn.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert failed\");\n return id;\n }\n\n function validateADrivesBRowCount(imodel: IModelDb, expectedRows: number): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);\n assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);\n }\n\n function validateNavProp(imodel: IModelDb, expectedNavPropValue: any): void {\n const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);\n assert.strictEqual(reader.length, 1);\n assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be \"${expectedNavPropValue}\"`);\n }\n\n it(\"Validate invalid relationship classes being inserted/updated\", async () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"invalidRelationshipClass.bim\");\n\n if (IModelJsFs.existsSync(imodelPath))\n IModelJsFs.unlinkSync(imodelPath);\n\n const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"invalidRelationshipClass\" } });\n\n await testImodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestRelationSchema\" alias=\"trs\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\" />\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildA\" >\n <BaseClass>TestElement</BaseClass>\n <ECNavigationProperty propertyName=\"NavPropChildB\" relationshipName=\"ADrivesB\" direction=\"Forward\" readOnly=\"True\">\n </ECNavigationProperty>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildB\" >\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"ADrivesB\" strengthDirection=\"Backward\" strength=\"referencing\" modifier=\"Sealed\">\n <Source multiplicity=\"(0..*)\" polymorphic=\"true\" roleLabel=\"drives\">\n <Class class=\"ChildA\"/>\n </Source>\n <Target multiplicity=\"(0..1)\" polymorphic=\"true\" roleLabel=\"is driven by\">\n <Class class=\"ChildB\"/>\n </Target>\n </ECRelationshipClass>\n\n <ECEntityClass typeName=\"ChildC\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ChildD\">\n <BaseClass>TestElement</BaseClass>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"CIsRelatedToD\" strength=\"referencing\" modifier=\"Sealed\">\n <BaseClass>bis:ElementRefersToElements</BaseClass>\n <Source multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo\" polymorphic=\"true\">\n <Class class=\"ChildC\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"IsRelatedTo (Reversed)\" polymorphic=\"true\">\n <Class class=\"ChildD\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>`]);\n\n // Enable ECSQL write validation and verify it's set\n const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);\n assert.exists(pragmaRows);\n assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);\n\n // Ensure ADrivesB table is empty before test\n validateADrivesBRowCount(testImodel, 0);\n\n // Create a physical model and spatial category if needed\n const setupTxn = new EditTxn(testImodel, \"setup invalid relationship class test\");\n setupTxn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(setupTxn, Code.createEmpty(), true);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\")\n ?? SpatialCategory.insert(setupTxn,\n IModel.dictionaryId,\n \"MySpatialCategory\",\n new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() })\n );\n const idB = insertElement(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildB\", \"ChildBElement\", setupTxn);\n setupTxn.end();\n assert.isTrue(Id64.isValidId64(idB), \"Insert ChildBElement failed\");\n\n // Prepare base props for ChildA\n const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"TestRelationSchema:ChildA\");\n\n // Test various relationship class names for navigation property\n const testCases = [\n { name: \"trs:ADrivesB\", shouldSucceed: true, expectedRows: 1 },\n { name: \"trs.FakeClass\", shouldSucceed: true, expectedRows: 0 },\n { name: \"trs:ChildA\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:ChildB\", shouldSucceed: false, expectedRows: 0 },\n { name: \"trs:CIsRelatedToD\", shouldSucceed: false, expectedRows: 0 },\n ];\n\n for (const { name, shouldSucceed, expectedRows } of testCases) {\n const txn = new EditTxn(testImodel, `invalid relationship class ${name}`);\n txn.start();\n try {\n const elemRef = new RelatedElement({ id: idB, relClassName: name });\n (elementProps as any).navPropChildB = elemRef;\n (elementProps as any).name = \"ChildAElement\";\n const geomElement = testImodel.elements.createElement(elementProps);\n\n let idA: Id64String | undefined;\n try {\n idA = txn.insertElement(geomElement.toJSON());\n if (shouldSucceed)\n assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);\n else\n assert.fail(`Insert should have failed for ${name}.`);\n } catch (err: any) {\n if (shouldSucceed)\n assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);\n\n // If should not succeed, error is expected\n }\n\n // Validate row count in ADrivesB table\n validateADrivesBRowCount(testImodel, expectedRows);\n\n // If insert succeeded, test update and delete scenarios\n if (expectedRows === 1 && idA !== undefined) {\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editElem: any = testImodel.elements.getElement(idA);\n editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: \"trs.FakeClass\" });\n editElem.name = \"ChildAElementUpdated\";\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 1);\n validateNavProp(testImodel, { id: idB, relClassName: \"TestRelationSchema.ADrivesB\" });\n\n const editedElem: any = testImodel.elements.getElement(idA);\n assert.equal(editedElem.name, \"ChildAElementUpdated\", `Expected name to be \"ChildAElementUpdated\" after update, but got \"${editedElem.name}\"`);\n assert.strictEqual(editedElem.navPropChildB.relClassName, \"TestRelationSchema.ADrivesB\", `Expected navPropChildB to be \"TestRelationSchema.ADrivesB\" after update, but got \"${editedElem.navPropChildB}\"`);\n\n // Set the nav prop value to null\n editElem.name = \"ChildAElementNulled\";\n editElem.navPropChildB = null;\n txn.updateElement(editElem);\n\n validateADrivesBRowCount(testImodel, 0);\n const nulledElem: any = testImodel.elements.getElement(idA);\n assert.equal(nulledElem.name, \"ChildAElementNulled\", `Expected name to be \"ChildAElementNulled\" after nulling, but got \"${nulledElem.name}\"`);\n assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got \"${nulledElem.navPropChildB}\"`);\n\n if (shouldSucceed) {\n txn.deleteElement(idA);\n assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);\n }\n }\n } finally {\n txn.end(\"abandon\");\n }\n }\n testImodel.close();\n });\n\n it(\"should update codeValues that are switched between elements\", async () => {\n const dbFileName = IModelTestUtils.prepareOutputFile(\"IModel\", \"change-codeValues.bim\");\n const imodelDb = SnapshotDb.createEmpty(dbFileName, {\n rootSubject: { name: \"change-codeValues\" },\n });\n let categoryA = SpatialCategory.create(\n imodelDb,\n IModel.dictionaryId,\n \"A\"\n );\n let categoryB = SpatialCategory.create(\n imodelDb,\n IModel.dictionaryId,\n \"B\"\n );\n categoryA.userLabel = \"A\";\n categoryB.userLabel = \"B\";\n const txn = new EditTxn(imodelDb, \"change codeValues\");\n txn.start();\n categoryA.insert(txn);\n categoryB.insert(txn);\n txn.saveChanges();\n\n categoryA = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"A\")\n );\n categoryB = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"B\")\n );\n categoryA.code.value = \"temp\";\n categoryA.update(txn);\n categoryB.code.value = \"A\";\n categoryB.update(txn);\n categoryA.code.value = \"B\";\n categoryA.update(txn);\n txn.end();\n\n categoryA = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"A\")\n );\n categoryB = imodelDb.elements.getElement(\n SpatialCategory.createCode(imodelDb, IModel.dictionaryId, \"B\")\n );\n\n expect(categoryA.userLabel).to.equal(\"B\", `categoryA.userLabel mismatch in ${imodelDb.name}`);\n expect(categoryB.userLabel).to.equal(\"A\", `categoryB.userLabel mismatch in ${imodelDb.name}`);\n imodelDb.close();\n });\n\n it(\"should provide meaningful error when querying a closed iModel\", () => {\n const testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"QueryingClosedImodel.bim\"), { rootSubject: { name: \"QueryClosedTest\" } });\n assert.isTrue(testImodel.isOpen);\n\n // Close the iModel for the tests\n testImodel.close();\n assert.isFalse(testImodel.isOpen);\n\n const closedDbError = \"db not open\";\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.prepareSqliteStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.prepareStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.elements.queryChildren(IModel.rootSubjectId)).to.throw(closedDbError);\n expect(() => testImodel.elements.getAspects(\"0x1\", \"WrongSchema:WrongClass\")).to.throw(closedDbError);\n expect(() => testImodel.createQueryReader(\"SELECT 1\")).to.throw(closedDbError);\n });\n\n describe(\"Delete relationship instances\", () => {\n let testImodel: SnapshotDb;\n const relationshipClasses = [\n \"BisCore:ElementGroupsMembers\",\n \"BisCore:ElementDrivesElement\",\n \"BisCore:ElementRefersToDocuments\"\n ];\n\n afterEach(() => {\n if (testImodel !== undefined) {\n const iModelPath = testImodel.pathName;\n if (testImodel.isOpen)\n testImodel.close();\n IModelJsFs.unlinkSync(iModelPath);\n }\n });\n\n function setupRelationships(numOfRelationships: number, multipleClasses: boolean = false): RelationshipProps[] {\n testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"DeleteRelationshipInstances.bim\"), { rootSubject: { name: \"DeleteRelationshipInstances\" } });\n assert.isTrue(testImodel.isOpen);\n\n const txn = new EditTxn(testImodel, \"setup delete relationships\");\n txn.start();\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, \"MySpatialCategory\");\n if (!spatialCategoryId) {\n spatialCategoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance());\n }\n\n const relationships: RelationshipProps[] = [];\n for (let i = 0; i < numOfRelationships; ++i) {\n const sourceProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const sourceId = txn.insertElement(sourceProps);\n\n const targetProps = createElemProps(testImodel, newModelId, spatialCategoryId, \"Generic:PhysicalObject\");\n const targetId = txn.insertElement(targetProps);\n\n let relationshipClass = \"BisCore:ElementGroupsMembers\";\n if (multipleClasses)\n relationshipClass = relationshipClasses[i % relationshipClasses.length];\n\n const relationshipProps: RelationshipProps = {\n classFullName: relationshipClass,\n sourceId,\n targetId,\n };\n\n relationshipProps.id = txn.insertRelationship(relationshipProps);\n relationships.push(relationshipProps);\n }\n txn.end();\n return relationships;\n }\n\n async function getRelationshipCount(iModel: IModelDb, relationshipClass: string): Promise<number> {\n const reader = iModel.createQueryReader(`SELECT COUNT(*) AS [count] FROM ${relationshipClass}`);\n await reader.step();\n return reader.current.count;\n }\n\n it(\"deleteInstances with an empty array\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([]);\n });\n\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"));\n });\n\n it(\"deleteInstances with a single relationship instance\", async () => {\n const relationships = setupRelationships(10);\n assert.equal(relationships.length, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"Should delete exactly one relationship\");\n\n // Delete just one relationship using deleteInstances method\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships([relationships[0]]);\n });\n\n const remainingCount = await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\");\n assert.equal(remainingCount, relationships.length - 1, \"Should delete exactly one relationship\");\n });\n\n it(\"deleteInstances with different relationship classes\", async () => {\n const relationships = setupRelationships(500, true);\n\n // Verify relationships were created across different classes\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Test deleteInstances with mixed relationship classes\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationships);\n });\n\n // Verify all relationships were deleted regardless of their class\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\"), \"All ElementGroupsMembers relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\"), \"All ElementDrivesElement relationships should be deleted\");\n assert.equal(0, await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\"), \"All ElementRefersToDocuments relationships should be deleted\");\n });\n\n it(\"deleteInstances for random relationship instances\", async () => {\n const relationships = setupRelationships(1000, true);\n\n // Verify relationships exist before deletion\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementGroupsMembers\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementDrivesElement\") >= Math.floor(relationships.length / 3));\n assert.isTrue(await getRelationshipCount(testImodel, \"BisCore.ElementRefersToDocuments\") >= Math.floor(relationships.length / 3));\n\n // Create a subset of random relationship entries to delete\n const relationshipsToDelete: RelationshipProps[] = [];\n for (let i = 0; i < 250; ++i) {\n relationshipsToDelete.push(relationships[Math.floor(Math.random() * relationships.length)]);\n }\n\n withEditTxn(testImodel, (txn) => {\n txn.deleteRelationships(relationshipsToDelete);\n });\n\n // Verify all relationships were deleted\n for (const relClass of relationshipsToDelete) {\n const reader = testImodel.createQueryReader(`SELECT ECInstanceId FROM ${relClass.classFullName} WHERE SourceECInstanceId=? AND TargetECInstanceId=?`, new QueryBinder().bindId(1, relClass.sourceId).bindId(2, relClass.targetId));\n assert.isFalse(await reader.step(), `Relationship ${relClass.id} should be deleted`); // No row should be returned\n }\n });\n });\n});\n\ndescribe(\"IModelDb.requireMinimumSchemaVersion\", () => {\n let imodel: SnapshotDb;\n\n before(() => imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"MinSchemaVer.bim\"), { rootSubject: { name: \"MinSchemaVer\" } }));\n after(() => imodel.close());\n\n it(\"throws if the schema does not exist\", () => {\n expect(\n () => imodel.requireMinimumSchemaVersion(\"FakeSchema\", new ECVersion(1, 0, 0), \"Scrobbles\")\n ).to.throw(\"Scrobbles requires FakeSchema v01.00.00 or newer\");\n });\n\n it(\"throws IFF the schema version is older than the minimum\", () => {\n function test(minVer: ECVersion, expectError: boolean): void {\n expect(imodel.meetsMinimumSchemaVersion(\"BisCore\", minVer)).to.equal(!expectError);\n const require = () => imodel.requireMinimumSchemaVersion(\"BisCore\", minVer, \"Scrobbles\");\n if (expectError) {\n expect(require).to.throw(`Scrobbles requires BisCore v${minVer.toString()} or newer`);\n } else {\n require();\n }\n }\n\n const bisVer = imodel.querySchemaVersionNumbers(\"BisCore\")!;\n expect(bisVer.read).to.equal(1);\n expect(bisVer.write).to.equal(0);\n expect(bisVer.minor).to.least(24);\n\n test(bisVer, false);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor - 1), false);\n test(new ECVersion(0, 0, 1), false);\n\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read + 1, bisVer.write + 1, bisVer.minor), true);\n });\n});\n\n\n\n\n"]}
|