diff options
Diffstat (limited to 'app/bin/unittest')
| -rw-r--r-- | app/bin/unittest/CMakeLists.txt | 12 | ||||
| -rw-r--r-- | app/bin/unittest/dxfformattest.c | 144 | 
2 files changed, 156 insertions, 0 deletions
| diff --git a/app/bin/unittest/CMakeLists.txt b/app/bin/unittest/CMakeLists.txt new file mode 100644 index 0000000..b6d2bc5 --- /dev/null +++ b/app/bin/unittest/CMakeLists.txt @@ -0,0 +1,12 @@ +# build unit tests for the xtrkcad library + +add_executable(dxfformattest  +				dxfformattest.c +				../dxfformat.c +			  ) +			   +target_link_libraries(dxfformattest +                      dynstring +					 ${LIBS}) + +add_test(DXFOutputTest dxfformattest)
\ No newline at end of file diff --git a/app/bin/unittest/dxfformattest.c b/app/bin/unittest/dxfformattest.c new file mode 100644 index 0000000..b797ad9 --- /dev/null +++ b/app/bin/unittest/dxfformattest.c @@ -0,0 +1,144 @@ +/** \file DynStringTest.c +* Unit tests for the dxfformat module +*/ + +#include <stdarg.h> +#include <stddef.h> +#include <string.h> +#include <stdio.h> +#include <setjmp.h> +#include <cmocka.h> + +#include <dynstring.h> +#include <dxfformat.h> + +char *sProdNameUpper = "XTRKCAD"; +long units; + +static void BasicFormatting(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	DxfLayerName(&string, sProdNameUpper, 0); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "8\nXTRKCAD0\n"); + +	DxfLayerName(&string, sProdNameUpper, 99); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "8\nXTRKCAD99\n"); + +	DxfFormatPosition(&string, 20, 1); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "20\n1.000000\n"); + +	DxfFormatPosition(&string, 20, 1.23456789); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "20\n1.234568\n"); + +	DxfFormatPosition(&string, 20, 1.23456712); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "20\n1.234567\n"); +} + +static void LineCommand(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	DxfLineCommand( &string, 0, 1.0, 2.0, 1.1, 2.2, 1); +	assert_string_equal(DynStringToCStr(&string), +		DXF_INDENT "0\nLINE\n  8\nXTRKCAD0\n  10\n1.000000\n  20\n2.000000\n  11\n1.100000\n  21\n2.200000\n  6\nDASHED\n"); + +	DynStringFree(&string); +} + + +static void CircleCommand(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	DxfCircleCommand(&string, 0, 1.0, 2.0, 1.1, 1); +	assert_string_equal(DynStringToCStr(&string), +		DXF_INDENT "0\nCIRCLE\n  10\n1.000000\n  20\n2.000000\n  40\n1.100000\n  8\nXTRKCAD0\n  6\nDASHED\n"); + +	DynStringFree(&string); +} + + +static void ArcCommand(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	DxfArcCommand(&string, 0, 1.0, 2.0, 1.1, 10.0, 180.0, 1); +	assert_string_equal(DynStringToCStr(&string), +		DXF_INDENT "0\nARC\n  10\n1.000000\n  20\n2.000000\n  40\n1.100000\n  50\n10.000000\n  51\n190.000000\n  8\nXTRKCAD0\n  6\nDASHED\n"); + +	DynStringFree(&string); +} + +#define TESTSTRING  "This is a dxf test string" + +static void TextCommand(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	DxfTextCommand(&string, 0, 10.0, 12.0, 144.0, TESTSTRING); + +	assert_string_equal(DynStringToCStr(&string), +		DXF_INDENT "0\nTEXT\n  1\n" TESTSTRING "\n  10\n10.000000\n  20\n12.000000\n  40\n2.000000\n  8\nXTRKCAD0\n"); + +	DynStringFree(&string); +} + +static void Units(void **state) +{ +	DynString string; +	(void)state; + +	DynStringMalloc(&string, 0); + +	/* test English units */ +	units = 0; +	DxfUnits(&string); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "9\n$MEASUREMENT\n  70\n0\n" DXF_INDENT "9\n$INSUNITS\n  70\n1\n"); +	DxfFormatPosition(&string, 20, 1.23456789); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "20\n1.234568\n"); +	 +	DynStringClear(&string); +	DxfDimensionSize(&string, DXF_DIMTEXTSIZE); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "9\n$DIMTXT\n  40\n1.0\n"); + +	/* test metric units */ +	units = 1; +	DynStringClear(&string); +	DxfUnits(&string); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "9\n$MEASUREMENT\n  70\n1\n" DXF_INDENT "9\n$INSUNITS\n  70\n4\n"); +	DxfFormatPosition(&string, 20, 1.23456789); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "20\n31.358024\n"); + +	DynStringClear(&string); +	DxfDimensionSize(&string, DXF_DIMTEXTSIZE); +	assert_string_equal(DynStringToCStr(&string), DXF_INDENT "9\n$DIMTXT\n  40\n25.0\n"); + +} +int main(void) +{ +    const struct CMUnitTest tests[] = { +		cmocka_unit_test(BasicFormatting), +		cmocka_unit_test(LineCommand), +		cmocka_unit_test(CircleCommand), +		cmocka_unit_test(ArcCommand), +		cmocka_unit_test(TextCommand), +		cmocka_unit_test(Units) +    }; +    return cmocka_run_group_tests(tests, NULL, NULL); +}
\ No newline at end of file | 
