PorygonLang/tests/integration/VariablesTests.cpp

81 lines
2.4 KiB
C++
Raw Normal View History

2019-05-28 15:49:03 +00:00
#ifdef TESTS_BUILD
#include <catch.hpp>
#include "../src/Script.hpp"
using namespace Porygon;
2019-05-28 15:49:03 +00:00
TEST_CASE( "Create script variable", "[integration]" ) {
Script* script = Script::Create("foo = true");
REQUIRE(!script->Diagnostics -> HasErrors());
auto variable = script->GetVariable(u"foo");
2019-05-28 15:49:03 +00:00
REQUIRE(variable == nullptr);
script->Evaluate();
variable = script->GetVariable(u"foo");
REQUIRE(variable != nullptr);
REQUIRE(variable->EvaluateBool());
2019-05-28 16:50:23 +00:00
delete script;
2019-05-28 15:49:03 +00:00
}
TEST_CASE( "Create local variable", "[integration]" ) {
Script* script = Script::Create("local foo = true");
REQUIRE(!script->Diagnostics -> HasErrors());
REQUIRE_FALSE(script->HasVariable(u"foo"));
script->Evaluate();
delete script;
}
2019-05-28 15:49:03 +00:00
TEST_CASE( "Create script variable and use", "[integration]" ) {
Script* script = Script::Create("foo = false\n"
"bar = not foo");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto variable = script->GetVariable(u"bar");
REQUIRE(variable != nullptr);
CHECK(variable->EvaluateBool());
delete script;
}
TEST_CASE( "Create local variable and use", "[integration]" ) {
Script* script = Script::Create("local foo = false\n"
"bar = not foo");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto variable = script->GetVariable(u"bar");
REQUIRE(variable != nullptr);
CHECK(variable->EvaluateBool());
delete script;
}
2019-06-12 13:19:28 +00:00
TEST_CASE( "Local variables in upmost scope persist", "[integration]" ) {
Script* script = Script::Create(R"(
result = 0
local foo = 0
function bar()
foo = foo + 1
result = foo
end
)");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
script -> CallFunction(u"bar", {});
script -> CallFunction(u"bar", {});
auto variable = script->GetVariable(u"result");
2019-06-12 13:19:28 +00:00
REQUIRE(variable != nullptr);
CHECK(variable->EvaluateInteger() == 2);
delete script;
}
2019-06-15 15:51:10 +00:00
TEST_CASE( "Able to use emoji", "[integration]" ) {
Script* script = Script::Create(uR"(
💩 = "LJ"
)");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
REQUIRE(script -> HasVariable(uR"(💩)"));
auto variable = script->GetVariable(uR"(💩)");
REQUIRE(variable != nullptr);
CHECK(variable->EvaluateString() == u"LJ");
2019-06-15 15:51:10 +00:00
delete script;
}
2019-05-28 15:49:03 +00:00
#endif