@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.
Files changed (254) hide show
  1. package/.eslintrc.json +14 -7
  2. package/.github/workflows/DesignCoreQA.yml +3 -1
  3. package/README.md +11 -4
  4. package/TODO.md +19 -0
  5. package/core/core/core.js +49 -42
  6. package/core/designCore.js +61 -2
  7. package/core/dimensions/alignedDimension.js +142 -0
  8. package/core/dimensions/angularDimension.js +550 -0
  9. package/core/dimensions/baseCircularDimension.js +244 -0
  10. package/core/dimensions/baseDimension.js +558 -0
  11. package/core/dimensions/baseLinearDimension.js +371 -0
  12. package/core/dimensions/diametricDimension.js +82 -0
  13. package/core/dimensions/dimension.js +298 -0
  14. package/core/dimensions/linearDimension.js +29 -0
  15. package/core/dimensions/radialDimension.js +78 -0
  16. package/core/dimensions/rotatedDimension.js +167 -0
  17. package/core/entities/arc.js +314 -60
  18. package/core/entities/arctext.js +642 -0
  19. package/core/entities/basePolyline.js +553 -94
  20. package/core/entities/circle.js +181 -54
  21. package/core/entities/entity.js +154 -74
  22. package/core/entities/hatch.js +807 -0
  23. package/core/entities/insert.js +200 -39
  24. package/core/entities/line.js +196 -134
  25. package/core/entities/lwpolyline.js +21 -44
  26. package/core/entities/point.js +194 -29
  27. package/core/entities/polyline.js +54 -7
  28. package/core/entities/rectangle.js +43 -13
  29. package/core/entities/solid.js +43 -6
  30. package/core/entities/text.js +324 -181
  31. package/core/lib/boundingBox.js +73 -13
  32. package/core/lib/canvas.js +256 -65
  33. package/core/lib/clipboard.js +198 -0
  34. package/core/lib/colour.js +144 -0
  35. package/core/lib/colours.js +367 -301
  36. package/core/lib/commandLine.js +16 -28
  37. package/core/lib/commandManager.js +115 -58
  38. package/core/lib/constants.js +23 -0
  39. package/core/lib/dxf/dxf.js +249 -34
  40. package/core/lib/dxf/dxfFile.js +23 -38
  41. package/core/lib/dxf/dxfIterator.js +17 -5
  42. package/core/lib/dxf/dxfRead.js +23 -7
  43. package/core/lib/dxf/dxfWrite.js +39 -129
  44. package/core/lib/dxf/handleManager.js +97 -0
  45. package/core/lib/dxf/sections/blocks.js +16 -2
  46. package/core/lib/dxf/sections/entities.js +17 -3
  47. package/core/lib/dxf/sections/header.js +10 -1
  48. package/core/lib/dxf/sections/objects.js +36 -0
  49. package/core/lib/dxf/sections/section.js +43 -5
  50. package/core/lib/dxf/sections/tables.js +17 -3
  51. package/core/lib/entityManager.js +178 -0
  52. package/core/lib/fileio.js +14 -4
  53. package/core/lib/headers.js +229 -0
  54. package/core/lib/input.js +46 -0
  55. package/core/lib/inputManager.js +199 -194
  56. package/core/lib/intersect.js +341 -468
  57. package/core/lib/logging.js +25 -1
  58. package/core/lib/matrix.js +6 -8
  59. package/core/lib/mouse.js +24 -79
  60. package/core/lib/patterns.js +690 -0
  61. package/core/lib/promptOptions.js +133 -0
  62. package/core/lib/scene.js +71 -174
  63. package/core/lib/selectionManager.js +74 -48
  64. package/core/lib/selectionWindow.js +24 -10
  65. package/core/lib/settings.js +18 -11
  66. package/core/lib/snapping.js +129 -21
  67. package/core/lib/stateManager.js +288 -0
  68. package/core/lib/strings.js +57 -5
  69. package/core/lib/utils.js +95 -11
  70. package/core/objects/dictionary.js +43 -0
  71. package/core/objects/dictionaryManager.js +80 -0
  72. package/core/properties/dimType.js +117 -0
  73. package/core/properties/flags.js +66 -0
  74. package/core/properties/property.js +26 -0
  75. package/core/properties/propertyManager.js +65 -19
  76. package/core/tables/appId.js +31 -0
  77. package/core/tables/appIdManager.js +44 -0
  78. package/core/tables/block.js +323 -0
  79. package/core/tables/blockManager.js +48 -0
  80. package/core/tables/blockRecord.js +29 -0
  81. package/core/tables/blockRecordManager.js +37 -0
  82. package/core/tables/dimStyle.js +627 -0
  83. package/core/tables/dimStyleManager.js +187 -0
  84. package/core/tables/endblk.js +28 -0
  85. package/core/tables/layer.js +219 -0
  86. package/core/tables/layerManager.js +47 -0
  87. package/core/tables/ltype.js +85 -0
  88. package/core/tables/ltypeManager.js +65 -0
  89. package/core/tables/style.js +145 -0
  90. package/core/tables/styleManager.js +55 -0
  91. package/core/tables/styleManagerBase.js +110 -0
  92. package/core/tables/tableManagerBase.js +354 -0
  93. package/core/tables/ucs.js +28 -0
  94. package/core/tables/ucsManager.js +44 -0
  95. package/core/tables/view.js +28 -0
  96. package/core/tables/viewManager.js +44 -0
  97. package/core/tables/vport.js +70 -0
  98. package/core/tables/vportManager.js +65 -0
  99. package/core/tools/chamfer.js +343 -0
  100. package/core/tools/chamferFilletBase.js +162 -0
  101. package/core/tools/copy.js +68 -40
  102. package/core/tools/copybase.js +65 -0
  103. package/core/tools/copyclip.js +59 -0
  104. package/core/tools/cornerEntity.js +138 -0
  105. package/core/tools/cutclip.js +72 -0
  106. package/core/tools/distance.js +37 -9
  107. package/core/tools/erase.js +43 -13
  108. package/core/tools/explode.js +117 -0
  109. package/core/tools/extend.js +71 -32
  110. package/core/tools/fillet.js +336 -0
  111. package/core/tools/identify.js +33 -6
  112. package/core/tools/matchProp.js +106 -0
  113. package/core/tools/mirror.js +141 -0
  114. package/core/tools/move.js +65 -32
  115. package/core/tools/offset.js +321 -0
  116. package/core/tools/pan.js +54 -0
  117. package/core/tools/pasteclip.js +93 -0
  118. package/core/tools/purge.js +90 -0
  119. package/core/tools/rotate.js +105 -70
  120. package/core/tools/scale.js +166 -0
  121. package/core/tools/tool.js +14 -4
  122. package/core/tools/trim.js +71 -32
  123. package/core/tools/zoom.js +152 -0
  124. package/package.json +3 -305
  125. package/test/dimensions/alignedDimension.test.js +211 -0
  126. package/test/dimensions/angularDimension.test.js +243 -0
  127. package/test/dimensions/baseDimension.test.js +239 -0
  128. package/test/dimensions/diametricDimension.test.js +203 -0
  129. package/test/dimensions/dimension.test.js +102 -0
  130. package/test/dimensions/radialDimension.test.js +203 -0
  131. package/test/dimensions/rotatedDimension.test.js +224 -0
  132. package/test/entities/arc.test.js +463 -41
  133. package/test/entities/arctext.test.js +329 -0
  134. package/test/entities/basePolyline.test.js +459 -10
  135. package/test/entities/circle.test.js +312 -7
  136. package/test/entities/entity.test.js +28 -9
  137. package/test/entities/hatch.test.js +606 -0
  138. package/test/entities/insert.test.js +90 -0
  139. package/test/entities/line.test.js +182 -6
  140. package/test/entities/point.test.js +375 -37
  141. package/test/entities/solid.test.js +156 -0
  142. package/test/entities/text.test.js +533 -7
  143. package/test/integration/exportIntegration.reference.dxf +1706 -0
  144. package/test/integration/exportIntegration.test.js +186 -0
  145. package/test/integration/importExportIntegration.test.js +126 -0
  146. package/test/integration/intersectionIntegration.test.js +880 -0
  147. package/test/integration/userInputIntegration.reference.dxf +1410 -0
  148. package/test/integration/userInputIntegration.test.js +269 -0
  149. package/test/lib/boundingBox.test.js +26 -2
  150. package/test/lib/canvas.test.js +613 -5
  151. package/test/lib/clipboard.test.js +70 -0
  152. package/test/lib/colour.test.js +114 -0
  153. package/test/lib/colours.test.js +63 -18
  154. package/test/lib/commandLine.test.js +159 -22
  155. package/test/lib/commandManager.test.js +4 -4
  156. package/test/lib/constants.test.js +9 -0
  157. package/test/lib/dxf/dxfFile.test.js +6 -2
  158. package/test/lib/dxf/dxfIterator.test.js +1 -1
  159. package/test/lib/dxf/dxfWrite.test.js +173 -0
  160. package/test/lib/dxf/handleManager.test.js +137 -0
  161. package/test/lib/dxf/sections/blocks.test.js +5 -5
  162. package/test/lib/dxf/sections/entities.test.js +4 -4
  163. package/test/lib/dxf/sections/header.test.js +18 -4
  164. package/test/lib/dxf/sections/objects.test.js +132 -0
  165. package/test/lib/dxf/sections/section.test.js +29 -29
  166. package/test/lib/dxf/sections/tables.test.js +3 -3
  167. package/test/lib/entityManager.test.js +163 -0
  168. package/test/lib/headers.test.js +233 -0
  169. package/test/lib/inputManager.test.js +1144 -5
  170. package/test/lib/intersect.test.js +454 -331
  171. package/test/lib/logging.test.js +1 -1
  172. package/test/lib/matrix.test.js +1 -1
  173. package/test/lib/mouse.test.js +327 -4
  174. package/test/lib/patterns.test.js +105 -0
  175. package/test/lib/promptOptions.test.js +179 -0
  176. package/test/lib/scene.test.js +16 -52
  177. package/test/lib/selectionManager.test.js +17 -5
  178. package/test/lib/settings.test.js +111 -5
  179. package/test/lib/snapping.test.js +142 -4
  180. package/test/lib/stateManager.test.js +155 -0
  181. package/test/lib/utils.test.js +81 -1
  182. package/test/objects/dictionary.test.js +81 -0
  183. package/test/objects/dictionaryManager.test.js +34 -0
  184. package/test/properties/dimType.test.js +62 -0
  185. package/test/properties/flags.test.js +164 -0
  186. package/test/properties/property.test.js +13 -0
  187. package/test/properties/propertyManager.test.js +10 -11
  188. package/test/tables/appId.test.js +46 -0
  189. package/test/tables/appIdManager.test.js +72 -0
  190. package/test/tables/block.test.js +157 -0
  191. package/test/tables/blockManager.test.js +52 -0
  192. package/test/tables/blockRecord.test.js +39 -0
  193. package/test/tables/blockRecordManager.test.js +60 -0
  194. package/test/tables/dimstyle.test.js +72 -0
  195. package/test/tables/endblk.test.js +30 -0
  196. package/test/tables/layer.test.js +95 -0
  197. package/test/tables/layerManager.test.js +172 -0
  198. package/test/{styles → tables}/ltype.test.js +7 -7
  199. package/test/{styles → tables}/ltypeManager.test.js +2 -2
  200. package/test/tables/style.test.js +44 -0
  201. package/test/tables/stylemanagerbase.test.js +220 -0
  202. package/test/tables/tableManagerBase.test.js +194 -0
  203. package/test/tables/ucs.test.js +37 -0
  204. package/test/tables/ucsManager.test.js +48 -0
  205. package/test/tables/view.test.js +37 -0
  206. package/test/tables/viewManager.test.js +48 -0
  207. package/test/tables/vport.test.js +117 -0
  208. package/test/tables/vportManager.test.js +54 -0
  209. package/test/test-helpers/test-helpers.js +66 -0
  210. package/test/tools/chamfer.test.js +970 -0
  211. package/test/tools/chamferFilletBase.test.js +446 -0
  212. package/test/tools/copy.test.js +22 -14
  213. package/test/tools/copybase.test.js +93 -0
  214. package/test/tools/copyclip.test.js +92 -0
  215. package/test/tools/cornerEntity.test.js +201 -0
  216. package/test/tools/cutclip.test.js +94 -0
  217. package/test/tools/distance.test.js +140 -18
  218. package/test/tools/erase.test.js +12 -12
  219. package/test/tools/explode.test.js +45 -0
  220. package/test/tools/extend.test.js +326 -44
  221. package/test/tools/fillet.test.js +831 -0
  222. package/test/tools/identify.test.js +115 -16
  223. package/test/tools/matchProp.test.js +84 -0
  224. package/test/tools/mirror.test.js +475 -0
  225. package/test/tools/move.test.js +75 -19
  226. package/test/tools/offset.test.js +748 -0
  227. package/test/tools/pan.test.js +72 -0
  228. package/test/tools/pasteclip.test.js +100 -0
  229. package/test/tools/purge.test.js +89 -0
  230. package/test/tools/rotate.test.js +89 -23
  231. package/test/tools/scale.test.js +529 -0
  232. package/test/tools/trim.test.js +419 -84
  233. package/test/tools/zoom.test.js +504 -0
  234. package/core/entities/alignedDimension.js +0 -279
  235. package/core/entities/angularDimension.js +0 -194
  236. package/core/entities/baseDimension.js +0 -227
  237. package/core/entities/block.js +0 -247
  238. package/core/entities/diametricDimension.js +0 -133
  239. package/core/entities/dimension.js +0 -202
  240. package/core/entities/radialDimension.js +0 -126
  241. package/core/styles/dimStyle.js +0 -719
  242. package/core/styles/dimStyleManager.js +0 -47
  243. package/core/styles/layer.js +0 -133
  244. package/core/styles/layerManager.js +0 -40
  245. package/core/styles/ltype.js +0 -86
  246. package/core/styles/ltypeManager.js +0 -50
  247. package/core/styles/style.js +0 -158
  248. package/core/styles/styleManager.js +0 -43
  249. package/core/styles/styleManagerBase.js +0 -299
  250. package/test/entities/block.test.js +0 -22
  251. package/test/styles/dimstyle.test.js +0 -19
  252. package/test/styles/layerManager.test.js +0 -150
  253. package/test/styles/style.test.js +0 -33
  254. 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
+ });