From cdfa24e15d5f397a952ae67dcbfabe3a26e9d752 Mon Sep 17 00:00:00 2001 From: Arthur Moore Date: Sun, 24 Aug 2014 12:09:39 -0400 Subject: [PATCH] (Re) Wrote a tool to test NIF files in BSAs and on the filesystem. Just give it a set of files, one file per argument, and it will make sure openmw can read them. On linux/mac you can use "xargs --arg-file=nifs.txt ./niftest" to give it a list of files to check. --- .gitignore | 1 + CMakeLists.txt | 9 + components/nif/tests/.gitignore | 6 +- components/nif/tests/CMakeLists.txt | 19 + components/nif/tests/Makefile | 12 - components/nif/tests/nif_bsa_test.cpp | 30 - components/nif/tests/niftest.cpp | 96 + components/nif/tests/output/nif_bsa_test.out | 5799 ------------------ components/nif/tests/test.sh | 23 +- 9 files changed, 136 insertions(+), 5859 deletions(-) create mode 100644 components/nif/tests/CMakeLists.txt delete mode 100644 components/nif/tests/Makefile delete mode 100644 components/nif/tests/nif_bsa_test.cpp create mode 100644 components/nif/tests/niftest.cpp delete mode 100644 components/nif/tests/output/nif_bsa_test.out diff --git a/.gitignore b/.gitignore index 08bf0bad6..944fb8418 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ resources /omwlauncher /openmw /opencs +/niftest ## generated objects apps/openmw/config.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 368fe5364..84aecd213 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,7 @@ option(BUILD_MWINIIMPORTER "build MWiniImporter" ON) option(BUILD_OPENCS "build OpenMW Construction Set" ON) option(BUILD_WITH_CODE_COVERAGE "Enable code coverage with gconv" OFF) option(BUILD_UNITTESTS "Enable Unittests with Google C++ Unittest ang GMock frameworks" OFF) +option(BUILD_NIFTEST "build nif file tester" ON) # OS X deployment option(OPENMW_OSX_DEPLOYMENT OFF) @@ -396,6 +397,9 @@ IF(NOT WIN32 AND NOT APPLE) IF(BUILD_OPENCS) INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/opencs" DESTINATION "${BINDIR}" ) ENDIF(BUILD_OPENCS) + IF(BUILD_NIFTEST) + INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/niftest" DESTINATION "${BINDIR}" ) + ENDIF(BUILD_NIFTEST) # Install licenses INSTALL(FILES "docs/license/DejaVu Font License.txt" DESTINATION "${LICDIR}" ) @@ -512,6 +516,11 @@ add_subdirectory (extern/sdl4ogre) # Components add_subdirectory (components) +#Testing +if (BUILD_NIFTEST) + add_subdirectory(components/nif/tests/) +endif(BUILD_NIFTEST) + # Apps and tools add_subdirectory( apps/openmw ) diff --git a/components/nif/tests/.gitignore b/components/nif/tests/.gitignore index b01c11f27..397b4a762 100644 --- a/components/nif/tests/.gitignore +++ b/components/nif/tests/.gitignore @@ -1,5 +1 @@ -niftool -*_test -*.nif -*.kf -output.txt +*.log diff --git a/components/nif/tests/CMakeLists.txt b/components/nif/tests/CMakeLists.txt new file mode 100644 index 000000000..a45298180 --- /dev/null +++ b/components/nif/tests/CMakeLists.txt @@ -0,0 +1,19 @@ +set(NIFTEST + niftest.cpp +) +source_group(components\\nif\\tests FILES ${NIFTEST}) + +# Main executable +add_executable(niftest + ${NIFTEST} +) + +target_link_libraries(niftest + ${Boost_LIBRARIES} + components +) + +if (BUILD_WITH_CODE_COVERAGE) + add_definitions (--coverage) + target_link_libraries(niftest gcov) +endif() diff --git a/components/nif/tests/Makefile b/components/nif/tests/Makefile deleted file mode 100644 index 0754bdfa6..000000000 --- a/components/nif/tests/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -GCC=g++ - -all: niftool nif_bsa_test - -niftool: niftool.cpp ../nif_file.hpp ../nif_file.cpp ../record.hpp - $(GCC) $< ../nif_file.cpp ../../tools/stringops.cpp -o $@ - -nif_bsa_test: nif_bsa_test.cpp ../nif_file.cpp ../../bsa/bsa_file.cpp ../../tools/stringops.cpp - $(GCC) $^ -o $@ - -clean: - rm niftool *_test diff --git a/components/nif/tests/nif_bsa_test.cpp b/components/nif/tests/nif_bsa_test.cpp deleted file mode 100644 index c22aad680..000000000 --- a/components/nif/tests/nif_bsa_test.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - Runs NIFFile through all the NIFs in Morrowind.bsa. - */ - -#include "../nif_file.hpp" -#include "../../bsa/bsa_file.hpp" -#include "../../tools/stringops.hpp" -#include - -using namespace Mangle::Stream; -using namespace std; -using namespace Nif; - -int main(int argc, char **args) -{ - BSAFile bsa; - cout << "Reading Morrowind.bsa\n"; - bsa.open("../../data/Morrowind.bsa"); - - const BSAFile::FileList &files = bsa.getList(); - - for(int i=0; i +#include +#include +#include +#include + +///See if the file has the named extension +bool hasExtension(std::string filename, std::string extensionToFind) +{ + std::string extension = filename.substr(filename.find_last_of(".")+1); + + //Convert strings to lower case for comparison + std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); + std::transform(extensionToFind.begin(), extensionToFind.end(), extensionToFind.begin(), ::tolower); + + if(extension == extensionToFind) + return true; + else + return false; +} + +///See if the file has the "nif" extension. +bool isNIF(std::string filename) +{ + return hasExtension(filename,"nif"); +} +///See if the file has the "bsa" extension. +bool isBSA(std::string filename) +{ + return hasExtension(filename,"bsa"); +} + +///Check all the nif files in the given BSA archive +void readBSA(std::string filename) +{ + Bsa::BSAFile bsa; + bsa.open(filename.c_str()); + + const Bsa::BSAFile::FileList &files = bsa.getList(); + Bsa::addBSA(filename,"Bsa Files"); + + for(unsigned int i=0; i nifs.txt +find "$DATAFILESDIR" -iname *nif >> nifs.txt -for a in $PROGS; do - if [ -f "output/$a.out" ]; then - echo "Running $a:" - ./$a | diff output/$a.out - - else - echo "Creating $a.out" - ./$a > "output/$a.out" - git add "output/$a.out" - fi -done +sed -e 's/.*/\"&\"/' nifs.txt > quoted_nifs.txt + +xargs --arg-file=quoted_nifs.txt ../../../niftest + +rm nifs.txt +rm quoted_nifs.txt