#ifdef TESTS_BUILD #include #include "../src/Script.hpp" TEST_CASE( "Define script function", "[integration]" ) { Script* script = Script::Create("function add(number a, number b) a + b end"); REQUIRE(!script->Diagnostics -> HasErrors()); script->Evaluate(); auto variable = script->GetVariable("add"); REQUIRE(variable != nullptr); REQUIRE(variable->GetType()->GetClass() == TypeClass::Function); delete script; } TEST_CASE( "Define script function and call", "[integration]" ) { Script* script = Script::Create("function add(number a, number b) result = a + b end add(1, 2)"); REQUIRE(!script->Diagnostics -> HasErrors()); script->Evaluate(); auto variable = script->GetVariable("add"); REQUIRE(variable != nullptr); REQUIRE(variable->GetType()->GetClass() == TypeClass::Function); auto result = script->GetVariable("result"); REQUIRE(result->GetType()->GetClass() == TypeClass::Number); REQUIRE(result->EvaluateInteger() == 3); delete script; } TEST_CASE( "Define script function and call multiple times", "[integration]" ) { Script* script = Script::Create("result = 0 function add(number a) result = result + a end add(1) add(4)"); REQUIRE(!script->Diagnostics -> HasErrors()); script->Evaluate(); auto variable = script->GetVariable("add"); REQUIRE(variable != nullptr); REQUIRE(variable->GetType()->GetClass() == TypeClass::Function); auto result = script->GetVariable("result"); REQUIRE(result->GetType()->GetClass() == TypeClass::Number); REQUIRE(result->EvaluateInteger() == 5); delete script; } TEST_CASE( "Define script function and call from extern", "[integration]" ) { Script* script = Script::Create("result = 0 function add(number a) result = result + a end"); REQUIRE(!script->Diagnostics -> HasErrors()); script->Evaluate(); REQUIRE(script->HasFunction("add")); auto toAddVal = new IntegerEvalValue(5); script->CallFunction("add", {toAddVal}); delete toAddVal; toAddVal = new IntegerEvalValue(6); script->CallFunction("add", {toAddVal}); delete toAddVal; auto result = script->GetVariable("result"); REQUIRE(result->GetType()->GetClass() == TypeClass::Number); REQUIRE(result->EvaluateInteger() == 11); delete script; } #endif