add tests and swap to github actions

master
Sameer Puri 5 years ago
parent a2aa138f6e
commit 883e07a720

@ -0,0 +1,33 @@
name: svg2gcode
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Build
run: cargo build
- name: Run cargo-tarpaulin
uses: actions-rs/tarpaulin@v0.1
with:
version: '0.14.2'
args: '-- --nocapture --test-threads 1'
- name: Upload to codecov.io
uses: codecov/codecov-action@v1
with:
token: ${{secrets.CODECOV_TOKEN}}
- name: Archive code coverage results
uses: actions/upload-artifact@v1
with:
name: code-coverage-report
path: cobertura.xml

@ -26,6 +26,16 @@ pub struct ProgramOptions {
pub dpi: f64, pub dpi: f64,
} }
impl Default for ProgramOptions {
fn default() -> Self {
Self {
tolerance: 0.002,
feedrate: 300.0,
dpi: 96.0,
}
}
}
pub fn svg2program(doc: &Document, options: ProgramOptions, mach: Machine) -> Vec<Command> { pub fn svg2program(doc: &Document, options: ProgramOptions, mach: Machine) -> Vec<Command> {
let mut turtle = Turtle::new(mach); let mut turtle = Turtle::new(mach);

@ -23,7 +23,7 @@ pub enum Distance {
/// Generic machine state simulation, assuming nothing is known about the machine when initialized. /// Generic machine state simulation, assuming nothing is known about the machine when initialized.
/// This is used to reduce output GCode verbosity and run repetitive actions. /// This is used to reduce output GCode verbosity and run repetitive actions.
#[derive(Debug)] #[derive(Debug, Default)]
pub struct Machine { pub struct Machine {
tool_state: Option<Tool>, tool_state: Option<Tool>,
distance_mode: Option<Distance>, distance_mode: Option<Distance>,

@ -21,6 +21,9 @@ mod postprocess;
/// This concept is referred to as [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics). /// This concept is referred to as [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics).
mod turtle; mod turtle;
use converter::ProgramOptions;
use machine::Machine;
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
if env::var("RUST_LOG").is_err() { if env::var("RUST_LOG").is_err() {
env::set_var("RUST_LOG", "svg2gcode=info") env::set_var("RUST_LOG", "svg2gcode=info")
@ -112,3 +115,24 @@ fn main() -> io::Result<()> {
gcode::program2gcode(program, std::io::stdout()) gcode::program2gcode(program, std::io::stdout())
} }
} }
#[cfg(test)]
mod test {
use super::*;
#[test]
fn square_produces_expected_gcode() {
let shapes = include_str!("../tests/square.svg");
let options = ProgramOptions::default();
let machine = Machine::default();
let document = roxmltree::Document::parse(&shapes).unwrap();
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")
)
}
}

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="square.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 10 10"
height="10mm"
width="10mm">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="2109"
inkscape:window-width="3836"
units="mm"
showgrid="true"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="35.055997"
inkscape:cx="21.930942"
inkscape:zoom="22.4"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base">
<inkscape:grid
spacingy="1"
spacingx="1"
units="mm"
id="grid836"
type="xygrid" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
id="path838"
d="M 1,1 H 9 V 9 H 1 Z"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Loading…
Cancel
Save