@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,52 @@
1
+ import { BlockManager } from '../../core/tables/blockManager.js';
2
+ import { Core } from '../../core/core/core.js';
3
+
4
+ // initialise core
5
+ new Core();
6
+
7
+ const blockManager = new BlockManager();
8
+
9
+ // mock block data
10
+ blockManager.items = [{ name: 'blockOne' }, { name: 'blockTwo' }];
11
+
12
+ test('Test blockManager.getItems', () => {
13
+ const blocks = blockManager.getItems();
14
+ expect(blocks).toHaveLength(2);
15
+
16
+ expect(blocks[0]).toHaveProperty('name', 'blockOne');
17
+ expect(blocks[1]).toHaveProperty('name', 'blockTwo');
18
+ });
19
+
20
+ test('Test blockManager.itemCount', () => {
21
+ const count = blockManager.itemCount();
22
+ expect(count).toBe(2);
23
+ });
24
+
25
+ test('Test blockManager.addItem', () => {
26
+ const count = blockManager.itemCount();
27
+ blockManager.addItem({ name: 'blockThree' });
28
+ expect(blockManager.itemCount()).toBe(count + 1);
29
+ });
30
+
31
+ test('Test blockManager.deleteblock', () => {
32
+ const count = blockManager.itemCount();
33
+
34
+ // get block index
35
+ const blockIndex = blockManager.getItemIndex('blockThree');
36
+ blockManager.deleteItem(blockIndex);
37
+ expect(blockManager.itemCount()).toBe(count - 1);
38
+ });
39
+
40
+ test('Test blockManager.getItemIndex', () => {
41
+ expect(blockManager.getItemIndex('blockOne')).toBe(0);
42
+ expect(blockManager.getItemIndex('blockTwo')).toBe(1);
43
+ });
44
+
45
+ test('Test blockManager.getItemByName', () => {
46
+ // add a new block to blocks
47
+ blockManager.items.push({ 'name': 'test' });
48
+ const block = blockManager.getItemByName('test');
49
+ expect(block.name).toBe('test');
50
+ // get a block that doesn't exist
51
+ expect(blockManager.getItemByName('Non-Existent')).toBeUndefined();
52
+ });
@@ -0,0 +1,39 @@
1
+ import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
2
+ import { BlockRecord } from '../../core/tables/blockRecord.js';
3
+
4
+ test('Test BlockRecord constructor defaults', () => {
5
+ const record = new BlockRecord();
6
+ expect(record.name).toBe('');
7
+ });
8
+
9
+ test('Test BlockRecord constructor with name property', () => {
10
+ const record = new BlockRecord({ name: '*Model_Space' });
11
+ expect(record.name).toBe('*Model_Space');
12
+ });
13
+
14
+ test('Test BlockRecord constructor with DXF group code', () => {
15
+ const record = new BlockRecord({ 2: '*Paper_Space' });
16
+ expect(record.name).toBe('*Paper_Space');
17
+ });
18
+
19
+ test('Test BlockRecord.dxf', () => {
20
+ const record = new BlockRecord({ name: '*Model_Space', handle: 'C' });
21
+ const file = new DXFFile();
22
+ record.dxf(file);
23
+
24
+ const dxfString = `0
25
+ BLOCK_RECORD
26
+ 5
27
+ C
28
+ 100
29
+ AcDbSymbolTableRecord
30
+ 100
31
+ AcDbBlockTableRecord
32
+ 2
33
+ *Model_Space
34
+ 340
35
+ 0
36
+ `;
37
+
38
+ expect(file.contents).toEqual(dxfString);
39
+ });
@@ -0,0 +1,60 @@
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 blockRecordManager = core.blockRecordManager;
6
+
7
+ test('Test BlockRecordManager.dxf', () => {
8
+ const file = new DXFFile();
9
+ blockRecordManager.dxf(file);
10
+
11
+ const dxfString = `0
12
+ TABLE
13
+ 2
14
+ BLOCK_RECORD
15
+ 5
16
+ 25
17
+ 100
18
+ AcDbSymbolTable
19
+ 70
20
+ 2
21
+ 0
22
+ BLOCK_RECORD
23
+ 5
24
+ C
25
+ 100
26
+ AcDbSymbolTableRecord
27
+ 100
28
+ AcDbBlockTableRecord
29
+ 2
30
+ *Model_Space
31
+ 340
32
+ 0
33
+ 0
34
+ BLOCK_RECORD
35
+ 5
36
+ F
37
+ 100
38
+ AcDbSymbolTableRecord
39
+ 100
40
+ AcDbBlockTableRecord
41
+ 2
42
+ *Paper_Space
43
+ 340
44
+ 0
45
+ 0
46
+ ENDTAB
47
+ `;
48
+
49
+ expect(file.contents).toEqual(dxfString);
50
+ });
51
+
52
+ test('Test BlockRecordManager.dxf block count', () => {
53
+ const file = new DXFFile();
54
+ blockRecordManager.dxf(file);
55
+
56
+ // default blocks: *Model_Space and *Paper_Space
57
+ const lines = file.contents.split('\n');
58
+ const seventyIndex = lines.indexOf('70');
59
+ expect(lines[seventyIndex + 1]).toBe('2');
60
+ });
@@ -0,0 +1,72 @@
1
+ import { DimStyle } from '../../core/tables/dimStyle';
2
+
3
+ describe('DimStyle', () => {
4
+ let style;
5
+
6
+ beforeEach(() => {
7
+ const data = {};
8
+ style = new DimStyle(data);
9
+ });
10
+
11
+ test('getValue returns correct default values', () => {
12
+ expect(style.getValue('DIMSE1')).toBe(0); // Suppress first extension line
13
+ expect(style.getValue('DIMASZ')).toBe(0.18); // Arrow size
14
+ });
15
+
16
+ test('vertical flag getter and setter', () => {
17
+ expect(style.vertical).toBe(false);
18
+ expect(style.standardFlags.getFlagValue()).toBe(0);
19
+
20
+ style.vertical = true;
21
+ expect(style.vertical).toBe(true);
22
+ expect(style.standardFlags.hasFlag(4)).toBe(true);
23
+ expect(style.standardFlags.getFlagValue()).toBe(4);
24
+
25
+ style.vertical = false;
26
+ expect(style.vertical).toBe(false);
27
+ expect(style.standardFlags.hasFlag(4)).toBe(false);
28
+ expect(style.standardFlags.getFlagValue()).toBe(0);
29
+ });
30
+
31
+ test('DimStyle text-related properties and edge cases', () => {
32
+ // Test default text style properties
33
+ expect(style.getValue('DIMTXSTY')).toBeDefined(); // Text style name
34
+ expect(typeof style.getValue('DIMTXT')).toBe('number'); // Text height
35
+ expect(typeof style.getValue('DIMGAP')).toBe('number'); // Gap between text and dimension line
36
+ expect(typeof style.getValue('DIMTAD')).toBe('number'); // Text vertical position
37
+ expect(typeof style.getValue('DIMJUST')).toBe('number'); // Text justification
38
+ expect(typeof style.getValue('DIMTIH')).toBe('number'); // Text inside horizontal
39
+ expect(typeof style.getValue('DIMTOH')).toBe('number'); // Text outside horizontal
40
+
41
+ // Set and get a custom value
42
+ style.setValue('DIMTXT', 3.14);
43
+ expect(style.getValue('DIMTXT')).toBe(3.14);
44
+
45
+ // Unknown property returns undefined or default
46
+ expect(style.getValue('DOES_NOT_EXIST')).toBeUndefined();
47
+
48
+ // Test setting and getting string property
49
+ style.setValue('DIMTXSTY', 'MyTextStyle');
50
+ expect(style.getValue('DIMTXSTY')).toBe('MyTextStyle');
51
+
52
+ // Test boolean property
53
+ style.setValue('DIMTIX', true);
54
+ expect(style.getValue('DIMTIX')).toBe(1);
55
+ style.setValue('DIMTIX', false);
56
+ expect(style.getValue('DIMTIX')).toBe(0);
57
+
58
+ // Test numeric property edge case
59
+ style.setValue('DIMTAD', 99);
60
+ expect(style.getValue('DIMTAD')).toBe(99);
61
+ });
62
+
63
+ test('setValue sets property correctly', () => {
64
+ style.setValue('DIMTXT', 42);
65
+ expect(style.DIMTXT).toBe(42);
66
+ expect(style.getValue('DIMTXT')).toBe(42);
67
+ style.setValue('customProp', 'hello');
68
+ expect(style.customProp).toBeUndefined();
69
+ });
70
+ });
71
+
72
+
@@ -0,0 +1,30 @@
1
+ import { EndBlock } from '../../core/tables/endblk.js';
2
+ import { File } from '../test-helpers/test-helpers.js';
3
+
4
+ test('Test EndBlock constructor defaults', () => {
5
+ const endblk = new EndBlock();
6
+ expect(endblk.layer).toBe('0');
7
+ });
8
+
9
+ test('Test EndBlock constructor with layer', () => {
10
+ const endblk = new EndBlock({ 8: 'TestLayer' });
11
+ expect(endblk.layer).toBe('TestLayer');
12
+ });
13
+
14
+ test('Test EndBlock.dxf', () => {
15
+ const endblk = new EndBlock({ handle: '1' });
16
+ const file = new File();
17
+ endblk.dxf(file);
18
+
19
+ const dxfString = `0
20
+ ENDBLK
21
+ 5
22
+ 1
23
+ 100
24
+ AcDbEntity
25
+ 100
26
+ AcDbBlockEnd
27
+ `;
28
+
29
+ expect(file.contents).toEqual(dxfString);
30
+ });
@@ -0,0 +1,95 @@
1
+ import { Layer } from '../../core/tables/layer';
2
+
3
+ import { File } from '../test-helpers/test-helpers.js';
4
+
5
+ test('Test Layer.frozen', () => {
6
+ const layer = new Layer();
7
+ expect(layer.frozen).toBe(false);
8
+ expect(layer.flags.getFlagValue()).toBe(0);
9
+
10
+ layer.frozen = true;
11
+ expect(layer.frozen).toBe(true);
12
+ expect(layer.flags.hasFlag(1)).toBe(true);
13
+ expect(layer.flags.getFlagValue()).toBe(1);
14
+
15
+ layer.frozen = false;
16
+ expect(layer.frozen).toBe(false);
17
+ expect(layer.flags.hasFlag(1)).toBe(false);
18
+ expect(layer.flags.getFlagValue()).toBe(0);
19
+ });
20
+
21
+ test('Test Layer.locked', () => {
22
+ const layer = new Layer();
23
+ expect(layer.locked).toBe(false);
24
+ expect(layer.flags.getFlagValue()).toBe(0);
25
+
26
+ layer.locked = true;
27
+ expect(layer.locked).toBe(true);
28
+ expect(layer.flags.hasFlag(4)).toBe(true);
29
+ expect(layer.flags.getFlagValue()).toBe(4);
30
+
31
+ layer.locked = false;
32
+ expect(layer.locked).toBe(false);
33
+ expect(layer.flags.hasFlag(4)).toBe(false);
34
+ expect(layer.flags.getFlagValue()).toBe(0);
35
+ });
36
+
37
+ test('Test Layer.isVisible', () => {
38
+ const layer = new Layer();
39
+ expect(layer.isVisible).toBe(true);
40
+
41
+ layer.frozen = true;
42
+ expect(layer.isVisible).toBe(false);
43
+
44
+ layer.frozen = false;
45
+ expect(layer.isVisible).toBe(true);
46
+ });
47
+
48
+ test('Test Layer.isSelectable', () => {
49
+ const layer = new Layer();
50
+ expect(layer.isSelectable).toBe(true);
51
+
52
+ layer.frozen = true;
53
+ expect(layer.isSelectable).toBe(false);
54
+
55
+ layer.frozen = false;
56
+ expect(layer.isSelectable).toBe(true);
57
+
58
+ layer.locked = true;
59
+ expect(layer.isSelectable).toBe(false);
60
+
61
+ layer.locked = false;
62
+ expect(layer.isSelectable).toBe(true);
63
+ });
64
+
65
+ test('Test Layer.dxf', () => {
66
+ const layer = new Layer({ handle: 'A', name: 'TestLayer' });
67
+ const file = new File();
68
+ layer.dxf(file);
69
+ // console.log(file.contents);
70
+
71
+ const dxfString = `0
72
+ LAYER
73
+ 5
74
+ A
75
+ 100
76
+ AcDbSymbolTableRecord
77
+ 100
78
+ AcDbLayerTableRecord
79
+ 2
80
+ TestLayer
81
+ 70
82
+ 0
83
+ 62
84
+ 7
85
+ 6
86
+ CONTINUOUS
87
+ 290
88
+ 1
89
+ 390
90
+ 0
91
+ `;
92
+
93
+ expect(file.contents).toEqual(dxfString);
94
+ });
95
+
@@ -0,0 +1,172 @@
1
+ import { Core } from '../../core/core/core.js';
2
+ import { Point } from '../../core/entities/point.js';
3
+
4
+ const core = new Core();
5
+ const layerManager = core.layerManager;
6
+
7
+ test('Test LayerManager.getItems', () => {
8
+ const layers = layerManager.getItems();
9
+ expect(layers).toHaveLength(2);
10
+
11
+ expect(layers[0]).toHaveProperty('name', '0');
12
+ expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
13
+ });
14
+
15
+ test('Test LayerManager.itemCount', () => {
16
+ const count = layerManager.itemCount();
17
+ expect(count).toBe(2);
18
+ });
19
+
20
+ test('Test LayerManager.newItem', () => {
21
+ const count = layerManager.itemCount();
22
+ layerManager.newItem();
23
+ expect(layerManager.itemCount()).toBe(count + 1);
24
+ });
25
+
26
+ test('Test LayerManager.getUniqueName', () => {
27
+ // existing defpoints layer
28
+ let name = layerManager.getUniqueName('DEFPOINTS');
29
+ expect(name).toBe('DEFPOINTS_1');
30
+ // existing NEW_LAYER layer
31
+ name = layerManager.getUniqueName('NEW_LAYER');
32
+ expect(name).toBe('NEW_LAYER_1');
33
+ // unique layer
34
+ name = layerManager.getUniqueName('UNIQUE_LAYER');
35
+ expect(name).toBe('UNIQUE_LAYER');
36
+ });
37
+
38
+ test('Test LayerManager.addItem', () => {
39
+ const count = layerManager.itemCount();
40
+ layerManager.addItem({ 'name': 'test', 'colour': '#00BFFF' });
41
+ expect(layerManager.itemCount()).toBe(count + 1);
42
+ });
43
+
44
+ test('Test LayerManager.deleteStyle', () => {
45
+ const count = layerManager.itemCount();
46
+ // defpoints can't be deleted
47
+ layerManager.deleteStyle('DEFPOINTS');
48
+ expect(layerManager.itemCount()).toBe(count);
49
+
50
+ // clayer can't be deleted
51
+ layerManager.deleteStyle(layerManager.getCstyle());
52
+ expect(layerManager.itemCount()).toBe(count);
53
+
54
+ // test should be deleted
55
+ layerManager.deleteStyle(layerManager.getItemIndex('test'));
56
+ expect(layerManager.itemCount()).toBe(count - 1);
57
+ });
58
+
59
+ test('Test LayerManager.deleteStyle', () => {
60
+ const count = layerManager.itemCount();
61
+ layerManager.deleteStyle(2);
62
+ expect(layerManager.itemCount()).toBe(count - 1);
63
+ });
64
+
65
+ test('Test LayerManager.getCstyle', () => {
66
+ const clayer = layerManager.getCstyle();
67
+ expect(clayer).toBe('0');
68
+ });
69
+
70
+ test('Test LayerManager.setCstyle', () => {
71
+ const layer = layerManager.getItems().at(-1).name;
72
+ layerManager.setCstyle(layer);
73
+ expect(layerManager.getCstyle()).toBe(layer);
74
+ });
75
+
76
+ test('Test LayerManager.itemExists', () => {
77
+ expect(layerManager.itemExists('DEFPOINTS')).toBe(true);
78
+ expect(layerManager.itemExists('OBSCURE_LAYER_NAME')).toBe(false);
79
+ });
80
+
81
+ test('Test LayerManager.checkStyles', () => {
82
+ layerManager.layers = [];
83
+
84
+ const newItemName = 'checkStyles';
85
+ const startPoint = new Point();
86
+ const endPoint = new Point(10, 10);
87
+
88
+ const data = {
89
+ points: [startPoint, endPoint],
90
+ colour: '#FFFFFF',
91
+ layer: newItemName,
92
+ };
93
+
94
+ core.scene.addItem('Line', data);
95
+
96
+ layerManager.checkStyles();
97
+ const layers = layerManager.getItems();
98
+ expect(layers).toHaveLength(3);
99
+
100
+ expect(layers[0]).toHaveProperty('name', '0');
101
+ expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
102
+ expect(layers[2]).toHaveProperty('name', newItemName);
103
+ });
104
+
105
+ test('Test LayerManager.checkItems', () => {
106
+ layerManager.layers = [];
107
+
108
+ const newItemName = 'checkStyles';
109
+ const startPoint = new Point();
110
+ const endPoint = new Point(10, 10);
111
+
112
+ const data = {
113
+ points: [startPoint, endPoint],
114
+ colour: '#FFFFFF',
115
+ layer: newItemName,
116
+ };
117
+
118
+ core.scene.addItem('Line', data);
119
+
120
+ layerManager.checkItems();
121
+ const layers = layerManager.getItems();
122
+ expect(layers).toHaveLength(3);
123
+
124
+ expect(layers[0]).toHaveProperty('name', '0');
125
+ expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
126
+ expect(layers[2]).toHaveProperty('name', newItemName);
127
+ });
128
+
129
+ test('Test LayerManager.addStandardItems', () => {
130
+ layerManager.clearItems();
131
+
132
+ layerManager.addStandardItems();
133
+
134
+ const layers = layerManager.getItems();
135
+ expect(layers).toHaveLength(2);
136
+
137
+ expect(layers[0]).toHaveProperty('name', '0');
138
+ expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
139
+ });
140
+
141
+ test('Test LayerManager.getItemIndex', () => {
142
+ layerManager.addItem({ 'name': 'addItem', 'colour': '#00BFFF' });
143
+ // get index for test layer - should be the last layer
144
+ expect(layerManager.getItemIndex('addItem')).toBe(layerManager.itemCount() - 1);
145
+ // get index for a layer that doesn't exist
146
+ expect(layerManager.getItemIndex('no-exist')).toBe(-1);
147
+ });
148
+
149
+ test('Test LayerManager.getItemByName', () => {
150
+ layerManager.addItem({ 'name': 'test' });
151
+ const layer = layerManager.getItemByName('test');
152
+ expect(layer.name).toBe('test');
153
+ // get a layer that doesn't exist
154
+ expect(layerManager.getItemByName('Non-Existent')).toBeUndefined();
155
+ });
156
+
157
+ test('Test LayerManager.getItemByIndex', () => {
158
+ const testLayer = layerManager.getItemByName('test');
159
+ const layer = layerManager.getItemByIndex(layerManager.getItemIndex('test'));
160
+ expect(testLayer === layer).toBe(true);
161
+ // get a layer that doesn't exist
162
+ expect(layerManager.getItemByIndex(1000)).toBeUndefined();
163
+ });
164
+
165
+ test('Test LayerManager.renameStyle', () => {
166
+ const index = layerManager.getItemIndex('test');
167
+ const newItemname = 'RENAMED_TEST';
168
+ layerManager.renameStyle(index, newItemname);
169
+
170
+ expect(layerManager.getItemIndex(newItemname)).toBe(index);
171
+ expect(layerManager.getItemIndex('test')).toBe(-1);
172
+ });
@@ -1,11 +1,11 @@
1
- import {DXFFile} from '../../core/lib/dxf/dxfFile.js';
2
- import {LType} from '../../core/styles/ltype.js';
1
+ import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
2
+ import { LType } from '../../core/tables/ltype.js';
3
3
 
