File: AulDeathTest.cpp

package info (click to toggle)
openclonk 8.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 169,656 kB
  • sloc: cpp: 180,484; ansic: 108,988; xml: 31,371; python: 1,223; php: 767; makefile: 148; sh: 101; javascript: 34
file content (50 lines) | stat: -rw-r--r-- 1,283 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
* OpenClonk, http://www.openclonk.org
*
* Copyright (c) 2016, The OpenClonk Team and contributors
*
* Distributed under the terms of the ISC license; see accompanying file
* "COPYING" for details.
*
* "Clonk" is a registered trademark of Matthes Bender, used with permission.
* See accompanying file "TRADEMARK" for details.
*
* To redistribute this file separately, substitute the full license texts
* for the above references.
*/

// Testing C4Aul behaviour.

#include "C4Include.h"
#include "AulTest.h"

#include <cstdlib>
#include "script/C4Aul.h"

class AulDeathTest : public AulTest
{};

// DEATH_SUCCESS_CODE is arbitrarily chosen such that it's unlikely to be
// returned by failing code.
#define DEATH_SUCCESS_CODE 86
#define EXPECT_NO_DEATH(code) EXPECT_EXIT({code; std::quick_exit(DEATH_SUCCESS_CODE);}, ::testing::ExitedWithCode(DEATH_SUCCESS_CODE), "")

TEST_F(AulDeathTest, NestedFunctions)
{
	// Ensures the engine does not crash when a function is declared
	// inside a proplist inside a function.
	EXPECT_NO_DEATH(RunCode("local a = {b = func () {} };"));
}

TEST_F(AulDeathTest, issue1891)
{
	// 1891: NULL dereference when warning is emitted in eval()
	EXPECT_NO_DEATH(
		try
		{
			RunExpr("eval(\"Sin(\\\"\\\")\")");
		}
		catch (C4AulExecError &)
		{}
	);
}