Skip to content

Commit 3a5a22b

Browse files
author
svorenova
committed
Add unit tests to check opaque fields are final
1 parent 74c0124 commit 3a5a22b

File tree

5 files changed

+61
-0
lines changed

5 files changed

+61
-0
lines changed
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
public class ClassUsingOpaqueField {
2+
public static int opaqueFieldMethod() {
3+
OpaqueClass o = new OpaqueClass();
4+
return OpaqueClass.field1 + o.field2;
5+
}
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// .class file must be deleted
2+
public class OpaqueClass {
3+
public static int field1 = 1;
4+
public int field2;
5+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*******************************************************************\
2+
3+
Module: Unit tests for java_bytecode_language.
4+
5+
Author: Diffblue Limited.
6+
7+
\*******************************************************************/
8+
9+
#include <testing-utils/use_catch.h>
10+
11+
#include <util/symbol_table.h>
12+
13+
#include <java-testing-utils/load_java_class.h>
14+
#include <java-testing-utils/require_type.h>
15+
16+
SCENARIO(
17+
"java_bytecode_language_opaque_field",
18+
"[core][java_bytecode][java_bytecode_language]")
19+
{
20+
GIVEN("A class that accesses opaque fields")
21+
{
22+
const symbol_tablet symbol_table = load_java_class(
23+
"ClassUsingOpaqueField", "./java_bytecode/java_bytecode_language");
24+
std::string opaque_class_prefix = "java::OpaqueClass";
25+
26+
WHEN("When parsing opaque class with fields")
27+
{
28+
THEN("Static field field1 is marked as final")
29+
{
30+
const symbolt &opaque_field_symbol =
31+
symbol_table.lookup_ref(opaque_class_prefix + ".field1");
32+
REQUIRE(opaque_field_symbol.type.get_bool(ID_C_constant));
33+
}
34+
35+
THEN("Non-static field field2 is marked final")
36+
{
37+
const symbolt &opaque_class_symbol =
38+
symbol_table.lookup_ref(opaque_class_prefix);
39+
const struct_typet &opaque_class_struct =
40+
to_struct_type(opaque_class_symbol.type);
41+
const struct_union_typet::componentt &field =
42+
require_type::require_component(opaque_class_struct, "field2");
43+
REQUIRE(field.get_is_final());
44+
}
45+
}
46+
}
47+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
java-testing-utils
2+
testing-utils
3+
util

0 commit comments

Comments
 (0)