4
4
  const file = new DXFFile();
5
5
  const R12File = new DXFFile('R12');
6
6
 
7
- const continuousLType = new LType({'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________'});
8
- const dashedLType = new LType({'name': 'DASHED', 'pattern': [12.7, -6.35], 'description': 'Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _'});
7
+ const continuousLType = new LType({ 'handle': 'A', 'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________' });
8
+ const dashedLType = new LType({ 'handle': 'A', 'name': 'DASHED', 'pattern': [12.7, -6.35], 'description': 'Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _' });
9
9
 
10
10
 
11
11
  const continuousDxf = `0
@@ -119,9 +119,9 @@ test('Test LType.dxf', () => {
119
119
  });
120
120
 
121
121
  test('Test LType.getPattern', () => {
122
- const patternOneLType = new LType({'name': 'Pattern One', 'pattern': [10, 10]});
123
- const patternTwoLType = new LType({'name': 'Pattern Two', 'pattern': [10, -10]});
124
- const patternThreeLType = new LType({'name': 'Pattern Three', 'pattern': [10, 0, -1]});
122
+ const patternOneLType = new LType({ 'name': 'Pattern One', 'pattern': [10, 10] });
123
+ const patternTwoLType = new LType({ 'name': 'Pattern Two', 'pattern': [10, -10] });
124
+ const patternThreeLType = new LType({ 'name': 'Pattern Three', 'pattern': [10, 0, -1] });
125
125
  // Scale 1
126
126
  expect(patternOneLType.getPattern(1)).toEqual([11, 11]);
127
127
  expect(patternTwoLType.getPattern(1)).toEqual([11, 11]);
@@ -1,9 +1,9 @@
1
- import {Core} from '../../core/core/core.js';
1
+ import { Core } from '../../core/core/core.js';
2
2
 
3
3
  const core = new Core();
4
4
  const lineTypeManager = core.ltypeManager;
5
5
 
6
- test('Test LineTypeManager.getStyles', () => {
6
+ test('Test LineTypeManager.getItems', () => {
7
7
  const layers = lineTypeManager.getOptionalStyles();
8
8
  expect(layers).toHaveLength(6);
9
9
 
@@ -0,0 +1,44 @@
1
+ import { Style } from '../../core/tables/style';
2
+
3
+ test('Test Style.vertical', () => {
4
+ const style = new Style();
5
+ expect(style.vertical).toBe(false);
6
+ expect(style.standardFlags.getFlagValue()).toBe(0);
7
+
8
+ style.vertical = true;
9
+ expect(style.vertical).toBe(true);
10
+ expect(style.standardFlags.hasFlag(4)).toBe(true);
11
+ expect(style.standardFlags.getFlagValue()).toBe(4);
12
+ });
13
+
14
+
15
+ test('Test Style.backwards', () => {
16
+ const style = new Style();
17
+ expect(style.backwards).toBe(false);
18
+ expect(style.flags.getFlagValue()).toBe(0);
19
+
20
+ style.backwards = true;
21
+ expect(style.backwards).toBe(true);
22
+ expect(style.flags.hasFlag(2)).toBe(true);
23
+ expect(style.flags.getFlagValue()).toBe(2);
24
+
25
+ style.backwards = false;
26
+ expect(style.backwards).toBe(false);
27
+ expect(style.flags.hasFlag(2)).toBe(false);
28
+ });
29
+
30
+ test('Test Style.upsideDown', () => {
31
+ const style = new Style();
32
+ expect(style.upsideDown).toBe(false);
33
+ expect(style.flags.getFlagValue()).toBe(0);
34
+
35
+ style.upsideDown = true;
36
+ expect(style.upsideDown).toBe(true);
37
+ expect(style.flags.hasFlag(4)).toBe(true);
38
+ expect(style.flags.getFlagValue()).toBe(4);
39
+
40
+ style.upsideDown = false;
41
+ expect(style.upsideDown).toBe(false);
42
+ expect(style.flags.hasFlag(4)).toBe(false);
43
+ });
44
+