Skip to content

Commit 3f8c646

Browse files
committed
Add unit test of lazy cprover_initialize generation
This tests that an empty bodied initialize function is generated by `typecheck` and that the body is then populated by `convert_lazy_method`
1 parent afa7d52 commit 3f8c646

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

jbmc/unit/java_bytecode/java_bytecode_language/language.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ Author: Diffblue Limited.
1212

1313
#include <java-testing-utils/load_java_class.h>
1414
#include <java-testing-utils/require_type.h>
15+
#include <java_bytecode/java_bytecode_language.h>
16+
#include <util/options.h>
17+
#include <linking/static_lifetime_init.h>
1518

1619
SCENARIO(
1720
"java_bytecode_language_opaque_field",
@@ -45,3 +48,33 @@ SCENARIO(
4548
}
4649
}
4750
}
51+
52+
static void use_external_driver(java_bytecode_languaget &language)
53+
{
54+
optionst options;
55+
options.set_option("symex-driven-lazy-loading", true);
56+
language.set_language_options(options);
57+
}
58+
59+
TEST_CASE(
60+
"LAZY_METHODS_MODE_EXTERNAL_DRIVER based generation of cprover_initialise",
61+
"[core][java_bytecode_language]")
62+
{
63+
java_bytecode_languaget language;
64+
null_message_handlert null_message_handler;
65+
language.set_message_handler(null_message_handler);
66+
use_external_driver(language);
67+
symbol_tablet symbol_table;
68+
language.typecheck(symbol_table, "");
69+
{
70+
const symbolt *const initialise = symbol_table.lookup(INITIALIZE_FUNCTION);
71+
REQUIRE(initialise);
72+
REQUIRE(initialise->value.is_nil());
73+
}
74+
language.convert_lazy_method(INITIALIZE_FUNCTION, symbol_table);
75+
{
76+
const symbolt *const initialise = symbol_table.lookup(INITIALIZE_FUNCTION);
77+
REQUIRE(initialise);
78+
REQUIRE(can_cast_expr<codet>(initialise->value));
79+
}
80+
}

0 commit comments

Comments
 (0)