diff --git a/src/main.rs b/src/main.rs index ffc6906..f312f38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,20 +62,26 @@ fn main() -> io::Result<()> { } }; - let options = converter::ProgramOptions { - tolerance: matches - .value_of("tolerance") - .map(|x| x.parse().expect("could not parse tolerance")) - .unwrap_or(0.002), - feedrate: matches - .value_of("feedrate") - .map(|x| x.parse().expect("could not parse feedrate")) - .unwrap_or(300.0), - dpi: matches - .value_of("dpi") - .map(|x| x.parse().expect("could not parse DPI")) - .unwrap_or(96.0), - }; + let mut options = ProgramOptions::default(); + + if let Some(tolerance) = matches + .value_of("tolerance") + .map(|tolerance| tolerance.parse().expect("could not parse tolerance")) + { + options.tolerance = tolerance; + } + if let Some(feedrate) = matches + .value_of("feedrate") + .map(|feedrate| feedrate.parse().expect("could not parse tolerance")) + { + options.feedrate = feedrate; + } + if let Some(dpi) = matches + .value_of("dpi") + .map(|dpi| dpi.parse().expect("could not parse tolerance")) + { + options.dpi = dpi; + } let machine = machine::Machine::new( matches @@ -120,19 +126,32 @@ fn main() -> io::Result<()> { mod test { use super::*; - #[test] - fn square_produces_expected_gcode() { - let shapes = include_str!("../tests/square.svg"); + fn get_actual(input: &str) -> String { let options = ProgramOptions::default(); let machine = Machine::default(); - let document = roxmltree::Document::parse(&shapes).unwrap(); + let document = roxmltree::Document::parse(input).unwrap(); + + let mut program = converter::svg2program(&document, options, machine); + postprocess::set_origin(&mut program, lyon_geom::math::point(0., 0.)); - let program = converter::svg2program(&document, options, machine); let mut actual = vec![]; assert!(gcode::program2gcode(program, &mut actual).is_ok()); - assert_eq!( - String::from_utf8(actual).unwrap(), - include_str!("../tests/square.gcode") - ) + String::from_utf8(actual).unwrap() + } + + #[test] + fn square_produces_expected_gcode() { + let square = include_str!("../tests/square.svg"); + let actual = get_actual(square); + + assert_eq!(actual, include_str!("../tests/square.gcode")) + } + + #[test] + fn square_transformed_produces_expected_gcode() { + let square_transformed = include_str!("../tests/square_transformed.svg"); + let actual = get_actual(square_transformed); + + assert_eq!(actual, include_str!("../tests/square_transformed.gcode")) } } diff --git a/tests/square_transformed.gcode b/tests/square_transformed.gcode new file mode 100644 index 0000000..94f0e72 --- /dev/null +++ b/tests/square_transformed.gcode @@ -0,0 +1,12 @@ +G21 +G94 +G90 +G0 X0 Y19 +;svg#svg8 > g#layer1 > path#path838 +G0 X9 Y8 +G1 X9 Y0 F300 +G1 X1 Y0 F300 +G1 X0.9999999999999982 Y8 F300 +G1 X9 Y8 F300 +G0 X0 Y19 +M20 diff --git a/tests/square_transformed.svg b/tests/square_transformed.svg new file mode 100644 index 0000000..02f19c7 --- /dev/null +++ b/tests/square_transformed.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + +