Example #1
0
TEST(DonutHomuraTest, BackToEntrypointTest)
{
	INIT_DONUT;
	{
		Handler<Object> result;
		ASSERT_NO_THROW(
				result = machine->start( donut->parse("var first = Homura.now(); var x = interrupt null; if(x){ \"back\"; Homura.seek(first-1); }else{ \"through\"; };", "<MEM>", 0) ) );
		ASSERT_TRUE(result->isNull());
		ASSERT_TRUE(machine->isInterrupted());

		ASSERT_NO_THROW( result = machine->resume(heap->createBool(true)) );
		ASSERT_TRUE(result->isNull());
		ASSERT_TRUE(machine->isInterrupted());

		ASSERT_NO_THROW( result = machine->resume(heap->createBool(false)) );
		ASSERT_TRUE(result->isObject());
		ASSERT_EQ("through", result->toString(heap));
		ASSERT_FALSE(machine->isInterrupted());
	}
}