Skip to content

Commit d78c440

Browse files
Adds unit test for parsing inner classes.
1 parent 1db413c commit d78c440

7 files changed

+110
-0
lines changed
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
public class InnerClasses {
2+
public class PublicInnerClass {
3+
public int i;
4+
public PublicInnerClass(int i) {
5+
this.i = i;
6+
}
7+
}
8+
class DefaultInnerClass {
9+
int i;
10+
DefaultInnerClass(int i) {
11+
this.i = i;
12+
}
13+
}
14+
protected class ProtectedInnerClass {
15+
protected int i;
16+
protected ProtectedInnerClass(int i) {
17+
this.i = i;
18+
}
19+
}
20+
private class PrivateInnerClass {
21+
private int i;
22+
private PrivateInnerClass(int i) {
23+
this.i = i;
24+
}
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*******************************************************************\
2+
3+
Module: Unit tests for converting annotations
4+
5+
Author: Diffblue Ltd.
6+
7+
\*******************************************************************/
8+
9+
#include <java-testing-utils/load_java_class.h>
10+
#include <java_bytecode/java_bytecode_convert_class.h>
11+
#include <java_bytecode/java_bytecode_parse_tree.h>
12+
#include <java_bytecode/java_types.h>
13+
#include <testing-utils/catch.hpp>
14+
15+
// See
16+
// https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.16.1
17+
SCENARIO(
18+
"java_bytecode_parse_attributes",
19+
"[core][java_bytecode][java_bytecode_parser]")
20+
{
21+
GIVEN("Some class files in the class path")
22+
{
23+
WHEN("Parsing the InnerClasses attribute for a public inner class")
24+
{
25+
const symbol_tablet &new_symbol_table =
26+
load_java_class("InnerClasses", "./java_bytecode/java_bytecode_parser");
27+
28+
THEN("The class should be marked as public")
29+
{
30+
const symbolt &class_symbol =
31+
*new_symbol_table.lookup("java::InnerClasses$PublicInnerClass");
32+
const java_class_typet java_class =
33+
to_java_class_type(class_symbol.type);
34+
REQUIRE(java_class.get_inner_class() == ID_is_inner_class);
35+
REQUIRE(java_class.get_access() == ID_public);
36+
}
37+
}
38+
WHEN("Parsing the InnerClasses attribute for a package private inner class")
39+
{
40+
const symbol_tablet &new_symbol_table =
41+
load_java_class("InnerClasses", "./java_bytecode/java_bytecode_parser");
42+
43+
THEN("The class should be marked as default")
44+
{
45+
const symbolt &class_symbol =
46+
*new_symbol_table.lookup("java::InnerClasses$DefaultInnerClass");
47+
const java_class_typet java_class =
48+
to_java_class_type(class_symbol.type);
49+
REQUIRE(java_class.get_inner_class() == ID_is_inner_class);
50+
REQUIRE(java_class.get_access() == ID_default);
51+
}
52+
}
53+
WHEN("Parsing the InnerClasses attribute for a protected inner class")
54+
{
55+
const symbol_tablet &new_symbol_table =
56+
load_java_class("InnerClasses", "./java_bytecode/java_bytecode_parser");
57+
58+
THEN("The class should be marked as protected")
59+
{
60+
const symbolt &class_symbol =
61+
*new_symbol_table.lookup("java::InnerClasses$ProtectedInnerClass");
62+
const java_class_typet java_class =
63+
to_java_class_type(class_symbol.type);
64+
REQUIRE(java_class.get_inner_class() == ID_is_inner_class);
65+
REQUIRE(java_class.get_access() == ID_protected);
66+
}
67+
}
68+
WHEN("Parsing the InnerClasses attribute for a private inner class")
69+
{
70+
const symbol_tablet &new_symbol_table =
71+
load_java_class("InnerClasses", "./java_bytecode/java_bytecode_parser");
72+
73+
THEN("The class should be marked as private")
74+
{
75+
const symbolt &class_symbol =
76+
*new_symbol_table.lookup("java::InnerClasses$PrivateInnerClass");
77+
const java_class_typet java_class =
78+
to_java_class_type(class_symbol.type);
79+
REQUIRE(java_class.get_inner_class() == ID_is_inner_class);
80+
REQUIRE(java_class.get_access() == ID_private);
81+
}
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)