Skip to content

Commit 63b52ed

Browse files
Copilotjgphilpott
andcommitted
fix case-insensitive input for setSpeedUnit, setPositioningMode, setExtruderMode; add catch-all test
Co-authored-by: jgphilpott <4128208+jgphilpott@users.noreply.github.com>
1 parent fede9b6 commit 63b52ed

File tree

2 files changed

+104
-2
lines changed

2 files changed

+104
-2
lines changed

src/utils/accessors.coffee

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,19 @@ module.exports =
370370

371371
setSpeedUnit: (slicer, unit = "millimeterSecond") ->
372372

373-
if ["millimeterSecond", "inchSecond", "meterSecond"].includes unit
373+
normalized = unit.toLowerCase().trim()
374374

375-
slicer.speedUnit = String unit
375+
if normalized is "millimetersecond"
376+
377+
slicer.speedUnit = "millimeterSecond"
378+
379+
else if normalized is "inchsecond"
380+
381+
slicer.speedUnit = "inchSecond"
382+
383+
else if normalized is "metersecond"
384+
385+
slicer.speedUnit = "meterSecond"
376386

377387
return slicer
378388

@@ -908,6 +918,8 @@ module.exports =
908918

909919
setPositioningMode: (slicer, mode = "absolute") ->
910920

921+
mode = mode.toLowerCase().trim()
922+
911923
if ["absolute", "relative"].includes mode
912924

913925
slicer.positioningMode = String mode
@@ -916,6 +928,8 @@ module.exports =
916928

917929
setExtruderMode: (slicer, mode = "absolute") ->
918930

931+
mode = mode.toLowerCase().trim()
932+
919933
if ["absolute", "relative"].includes mode
920934

921935
slicer.extruderMode = String mode

src/utils/accessors.test.coffee

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,30 @@ describe 'Accessors (Getters and Setters)', ->
5555
slicer.setAngleUnit('invalid')
5656
expect(slicer.getAngleUnit()).toBe('degree') # unchanged.
5757

58+
test 'should set and get speed unit', ->
59+
60+
expect(slicer.getSpeedUnit()).toBe('millimeterSecond')
61+
62+
slicer.setSpeedUnit('inchSecond')
63+
expect(slicer.getSpeedUnit()).toBe('inchSecond')
64+
65+
slicer.setSpeedUnit('meterSecond')
66+
expect(slicer.getSpeedUnit()).toBe('meterSecond')
67+
68+
slicer.setSpeedUnit('millimeterSecond')
69+
expect(slicer.getSpeedUnit()).toBe('millimeterSecond')
70+
71+
# Should ignore invalid values.
72+
slicer.setSpeedUnit('invalid')
73+
expect(slicer.getSpeedUnit()).toBe('millimeterSecond') # unchanged.
74+
75+
# Should accept any capitalization and store canonical camelCase form.
76+
slicer.setSpeedUnit('MILLIMETERSECOND')
77+
expect(slicer.getSpeedUnit()).toBe('millimeterSecond')
78+
79+
slicer.setSpeedUnit('InchSecond')
80+
expect(slicer.getSpeedUnit()).toBe('inchSecond')
81+
5882
describe 'Temperature Accessors', ->
5983

6084
test 'should set and get temperatures', ->
@@ -774,6 +798,13 @@ describe 'Accessors (Getters and Setters)', ->
774798
slicer.setPositioningMode('invalid')
775799
expect(slicer.getPositioningMode()).toBe('absolute') # unchanged.
776800

801+
# Should accept any capitalization.
802+
slicer.setPositioningMode('Relative')
803+
expect(slicer.getPositioningMode()).toBe('relative')
804+
805+
slicer.setPositioningMode('ABSOLUTE')
806+
expect(slicer.getPositioningMode()).toBe('absolute')
807+
777808
test 'should set and get extruder mode', ->
778809

779810
expect(slicer.getExtruderMode()).toBe('absolute') # default.
@@ -787,6 +818,63 @@ describe 'Accessors (Getters and Setters)', ->
787818
slicer.setExtruderMode('invalid')
788819
expect(slicer.getExtruderMode()).toBe('absolute') # unchanged.
789820

821+
# Should accept any capitalization.
822+
slicer.setExtruderMode('Relative')
823+
expect(slicer.getExtruderMode()).toBe('relative')
824+
825+
slicer.setExtruderMode('ABSOLUTE')
826+
expect(slicer.getExtruderMode()).toBe('absolute')
827+
828+
test 'should accept case-insensitive input for all string setters', ->
829+
830+
# Each string setter must accept any capitalization and store the canonical form.
831+
# This prevents silent failures caused by toLowerCase() vs camelCase mismatch.
832+
833+
slicer.setWorkspacePlane('xy')
834+
expect(slicer.getWorkspacePlane()).toBe('XY')
835+
836+
slicer.setTimeUnit('SECONDS')
837+
expect(slicer.getTimeUnit()).toBe('seconds')
838+
839+
slicer.setLengthUnit('INCHES')
840+
expect(slicer.getLengthUnit()).toBe('inches')
841+
842+
slicer.setSpeedUnit('MILLIMETERSECOND')
843+
expect(slicer.getSpeedUnit()).toBe('millimeterSecond')
844+
845+
slicer.setTemperatureUnit('FAHRENHEIT')
846+
expect(slicer.getTemperatureUnit()).toBe('fahrenheit')
847+
848+
slicer.setAngleUnit('RADIAN')
849+
expect(slicer.getAngleUnit()).toBe('radian')
850+
851+
slicer.setInfillPattern('GRID')
852+
expect(slicer.getInfillPattern()).toBe('grid')
853+
854+
slicer.setInfillPatternCentering('GLOBAL')
855+
expect(slicer.getInfillPatternCentering()).toBe('global')
856+
857+
slicer.setSupportType('NORMAL')
858+
expect(slicer.getSupportType()).toBe('normal')
859+
860+
slicer.setSupportPlacement('EVERYWHERE')
861+
expect(slicer.getSupportPlacement()).toBe('everywhere')
862+
863+
slicer.setSupportPlacement('BUILDPLATE')
864+
expect(slicer.getSupportPlacement()).toBe('buildPlate')
865+
866+
slicer.setAdhesionType('BRIM')
867+
expect(slicer.getAdhesionType()).toBe('brim')
868+
869+
slicer.setSkirtType('CIRCULAR')
870+
expect(slicer.getSkirtType()).toBe('circular')
871+
872+
slicer.setPositioningMode('RELATIVE')
873+
expect(slicer.getPositioningMode()).toBe('relative')
874+
875+
slicer.setExtruderMode('RELATIVE')
876+
expect(slicer.getExtruderMode()).toBe('relative')
877+
790878
describe 'Configuration Object Accessors', ->
791879

792880
Printer = require('../config/printer/printer')

0 commit comments

Comments
 (0)