queue scan added, Catch added for EntityConverter tests
This commit is contained in:
parent
991cb4d02a
commit
3fd631c42a
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +1,6 @@
|
||||
[submodule "ReflexToQ3/includes/cxxopts"]
|
||||
path = ReflexToQ3/includes/cxxopts
|
||||
url = https://github.com/jarro2783/cxxopts.git
|
||||
[submodule "ReflexToQ3/includes/Catch"]
|
||||
path = ReflexToQ3/includes/Catch
|
||||
url = https://github.com/philsquared/Catch.git
|
||||
|
3
ReflexToQ3/.gitignore
vendored
3
ReflexToQ3/.gitignore
vendored
@ -14,3 +14,6 @@
|
||||
|
||||
# executables
|
||||
reflex2q3
|
||||
test/catch
|
||||
test/test-parser
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
EX=reflex2q3
|
||||
CC=g++
|
||||
CFLAGS=-std=c++11 -I"./includes" -I"./includes/cxxopts/include" -I"/usr/include/eigen3"
|
||||
CFLAGS=-std=c++11 -I"./includes" -I"./includes/Catch/single_include" -I"./includes/cxxopts/include" -I"/usr/include/eigen3"
|
||||
TESTEX=test/test-parser
|
||||
UNITEX=test/catch
|
||||
|
||||
all: main
|
||||
|
||||
@ -11,9 +12,15 @@ main: planes.o brushdef.o oopless-parser.o EntityConverter.o
|
||||
test: planes.o brushdef.o oopless-parser.o test-parser.o
|
||||
$(CC) $^ $(CFLAGS) -o $(TESTEX)
|
||||
|
||||
unittest: EntityConverter.o catch.o
|
||||
$(CC) $^ $(CFLAGS) -o $(UNITEX)
|
||||
|
||||
test-parser.o: test/test-parser.cpp
|
||||
$(CC) -c $^ $(CFLAGS)
|
||||
|
||||
catch.o: test/catch.cpp
|
||||
$(CC) -c $^ $(CFLAGS)
|
||||
|
||||
oopless-parser.o: includes/oopless-parser.cpp
|
||||
$(CC) -c $^ $(CFLAGS)
|
||||
|
||||
@ -27,5 +34,5 @@ EntityConverter.o: includes/EntityConverter.cpp
|
||||
$(CC) -c $^ $(CFLAGS)
|
||||
|
||||
clean:
|
||||
rm *.o *.log $(EX) $(TESTEX)
|
||||
rm *.o *.log $(EX) $(TESTEX) $(UNITEX)
|
||||
|
||||
|
1
ReflexToQ3/includes/Catch
Submodule
1
ReflexToQ3/includes/Catch
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 6f32db35af06b30701d159b9e16a21e76d82aada
|
@ -20,6 +20,7 @@
|
||||
#include <exception>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
@ -49,25 +50,8 @@ EntityConverter::EntityConverter(std::string entityMapFile, std::string reflexMa
|
||||
if ( fin.is_open() ) {
|
||||
//Extract the source type of targets (teleporters or jump pads)
|
||||
std::string line;
|
||||
std::string trash;
|
||||
std::string targetName;
|
||||
while (std::getline(fin, line)) {
|
||||
if ( line.find("type Teleporter") != std::string::npos) {
|
||||
std::getline(fin, line);
|
||||
std::istringstream iss(line);
|
||||
if ( ! (iss >> trash >> trash >> targetName)) {
|
||||
throw std::runtime_error( "format error in .map file");
|
||||
}
|
||||
targetMap_.insert ( std::pair<std::string, std::string>(targetName, "Teleporter") );
|
||||
}
|
||||
else if ( line.find("type JumpPad") != std::string::npos) {
|
||||
std::getline(fin, line);
|
||||
std::istringstream iss(line);
|
||||
if ( ! (iss >> trash >> trash >> targetName)) {
|
||||
throw std::runtime_error( "format error in .map file");
|
||||
}
|
||||
targetMap_.insert ( std::pair<std::string, std::string>(targetName, "JumpPad") );
|
||||
}
|
||||
addIfRelated(line, fin);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -85,7 +69,11 @@ EntityConverter::EntityConverter(std::string entityMapFile, std::string reflexMa
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------------------
|
||||
* !-- Not sure if this is used the same way as the pre-scan was --!
|
||||
* Class: EntityConverter
|
||||
* Method: EntityConverter :: matchRelated
|
||||
* Description: Read through entities, matching related as necessary
|
||||
* Note: For now, accomplishes the same goal as the pre-scan
|
||||
* constructor
|
||||
*--------------------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
@ -95,9 +83,23 @@ EntityConverter::matchRelated(std::queue<std::vector<std::string>> entities)
|
||||
std::cerr << "Related entities are already matched, doing nothing" << std::endl;
|
||||
}
|
||||
else {
|
||||
//Same as pre-scan or convert and pass back all converted entities?
|
||||
while ( ! entities.empty() ) {
|
||||
std::vector<std::string> entity = entities.front();
|
||||
entities.pop();
|
||||
|
||||
std::stringstream ss;
|
||||
std::copy(entity.begin(), entity.end(),
|
||||
std::ostream_iterator<std::string>(ss, "\n"));
|
||||
|
||||
std::string nextLine;
|
||||
if ( getline(ss, nextLine )) {
|
||||
addIfRelated(nextLine, ss);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
areEntitiesMatched_ = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -197,6 +199,32 @@ EntityConverter::mapEntities(std::string mapFile)
|
||||
|
||||
|
||||
|
||||
void
|
||||
EntityConverter::addIfRelated(std::string &line, std::istream &is)
|
||||
{
|
||||
std::string trash;
|
||||
std::string targetName;
|
||||
if ( line.find("type Teleporter") != std::string::npos) {
|
||||
std::getline(is, line);
|
||||
std::istringstream iss(line);
|
||||
if ( ! (iss >> trash >> trash >> targetName)) {
|
||||
throw std::runtime_error( "format error in .map file");
|
||||
}
|
||||
targetMap_.insert ( std::pair<std::string, std::string>(targetName, "Teleporter") );
|
||||
}
|
||||
else if ( line.find("type JumpPad") != std::string::npos) {
|
||||
std::getline(is, line);
|
||||
std::istringstream iss(line);
|
||||
if ( ! (iss >> trash >> trash >> targetName)) {
|
||||
throw std::runtime_error( "format error in .map file");
|
||||
}
|
||||
targetMap_.insert ( std::pair<std::string, std::string>(targetName, "JumpPad") );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
std::vector<std::string>
|
||||
EntityConverter::convertPickup(std::vector<std::string> &lines)
|
||||
{
|
||||
|
@ -107,6 +107,17 @@ class EntityConverter
|
||||
*--------------------------------------------------------------------------------------
|
||||
*/
|
||||
void mapEntities(std::string mapFile);
|
||||
/*
|
||||
*--------------------------------------------------------------------------------------
|
||||
* Class: EntityConverter
|
||||
* Method: EntityConverter :: addIfRelated
|
||||
* Description: If the entity contains a related target/etc, add to map
|
||||
* Paramater: string line, the previous line (contains entity type)
|
||||
* Parameter: istream is, an ifstream or a stringstream containing a
|
||||
* single entity
|
||||
*--------------------------------------------------------------------------------------
|
||||
*/
|
||||
void addIfRelated(std::string &line, std::istream &is);
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------------------------
|
||||
|
63
ReflexToQ3/test/catch.cpp
Normal file
63
ReflexToQ3/test/catch.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* =====================================================================================
|
||||
*
|
||||
* Filename: catch.cpp
|
||||
*
|
||||
* Description: Unit Tests for EntityConverter
|
||||
*
|
||||
* Version: 0.1
|
||||
* Created: 07/03/2017 08:25:04 PM
|
||||
* Revision: none
|
||||
* Compiler: gcc
|
||||
*
|
||||
* Author: suhrke@teknik.io
|
||||
*
|
||||
* =====================================================================================
|
||||
*/
|
||||
|
||||
#ifndef CATCH_CONFIG_MAIN
|
||||
#define CATCH_CONFIG_MAIN
|
||||
#include "catch.hpp"
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
|
||||
#include "EntityConverter.hpp"
|
||||
|
||||
#define PICKUP_FILENAME "r2x.pck"
|
||||
|
||||
|
||||
|
||||
TEST_CASE( "r2x: a single pickup entity can be converted", "[EntityConverter]" ) {
|
||||
|
||||
// Instantiate object
|
||||
EntityConverter ec (PICKUP_FILENAME);
|
||||
|
||||
// Mock up entity
|
||||
std::vector<std::string> entity;
|
||||
entity.push_back(" type Pickup");
|
||||
entity.push_back(" Vector3 position -216.00000 -132.00000 -1488.000488");
|
||||
entity.push_back(" Vector3 angles 180.00000 0.00000 0.00000");
|
||||
entity.push_back(" UInt8 pickupType 2");
|
||||
|
||||
// Mock up entity queue
|
||||
std::queue<std::vector<std::string>> q;
|
||||
|
||||
// Match related entities (none)
|
||||
ec.matchRelated( q );
|
||||
|
||||
// (only a single pickup entity)
|
||||
std::vector<std::string> converted = ec.convert(entity);
|
||||
|
||||
REQUIRE( converted[0] == "\"classname\" \"weapon_grenadelauncher\"\n" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //CATCH_CONFIG_MAIN
|
Loading…
Reference in New Issue
Block a user