@design-core/core 0.0.1 → 0.0.3
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/.eslintrc.json +14 -7
- package/.github/workflows/DesignCoreQA.yml +3 -1
- package/README.md +11 -4
- package/TODO.md +19 -0
- package/core/core/core.js +49 -42
- package/core/designCore.js +61 -2
- package/core/dimensions/alignedDimension.js +142 -0
- package/core/dimensions/angularDimension.js +550 -0
- package/core/dimensions/baseCircularDimension.js +244 -0
- package/core/dimensions/baseDimension.js +558 -0
- package/core/dimensions/baseLinearDimension.js +371 -0
- package/core/dimensions/diametricDimension.js +82 -0
- package/core/dimensions/dimension.js +298 -0
- package/core/dimensions/linearDimension.js +29 -0
- package/core/dimensions/radialDimension.js +78 -0
- package/core/dimensions/rotatedDimension.js +167 -0
- package/core/entities/arc.js +314 -60
- package/core/entities/arctext.js +642 -0
- package/core/entities/basePolyline.js +553 -94
- package/core/entities/circle.js +181 -54
- package/core/entities/entity.js +154 -74
- package/core/entities/hatch.js +807 -0
- package/core/entities/insert.js +200 -39
- package/core/entities/line.js +196 -134
- package/core/entities/lwpolyline.js +21 -44
- package/core/entities/point.js +194 -29
- package/core/entities/polyline.js +54 -7
- package/core/entities/rectangle.js +43 -13
- package/core/entities/solid.js +43 -6
- package/core/entities/text.js +324 -181
- package/core/lib/boundingBox.js +73 -13
- package/core/lib/canvas.js +256 -65
- package/core/lib/clipboard.js +198 -0
- package/core/lib/colour.js +144 -0
- package/core/lib/colours.js +367 -301
- package/core/lib/commandLine.js +16 -28
- package/core/lib/commandManager.js +115 -58
- package/core/lib/constants.js +23 -0
- package/core/lib/dxf/dxf.js +249 -34
- package/core/lib/dxf/dxfFile.js +23 -38
- package/core/lib/dxf/dxfIterator.js +17 -5
- package/core/lib/dxf/dxfRead.js +23 -7
- package/core/lib/dxf/dxfWrite.js +39 -129
- package/core/lib/dxf/handleManager.js +97 -0
- package/core/lib/dxf/sections/blocks.js +16 -2
- package/core/lib/dxf/sections/entities.js +17 -3
- package/core/lib/dxf/sections/header.js +10 -1
- package/core/lib/dxf/sections/objects.js +36 -0
- package/core/lib/dxf/sections/section.js +43 -5
- package/core/lib/dxf/sections/tables.js +17 -3
- package/core/lib/entityManager.js +178 -0
- package/core/lib/fileio.js +14 -4
- package/core/lib/headers.js +229 -0
- package/core/lib/input.js +46 -0
- package/core/lib/inputManager.js +199 -194
- package/core/lib/intersect.js +341 -468
- package/core/lib/logging.js +25 -1
- package/core/lib/matrix.js +6 -8
- package/core/lib/mouse.js +24 -79
- package/core/lib/patterns.js +690 -0
- package/core/lib/promptOptions.js +133 -0
- package/core/lib/scene.js +71 -174
- package/core/lib/selectionManager.js +74 -48
- package/core/lib/selectionWindow.js +24 -10
- package/core/lib/settings.js +18 -11
- package/core/lib/snapping.js +129 -21
- package/core/lib/stateManager.js +288 -0
- package/core/lib/strings.js +57 -5
- package/core/lib/utils.js +95 -11
- package/core/objects/dictionary.js +43 -0
- package/core/objects/dictionaryManager.js +80 -0
- package/core/properties/dimType.js +117 -0
- package/core/properties/flags.js +66 -0
- package/core/properties/property.js +26 -0
- package/core/properties/propertyManager.js +65 -19
- package/core/tables/appId.js +31 -0
- package/core/tables/appIdManager.js +44 -0
- package/core/tables/block.js +323 -0
- package/core/tables/blockManager.js +48 -0
- package/core/tables/blockRecord.js +29 -0
- package/core/tables/blockRecordManager.js +37 -0
- package/core/tables/dimStyle.js +627 -0
- package/core/tables/dimStyleManager.js +187 -0
- package/core/tables/endblk.js +28 -0
- package/core/tables/layer.js +219 -0
- package/core/tables/layerManager.js +47 -0
- package/core/tables/ltype.js +85 -0
- package/core/tables/ltypeManager.js +65 -0
- package/core/tables/style.js +145 -0
- package/core/tables/styleManager.js +55 -0
- package/core/tables/styleManagerBase.js +110 -0
- package/core/tables/tableManagerBase.js +354 -0
- package/core/tables/ucs.js +28 -0
- package/core/tables/ucsManager.js +44 -0
- package/core/tables/view.js +28 -0
- package/core/tables/viewManager.js +44 -0
- package/core/tables/vport.js +70 -0
- package/core/tables/vportManager.js +65 -0
- package/core/tools/chamfer.js +343 -0
- package/core/tools/chamferFilletBase.js +162 -0
- package/core/tools/copy.js +68 -40
- package/core/tools/copybase.js +65 -0
- package/core/tools/copyclip.js +59 -0
- package/core/tools/cornerEntity.js +138 -0
- package/core/tools/cutclip.js +72 -0
- package/core/tools/distance.js +37 -9
- package/core/tools/erase.js +43 -13
- package/core/tools/explode.js +117 -0
- package/core/tools/extend.js +71 -32
- package/core/tools/fillet.js +336 -0
- package/core/tools/identify.js +33 -6
- package/core/tools/matchProp.js +106 -0
- package/core/tools/mirror.js +141 -0
- package/core/tools/move.js +65 -32
- package/core/tools/offset.js +321 -0
- package/core/tools/pan.js +54 -0
- package/core/tools/pasteclip.js +93 -0
- package/core/tools/purge.js +90 -0
- package/core/tools/rotate.js +105 -70
- package/core/tools/scale.js +166 -0
- package/core/tools/tool.js +14 -4
- package/core/tools/trim.js +71 -32
- package/core/tools/zoom.js +152 -0
- package/package.json +3 -305
- package/test/dimensions/alignedDimension.test.js +211 -0
- package/test/dimensions/angularDimension.test.js +243 -0
- package/test/dimensions/baseDimension.test.js +239 -0
- package/test/dimensions/diametricDimension.test.js +203 -0
- package/test/dimensions/dimension.test.js +102 -0
- package/test/dimensions/radialDimension.test.js +203 -0
- package/test/dimensions/rotatedDimension.test.js +224 -0
- package/test/entities/arc.test.js +463 -41
- package/test/entities/arctext.test.js +329 -0
- package/test/entities/basePolyline.test.js +459 -10
- package/test/entities/circle.test.js +312 -7
- package/test/entities/entity.test.js +28 -9
- package/test/entities/hatch.test.js +606 -0
- package/test/entities/insert.test.js +90 -0
- package/test/entities/line.test.js +182 -6
- package/test/entities/point.test.js +375 -37
- package/test/entities/solid.test.js +156 -0
- package/test/entities/text.test.js +533 -7
- package/test/integration/exportIntegration.reference.dxf +1706 -0
- package/test/integration/exportIntegration.test.js +186 -0
- package/test/integration/importExportIntegration.test.js +126 -0
- package/test/integration/intersectionIntegration.test.js +880 -0
- package/test/integration/userInputIntegration.reference.dxf +1410 -0
- package/test/integration/userInputIntegration.test.js +269 -0
- package/test/lib/boundingBox.test.js +26 -2
- package/test/lib/canvas.test.js +613 -5
- package/test/lib/clipboard.test.js +70 -0
- package/test/lib/colour.test.js +114 -0
- package/test/lib/colours.test.js +63 -18
- package/test/lib/commandLine.test.js +159 -22
- package/test/lib/commandManager.test.js +4 -4
- package/test/lib/constants.test.js +9 -0
- package/test/lib/dxf/dxfFile.test.js +6 -2
- package/test/lib/dxf/dxfIterator.test.js +1 -1
- package/test/lib/dxf/dxfWrite.test.js +173 -0
- package/test/lib/dxf/handleManager.test.js +137 -0
- package/test/lib/dxf/sections/blocks.test.js +5 -5
- package/test/lib/dxf/sections/entities.test.js +4 -4
- package/test/lib/dxf/sections/header.test.js +18 -4
- package/test/lib/dxf/sections/objects.test.js +132 -0
- package/test/lib/dxf/sections/section.test.js +29 -29
- package/test/lib/dxf/sections/tables.test.js +3 -3
- package/test/lib/entityManager.test.js +163 -0
- package/test/lib/headers.test.js +233 -0
- package/test/lib/inputManager.test.js +1144 -5
- package/test/lib/intersect.test.js +454 -331
- package/test/lib/logging.test.js +1 -1
- package/test/lib/matrix.test.js +1 -1
- package/test/lib/mouse.test.js +327 -4
- package/test/lib/patterns.test.js +105 -0
- package/test/lib/promptOptions.test.js +179 -0
- package/test/lib/scene.test.js +16 -52
- package/test/lib/selectionManager.test.js +17 -5
- package/test/lib/settings.test.js +111 -5
- package/test/lib/snapping.test.js +142 -4
- package/test/lib/stateManager.test.js +155 -0
- package/test/lib/utils.test.js +81 -1
- package/test/objects/dictionary.test.js +81 -0
- package/test/objects/dictionaryManager.test.js +34 -0
- package/test/properties/dimType.test.js +62 -0
- package/test/properties/flags.test.js +164 -0
- package/test/properties/property.test.js +13 -0
- package/test/properties/propertyManager.test.js +10 -11
- package/test/tables/appId.test.js +46 -0
- package/test/tables/appIdManager.test.js +72 -0
- package/test/tables/block.test.js +157 -0
- package/test/tables/blockManager.test.js +52 -0
- package/test/tables/blockRecord.test.js +39 -0
- package/test/tables/blockRecordManager.test.js +60 -0
- package/test/tables/dimstyle.test.js +72 -0
- package/test/tables/endblk.test.js +30 -0
- package/test/tables/layer.test.js +95 -0
- package/test/tables/layerManager.test.js +172 -0
- package/test/{styles → tables}/ltype.test.js +7 -7
- package/test/{styles → tables}/ltypeManager.test.js +2 -2
- package/test/tables/style.test.js +44 -0
- package/test/tables/stylemanagerbase.test.js +220 -0
- package/test/tables/tableManagerBase.test.js +194 -0
- package/test/tables/ucs.test.js +37 -0
- package/test/tables/ucsManager.test.js +48 -0
- package/test/tables/view.test.js +37 -0
- package/test/tables/viewManager.test.js +48 -0
- package/test/tables/vport.test.js +117 -0
- package/test/tables/vportManager.test.js +54 -0
- package/test/test-helpers/test-helpers.js +66 -0
- package/test/tools/chamfer.test.js +970 -0
- package/test/tools/chamferFilletBase.test.js +446 -0
- package/test/tools/copy.test.js +22 -14
- package/test/tools/copybase.test.js +93 -0
- package/test/tools/copyclip.test.js +92 -0
- package/test/tools/cornerEntity.test.js +201 -0
- package/test/tools/cutclip.test.js +94 -0
- package/test/tools/distance.test.js +140 -18
- package/test/tools/erase.test.js +12 -12
- package/test/tools/explode.test.js +45 -0
- package/test/tools/extend.test.js +326 -44
- package/test/tools/fillet.test.js +831 -0
- package/test/tools/identify.test.js +115 -16
- package/test/tools/matchProp.test.js +84 -0
- package/test/tools/mirror.test.js +475 -0
- package/test/tools/move.test.js +75 -19
- package/test/tools/offset.test.js +748 -0
- package/test/tools/pan.test.js +72 -0
- package/test/tools/pasteclip.test.js +100 -0
- package/test/tools/purge.test.js +89 -0
- package/test/tools/rotate.test.js +89 -23
- package/test/tools/scale.test.js +529 -0
- package/test/tools/trim.test.js +419 -84
- package/test/tools/zoom.test.js +504 -0
- package/core/entities/alignedDimension.js +0 -279
- package/core/entities/angularDimension.js +0 -194
- package/core/entities/baseDimension.js +0 -227
- package/core/entities/block.js +0 -247
- package/core/entities/diametricDimension.js +0 -133
- package/core/entities/dimension.js +0 -202
- package/core/entities/radialDimension.js +0 -126
- package/core/styles/dimStyle.js +0 -719
- package/core/styles/dimStyleManager.js +0 -47
- package/core/styles/layer.js +0 -133
- package/core/styles/layerManager.js +0 -40
- package/core/styles/ltype.js +0 -86
- package/core/styles/ltypeManager.js +0 -50
- package/core/styles/style.js +0 -158
- package/core/styles/styleManager.js +0 -43
- package/core/styles/styleManagerBase.js +0 -299
- package/test/entities/block.test.js +0 -22
- package/test/styles/dimstyle.test.js +0 -19
- package/test/styles/layerManager.test.js +0 -150
- package/test/styles/style.test.js +0 -33
- package/test/styles/stylemanagerbase.test.js +0 -219
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { StyleManagerBase } from '../../core/tables/styleManagerBase.js';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// mock createItem method
|
|
6
|
+
StyleManagerBase.prototype.createItem = function(style) {
|
|
7
|
+
return { name: style.name };
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// mock addStandardItems method
|
|
11
|
+
StyleManagerBase.prototype.addStandardItems = function() {
|
|
12
|
+
this.addItem({ 'name': 'TEST' });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// initialise core
|
|
16
|
+
new Core();
|
|
17
|
+
const styleManager = new StyleManagerBase();
|
|
18
|
+
|
|
19
|
+
test('Test StyleManagerBase.getItems', () => {
|
|
20
|
+
// add some style to the styles array property
|
|
21
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
22
|
+
|
|
23
|
+
// test getItems
|
|
24
|
+
expect(styleManager.getItems()).toHaveLength(2);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('Test StyleManagerBase.itemCount', () => {
|
|
28
|
+
// add some style to the styles array property
|
|
29
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
30
|
+
|
|
31
|
+
// test itemCount
|
|
32
|
+
expect(styleManager.itemCount()).toBe(2);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('Test StyleManagerBase.newItem', () => {
|
|
36
|
+
// add some style to the styles array property
|
|
37
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
38
|
+
|
|
39
|
+
// Add new style
|
|
40
|
+
styleManager.newItem();
|
|
41
|
+
|
|
42
|
+
expect(styleManager.itemCount()).toBe(3);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('Test StyleManagerBase.getUniqueName', () => {
|
|
46
|
+
// add some style to the styles array property
|
|
47
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
48
|
+
|
|
49
|
+
// check existing style name
|
|
50
|
+
expect(styleManager.getUniqueName('styleOne')).toBe('styleOne_1');
|
|
51
|
+
expect(styleManager.getUniqueName('sTyLeOnE')).toBe('sTyLeOnE_1');
|
|
52
|
+
|
|
53
|
+
// check new style name
|
|
54
|
+
expect(styleManager.getUniqueName('styleThree')).toBe('styleThree');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('Test StyleManagerBase.addItem', () => {
|
|
58
|
+
// add some style to the styles array property
|
|
59
|
+
styleManager.items = [{ name: 'styleOne' }];
|
|
60
|
+
|
|
61
|
+
// Add new style
|
|
62
|
+
styleManager.addItem({ name: 'styleTwo' });
|
|
63
|
+
expect(styleManager.itemCount()).toBe(2);
|
|
64
|
+
|
|
65
|
+
// Try and add existing style
|
|
66
|
+
styleManager.addItem({ name: 'styleOne' });
|
|
67
|
+
expect(styleManager.itemCount()).toBe(2);
|
|
68
|
+
|
|
69
|
+
// OverWrite existing style
|
|
70
|
+
styleManager.addItem({ name: 'styleone' }, true);
|
|
71
|
+
expect(styleManager.itemCount()).toBe(2);
|
|
72
|
+
expect(styleManager.items[0].name).toBe('styleone');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('Test StyleManagerBase.deleteStyle', () => {
|
|
76
|
+
// add some style to the styles array property
|
|
77
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }], { name: 'Standard' };
|
|
78
|
+
styleManager.indelibleItems = ['Standard'];
|
|
79
|
+
|
|
80
|
+
// Delete style
|
|
81
|
+
styleManager.deleteStyle(1);
|
|
82
|
+
expect(styleManager.itemCount(1)).toBe(1);
|
|
83
|
+
|
|
84
|
+
// Try and delete an non-existant index
|
|
85
|
+
styleManager.deleteStyle(10);
|
|
86
|
+
expect(styleManager.itemCount()).toBe(1);
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
// Check style name
|
|
90
|
+
const styleIndex = styleManager.getItemIndex('Standard');
|
|
91
|
+
|
|
92
|
+
// Try and delete an indelible styles
|
|
93
|
+
styleManager.deleteStyle(styleIndex);
|
|
94
|
+
expect(styleManager.itemCount()).toBe(1);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
test('Test StyleManagerBase.getCstyle', () => {
|
|
99
|
+
expect(styleManager.getCstyle()).toBe('TEST');
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test('Test StyleManagerBase.setCstyle', () => {
|
|
103
|
+
// add some style to the styles array property
|
|
104
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
105
|
+
|
|
106
|
+
styleManager.setCstyle('styleOne');
|
|
107
|
+
expect(styleManager.getCstyle()).toBe('styleOne');
|
|
108
|
+
|
|
109
|
+
// expect(() => {
|
|
110
|
+
// styleManager.setCstyle('Non-Existent');
|
|
111
|
+
// }).toThrow();
|
|
112
|
+
// styleManager.setCstyle('Non-Existent');
|
|
113
|
+
expect(styleManager.getCstyle()).toBe('styleOne');
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test('Test StyleManagerBase.itemExists', () => {
|
|
117
|
+
// add some style to the styles array property
|
|
118
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
119
|
+
|
|
120
|
+
expect(styleManager.itemExists('styleOne')).toBe(true);
|
|
121
|
+
expect(styleManager.itemExists('styleTwo')).toBe(true);
|
|
122
|
+
expect(styleManager.itemExists('Non-Existent')).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('Test StyleManagerBase.checkStyles', () => {
|
|
126
|
+
// clear all styles
|
|
127
|
+
styleManager.items = [];
|
|
128
|
+
|
|
129
|
+
expect(styleManager.itemCount()).toBe(0);
|
|
130
|
+
|
|
131
|
+
styleManager.checkStyles();
|
|
132
|
+
expect(styleManager.itemCount()).toBe(1);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
test('Test StyleManagerBase.addStandardItems', () => {
|
|
136
|
+
// clear all styles
|
|
137
|
+
styleManager.items = [];
|
|
138
|
+
|
|
139
|
+
expect(styleManager.itemCount()).toBe(0);
|
|
140
|
+
|
|
141
|
+
styleManager.addStandardItems();
|
|
142
|
+
expect(styleManager.itemCount()).toBe(1);
|
|
143
|
+
|
|
144
|
+
// check standard styles can't be added multiple times
|
|
145
|
+
styleManager.addStandardItems();
|
|
146
|
+
expect(styleManager.itemCount()).toBe(1);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('Test StyleManagerBase.getItemByName', () => {
|
|
150
|
+
// add some style to the styles array property
|
|
151
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
152
|
+
|
|
153
|
+
expect(styleManager.getItemByName('styleOne').name).toBe('styleOne');
|
|
154
|
+
expect(styleManager.getItemByName('Non-Existent')).toBeUndefined();
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test('Test StyleManagerBase.getItemByIndex', () => {
|
|
158
|
+
// add some style to the styles array property
|
|
159
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
160
|
+
|
|
161
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOne');
|
|
162
|
+
expect(styleManager.getItemByIndex(20)).toBeUndefined();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test('Test StyleManagerBase.renameStyle', () => {
|
|
166
|
+
// add some style to the styles array property
|
|
167
|
+
styleManager.items = [{ name: 'styleOne' }, { name: 'styleTwo' }];
|
|
168
|
+
styleManager.indelibleItems = ['Standard'];
|
|
169
|
+
|
|
170
|
+
// check index name
|
|
171
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOne');
|
|
172
|
+
|
|
173
|
+
// try and rename to STANDARD
|
|
174
|
+
styleManager.renameStyle(0, 'STANDARD');
|
|
175
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOne');
|
|
176
|
+
|
|
177
|
+
// valid rename
|
|
178
|
+
styleManager.renameStyle(0, 'styleOneRenamed');
|
|
179
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOneRenamed');
|
|
180
|
+
|
|
181
|
+
// try and rename to current name - no change
|
|
182
|
+
styleManager.renameStyle(0, 'styleOneRenamed');
|
|
183
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOneRenamed');
|
|
184
|
+
|
|
185
|
+
// try and rename current style
|
|
186
|
+
// check index name
|
|
187
|
+
expect(styleManager.getItemByIndex(1).name).toBe('styleTwo');
|
|
188
|
+
styleManager.setCstyle('styleTwo');
|
|
189
|
+
expect(styleManager.getCstyle()).toBe('styleTwo');
|
|
190
|
+
|
|
191
|
+
styleManager.renameStyle(1, 'styleTwoRenamed');
|
|
192
|
+
expect(styleManager.getItemByIndex(1).name).toBe('styleTwoRenamed');
|
|
193
|
+
expect(styleManager.getCstyle()).toBe('styleTwoRenamed');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
test('Test StyleManagerBase.updateItem', () => {
|
|
198
|
+
// add some style to the styles array property
|
|
199
|
+
styleManager.items = [{ name: 'styleOne', textHeight: 2 }, { name: 'styleTwo', textHeight: 3 }];
|
|
200
|
+
|
|
201
|
+
// update non-existent style index
|
|
202
|
+
expect(() => {
|
|
203
|
+
styleManager.updateItem(10, 'Non-Existent-property', 'value');
|
|
204
|
+
}).toThrow();
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
// update non-existent style property
|
|
208
|
+
expect(() => {
|
|
209
|
+
styleManager.updateItem(1, 'Non-Existent-property', 'value');
|
|
210
|
+
}).toThrow();
|
|
211
|
+
|
|
212
|
+
// update style name
|
|
213
|
+
styleManager.updateItem(0, 'name', 'styleOneRenamed');
|
|
214
|
+
expect(styleManager.getItemByIndex(0).name).toBe('styleOneRenamed');
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
// update style text height
|
|
218
|
+
styleManager.updateItem(0, 'textHeight', 20);
|
|
219
|
+
expect(styleManager.getItemByIndex(0).textHeight).toBe(20);
|
|
220
|
+
});
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { TableManagerBase } from '../../core/tables/tableManagerBase.js';
|
|
3
|
+
|
|
4
|
+
// initialise core
|
|
5
|
+
new Core();
|
|
6
|
+
|
|
7
|
+
// mock createItem method
|
|
8
|
+
TableManagerBase.prototype.createItem = function(item) {
|
|
9
|
+
return { name: item.name };
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// mock addStandardItems method
|
|
13
|
+
TableManagerBase.prototype.addStandardItems = function() {
|
|
14
|
+
this.addItem({ 'name': 'TEST' });
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const tableManagerBase = new TableManagerBase();
|
|
18
|
+
|
|
19
|
+
// mock item data
|
|
20
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
21
|
+
|
|
22
|
+
test('Test tableManagerBase.getItems', () => {
|
|
23
|
+
// add some item to the items array property
|
|
24
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
25
|
+
|
|
26
|
+
// test getItems
|
|
27
|
+
expect(tableManagerBase.getItems()).toHaveLength(2);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('Test tableManagerBase.itemCount', () => {
|
|
31
|
+
// add some item to the items array property
|
|
32
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
33
|
+
|
|
34
|
+
// test itemCount
|
|
35
|
+
expect(tableManagerBase.itemCount()).toBe(2);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('Test tableManagerBase.newItem', () => {
|
|
39
|
+
// add some item to the items array property
|
|
40
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
41
|
+
|
|
42
|
+
// Add new item
|
|
43
|
+
tableManagerBase.newItem();
|
|
44
|
+
|
|
45
|
+
expect(tableManagerBase.itemCount()).toBe(3);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('Test tableManagerBase.getUniqueName', () => {
|
|
49
|
+
// add some item to the items array property
|
|
50
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
51
|
+
|
|
52
|
+
// check existing item name
|
|
53
|
+
expect(tableManagerBase.getUniqueName('itemOne')).toBe('itemOne_1');
|
|
54
|
+
expect(tableManagerBase.getUniqueName('itemOnE')).toBe('itemOnE_1');
|
|
55
|
+
|
|
56
|
+
// check new item name
|
|
57
|
+
expect(tableManagerBase.getUniqueName('itemThree')).toBe('itemThree');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('Test tableManagerBase.addItem', () => {
|
|
61
|
+
// add some item to the items array property
|
|
62
|
+
tableManagerBase.items = [{ name: 'itemOne' }];
|
|
63
|
+
|
|
64
|
+
// Add new item
|
|
65
|
+
tableManagerBase.addItem({ name: 'itemTwo' });
|
|
66
|
+
expect(tableManagerBase.itemCount()).toBe(2);
|
|
67
|
+
|
|
68
|
+
// Try and add existing item
|
|
69
|
+
tableManagerBase.addItem({ name: 'itemOne' });
|
|
70
|
+
expect(tableManagerBase.itemCount()).toBe(2);
|
|
71
|
+
|
|
72
|
+
// OverWrite existing item
|
|
73
|
+
tableManagerBase.addItem({ name: 'itemone' }, true);
|
|
74
|
+
expect(tableManagerBase.itemCount()).toBe(2);
|
|
75
|
+
expect(tableManagerBase.items[0].name).toBe('itemone');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('Test tableManagerBase.deleteItem', () => {
|
|
79
|
+
// add some item to the items array property
|
|
80
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }], { name: 'Standard' };
|
|
81
|
+
tableManagerBase.indelibleItems = ['Standard'];
|
|
82
|
+
|
|
83
|
+
// Delete item
|
|
84
|
+
tableManagerBase.deleteItem(1);
|
|
85
|
+
expect(tableManagerBase.itemCount(1)).toBe(1);
|
|
86
|
+
|
|
87
|
+
// Try and delete an non-existant index
|
|
88
|
+
tableManagerBase.deleteItem(10);
|
|
89
|
+
expect(tableManagerBase.itemCount()).toBe(1);
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
// Check item name
|
|
93
|
+
const itemIndex = tableManagerBase.getItemIndex('Standard');
|
|
94
|
+
|
|
95
|
+
// Try and delete an indelible items
|
|
96
|
+
tableManagerBase.deleteItem(itemIndex);
|
|
97
|
+
expect(tableManagerBase.itemCount()).toBe(1);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('Test tableManagerBase.itemExists', () => {
|
|
101
|
+
// add some item to the items array property
|
|
102
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
103
|
+
|
|
104
|
+
expect(tableManagerBase.itemExists('itemOne')).toBe(true);
|
|
105
|
+
expect(tableManagerBase.itemExists('itemTwo')).toBe(true);
|
|
106
|
+
expect(tableManagerBase.itemExists('Non-Existent')).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('Test tableManagerBase.checkitems', () => {
|
|
110
|
+
// clear all items
|
|
111
|
+
tableManagerBase.items = [];
|
|
112
|
+
|
|
113
|
+
expect(tableManagerBase.itemCount()).toBe(0);
|
|
114
|
+
|
|
115
|
+
tableManagerBase.checkItems();
|
|
116
|
+
expect(tableManagerBase.itemCount()).toBe(1);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('Test tableManagerBase.addStandardItems', () => {
|
|
120
|
+
// clear all items
|
|
121
|
+
tableManagerBase.items = [];
|
|
122
|
+
|
|
123
|
+
expect(tableManagerBase.itemCount()).toBe(0);
|
|
124
|
+
|
|
125
|
+
tableManagerBase.addStandardItems();
|
|
126
|
+
expect(tableManagerBase.itemCount()).toBe(1);
|
|
127
|
+
|
|
128
|
+
// check standard items can't be added multiple times
|
|
129
|
+
tableManagerBase.addStandardItems();
|
|
130
|
+
expect(tableManagerBase.itemCount()).toBe(1);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('Test tableManagerBase.getItemByName', () => {
|
|
134
|
+
// add some item to the items array property
|
|
135
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
136
|
+
|
|
137
|
+
expect(tableManagerBase.getItemByName('itemOne').name).toBe('itemOne');
|
|
138
|
+
expect(tableManagerBase.getItemByName('Non-Existent')).toBeUndefined();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('Test tableManagerBase.getItemByIndex', () => {
|
|
142
|
+
// add some item to the items array property
|
|
143
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
144
|
+
|
|
145
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOne');
|
|
146
|
+
expect(tableManagerBase.getItemByIndex(20)).toBeUndefined();
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('Test tableManagerBase.renameitem', () => {
|
|
150
|
+
// add some item to the items array property
|
|
151
|
+
tableManagerBase.items = [{ name: 'itemOne' }, { name: 'itemTwo' }];
|
|
152
|
+
tableManagerBase.indelibleItems = ['Standard'];
|
|
153
|
+
|
|
154
|
+
// check index name
|
|
155
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOne');
|
|
156
|
+
|
|
157
|
+
// try and rename to STANDARD
|
|
158
|
+
tableManagerBase.renameItem(0, 'STANDARD');
|
|
159
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOne');
|
|
160
|
+
|
|
161
|
+
// valid rename
|
|
162
|
+
tableManagerBase.renameItem(0, 'itemOneRenamed');
|
|
163
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOneRenamed');
|
|
164
|
+
|
|
165
|
+
// try and rename to current name - no change
|
|
166
|
+
tableManagerBase.renameItem(0, 'itemOneRenamed');
|
|
167
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOneRenamed');
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
test('Test tableManagerBase.updateItem', () => {
|
|
172
|
+
// add some item to the items array property
|
|
173
|
+
tableManagerBase.items = [{ name: 'itemOne', textHeight: 2 }, { name: 'itemTwo', textHeight: 3 }];
|
|
174
|
+
|
|
175
|
+
// update non-existent item index
|
|
176
|
+
expect(() => {
|
|
177
|
+
tableManagerBase.updateItem(10, 'Non-Existent-property', 'value');
|
|
178
|
+
}).toThrow();
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
// update non-existent item property
|
|
182
|
+
expect(() => {
|
|
183
|
+
tableManagerBase.updateItem(1, 'Non-Existent-property', 'value');
|
|
184
|
+
}).toThrow();
|
|
185
|
+
|
|
186
|
+
// update item name
|
|
187
|
+
tableManagerBase.updateItem(0, 'name', 'itemOneRenamed');
|
|
188
|
+
expect(tableManagerBase.getItemByIndex(0).name).toBe('itemOneRenamed');
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
// update item text height
|
|
192
|
+
tableManagerBase.updateItem(0, 'textHeight', 20);
|
|
193
|
+
expect(tableManagerBase.getItemByIndex(0).textHeight).toBe(20);
|
|
194
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
2
|
+
import { UCS } from '../../core/tables/ucs.js';
|
|
3
|
+
|
|
4
|
+
test('Test UCS constructor defaults', () => {
|
|
5
|
+
const ucs = new UCS();
|
|
6
|
+
expect(ucs.name).toBe('');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Test UCS constructor with name property', () => {
|
|
10
|
+
const ucs = new UCS({ name: 'TestUCS' });
|
|
11
|
+
expect(ucs.name).toBe('TestUCS');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('Test UCS constructor with DXF group code', () => {
|
|
15
|
+
const ucs = new UCS({ 2: 'DXFUcs' });
|
|
16
|
+
expect(ucs.name).toBe('DXFUcs');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('Test UCS.dxf', () => {
|
|
20
|
+
const ucs = new UCS({ handle: 'A', name: 'TestUCS' });
|
|
21
|
+
const file = new DXFFile();
|
|
22
|
+
ucs.dxf(file);
|
|
23
|
+
|
|
24
|
+
const dxfString = `0
|
|
25
|
+
UCS
|
|
26
|
+
5
|
|
27
|
+
A
|
|
28
|
+
100
|
|
29
|
+
AcDbSymbolTableRecord
|
|
30
|
+
100
|
|
31
|
+
AcDbUCSTableRecord
|
|
32
|
+
2
|
|
33
|
+
TestUCS
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
expect(file.contents).toEqual(dxfString);
|
|
37
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
3
|
+
|
|
4
|
+
const core = new Core();
|
|
5
|
+
const ucsManager = core.ucsManager;
|
|
6
|
+
|
|
7
|
+
test('Test UCSManager.getItems', () => {
|
|
8
|
+
const items = ucsManager.getItems();
|
|
9
|
+
expect(items).toHaveLength(0);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('Test UCSManager.itemCount', () => {
|
|
13
|
+
expect(ucsManager.itemCount()).toBe(0);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('Test UCSManager.addItem', () => {
|
|
17
|
+
ucsManager.addItem({ name: 'TestUCS' });
|
|
18
|
+
expect(ucsManager.itemCount()).toBe(1);
|
|
19
|
+
expect(ucsManager.getItemByName('TestUCS')).toBeDefined();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('Test UCSManager.deleteItem', () => {
|
|
23
|
+
const count = ucsManager.itemCount();
|
|
24
|
+
const index = ucsManager.getItemIndex('TestUCS');
|
|
25
|
+
ucsManager.deleteItem(index);
|
|
26
|
+
expect(ucsManager.itemCount()).toBe(count - 1);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('Test UCSManager.dxf', () => {
|
|
30
|
+
const file = new DXFFile();
|
|
31
|
+
ucsManager.dxf(file);
|
|
32
|
+
|
|
33
|
+
const dxfString = `0
|
|
34
|
+
TABLE
|
|
35
|
+
2
|
|
36
|
+
UCS
|
|
37
|
+
5
|
|
38
|
+
22
|
|
39
|
+
100
|
|
40
|
+
AcDbSymbolTable
|
|
41
|
+
70
|
|
42
|
+
0
|
|
43
|
+
0
|
|
44
|
+
ENDTAB
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
expect(file.contents).toEqual(dxfString);
|
|
48
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
2
|
+
import { View } from '../../core/tables/view.js';
|
|
3
|
+
|
|
4
|
+
test('Test View constructor defaults', () => {
|
|
5
|
+
const view = new View();
|
|
6
|
+
expect(view.name).toBe('');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Test View constructor with name property', () => {
|
|
10
|
+
const view = new View({ name: 'TestView' });
|
|
11
|
+
expect(view.name).toBe('TestView');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('Test View constructor with DXF group code', () => {
|
|
15
|
+
const view = new View({ 2: 'DXFView' });
|
|
16
|
+
expect(view.name).toBe('DXFView');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('Test View.dxf', () => {
|
|
20
|
+
const view = new View({ handle: 'A', name: 'TestView' });
|
|
21
|
+
const file = new DXFFile();
|
|
22
|
+
view.dxf(file);
|
|
23
|
+
|
|
24
|
+
const dxfString = `0
|
|
25
|
+
VIEW
|
|
26
|
+
5
|
|
27
|
+
A
|
|
28
|
+
100
|
|
29
|
+
AcDbSymbolTableRecord
|
|
30
|
+
100
|
|
31
|
+
AcDbViewTableRecord
|
|
32
|
+
2
|
|
33
|
+
TestView
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
expect(file.contents).toEqual(dxfString);
|
|
37
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
3
|
+
|
|
4
|
+
const core = new Core();
|
|
5
|
+
const viewManager = core.viewManager;
|
|
6
|
+
|
|
7
|
+
test('Test ViewManager.getItems', () => {
|
|
8
|
+
const items = viewManager.getItems();
|
|
9
|
+
expect(items).toHaveLength(0);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('Test ViewManager.itemCount', () => {
|
|
13
|
+
expect(viewManager.itemCount()).toBe(0);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('Test ViewManager.addItem', () => {
|
|
17
|
+
viewManager.addItem({ name: 'TestView' });
|
|
18
|
+
expect(viewManager.itemCount()).toBe(1);
|
|
19
|
+
expect(viewManager.getItemByName('TestView')).toBeDefined();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('Test ViewManager.deleteItem', () => {
|
|
23
|
+
const count = viewManager.itemCount();
|
|
24
|
+
const index = viewManager.getItemIndex('TestView');
|
|
25
|
+
viewManager.deleteItem(index);
|
|
26
|
+
expect(viewManager.itemCount()).toBe(count - 1);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('Test ViewManager.dxf', () => {
|
|
30
|
+
const file = new DXFFile();
|
|
31
|
+
viewManager.dxf(file);
|
|
32
|
+
|
|
33
|
+
const dxfString = `0
|
|
34
|
+
TABLE
|
|
35
|
+
2
|
|
36
|
+
VIEW
|
|
37
|
+
5
|
|
38
|
+
1F
|
|
39
|
+
100
|
|
40
|
+
AcDbSymbolTable
|
|
41
|
+
70
|
|
42
|
+
0
|
|
43
|
+
0
|
|
44
|
+
ENDTAB
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
expect(file.contents).toEqual(dxfString);
|
|
48
|
+
});
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { VPort } from '../../core/tables/vport.js';
|
|
2
|
+
import { File } from '../test-helpers/test-helpers.js';
|
|
3
|
+
|
|
4
|
+
test('Test VPort constructor defaults', () => {
|
|
5
|
+
const vport = new VPort();
|
|
6
|
+
expect(vport.name).toBe('*ACTIVE');
|
|
7
|
+
expect(vport.viewCenterX).toBe(0);
|
|
8
|
+
expect(vport.viewCenterY).toBe(0);
|
|
9
|
+
expect(vport.height).toBe(0);
|
|
10
|
+
expect(vport.ratio).toBe(0);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('Test VPort constructor with data', () => {
|
|
14
|
+
const vport = new VPort({ name: 'TestVPort', viewCenterX: 10, viewCenterY: 20, height: 100, ratio: 1.5 });
|
|
15
|
+
expect(vport.name).toBe('TestVPort');
|
|
16
|
+
expect(vport.viewCenterX).toBe(10);
|
|
17
|
+
expect(vport.viewCenterY).toBe(20);
|
|
18
|
+
expect(vport.height).toBe(100);
|
|
19
|
+
expect(vport.ratio).toBe(1.5);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('Test VPort constructor with DXF group codes', () => {
|
|
23
|
+
const vport = new VPort({ 2: 'DXFVPort', 12: 5, 22: 15, 40: 200, 41: 2.0 });
|
|
24
|
+
expect(vport.name).toBe('DXFVPort');
|
|
25
|
+
expect(vport.viewCenterX).toBe(5);
|
|
26
|
+
expect(vport.viewCenterY).toBe(15);
|
|
27
|
+
expect(vport.height).toBe(200);
|
|
28
|
+
expect(vport.ratio).toBe(2.0);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('Test VPort.dxf', () => {
|
|
32
|
+
const vport = new VPort({ handle: '1', name: '*ACTIVE', viewCenterX: 50, viewCenterY: 100, height: 200, ratio: 1.5 });
|
|
33
|
+
const file = new File();
|
|
34
|
+
vport.dxf(file);
|
|
35
|
+
|
|
36
|
+
const dxfString = `0
|
|
37
|
+
VPORT
|
|
38
|
+
5
|
|
39
|
+
1
|
|
40
|
+
100
|
|
41
|
+
AcDbSymbolTableRecord
|
|
42
|
+
100
|
|
43
|
+
AcDbViewportTableRecord
|
|
44
|
+
2
|
|
45
|
+
*ACTIVE
|
|
46
|
+
70
|
|
47
|
+
0
|
|
48
|
+
10
|
|
49
|
+
0.0
|
|
50
|
+
20
|
|
51
|
+
0.0
|
|
52
|
+
11
|
|
53
|
+
1.0
|
|
54
|
+
21
|
|
55
|
+
1.0
|
|
56
|
+
12
|
|
57
|
+
50
|
|
58
|
+
22
|
|
59
|
+
100
|
|
60
|
+
13
|
|
61
|
+
0.0
|
|
62
|
+
23
|
|
63
|
+
0.0
|
|
64
|
+
14
|
|
65
|
+
10.0
|
|
66
|
+
24
|
|
67
|
+
10.0
|
|
68
|
+
15
|
|
69
|
+
10.0
|
|
70
|
+
25
|
|
71
|
+
10.0
|
|
72
|
+
16
|
|
73
|
+
0.0
|
|
74
|
+
26
|
|
75
|
+
0.0
|
|
76
|
+
36
|
|
77
|
+
1.0
|
|
78
|
+
17
|
|
79
|
+
0.0
|
|
80
|
+
27
|
|
81
|
+
0.0
|
|
82
|
+
37
|
|
83
|
+
0.0
|
|
84
|
+
40
|
|
85
|
+
200
|
|
86
|
+
41
|
|
87
|
+
1.5
|
|
88
|
+
42
|
|
89
|
+
50.0
|
|
90
|
+
43
|
|
91
|
+
0.0
|
|
92
|
+
44
|
|
93
|
+
0.0
|
|
94
|
+
50
|
|
95
|
+
0.0
|
|
96
|
+
51
|
|
97
|
+
0.0
|
|
98
|
+
71
|
|
99
|
+
0.0
|
|
100
|
+
72
|
|
101
|
+
1000
|
|
102
|
+
73
|
|
103
|
+
1
|
|
104
|
+
74
|
|
105
|
+
3
|
|
106
|
+
75
|
|
107
|
+
0
|
|
108
|
+
76
|
|
109
|
+
1
|
|
110
|
+
77
|
|
111
|
+
0
|
|
112
|
+
78
|
|
113
|
+
0
|
|
114
|
+
`;
|
|
115
|
+
|
|
116
|
+
expect(file.contents).toEqual(dxfString);
|
|
117
|
+
});
|