diff --git a/tests/data/test_stl/ASCII/20mmbox-CR.stl b/tests/data/test_stl/ASCII/20mmbox-CR.stl new file mode 100644 index 000000000..53c85bb28 --- /dev/null +++ b/tests/data/test_stl/ASCII/20mmbox-CR.stl @@ -0,0 +1 @@ +solid STL generated by MeshLab facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 0.000000e+00 vertex 2.000000e+01 0.000000e+00 0.000000e+00 vertex 0.000000e+00 0.000000e+00 0.000000e+00 endloop endfacet facet normal -0.000000e+00 0.000000e+00 -1.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 0.000000e+00 vertex 0.000000e+00 0.000000e+00 0.000000e+00 vertex 0.000000e+00 2.000000e+01 0.000000e+00 endloop endfacet facet normal 0.000000e+00 0.000000e+00 1.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 2.000000e+01 vertex 0.000000e+00 2.000000e+01 2.000000e+01 vertex 0.000000e+00 0.000000e+00 2.000000e+01 endloop endfacet facet normal 0.000000e+00 0.000000e+00 1.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 2.000000e+01 vertex 0.000000e+00 0.000000e+00 2.000000e+01 vertex 2.000000e+01 0.000000e+00 2.000000e+01 endloop endfacet facet normal 1.000000e+00 0.000000e+00 -0.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 0.000000e+00 vertex 2.000000e+01 2.000000e+01 2.000000e+01 vertex 2.000000e+01 0.000000e+00 2.000000e+01 endloop endfacet facet normal 1.000000e+00 0.000000e+00 0.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 0.000000e+00 vertex 2.000000e+01 0.000000e+00 2.000000e+01 vertex 2.000000e+01 0.000000e+00 0.000000e+00 endloop endfacet facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 outer loop vertex 2.000000e+01 0.000000e+00 0.000000e+00 vertex 2.000000e+01 0.000000e+00 2.000000e+01 vertex 0.000000e+00 0.000000e+00 2.000000e+01 endloop endfacet facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 outer loop vertex 2.000000e+01 0.000000e+00 0.000000e+00 vertex 0.000000e+00 0.000000e+00 2.000000e+01 vertex 0.000000e+00 0.000000e+00 0.000000e+00 endloop endfacet facet normal -1.000000e+00 0.000000e+00 0.000000e+00 outer loop vertex 0.000000e+00 0.000000e+00 0.000000e+00 vertex 0.000000e+00 0.000000e+00 2.000000e+01 vertex 0.000000e+00 2.000000e+01 2.000000e+01 endloop endfacet facet normal -1.000000e+00 0.000000e+00 0.000000e+00 outer loop vertex 0.000000e+00 0.000000e+00 0.000000e+00 vertex 0.000000e+00 2.000000e+01 2.000000e+01 vertex 0.000000e+00 2.000000e+01 0.000000e+00 endloop endfacet facet normal 0.000000e+00 1.000000e+00 0.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 2.000000e+01 vertex 2.000000e+01 2.000000e+01 0.000000e+00 vertex 0.000000e+00 2.000000e+01 0.000000e+00 endloop endfacet facet normal 0.000000e+00 1.000000e+00 0.000000e+00 outer loop vertex 2.000000e+01 2.000000e+01 2.000000e+01 vertex 0.000000e+00 2.000000e+01 0.000000e+00 vertex 0.000000e+00 2.000000e+01 2.000000e+01 endloop endfacet endsolid vcg \ No newline at end of file diff --git a/tests/data/test_stl/ASCII/20mmbox-CRLF.stl b/tests/data/test_stl/ASCII/20mmbox-CRLF.stl new file mode 100644 index 000000000..fb6e065a7 --- /dev/null +++ b/tests/data/test_stl/ASCII/20mmbox-CRLF.stl @@ -0,0 +1,86 @@ +solid STL generated by MeshLab + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal -0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 1.000000e+00 0.000000e+00 -0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + endloop + endfacet +endsolid vcg diff --git a/tests/data/test_stl/ASCII/20mmbox-LF.stl b/tests/data/test_stl/ASCII/20mmbox-LF.stl new file mode 100644 index 000000000..fb6e065a7 --- /dev/null +++ b/tests/data/test_stl/ASCII/20mmbox-LF.stl @@ -0,0 +1,86 @@ +solid STL generated by MeshLab + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal -0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 1.000000e+00 0.000000e+00 -0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 2.000000e+01 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 2.000000e+01 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 2.000000e+01 2.000000e+01 2.000000e+01 + vertex 0.000000e+00 2.000000e+01 0.000000e+00 + vertex 0.000000e+00 2.000000e+01 2.000000e+01 + endloop + endfacet +endsolid vcg diff --git a/tests/data/test_stl/Geräte/20mmbox-čřšřěá.stl b/tests/data/test_stl/Geräte/20mmbox-čřšřěá.stl new file mode 100644 index 000000000..0ffc0d890 Binary files /dev/null and b/tests/data/test_stl/Geräte/20mmbox-čřšřěá.stl differ diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index e6f04d282..2dd2b34a3 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -5,6 +5,7 @@ add_executable(${_TEST_NAME}_tests test_config.cpp test_geometry.cpp test_polygon.cpp + test_stl.cpp ) target_link_libraries(${_TEST_NAME}_tests test_common libslic3r) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 0cde0b0dc..b413cbe0b 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -5,7 +5,7 @@ using namespace Slic3r; -SCENARIO("Reading 3mf file") { +SCENARIO("Reading 3mf file", "[3mf]") { GIVEN("umlauts in the path of the file") { Slic3r::Model model; WHEN("3mf model is read") { diff --git a/tests/libslic3r/test_stl.cpp b/tests/libslic3r/test_stl.cpp new file mode 100644 index 000000000..f64f8243f --- /dev/null +++ b/tests/libslic3r/test_stl.cpp @@ -0,0 +1,49 @@ +#include + +#include "libslic3r/Model.hpp" +#include "libslic3r/Format/STL.hpp" + +using namespace Slic3r; + +static inline std::string stl_path(const char* path) +{ + return std::string(TEST_DATA_DIR) + "/test_stl/" + path; +} + +SCENARIO("Reading an STL file", "[stl]") { + GIVEN("umlauts in the path of a binary STL file, Czech characters in the file name") { + WHEN("STL file is read") { + Slic3r::Model model; + THEN("load should succeed") { + REQUIRE(Slic3r::load_stl(stl_path("Geräte/20mmbox-čřšřěá.stl").c_str(), &model)); + REQUIRE(is_approx(model.objects.front()->volumes.front()->mesh().size(), Vec3d(20, 20, 20))); + } + } + } + GIVEN("in ASCII format") { + WHEN("line endings LF") { + Slic3r::Model model; + THEN("load should succeed") { + REQUIRE(Slic3r::load_stl(stl_path("ASCII/20mmbox-LF.stl").c_str(), &model)); + REQUIRE(is_approx(model.objects.front()->volumes.front()->mesh().size(), Vec3d(20, 20, 20))); + } + } + WHEN("line endings CRLF") { + Slic3r::Model model; + THEN("load should succeed") { + REQUIRE(Slic3r::load_stl(stl_path("ASCII/20mmbox-CRLF.stl").c_str(), &model)); + REQUIRE(is_approx(model.objects.front()->volumes.front()->mesh().size(), Vec3d(20, 20, 20))); + } + } +#if 0 + // ASCII STLs ending with just carriage returns are not supported. These were used by the old Macs, while the Unix based MacOS uses LFs as any other Unix. + WHEN("line endings CR") { + Slic3r::Model model; + THEN("load should succeed") { + REQUIRE(Slic3r::load_stl(stl_path("ASCII/20mmbox-CR.stl").c_str(), &model)); + REQUIRE(is_approx(model.objects.front()->volumes.front()->mesh().size(), Vec3d(20, 20, 20))); + } + } +#endif + } +}