diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 7 | ||||
-rw-r--r-- | tests/modulecachetest.cc | 121 | ||||
-rw-r--r-- | tests/tests-common.cc | 7 | ||||
-rw-r--r-- | tests/tests-common.h | 2 |
4 files changed, 134 insertions, 3 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b81ce8c..fa75776 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -309,6 +309,7 @@ set(CORE_SOURCES ../src/expr.cc ../src/func.cc ../src/module.cc + ../src/ModuleCache.cc ../src/node.cc ../src/context.cc ../src/csgterm.cc @@ -403,6 +404,12 @@ add_executable(dumptest dumptest.cc) target_link_libraries(dumptest tests-common tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) # +# modulecachetest +# +add_executable(modulecachetest modulecachetest.cc) +target_link_libraries(modulecachetest tests-common tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) + +# # csgtexttest # add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) diff --git a/tests/modulecachetest.cc b/tests/modulecachetest.cc new file mode 100644 index 0000000..ae872e2 --- /dev/null +++ b/tests/modulecachetest.cc @@ -0,0 +1,121 @@ +/* + * OpenSCAD (www.openscad.org) + * Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and + * Marius Kintel <marius@kintel.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * As a special exception, you have permission to link this program + * with the CGAL library and distribute executables, as long as you + * follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from CGAL. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "tests-common.h" +#include "openscad.h" +#include "parsersettings.h" +#include "node.h" +#include "module.h" +#include "context.h" +#include "value.h" +#include "export.h" +#include "builtin.h" +#include "Tree.h" + +#include <QCoreApplication> +#ifndef _MSC_VER +#include <getopt.h> +#endif +#include <assert.h> +#include <iostream> +#include <sstream> +#include <fstream> + +#include <boost/filesystem.hpp> +namespace fs = boost::filesystem; +#include "boosty.h" + +std::string commandline_commands; +std::string currentdir; +QString examplesdir; + +using std::string; + +int main(int argc, char **argv) +{ +#ifdef _MSC_VER + _set_output_format(_TWO_DIGIT_EXPONENT); +#endif + 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; + + Builtins::instance()->initialize(); + + QCoreApplication app(argc, argv); + fs::path original_path = fs::current_path(); + + currentdir = boosty::stringy( fs::current_path() ); + + parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); + set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); + + Context root_ctx; + register_builtin(root_ctx); + + AbstractModule *root_module; + ModuleInstantiation root_inst; + AbstractNode *root_node; + + root_module = parsefile(filename); + if (!root_module) { + fprintf(stderr, "Error: Unable to parse input file\n"); + exit(1); + } + + fs::current_path(fs::path(filename).parent_path()); + + AbstractNode::resetIndexCounter(); + root_node = root_module->evaluate(&root_ctx, &root_inst); + + delete root_node; + delete root_module; + + fs::current_path(original_path); + + fprintf(stderr, "Second parse\n"); + root_module = parsefile(filename); + if (!root_module) { + fprintf(stderr, "Error: Unable to parse second time\n"); + exit(1); + } + + AbstractNode::resetIndexCounter(); + root_node = root_module->evaluate(&root_ctx, &root_inst); + + delete root_node; + delete root_module; + + Builtins::instance(true); + + return rc; +} diff --git a/tests/tests-common.cc b/tests/tests-common.cc index 1694a74..5b0cc3b 100644 --- a/tests/tests-common.cc +++ b/tests/tests-common.cc @@ -7,9 +7,9 @@ #include <QFileInfo> #include <sstream> -AbstractModule *parsefile(const char *filename) +Module *parsefile(const char *filename) { - AbstractModule *root_module = NULL; + Module *root_module = NULL; QFileInfo fileInfo(filename); handle_dep(filename); @@ -27,6 +27,9 @@ AbstractModule *parsefile(const char *filename) fclose(fp); text << "\n" << commandline_commands; root_module = parse(text.str().c_str(), fileInfo.absolutePath().toLocal8Bit(), false); + if (root_module) { + root_module->handleDependencies(); + } } return root_module; } diff --git a/tests/tests-common.h b/tests/tests-common.h index 92ebc78..0047562 100644 --- a/tests/tests-common.h +++ b/tests/tests-common.h @@ -1,6 +1,6 @@ #ifndef TESTS_COMMON_H_ #define TESTS_COMMON_H_ -class AbstractModule *parsefile(const char *filename); +class Module *parsefile(const char *filename); #endif |