summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/CMakeLists.txt3
-rw-r--r--tests/OffscreenContextWGL.cc130
-rw-r--r--tests/cgalpngtest.cc7
-rw-r--r--tests/csgtermtest.cc13
-rw-r--r--tests/csgtestcore.cc7
-rw-r--r--tests/csgtexttest.cc11
-rw-r--r--tests/dumptest.cc11
-rw-r--r--tests/imageutils-lodepng.cc3
-rwxr-xr-xtests/test_cmdline_tool.py15
9 files changed, 136 insertions, 64 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 84e0562..593fa1b 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -273,12 +273,13 @@ target_link_libraries(throwntogethertest ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRAR
# This functions adds cmd-line tests given files.
# Files are sent as the parameters following TESTSUFFIX
#
+find_package(PythonInterp)
function(add_cmdline_test TESTCMD TESTSUFFIX)
get_filename_component(TESTCMD_NAME ${TESTCMD} NAME_WE)
foreach (SCADFILE ${ARGN})
get_filename_component(TESTNAME ${SCADFILE} NAME_WE)
string(REPLACE " " "_" TESTNAME ${TESTNAME}) # Test names cannot include spaces
- add_test("${TESTCMD_NAME}_${TESTNAME}" python ${tests_SOURCE_DIR}/test_cmdline_tool.py -s ${TESTSUFFIX} ${CMAKE_BINARY_DIR}/${TESTCMD} "${SCADFILE}")
+ add_test("${TESTCMD_NAME}_${TESTNAME}" ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py -s ${TESTSUFFIX} ${CMAKE_BINARY_DIR}/${TESTCMD} "${SCADFILE}")
endforeach()
endfunction()
diff --git a/tests/OffscreenContextWGL.cc b/tests/OffscreenContextWGL.cc
index 863da31..17c49c6 100644
--- a/tests/OffscreenContextWGL.cc
+++ b/tests/OffscreenContextWGL.cc
@@ -2,6 +2,13 @@
Create an OpenGL context without creating an OpenGL Window. for Windows.
+For more info:
+
+ http://www.nullterminator.net/opengl32.html by Blaine Hodge
+ http://msdn.microsoft.com/en-us/library/ee418815(v=vs.85).aspx
+ http://www.cprogramming.com/tutorial/wgl_wiggle_functions.html by RoD
+ ( which includes robot.cc by Steven Billington )
+ http://blogs.msdn.com/b/oldnewthing/archive/2006/12/04/1205831.aspx by Tom
*/
#include <windows.h>
@@ -35,13 +42,12 @@ void offscreen_context_init(OffscreenContext &ctx, int width, int height)
ctx.fbo = NULL;
}
-
void glewCheck() {
#ifdef DEBUG
cerr << "GLEW version " << glewGetString(GLEW_VERSION) << "\n";
cerr << (const char *)glGetString(GL_RENDERER) << "(" << (const char *)glGetString(GL_VENDOR) << ")\n"
<< "OpenGL version " << (const char *)glGetString(GL_VERSION) << "\n";
- cerr << "Extensions: " << (const char *)glGetString(GL_EXTENSIONS) << "\n";
+ //cerr << "Extensions: " << (const char *)glGetString(GL_EXTENSIONS) << "\n";
if (GLEW_ARB_framebuffer_object) {
cerr << "ARB_FBO supported\n";
@@ -57,46 +63,81 @@ void glewCheck() {
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
- return DefWindowProc( hwnd, message, wparam, lparam );
+ return DefWindowProc( hwnd, message, wparam, lparam );
}
bool create_wgl_dummy_context(OffscreenContext &ctx)
{
- // create window
-
- HINSTANCE inst = GetModuleHandle(0);
- WNDCLASS wc;
- ZeroMemory( &wc, sizeof( wc ) );
- wc.style = CS_OWNDC;
- wc.lpfnWndProc = WndProc;
- wc.hInstance = inst;
- wc.lpszClassName = "OpenSCAD";
- RegisterClass( &wc );
-
- HWND window = CreateWindow( "OpenSCAD", "OpenSCAD",
- WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
- 0, 0, 256, 256, NULL, NULL, inst, NULL );
-
+ // this call alters ctx->window and ctx->openGLContext
+ // and ctx->dev_context if successfull
+ // create window
+
+ HINSTANCE inst = GetModuleHandle(0);
+ WNDCLASS wc;
+ ZeroMemory( &wc, sizeof( wc ) );
+ wc.style = CS_OWNDC;
+ wc.lpfnWndProc = WndProc;
+ wc.hInstance = inst;
+ wc.lpszClassName = "OpenSCAD";
+ RegisterClass( &wc );
- // create WGL context, make current
-
- PIXELFORMATDESCRIPTOR pixformat;
- int chosenformat;
- HDC dev_context = GetDC( window );
- ZeroMemory( &pixformat, sizeof( pixformat ) );
- pixformat.nSize = sizeof( pixformat );
- pixformat.nVersion = 1;
- pixformat.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
- pixformat.iPixelType = PFD_TYPE_RGBA;
- pixformat.cColorBits = 24;
- pixformat.cDepthBits = 16;
- pixformat.iLayerType = PFD_MAIN_PLANE;
- chosenformat = ChoosePixelFormat( dev_context, &pixformat );
- SetPixelFormat( dev_context, chosenformat, &pixformat );
- HGLRC gl_render_context = wglCreateContext( dev_context );
- wglMakeCurrent( dev_context, gl_render_context );
-
- return true;
+ HWND window = CreateWindow( "OpenSCAD", "OpenSCAD",
+ WS_CAPTION | WS_POPUPWINDOW, //| WS_VISIBLE,
+ 0, 0, ctx.width, ctx.height, NULL, NULL, inst, NULL );
+
+ if ( window==NULL ) {
+ cerr << "MS GDI - CreateWindow failed\n";
+ return false;
+ }
+
+ // create WGL context, make current
+
+ PIXELFORMATDESCRIPTOR pixformat;
+ int chosenformat;
+ HDC dev_context = GetDC( window );
+ if ( dev_context == NULL ) {
+ cerr << "MS GDI - GetDC failed\n";
+ return false;
+ }
+
+ ZeroMemory( &pixformat, sizeof( pixformat ) );
+ pixformat.nSize = sizeof( pixformat );
+ pixformat.nVersion = 1;
+ pixformat.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
+ pixformat.iPixelType = PFD_TYPE_RGBA;
+ pixformat.cColorBits = 24;
+ pixformat.cDepthBits = 16;
+ pixformat.iLayerType = PFD_MAIN_PLANE;
+ chosenformat = ChoosePixelFormat( dev_context, &pixformat );
+ if (chosenformat==0) {
+ cerr << "MS GDI - ChoosePixelFormat failed\n";
+ return false;
+ }
+
+ bool spfok = SetPixelFormat( dev_context, chosenformat, &pixformat );
+ if (!spfok) {
+ cerr << "MS GDI - SetPixelFormat failed\n";
+ return false;
+ }
+
+ HGLRC gl_render_context = wglCreateContext( dev_context );
+ if ( gl_render_context == NULL ) {
+ cerr << "MS WGL - wglCreateContext failed\n";
+ ReleaseDC( ctx.window, ctx.dev_context );
+ return false;
+ }
+
+ bool mcok = wglMakeCurrent( dev_context, gl_render_context );
+ if (!mcok) {
+ cerr << "MS GDI - wglMakeCurrent failed\n";
+ return false;
+ }
+
+ ctx.window = window;
+ ctx.dev_context = dev_context;
+ ctx.openGLContext = gl_render_context;
+
+ return true;
}
@@ -105,22 +146,29 @@ OffscreenContext *create_offscreen_context(int w, int h)
OffscreenContext *ctx = new OffscreenContext;
offscreen_context_init( *ctx, w, h );
- // before an FBO can be setup, a WGL context must be created
- // this call alters ctx->window and ctx->openGLContext
+ // Before an FBO can be setup, a WGL context must be created.
+ // This call alters ctx->window and ctx->openGLContext
// and ctx->dev_context if successfull
if (!create_wgl_dummy_context( *ctx )) {
+ cerr << "wgl dummy fail\n";
+ fflush(stderr);
return NULL;
}
- glewInit(); //must come after Context creation and before FBO calls.
+ GLenum err = glewInit(); // must come after Context creation and before FBO calls.
+ if (GLEW_OK != err) {
+ cerr << "Unable to init GLEW: " << glewGetErrorString(err) << "\n";
+ fflush(stderr);
+ return NULL;
+ }
glewCheck();
ctx->fbo = fbo_new();
if (!fbo_init(ctx->fbo, w, h)) {
+ cerr << "fbo didn't init\n";
return NULL;
}
- ctx = NULL;
return ctx;
}
diff --git a/tests/cgalpngtest.cc b/tests/cgalpngtest.cc
index d43e810..c72bc30 100644
--- a/tests/cgalpngtest.cc
+++ b/tests/cgalpngtest.cc
@@ -91,12 +91,13 @@ extern double getBoundingRadius(BoundingBox bbox);
int main(int argc, char **argv)
{
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file.scad>\n", argv[0]);
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file.scad> <output.png>\n", argv[0]);
exit(1);
}
const char *filename = argv[1];
+ const char *outfile = argv[2];
initialize_builtin_functions();
initialize_builtin_modules();
@@ -238,7 +239,7 @@ int main(int argc, char **argv)
csgInfo.glview->setRenderer(&cgalRenderer);
csgInfo.glview->paintGL();
- csgInfo.glview->save("/dev/stdout");
+ csgInfo.glview->save(outfile);
destroy_builtin_functions();
destroy_builtin_modules();
diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc
index 80b9b9c..643a64f 100644
--- a/tests/csgtermtest.cc
+++ b/tests/csgtermtest.cc
@@ -47,6 +47,7 @@
#include <assert.h>
#include <iostream>
#include <sstream>
+#include <fstream>
using std::cout;
@@ -57,12 +58,13 @@ QString librarydir;
int main(int argc, char **argv)
{
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file.scad>\n", argv[0]);
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file.scad> <output.txt>\n", argv[0]);
exit(1);
}
const char *filename = argv[1];
+ const char *outfilename = argv[2];
int rc = 0;
@@ -161,12 +163,15 @@ int main(int argc, char **argv)
// if (evaluator.background) cout << "Background terms: " << evaluator.background->size() << "\n";
// if (evaluator.highlights) cout << "Highlights terms: " << evaluator.highlights->size() << "\n";
+ std::ofstream outfile;
+ outfile.open(outfilename);
if (root_term) {
- cout << root_term->dump() << "\n";
+ outfile << root_term->dump() << "\n";
}
else {
- cout << "No top-level CSG object\n";
+ outfile << "No top-level CSG object\n";
}
+ outfile.close();
destroy_builtin_functions();
destroy_builtin_modules();
diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc
index 11ff695..e87558d 100644
--- a/tests/csgtestcore.cc
+++ b/tests/csgtestcore.cc
@@ -69,12 +69,13 @@ AbstractNode *find_root_tag(AbstractNode *n)
int csgtestcore(int argc, char *argv[], test_type_e test_type)
{
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <file.scad>\n", argv[0]);
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file.scad> <output.png>\n", argv[0]);
exit(1);
}
std::string filename(argv[1]);
+ std::string outfile(argv[2]);
initialize_builtin_functions();
initialize_builtin_modules();
@@ -244,7 +245,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type)
csgInfo.glview->paintGL();
- csgInfo.glview->save("/dev/stdout");
+ csgInfo.glview->save(outfile.c_str());
destroy_builtin_functions();
destroy_builtin_modules();
diff --git a/tests/csgtexttest.cc b/tests/csgtexttest.cc
index 6badcfb..21ebf6a 100644
--- a/tests/csgtexttest.cc
+++ b/tests/csgtexttest.cc
@@ -45,6 +45,7 @@
#include <assert.h>
#include <iostream>
#include <sstream>
+#include <fstream>
std::string commandline_commands;
QString currentdir;
@@ -60,12 +61,13 @@ void csgTree(CSGTextCache &cache, const AbstractNode &root)
int main(int argc, char **argv)
{
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file.scad>\n", argv[0]);
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file.scad> <output.txt>\n", argv[0]);
exit(1);
}
const char *filename = argv[1];
+ const char *outfilename = argv[2];
int rc = 0;
@@ -151,7 +153,10 @@ int main(int argc, char **argv)
csgTree(csgcache, *root_node);
// std::cout << tree.getString(*root_node) << "\n";
- std::cout << csgcache[*root_node] << "\n";
+ std::ofstream outfile;
+ outfile.open(outfilename);
+ outfile << csgcache[*root_node] << "\n";
+ outfile.close();
destroy_builtin_functions();
destroy_builtin_modules();
diff --git a/tests/dumptest.cc b/tests/dumptest.cc
index e953689..3782446 100644
--- a/tests/dumptest.cc
+++ b/tests/dumptest.cc
@@ -45,6 +45,7 @@
#include <assert.h>
#include <iostream>
#include <sstream>
+#include <fstream>
using std::string;
@@ -55,12 +56,13 @@ QString librarydir;
int main(int argc, char **argv)
{
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file.scad>\n", argv[0]);
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file.scad> <output.txt>\n", argv[0]);
exit(1);
}
const char *filename = argv[1];
+ const char *outfilename = argv[2];
int rc = 0;
@@ -148,7 +150,10 @@ int main(int argc, char **argv)
string dumpstdstr_cached = tree.getString(*root_node);
assert(dumpstdstr == dumpstdstr_cached);
- std::cout << dumpstdstr << "\n";
+ std::ofstream outfile;
+ outfile.open(outfilename);
+ outfile << dumpstdstr << "\n";
+ outfile.close();
destroy_builtin_functions();
destroy_builtin_modules();
diff --git a/tests/imageutils-lodepng.cc b/tests/imageutils-lodepng.cc
index 8636fa4..8460d9e 100644
--- a/tests/imageutils-lodepng.cc
+++ b/tests/imageutils-lodepng.cc
@@ -10,7 +10,8 @@ bool write_png(const char *filename, unsigned char *pixels, int width, int heigh
unsigned char *dataout = (unsigned char *)malloc(width*height*4);
LodePNG_encode(&dataout, &dataout_size, pixels, width, height, LCT_RGBA, 8);
//LodePNG_saveFile(dataout, dataout_size, "blah2.png");
- FILE *f = fopen(filename, "w");
+
+ FILE *f = fopen(filename, "wb");
if (!f) {
free(dataout);
return false;
diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py
index 3ac41dd..f4b9138 100755
--- a/tests/test_cmdline_tool.py
+++ b/tests/test_cmdline_tool.py
@@ -57,6 +57,7 @@ def execute_and_redirect(cmd, params, outfile):
return retval
def get_normalized_text(filename):
+ print >> sys.stderr, "debug normalize" , filename
text = open(filename).read()
return text.strip("\r\n").replace("\r\n", "\n") + "\n"
@@ -70,10 +71,10 @@ def compare_default(resultfilename):
return True
def append_html_output(expectedfilename, resultfilename):
- # if html directory & file not there, create them
- # copy expected filename and result filename to dir
- # append html to show differences
- # dump platform.platform()
+ # 1 if html directory & file not there, create them
+ # 2 copy expected filename image and result filename image to dir
+ # 3 append html to show differences
+ # 4 dump platform.platform()
expectedimg = os.path.basename(expectedfilename)
resultimg = os.path.basename(resultfilename)
template = '''
@@ -133,6 +134,7 @@ def run_test(testname, cmd, args):
outputdir = os.path.join(os.getcwd(), cmdname + "-output")
actualfilename = os.path.join(outputdir, testname + "-actual." + options.suffix)
+ actualfilename = os.path.normpath(actualfilename)
if options.generate:
if not os.path.exists(expecteddir): os.makedirs(expecteddir)
@@ -140,9 +142,12 @@ def run_test(testname, cmd, args):
else:
if not os.path.exists(outputdir): os.makedirs(outputdir)
outputname = actualfilename
+ outputname = os.path.normpath( outputname )
+
outfile = open(outputname, "wb")
try:
- proc = subprocess.Popen([cmd] + args, stdout=outfile, stderr=subprocess.PIPE)
+ print >> sys.stderr, "debug ", [cmd], args, [outputname]
+ proc = subprocess.Popen([cmd] + args + [outputname], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
errtext = proc.communicate()[1]
if errtext != None and len(errtext) > 0:
print >> sys.stderr, "Error output: " + errtext
contact: Jan Huwald // Impressum