File: class_hierarchy_output.cpp

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (57 lines) | stat: -rw-r--r-- 1,723 bytes parent folder | download
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
51
52
53
54
55
56
57
/*******************************************************************\

Module: Unit tests for class_hierarchyt output functions

Author: Diffblue Ltd.

\*******************************************************************/

#include <java-testing-utils/load_java_class.h>
#include <testing-utils/use_catch.h>

#include <goto-programs/class_hierarchy.h>

#include <iostream>

void require_parent_child_relationship(
  const std::string &parent_raw,
  const std::string &child_raw,
  const std::string &output_dot)
{
  std::string parent = "java::" + parent_raw;
  std::string child = "java::" + child_raw;

  std::stringstream dot_expectation;

  dot_expectation << "\"" << child << "\" -> \"" << parent << "\"";

  REQUIRE(output_dot.find(dot_expectation.str()) != std::string::npos);
}

SCENARIO(
  "Output a simple class hierarchy",
  "[core][goto-programs][class_hierarchy]")
{
  symbol_tablet symbol_table =
    load_java_class("HierarchyTest", "./java_bytecode/goto-programs/");
  class_hierarchyt hierarchy;

  std::stringstream output_stream;
  std::stringstream output_dot_stream;

  hierarchy(symbol_table);
  hierarchy.output_dot(output_dot_stream);

  std::string output_dot = output_dot_stream.str();

  require_parent_child_relationship(
    "HierarchyTest", "HierarchyTestChild1", output_dot);
  require_parent_child_relationship(
    "HierarchyTest", "HierarchyTestChild2", output_dot);
  require_parent_child_relationship(
    "HierarchyTestChild1", "HierarchyTestGrandchild", output_dot);
  require_parent_child_relationship(
    "HierarchyTestInterface1", "HierarchyTestGrandchild", output_dot);
  require_parent_child_relationship(
    "HierarchyTestInterface2", "HierarchyTestGrandchild", output_dot);
}