PorygonLang/tests/standardLibraries/BasicLibrary.cpp

77 lines
2.3 KiB
C++

#ifdef TESTS_BUILD
#include <catch.hpp>
#include "../src/Script.hpp"
#include "../../src/GlobalScriptOptions.hpp"
#include <cstring>
using namespace Porygon;
TEST_CASE( "Error func throws error", "[integration]" ) {
Script* script = Script::Create(u"error('foo bar')");
REQUIRE(!script->Diagnostics -> HasErrors());
try{
script -> Evaluate();
throw;
} catch (const EvaluationException& e){
auto err = e.what();
REQUIRE(std::strcmp(err, "An evaluation exception occurred: foo bar") == 0);
}
delete script;
}
TEST_CASE( "Assert func throws error if argument is false", "[integration]" ) {
Script* script = Script::Create(u"assert(false)");
REQUIRE(!script->Diagnostics -> HasErrors());
try{
script -> Evaluate();
throw;
} catch (const EvaluationException& e){
auto err = e.what();
REQUIRE(std::strcmp(err, "An evaluation exception occurred: assertion failed!") == 0);
}
delete script;
}
TEST_CASE( "Assert func does not throw if argument is true", "[integration]" ) {
Script* script = Script::Create(u"assert(true)");
REQUIRE(!script->Diagnostics -> HasErrors());
script -> Evaluate();
delete script;
}
TEST_CASE( "Assert func works with second argument", "[integration]" ) {
Script* script = Script::Create(u"assert(false, 'foobar')");
REQUIRE(!script->Diagnostics -> HasErrors());
try{
script -> Evaluate();
throw;
} catch (const EvaluationException& e){
auto err = e.what();
REQUIRE(std::strcmp(err, "An evaluation exception occurred: foobar") == 0);
}
delete script;
}
TEST_CASE( "Print func works", "[integration]" ) {
Script* script = Script::Create(u"print('foobar')");
REQUIRE(!script->Diagnostics -> HasErrors());
auto stream = new std::stringstream();
GlobalScriptOptions::SetPrintStream(stream);
script->Evaluate();
auto printVal = stream->str();
REQUIRE(printVal == "foobar\n");
delete script;
}
TEST_CASE( "toint func works", "[integration]" ) {
Script* script = Script::Create(u"return toint('5846321')");
REQUIRE(!script->Diagnostics -> HasErrors());
auto result = script->Evaluate();
REQUIRE(result->EvaluateInteger() == 5846321);
delete script;
}
#endif