diff options
| author | Lex Neva <lexelby@users.noreply.github.com> | 2025-01-29 12:04:07 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-29 12:04:07 -0500 |
| commit | 913c2700d1486284dba0583ae1b280b1aa237570 (patch) | |
| tree | c165b29d0794981b5e44ab46f9838baab16b06a4 /tests | |
| parent | efe3b27f17686094f74462bd81763a8197b54c6e (diff) | |
Sew Stack first steps (#3133)
* handle more recursive cases
* scaffolding for stitch layers
* scaffolding for SewStack
* always use DotDict when parsing json params
* add DefaultDotDict + DotDict fixes
* first working SewStack (no UI yet)
* ignore inkstitch_debug.log and .svg
* refactor
* early WIP: property grid display temporarily in stitch plan preview
* start of sew stack editor extension
* add layer properties panel and splitter
* spacing and better icon
* handle checkbox
* add layer action buttons
* show selected property help text in an HtmlWindow
* rename
* rephrase help text for tolerance
* refactor into separate file
* simplify structure
* better property type handling
* add randomization button
* add random seed re-roll button
* simulator preview
* update preview in a few more cases
* always DotDict
* avoid ridiculously slow simulations
* preview selected layer or all layers
* edit multiple objects and save only modified properties into the SVG
* better preview handling
* add reverse and jitter
* add stitch path jitter
* fix types
* fix random shuffle button
* fixes
* fix repeats
* type hinting to please pycharm
* show layer description
* avoid exception in properties with multiple values
* fix typing
* fix new layer
* draw a box around property grid and help box
* confirm before closing
* rename properties and fix seed
* fix close/cancel logic
* add buttons to undo changes and reset to default value
* set not modified if default is original setting
* fix invisible icon
* more space for properties
* fix random properties
* better regulation of simulator rendering speed
* Fixed timer being passed a float
* fix get_json_param() default handling
* fix tests
* add checkbox for sew stack only
* fix property help
* adjustable stitch layer editor help box size, with persistence
* repeat exact stitches
* "fix" style
* adjust for new next_element stuff
---------
Co-authored-by: CapellanCitizen <thecapellancitizen@gmail.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_clone.py | 54 | ||||
| -rw-r--r-- | tests/test_elements_utils.py | 4 |
2 files changed, 30 insertions, 28 deletions
diff --git a/tests/test_clone.py b/tests/test_clone.py index 99d2bc61..23dafd57 100644 --- a/tests/test_clone.py +++ b/tests/test_clone.py @@ -76,7 +76,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertAlmostEqual(element_fill_angle(elements[0]), 30) def test_hidden_cloned_elements_not_embroidered(self): @@ -107,7 +107,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertEqual(elements[0].node.get(INKSCAPE_LABEL), "NotHidden") def test_angle_rotated(self): @@ -123,7 +123,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), 10) def test_angle_flipped(self): @@ -139,7 +139,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -30) def test_angle_flipped_rotated(self): @@ -155,7 +155,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Fill angle goes from 30 -> -30 after flip -> -50 after rotate self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -50) @@ -175,7 +175,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Slope of the stitching goes from tan(30deg) = 1/sqrt(3) to -sqrt(3)/sqrt(3) = tan(-45deg), # then rotated another -10 degrees to -55 self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -55) @@ -200,7 +200,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from 30 -> 40 (g1 -> g2) -> 29 (use) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), 29) @@ -218,7 +218,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 2) # One for the stroke, one for the fill + self.assertEqual(len(elements), 3) # One for the stroke, one for the fill, one for the SewStack self.assertEqual(elements[0].node, elements[1].node) # Angle goes from 0 -> -30 self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -30) @@ -237,7 +237,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) # One for the stroke, one for the fill + self.assertEqual(len(elements), 2) # One for the stroke, one for the fill, one for the SewStack self.assertIsNone(elements[0].get_param("angle", None)) # Angle as not set, as this isn't a fill def test_style_inherits(self): @@ -253,7 +253,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) style = elements[0].node.cascaded_style() # Source style takes precedence over any attributes specified in the clone self.assertEqual(style["stroke"], "skyblue") @@ -276,7 +276,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertTransformEqual( elements[0].node.composed_transform(), Transform().add_translate((5, 10)).add_scale(2, 2)) @@ -297,7 +297,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertTransformEqual( elements[0].node.composed_transform(), Transform().add_translate((5, 10)) # use @@ -325,7 +325,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 2) + self.assertEqual(len(elements), 4) # FillStitch, SewStack, FillStitch, SewStack self.assertTransformEqual( elements[0].node.composed_transform(), Transform().add_translate((1, 2)).add_scale(0.5, 1) # g2 @@ -334,7 +334,7 @@ class CloneElementTest(TestCase): .add_scale(2, 2), # rect 5) self.assertTransformEqual( - elements[1].node.composed_transform(), + elements[2].node.composed_transform(), Transform().add_translate((1, 2)).add_scale(0.5, 1) # g2 .add_translate((5, 10)) # use .add_translate((0, 5)).add_rotate(5), # g1 @@ -370,7 +370,7 @@ class CloneElementTest(TestCase): self.assertEqual(clone.clone_fill_angle, 42) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), 42) def test_angle_manually_flipped(self): @@ -388,7 +388,7 @@ class CloneElementTest(TestCase): clone = Clone(use) self.assertTrue(clone.flip_angle) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -10) # Recursive use tests @@ -414,15 +414,17 @@ class CloneElementTest(TestCase): with clone.clone_elements() as elements: # There should be two elements cloned from u3, two rects, one corresponding to rect and one corresponding to u1. # Their transforms should derive from the elements they href. - self.assertEqual(len(elements), 2) + self.assertEqual(len(elements), 4) + self.assertEqual(type(elements[0]), FillStitch) self.assertEqual(elements[0].node.tag, SVG_RECT_TAG) self.assertTransformEqual(elements[0].node.composed_transform(), Transform().add_translate((0, 30)) # u3 .add_translate(0, 20).add_scale(0.5, 0.5) # u2 ) - self.assertEqual(elements[1].node.tag, SVG_RECT_TAG) - self.assertTransformEqual(elements[1].node.composed_transform(), + self.assertEqual(type(elements[2]), FillStitch) + self.assertEqual(elements[2].node.tag, SVG_RECT_TAG) + self.assertTransformEqual(elements[2].node.composed_transform(), Transform().add_translate((0, 30)) # u3 .add_translate((0, 20)).add_scale(0.5, 0.5) # u2 .add_translate((20, 0)) # u1 @@ -441,7 +443,7 @@ class CloneElementTest(TestCase): clone = Clone(u1) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from 30 -> -30 self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -30) @@ -452,7 +454,7 @@ class CloneElementTest(TestCase): clone = Clone(u2) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from -30 -> -20 (u1 -> g) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -20) @@ -462,7 +464,7 @@ class CloneElementTest(TestCase): clone = Clone(u3) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from -20 -> -27 self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -27) @@ -473,7 +475,7 @@ class CloneElementTest(TestCase): clone = Clone(u4) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from -30 -> -37 self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -37) @@ -499,7 +501,7 @@ class CloneElementTest(TestCase): clone = Clone(u3) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) # Angle goes from 0 (g -> u2) -> -7 (u3) self.assertAngleAlmostEqual(element_fill_angle(elements[0]), -7) @@ -524,7 +526,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) cmd_orig = original.get_command("ending_point") cmd_clone = elements[0].get_command("ending_point") self.assertIsNotNone(cmd_clone) @@ -551,7 +553,7 @@ class CloneElementTest(TestCase): clone = Clone(use) with clone.clone_elements() as elements: - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) cmd_orig = original.get_command("ending_point") cmd_clone = elements[0].get_command("ending_point") self.assertIsNotNone(cmd_clone) diff --git a/tests/test_elements_utils.py b/tests/test_elements_utils.py index 651635be..bdb78003 100644 --- a/tests/test_elements_utils.py +++ b/tests/test_elements_utils.py @@ -28,7 +28,7 @@ class ElementsUtilsTest(TestCase): })) elements = utils.nodes_to_elements(utils.iterate_nodes(g)) - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertEqual(type(elements[0]), FillStitch) self.assertEqual(elements[0].node, rect) @@ -41,7 +41,7 @@ class ElementsUtilsTest(TestCase): })) elements = utils.nodes_to_elements(utils.iterate_nodes(rect)) - self.assertEqual(len(elements), 1) + self.assertEqual(len(elements), 2) self.assertEqual(type(elements[0]), FillStitch) self.assertEqual(elements[0].node, rect) |
