@itwin/core-backend 5.3.0-dev.3 → 5.3.0-dev.5

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.
@@ -6,7 +6,7 @@ import { expect } from "chai";
6
6
  import { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from "@itwin/core-geometry";
7
7
  import { FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
8
8
  import { StandaloneDb } from "../../IModelDb";
9
- import { AnnotationTextStyle, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
9
+ import { AnnotationTextStyle, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
10
10
  import { IModelTestUtils } from "../IModelTestUtils";
11
11
  import { Subject } from "../../Element";
12
12
  import { Guid, Id64 } from "@itwin/core-bentley";
@@ -82,8 +82,13 @@ const createIModel = async (name) => {
82
82
  });
83
83
  return iModel;
84
84
  };
85
- const createAnnotationTextStyle = (iModel, definitionModel, name, settings = TextStyleSettings.defaultProps) => {
86
- return AnnotationTextStyle.create(iModel, definitionModel, name, settings, "description");
85
+ const createAnnotationTextStyle = (iModel, definitionModelId, name, settings = TextStyleSettings.defaultProps) => {
86
+ return AnnotationTextStyle.create(iModel, {
87
+ definitionModelId,
88
+ name,
89
+ settings,
90
+ description: "description",
91
+ });
87
92
  };
88
93
  function createElement2d(imodel, createArgs) {
89
94
  const placement = {
@@ -123,13 +128,56 @@ describe("TextAnnotation element", () => {
123
128
  ...props,
124
129
  }, mockIModel());
125
130
  }
131
+ describe("versioning", () => {
132
+ it("throws if the JSON has no version", () => {
133
+ expect(() => makeElement({
134
+ textAnnotationData: JSON.stringify({
135
+ data: {
136
+ textBlock: TextBlock.create().toJSON()
137
+ }
138
+ }),
139
+ })).to.throw("JSON version is missing or invalid.");
140
+ });
141
+ it("throws if the JSON has no data", () => {
142
+ expect(() => makeElement({
143
+ textAnnotationData: JSON.stringify({
144
+ version: TEXT_ANNOTATION_JSON_VERSION,
145
+ }),
146
+ })).to.throw("JSON data is missing or invalid.");
147
+ });
148
+ it("throws if the JSON version is too new", () => {
149
+ expect(() => makeElement({
150
+ textAnnotationData: JSON.stringify({
151
+ version: "999.999.999",
152
+ data: {
153
+ textBlock: TextBlock.create().toJSON()
154
+ }
155
+ }),
156
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);
157
+ });
158
+ it("throws if the JSON version is old and cannot be migrated", () => {
159
+ expect(() => makeElement({
160
+ textAnnotationData: JSON.stringify({
161
+ version: "0.0.1",
162
+ data: {
163
+ textBlock: TextBlock.create().toJSON()
164
+ }
165
+ }),
166
+ })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);
167
+ });
168
+ });
126
169
  describe("getAnnotation", () => {
127
170
  it("returns undefined if not provided", () => {
128
171
  expect(makeElement().getAnnotation()).to.be.undefined;
129
172
  });
130
173
  it("converts JSON string to class instance", () => {
131
174
  const elem = makeElement({
132
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create().toJSON() }),
175
+ textAnnotationData: JSON.stringify({
176
+ version: TEXT_ANNOTATION_JSON_VERSION,
177
+ data: {
178
+ textBlock: TextBlock.create().toJSON()
179
+ }
180
+ }),
133
181
  defaultTextStyle: new TextAnnotationUsesTextStyleByDefault("0x42").toJSON()
134
182
  });
135
183
  const anno = elem.getAnnotation();
@@ -140,7 +188,12 @@ describe("TextAnnotation element", () => {
140
188
  });
141
189
  it("produces a new object each time it is called", () => {
142
190
  const elem = makeElement({
143
- textAnnotationData: JSON.stringify({ textBlock: TextBlock.create().toJSON() })
191
+ textAnnotationData: JSON.stringify({
192
+ version: TEXT_ANNOTATION_JSON_VERSION,
193
+ data: {
194
+ textBlock: TextBlock.create().toJSON()
195
+ }
196
+ }),
144
197
  });
145
198
  const anno1 = elem.getAnnotation();
146
199
  const anno2 = elem.getAnnotation();
@@ -177,7 +230,7 @@ describe("TextAnnotation element", () => {
177
230
  after(() => imodel.close());
178
231
  it("creating element does not automatically compute the geometry", () => {
179
232
  const annotation = createAnnotation();
180
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
233
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
181
234
  const el = createElement3d(imodel, args);
182
235
  expect(el.getAnnotation().equals(annotation)).to.be.true;
183
236
  expect(el.geom).to.be.undefined;
@@ -238,7 +291,7 @@ describe("TextAnnotation element", () => {
238
291
  });
239
292
  it("creating element does not automatically compute the geometry", () => {
240
293
  const annotation = createAnnotation();
241
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
294
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
242
295
  const el = createElement2d(imodel, args);
243
296
  expect(el.getAnnotation().equals(annotation)).to.be.true;
244
297
  expect(el.geom).to.be.undefined;
@@ -313,7 +366,7 @@ describe("TextAnnotation element", () => {
313
366
  });
314
367
  it("preserves defaultTextStyle after round trip", () => {
315
368
  const annotation = createAnnotation();
316
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };
369
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
317
370
  const el0 = createElement2d(imodel, args);
318
371
  expect(el0.defaultTextStyle).not.to.be.undefined;
319
372
  expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
@@ -326,7 +379,7 @@ describe("TextAnnotation element", () => {
326
379
  });
327
380
  it("produces different geometry when defaultTextStyle changes", () => {
328
381
  const annotation = createAnnotation();
329
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
382
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
330
383
  const el0 = createElement2d(imodel, args);
331
384
  el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
332
385
  const geom1 = el0.toJSON().elementGeometryBuilderParams;
@@ -336,7 +389,7 @@ describe("TextAnnotation element", () => {
336
389
  });
337
390
  it("allows defaultTextStyle to be undefined", () => {
338
391
  const annotation = createAnnotation();
339
- const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };
392
+ const args = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };
340
393
  const el0 = createElement2d(imodel, args);
341
394
  el0.defaultTextStyle = undefined;
342
395
  const elId = el0.insert();
@@ -357,7 +410,7 @@ describe("TextAnnotation element", () => {
357
410
  });
358
411
  it("preserves defaultTextStyle after round trip", () => {
359
412
  const annotation = createAnnotation();
360
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };
413
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };
361
414
  const el0 = createElement3d(imodel, args);
362
415
  expect(el0.defaultTextStyle).not.to.be.undefined;
363
416
  expect(el0.defaultTextStyle.id).to.equal(seedStyleId);
@@ -370,7 +423,7 @@ describe("TextAnnotation element", () => {
370
423
  });
371
424
  it("produces different geometry when defaultTextStyle changes", () => {
372
425
  const annotation = createAnnotation();
373
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
426
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
374
427
  const el0 = createElement3d(imodel, args);
375
428
  el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);
376
429
  const geom1 = el0.toJSON().elementGeometryBuilderParams;
@@ -380,7 +433,7 @@ describe("TextAnnotation element", () => {
380
433
  });
381
434
  it("allows defaultTextStyle to be undefined", () => {
382
435
  const annotation = createAnnotation();
383
- const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };
436
+ const args = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };
384
437
  const el0 = createElement3d(imodel, args);
385
438
  el0.defaultTextStyle = undefined;
386
439
  const elId = el0.insert();
@@ -473,6 +526,50 @@ describe("AnnotationTextStyle", () => {
473
526
  el0.settings = newStyle;
474
527
  expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());
475
528
  });
529
+ describe("versioning", () => {
530
+ function makeStyle(props) {
531
+ return AnnotationTextStyle.fromJSON({
532
+ model: "0x34",
533
+ code: {
534
+ spec: "0x56",
535
+ scope: "0x78",
536
+ value: "style"
537
+ },
538
+ classFullName: AnnotationTextStyle.classFullName,
539
+ ...props,
540
+ }, mockIModel());
541
+ }
542
+ it("throws if the JSON has no version", () => {
543
+ expect(() => makeStyle({
544
+ settings: JSON.stringify({
545
+ data: TextStyleSettings.defaultProps
546
+ }),
547
+ })).to.throw("JSON version is missing or invalid.");
548
+ });
549
+ it("throws if the JSON has no data", () => {
550
+ expect(() => makeStyle({
551
+ settings: JSON.stringify({
552
+ version: TEXT_STYLE_SETTINGS_JSON_VERSION,
553
+ }),
554
+ })).to.throw("JSON data is missing or invalid.");
555
+ });
556
+ it("throws if the JSON version is too new", () => {
557
+ expect(() => makeStyle({
558
+ settings: JSON.stringify({
559
+ version: "999.999.999",
560
+ data: TextStyleSettings.defaultProps
561
+ }),
562
+ })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);
563
+ });
564
+ it("throws if the JSON version is old and cannot be migrated", () => {
565
+ expect(() => makeStyle({
566
+ settings: JSON.stringify({
567
+ version: "0.0.1",
568
+ data: TextStyleSettings.defaultProps
569
+ }),
570
+ })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
571
+ });
572
+ });
476
573
  });
477
574
  describe("appendTextAnnotationGeometry", () => {
478
575
  let imodel;
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\n const block = textBlock ?? TextBlock.create({ styleOverrides });\n if (!textBlock) {\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n }\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModel: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n definitionModel,\n name,\n settings,\n \"description\",\n )\n}\n\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\n const placement: Placement2dProps = {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n };\n\n return TextAnnotation2d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\n const placement: Placement3dProps = {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n };\n\n return TextAnnotation3d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\n ...props,\n }, mockIModel());\n }\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()}),\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(elem.defaultTextStyle).not.to.be.undefined;\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()})\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n createElement3dArgs = { category, model };\n });\n\n after(() => imodel.close());\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement3d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n\n createElement2dArgs = { category, model };\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement2d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d(imodel, createElement2dArgs);\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"defaultTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModelId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {font: { name: \"Karla\" }, textHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModelId = definitionModel;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n describe(\"TextAnnotation2d\", () => {\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement2dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement2d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n\n describe(\"TextAnnotation3d\", () => {\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement3dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement3d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n font: { name: \"Totally Real Font\" },\n isUnderlined: true,\n textHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\n expect(() => annotationTextStyle.insert()).to.throw();\n // textHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n});\n\ndescribe(\"appendTextAnnotationGeometry\", () => {\n let imodel: StandaloneDb;\n let seedDefinitionModelId: string;\n let seedCategoryId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {font: { name: \"Karla\" }, textHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedDefinitionModelId = definitionModel;\n seedCategoryId = category;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\n const builder = new MockBuilder();\n\n const resolver = new TextStyleResolver({\n textBlock: annotation.textBlock,\n textStyleId: styleId,\n iModel: imodel,\n });\n\n const layout = layoutTextBlock({\n textBlock: annotation.textBlock,\n iModel: imodel,\n textStyleResolver: resolver,\n });\n\n const result = appendTextAnnotationGeometry({\n annotationProps: annotation.toJSON(),\n layout,\n textStyleResolver: resolver,\n scaleFactor,\n builder,\n categoryId: seedCategoryId,\n });\n\n expect(result).to.be.true;\n return builder;\n }\n\n it(\"produces the same geometry when given the same inputs\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\n });\n\n it(\"produces no geometry when given an empty annotation\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.geometries).to.be.empty;\n expect(builder.params).to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const styleId = createAnnotationTextStyle(\n imodel,\n seedDefinitionModelId,\n \"empty anno style\",\n {\n font: { name: \"Totally Real Font\" },\n frame: {\n shape: \"rectangle\",\n }\n }\n ).insert();\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\n\n expect(builder.geometries).not.to.be.empty;\n expect(builder.params).not.to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n\n it(\"produces different geometry when given different text-content in annotations\", () => {\n const anno1 = createAnnotation();\n const anno2 = createAnnotation();\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\n\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"produces different geometry when given different default styles\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"accounts for style overrides in the text\", () => {\n const block = TextBlock.create();\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 }}\n block.appendParagraph();\n block.children[0].styleOverrides = { isBold: true };\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.appendParagraph();\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\n\n const annotation = createAnnotation(block);\n\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.textStrings.length).to.equal(2);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n // From override on paragraph\n expect(builder.textStrings[0].bold).to.be.true;\n // From default style\n expect(builder.textStrings[0].italic).to.be.true;\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\n // From default style\n expect(builder.textStrings[1].bold).to.be.false;\n // From override on run\n expect(builder.textStrings[1].italic).to.be.false;\n });\n\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\n const block = TextBlock.create();\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n\n const annotation = createAnnotation(block);\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\n\n expect(builder.textStrings.length).to.equal(1);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\n });\n\n it(\"scales geometry correctly\", () => {\n const annotation = createAnnotation();\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\n\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\n });\n});"]}
1
+ {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { AnnotationTextStyleProps, FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\n const block = textBlock ?? TextBlock.create({ styleOverrides });\n if (!textBlock) {\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n }\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModelId: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n {\n definitionModelId,\n name,\n settings,\n description: \"description\",\n }\n )\n}\n\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\n const placement: Placement2dProps = {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n };\n\n return TextAnnotation2d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\n const placement: Placement3dProps = {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n };\n\n return TextAnnotation3d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\n ...props,\n }, mockIModel());\n }\n\n describe(\"versioning\", () => {\n it(\"throws if the JSON has no version\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(\"JSON version is missing or invalid.\");\n });\n\n it(\"throws if the JSON has no data\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n }),\n })).to.throw(\"JSON data is missing or invalid.\");\n });\n\n it(\"throws if the JSON version is too new\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: \"999.999.999\",\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);\n });\n\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\n expect(() => makeElement({\n textAnnotationData: JSON.stringify({\n version: \"0.0.1\",\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);\n });\n })\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(elem.defaultTextStyle).not.to.be.undefined;\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({\n version: TEXT_ANNOTATION_JSON_VERSION,\n data: {\n textBlock: TextBlock.create().toJSON()\n }\n }),\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n createElement3dArgs = { category, model };\n });\n\n after(() => imodel.close());\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n const el = createElement3d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n\n createElement2dArgs = { category, model };\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n const el = createElement2d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d(imodel, createElement2dArgs);\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"defaultTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModelId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {font: { name: \"Karla\" }, textHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModelId = definitionModel;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n describe(\"TextAnnotation2d\", () => {\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement2dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement2d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\n\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n\n describe(\"TextAnnotation3d\", () => {\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement3dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement3d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\n\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n font: { name: \"Totally Real Font\" },\n isUnderlined: true,\n textHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\n expect(() => annotationTextStyle.insert()).to.throw();\n // textHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n\n describe(\"versioning\", () => {\n function makeStyle(props?: Partial<AnnotationTextStyleProps>): AnnotationTextStyle {\n return AnnotationTextStyle.fromJSON({\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n value: \"style\"\n },\n classFullName: AnnotationTextStyle.classFullName,\n ...props,\n }, mockIModel());\n }\n\n it(\"throws if the JSON has no version\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n data: TextStyleSettings.defaultProps\n }),\n })).to.throw(\"JSON version is missing or invalid.\");\n });\n\n it(\"throws if the JSON has no data\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n version: TEXT_STYLE_SETTINGS_JSON_VERSION,\n }),\n })).to.throw(\"JSON data is missing or invalid.\");\n });\n\n it(\"throws if the JSON version is too new\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n version: \"999.999.999\",\n data: TextStyleSettings.defaultProps\n }),\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);\n });\n\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\n expect(() => makeStyle({\n settings: JSON.stringify({\n version: \"0.0.1\",\n data: TextStyleSettings.defaultProps\n }),\n })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);\n });\n })\n});\n\ndescribe(\"appendTextAnnotationGeometry\", () => {\n let imodel: StandaloneDb;\n let seedDefinitionModelId: string;\n let seedCategoryId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {font: { name: \"Karla\" }, textHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedDefinitionModelId = definitionModel;\n seedCategoryId = category;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\n const builder = new MockBuilder();\n\n const resolver = new TextStyleResolver({\n textBlock: annotation.textBlock,\n textStyleId: styleId,\n iModel: imodel,\n });\n\n const layout = layoutTextBlock({\n textBlock: annotation.textBlock,\n iModel: imodel,\n textStyleResolver: resolver,\n });\n\n const result = appendTextAnnotationGeometry({\n annotationProps: annotation.toJSON(),\n layout,\n textStyleResolver: resolver,\n scaleFactor,\n builder,\n categoryId: seedCategoryId,\n });\n\n expect(result).to.be.true;\n return builder;\n }\n\n it(\"produces the same geometry when given the same inputs\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\n });\n\n it(\"produces no geometry when given an empty annotation\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.geometries).to.be.empty;\n expect(builder.params).to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const styleId = createAnnotationTextStyle(\n imodel,\n seedDefinitionModelId,\n \"empty anno style\",\n {\n font: { name: \"Totally Real Font\" },\n frame: {\n shape: \"rectangle\",\n }\n }\n ).insert();\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\n\n expect(builder.geometries).not.to.be.empty;\n expect(builder.params).not.to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n\n it(\"produces different geometry when given different text-content in annotations\", () => {\n const anno1 = createAnnotation();\n const anno2 = createAnnotation();\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\n\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"produces different geometry when given different default styles\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"accounts for style overrides in the text\", () => {\n const block = TextBlock.create();\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 }}\n block.appendParagraph();\n block.children[0].styleOverrides = { isBold: true };\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.appendParagraph();\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\n\n const annotation = createAnnotation(block);\n\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.textStrings.length).to.equal(2);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n // From override on paragraph\n expect(builder.textStrings[0].bold).to.be.true;\n // From default style\n expect(builder.textStrings[0].italic).to.be.true;\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\n // From default style\n expect(builder.textStrings[1].bold).to.be.false;\n // From override on run\n expect(builder.textStrings[1].italic).to.be.false;\n });\n\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\n const block = TextBlock.create();\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n\n const annotation = createAnnotation(block);\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\n\n expect(builder.textStrings.length).to.equal(1);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\n });\n\n it(\"scales geometry correctly\", () => {\n const annotation = createAnnotation();\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\n\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\n });\n});"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "5.3.0-dev.3",
3
+ "version": "5.3.0-dev.5",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "module": "lib/esm/core-backend.js",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@opentelemetry/api": "^1.0.4",
30
- "@itwin/core-bentley": "5.3.0-dev.3",
31
- "@itwin/core-common": "5.3.0-dev.3",
32
- "@itwin/core-geometry": "5.3.0-dev.3",
33
- "@itwin/ecschema-metadata": "5.3.0-dev.3"
30
+ "@itwin/core-common": "5.3.0-dev.5",
31
+ "@itwin/core-geometry": "5.3.0-dev.5",
32
+ "@itwin/core-bentley": "5.3.0-dev.5",
33
+ "@itwin/ecschema-metadata": "5.3.0-dev.5"
34
34
  },
35
35
  "peerDependenciesMeta": {
36
36
  "@opentelemetry/api": {
@@ -76,17 +76,17 @@
76
76
  "marked": "^14.1.3",
77
77
  "sql-formatter": "^15.4.6",
78
78
  "webpack": "^5.97.1",
79
- "@itwin/build-tools": "5.3.0-dev.3",
80
- "@itwin/core-bentley": "5.3.0-dev.3",
81
- "@itwin/ecschema-locaters": "5.3.0-dev.3",
82
- "@itwin/ecschema-metadata": "5.3.0-dev.3",
83
- "@itwin/ecsql-common": "5.3.0-dev.3",
84
- "@itwin/core-common": "5.3.0-dev.3",
79
+ "@itwin/build-tools": "5.3.0-dev.5",
80
+ "@itwin/core-bentley": "5.3.0-dev.5",
81
+ "@itwin/ecschema-locaters": "5.3.0-dev.5",
82
+ "@itwin/ecschema-metadata": "5.3.0-dev.5",
85
83
  "internal-tools": "3.0.0-dev.69",
86
- "@itwin/core-geometry": "5.3.0-dev.3"
84
+ "@itwin/core-geometry": "5.3.0-dev.5",
85
+ "@itwin/core-common": "5.3.0-dev.5",
86
+ "@itwin/ecsql-common": "5.3.0-dev.5"
87
87
  },
88
88
  "dependencies": {
89
- "@bentley/imodeljs-native": "5.3.1",
89
+ "@bentley/imodeljs-native": "5.3.3",
90
90
  "@itwin/cloud-agnostic-core": "^2.2.4",
91
91
  "@itwin/object-storage-azure": "^2.3.0",
92
92
  "@itwin/object-storage-core": "^2.3.0",