[clang-tools-extra] [llvm] Clang doc test (PR #93928)
via cfe-commits
cfe-commits at lists.llvm.org
Thu May 30 23:23:26 PDT 2024
https://github.com/PeterChou1 created https://github.com/llvm/llvm-project/pull/93928
issue: https://github.com/llvm/llvm-project/issues/93925
>From a4141043cb67a8396a82724f4d5d0ec3db0cdfe6 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Thu, 30 May 2024 22:22:02 -0400
Subject: [PATCH 1/3] [clang][clang-doc] add first basic e2e test
---
0001-clang-doc-add-e2e-unit-test.patch | 369 ++++++++++++++++++
.../Inputs/clang-doc-project1/CMakeLists.txt | 14 +
.../Inputs/clang-doc-project1/Calculator.cpp | 21 +
.../Inputs/clang-doc-project1/Calculator.h | 46 +++
.../Inputs/clang-doc-project1/Circle.cpp | 11 +
.../Inputs/clang-doc-project1/Circle.h | 35 ++
.../Inputs/clang-doc-project1/Rectangle.cpp | 12 +
.../Inputs/clang-doc-project1/Rectangle.h | 37 ++
.../Inputs/clang-doc-project1/Shape.h | 30 ++
.../clang-doc-project1/database_template.json | 22 ++
.../Inputs/clang-doc-project1/main.cpp | 25 ++
.../test/clang-doc/clang-doc-project1.cpp | 11 +
12 files changed, 633 insertions(+)
create mode 100644 0001-clang-doc-add-e2e-unit-test.patch
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
create mode 100644 clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
diff --git a/0001-clang-doc-add-e2e-unit-test.patch b/0001-clang-doc-add-e2e-unit-test.patch
new file mode 100644
index 0000000000000..1c8f20e51100b
--- /dev/null
+++ b/0001-clang-doc-add-e2e-unit-test.patch
@@ -0,0 +1,369 @@
+From 26dc42ff5f6f4fd4d2d0bea3dae785f70f835803 Mon Sep 17 00:00:00 2001
+From: PeterChou1 <peter.chou at mail.utoronto.ca>
+Date: Thu, 30 May 2024 21:55:27 -0400
+Subject: [PATCH] [clang-doc] add e2e unit test
+
+---
+ .../Inputs/clang-doc-project1/CMakeLists.txt | 14 ++++++
+ .../Inputs/clang-doc-project1/Calculator.cpp | 21 +++++++++
+ .../Inputs/clang-doc-project1/Calculator.h | 46 +++++++++++++++++++
+ .../Inputs/clang-doc-project1/Circle.cpp | 11 +++++
+ .../Inputs/clang-doc-project1/Circle.h | 35 ++++++++++++++
+ .../Inputs/clang-doc-project1/Rectangle.cpp | 12 +++++
+ .../Inputs/clang-doc-project1/Rectangle.h | 37 +++++++++++++++
+ .../Inputs/clang-doc-project1/Shape.h | 30 ++++++++++++
+ .../clang-doc-project1/database_template.json | 22 +++++++++
+ .../Inputs/clang-doc-project1/main.cpp | 25 ++++++++++
+ .../test/clang-doc/clang-doc-project1.cpp | 11 +++++
+ 11 files changed, 264 insertions(+)
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
+ create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
+ create mode 100644 clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
+
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
+new file mode 100644
+index 000000000000..a865714e04b1
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
+@@ -0,0 +1,14 @@
++project(clang_doc_project1)
++
++set(CMAKE_CXX_STANDARD 17)
++
++# Add the executable
++add_executable(ProjectClangDoc1
++ src/main.cpp
++ src/Calculator.cpp
++ src/Circle.cpp
++ src/Rectangle.cpp
++)
++
++# Include directories
++target_include_directories(ProjectClangDoc1 PUBLIC include)
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
+new file mode 100644
+index 000000000000..df1778c3b9d5
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
+@@ -0,0 +1,21 @@
++#include "Calculator.h"
++#include <stdexcept>
++
++int Calculator::add(int a, int b) {
++ return a + b;
++}
++
++int Calculator::subtract(int a, int b) {
++ return a - b;
++}
++
++int Calculator::multiply(int a, int b) {
++ return a * b;
++}
++
++double Calculator::divide(int a, int b) {
++ if (b == 0) {
++ throw std::invalid_argument("Division by zero");
++ }
++ return static_cast<double>(a) / b;
++}
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
+new file mode 100644
+index 000000000000..6811834bc015
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
+@@ -0,0 +1,46 @@
++#pragma once
++
++/**
++ * @brief A simple calculator class.
++ *
++ * Provides basic arithmetic operations.
++ */
++class Calculator {
++public:
++ /**
++ * @brief Adds two integers.
++ *
++ * @param a First integer.
++ * @param b Second integer.
++ * @return int The sum of a and b.
++ */
++ int add(int a, int b);
++
++ /**
++ * @brief Subtracts the second integer from the first.
++ *
++ * @param a First integer.
++ * @param b Second integer.
++ * @return int The result of a - b.
++ */
++ int subtract(int a, int b);
++
++ /**
++ * @brief Multiplies two integers.
++ *
++ * @param a First integer.
++ * @param b Second integer.
++ * @return int The product of a and b.
++ */
++ int multiply(int a, int b);
++
++ /**
++ * @brief Divides the first integer by the second.
++ *
++ * @param a First integer.
++ * @param b Second integer.
++ * @return double The result of a / b.
++ * @throw std::invalid_argument if b is zero.
++ */
++ double divide(int a, int b);
++};
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
+new file mode 100644
+index 000000000000..823384a4d97e
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
+@@ -0,0 +1,11 @@
++#include "Circle.h"
++
++Circle::Circle(double radius) : radius_(radius) {}
++
++double Circle::area() const {
++ return 3.141 * radius_ * radius_;
++}
++
++double Circle::perimeter() const {
++ return 3.141 * radius_;
++}
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
+new file mode 100644
+index 000000000000..7bee3ffa9253
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
+@@ -0,0 +1,35 @@
++#pragma once
++
++#include "Shape.h"
++
++/**
++ * @brief Circle class derived from Shape.
++ *
++ * Represents a circle with a given radius.
++ */
++class Circle : public Shape {
++public:
++ /**
++ * @brief Constructs a new Circle object.
++ *
++ * @param radius Radius of the circle.
++ */
++ Circle(double radius);
++
++ /**
++ * @brief Calculates the area of the circle.
++ *
++ * @return double The area of the circle.
++ */
++ double area() const override;
++
++ /**
++ * @brief Calculates the perimeter of the circle.
++ *
++ * @return double The perimeter of the circle.
++ */
++ double perimeter() const override;
++
++private:
++ double radius_; ///< Radius of the circle.
++};
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
+new file mode 100644
+index 000000000000..7ffc769157eb
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
+@@ -0,0 +1,12 @@
++#include "Rectangle.h"
++
++Rectangle::Rectangle(double width, double height)
++ : width_(width), height_(height) {}
++
++double Rectangle::area() const {
++ return width_ * height_;
++}
++
++double Rectangle::perimeter() const {
++ return 2 * (width_ + height_);
++}
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
+new file mode 100644
+index 000000000000..8c6223a4f618
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
+@@ -0,0 +1,37 @@
++#pragma once
++
++#include "Shape.h"
++
++/**
++ * @brief Rectangle class derived from Shape.
++ *
++ * Represents a rectangle with a given width and height.
++ */
++class Rectangle : public Shape {
++public:
++ /**
++ * @brief Constructs a new Rectangle object.
++ *
++ * @param width Width of the rectangle.
++ * @param height Height of the rectangle.
++ */
++ Rectangle(double width, double height);
++
++ /**
++ * @brief Calculates the area of the rectangle.
++ *
++ * @return double The area of the rectangle.
++ */
++ double area() const override;
++
++ /**
++ * @brief Calculates the perimeter of the rectangle.
++ *
++ * @return double The perimeter of the rectangle.
++ */
++ double perimeter() const override;
++
++private:
++ double width_; ///< Width of the rectangle.
++ double height_; ///< Height of the rectangle.
++};
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
+new file mode 100644
+index 000000000000..e5c5d4c9e441
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
+@@ -0,0 +1,30 @@
++#pragma once
++
++/**
++ * @brief Abstract base class for shapes.
++ *
++ * Provides a common interface for different types of shapes.
++ */
++class Shape {
++public:
++ /**
++ * @brief Virtual destructor.
++ */
++ virtual ~Shape() {}
++
++ /**
++ * @brief Calculates the area of the shape.
++ *
++ * @return double The area of the shape.
++ */
++ virtual double area() const = 0;
++
++ /**
++ * @brief Calculates the perimeter of the shape.
++ *
++ * @return double The perimeter of the shape.
++ */
++ virtual double perimeter() const = 0;
++};
++
++
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
+new file mode 100644
+index 000000000000..0549c5b718f0
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
+@@ -0,0 +1,22 @@
++[
++{
++ "directory": "$test_dir/build",
++ "command": "clang++ -o main.o -I../include $test_dir/src/main.cpp",
++ "file": "$test_dir/src/main.cpp"
++},
++{
++ "directory": "$test_dir/build",
++ "command": "clang++ -o Calculator.o -I../include $test_dir/src/Calculator.cpp",
++ "file": "$test_dir/src/Calculator.cpp"
++},
++{
++ "directory": "$test_dir/build",
++ "command": "clang++ -o Circle.o -I../include $test_dir/src/Circle.cpp",
++ "file": "$test_dir/src/Circle.cpp"
++},
++{
++ "directory": "$test_dir/build",
++ "command": "clang++ -o Rectangle.o -I../include $test_dir/src/Rectangle.cpp",
++ "file": "$test_dir/src/Rectangle.cpp"
++}
++]
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
+new file mode 100644
+index 000000000000..e20732c7de37
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
+@@ -0,0 +1,25 @@
++#include <iostream>
++#include "Calculator.h"
++#include "Circle.h"
++#include "Rectangle.h"
++
++int main() {
++ // Calculator
++ Calculator calc;
++ std::cout << "Add: " << calc.add(3, 4) << std::endl;
++ std::cout << "Subtract: " << calc.subtract(10, 5) << std::endl;
++ std::cout << "Multiply: " << calc.multiply(2, 3) << std::endl;
++ std::cout << "Divide: " << calc.divide(10, 2) << std::endl;
++
++ // Circle
++ Circle circle(5.0);
++ std::cout << "Circle Area: " << circle.area() << std::endl;
++ std::cout << "Circle Perimeter: " << circle.perimeter() << std::endl;
++
++ // Rectangle
++ Rectangle rectangle(4.0, 6.0);
++ std::cout << "Rectangle Area: " << rectangle.area() << std::endl;
++ std::cout << "Rectangle Perimeter: " << rectangle.perimeter() << std::endl;
++
++ return 0;
++}
+\ No newline at end of file
+diff --git a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
+new file mode 100644
+index 000000000000..8c0289519854
+--- /dev/null
++++ b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
+@@ -0,0 +1,11 @@
++// RUN: mkdir -p %T/clang-doc/build
++// RUN: mkdir -p %T/clang-doc/include
++// RUN: mkdir -p %T/clang-doc/src
++// RUN: mkdir -p %T/clang-doc/docs
++// RUN: sed 's|$test_dir|%/T/clang-doc|g' %S/Inputs/clang-doc-project1/database_template.json > %T/clang-doc/build/compile_commands.json
++// RUN: cp %S/Inputs/clang-doc-project1/*.h %T/clang-doc/include
++// RUN: cp %S/Inputs/clang-doc-project1/*.cpp %T/clang-doc/src
++// RUN: cd %T/clang-doc/build
++// RUN: clang-doc --format=html --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json
++
++
+--
+2.36.1.windows.1
+
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
new file mode 100644
index 0000000000000..a865714e04b17
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
@@ -0,0 +1,14 @@
+project(clang_doc_project1)
+
+set(CMAKE_CXX_STANDARD 17)
+
+# Add the executable
+add_executable(ProjectClangDoc1
+ src/main.cpp
+ src/Calculator.cpp
+ src/Circle.cpp
+ src/Rectangle.cpp
+)
+
+# Include directories
+target_include_directories(ProjectClangDoc1 PUBLIC include)
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
new file mode 100644
index 0000000000000..df1778c3b9d55
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
@@ -0,0 +1,21 @@
+#include "Calculator.h"
+#include <stdexcept>
+
+int Calculator::add(int a, int b) {
+ return a + b;
+}
+
+int Calculator::subtract(int a, int b) {
+ return a - b;
+}
+
+int Calculator::multiply(int a, int b) {
+ return a * b;
+}
+
+double Calculator::divide(int a, int b) {
+ if (b == 0) {
+ throw std::invalid_argument("Division by zero");
+ }
+ return static_cast<double>(a) / b;
+}
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
new file mode 100644
index 0000000000000..6811834bc0159
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
@@ -0,0 +1,46 @@
+#pragma once
+
+/**
+ * @brief A simple calculator class.
+ *
+ * Provides basic arithmetic operations.
+ */
+class Calculator {
+public:
+ /**
+ * @brief Adds two integers.
+ *
+ * @param a First integer.
+ * @param b Second integer.
+ * @return int The sum of a and b.
+ */
+ int add(int a, int b);
+
+ /**
+ * @brief Subtracts the second integer from the first.
+ *
+ * @param a First integer.
+ * @param b Second integer.
+ * @return int The result of a - b.
+ */
+ int subtract(int a, int b);
+
+ /**
+ * @brief Multiplies two integers.
+ *
+ * @param a First integer.
+ * @param b Second integer.
+ * @return int The product of a and b.
+ */
+ int multiply(int a, int b);
+
+ /**
+ * @brief Divides the first integer by the second.
+ *
+ * @param a First integer.
+ * @param b Second integer.
+ * @return double The result of a / b.
+ * @throw std::invalid_argument if b is zero.
+ */
+ double divide(int a, int b);
+};
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
new file mode 100644
index 0000000000000..823384a4d97e8
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
@@ -0,0 +1,11 @@
+#include "Circle.h"
+
+Circle::Circle(double radius) : radius_(radius) {}
+
+double Circle::area() const {
+ return 3.141 * radius_ * radius_;
+}
+
+double Circle::perimeter() const {
+ return 3.141 * radius_;
+}
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
new file mode 100644
index 0000000000000..7bee3ffa92539
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "Shape.h"
+
+/**
+ * @brief Circle class derived from Shape.
+ *
+ * Represents a circle with a given radius.
+ */
+class Circle : public Shape {
+public:
+ /**
+ * @brief Constructs a new Circle object.
+ *
+ * @param radius Radius of the circle.
+ */
+ Circle(double radius);
+
+ /**
+ * @brief Calculates the area of the circle.
+ *
+ * @return double The area of the circle.
+ */
+ double area() const override;
+
+ /**
+ * @brief Calculates the perimeter of the circle.
+ *
+ * @return double The perimeter of the circle.
+ */
+ double perimeter() const override;
+
+private:
+ double radius_; ///< Radius of the circle.
+};
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
new file mode 100644
index 0000000000000..7ffc769157ebc
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
@@ -0,0 +1,12 @@
+#include "Rectangle.h"
+
+Rectangle::Rectangle(double width, double height)
+ : width_(width), height_(height) {}
+
+double Rectangle::area() const {
+ return width_ * height_;
+}
+
+double Rectangle::perimeter() const {
+ return 2 * (width_ + height_);
+}
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
new file mode 100644
index 0000000000000..8c6223a4f6180
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "Shape.h"
+
+/**
+ * @brief Rectangle class derived from Shape.
+ *
+ * Represents a rectangle with a given width and height.
+ */
+class Rectangle : public Shape {
+public:
+ /**
+ * @brief Constructs a new Rectangle object.
+ *
+ * @param width Width of the rectangle.
+ * @param height Height of the rectangle.
+ */
+ Rectangle(double width, double height);
+
+ /**
+ * @brief Calculates the area of the rectangle.
+ *
+ * @return double The area of the rectangle.
+ */
+ double area() const override;
+
+ /**
+ * @brief Calculates the perimeter of the rectangle.
+ *
+ * @return double The perimeter of the rectangle.
+ */
+ double perimeter() const override;
+
+private:
+ double width_; ///< Width of the rectangle.
+ double height_; ///< Height of the rectangle.
+};
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
new file mode 100644
index 0000000000000..e5c5d4c9e4412
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
@@ -0,0 +1,30 @@
+#pragma once
+
+/**
+ * @brief Abstract base class for shapes.
+ *
+ * Provides a common interface for different types of shapes.
+ */
+class Shape {
+public:
+ /**
+ * @brief Virtual destructor.
+ */
+ virtual ~Shape() {}
+
+ /**
+ * @brief Calculates the area of the shape.
+ *
+ * @return double The area of the shape.
+ */
+ virtual double area() const = 0;
+
+ /**
+ * @brief Calculates the perimeter of the shape.
+ *
+ * @return double The perimeter of the shape.
+ */
+ virtual double perimeter() const = 0;
+};
+
+
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
new file mode 100644
index 0000000000000..0549c5b718f08
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
@@ -0,0 +1,22 @@
+[
+{
+ "directory": "$test_dir/build",
+ "command": "clang++ -o main.o -I../include $test_dir/src/main.cpp",
+ "file": "$test_dir/src/main.cpp"
+},
+{
+ "directory": "$test_dir/build",
+ "command": "clang++ -o Calculator.o -I../include $test_dir/src/Calculator.cpp",
+ "file": "$test_dir/src/Calculator.cpp"
+},
+{
+ "directory": "$test_dir/build",
+ "command": "clang++ -o Circle.o -I../include $test_dir/src/Circle.cpp",
+ "file": "$test_dir/src/Circle.cpp"
+},
+{
+ "directory": "$test_dir/build",
+ "command": "clang++ -o Rectangle.o -I../include $test_dir/src/Rectangle.cpp",
+ "file": "$test_dir/src/Rectangle.cpp"
+}
+]
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
new file mode 100644
index 0000000000000..e20732c7de371
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+#include "Calculator.h"
+#include "Circle.h"
+#include "Rectangle.h"
+
+int main() {
+ // Calculator
+ Calculator calc;
+ std::cout << "Add: " << calc.add(3, 4) << std::endl;
+ std::cout << "Subtract: " << calc.subtract(10, 5) << std::endl;
+ std::cout << "Multiply: " << calc.multiply(2, 3) << std::endl;
+ std::cout << "Divide: " << calc.divide(10, 2) << std::endl;
+
+ // Circle
+ Circle circle(5.0);
+ std::cout << "Circle Area: " << circle.area() << std::endl;
+ std::cout << "Circle Perimeter: " << circle.perimeter() << std::endl;
+
+ // Rectangle
+ Rectangle rectangle(4.0, 6.0);
+ std::cout << "Rectangle Area: " << rectangle.area() << std::endl;
+ std::cout << "Rectangle Perimeter: " << rectangle.perimeter() << std::endl;
+
+ return 0;
+}
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
new file mode 100644
index 0000000000000..8c0289519854d
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
@@ -0,0 +1,11 @@
+// RUN: mkdir -p %T/clang-doc/build
+// RUN: mkdir -p %T/clang-doc/include
+// RUN: mkdir -p %T/clang-doc/src
+// RUN: mkdir -p %T/clang-doc/docs
+// RUN: sed 's|$test_dir|%/T/clang-doc|g' %S/Inputs/clang-doc-project1/database_template.json > %T/clang-doc/build/compile_commands.json
+// RUN: cp %S/Inputs/clang-doc-project1/*.h %T/clang-doc/include
+// RUN: cp %S/Inputs/clang-doc-project1/*.cpp %T/clang-doc/src
+// RUN: cd %T/clang-doc/build
+// RUN: clang-doc --format=html --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json
+
+
>From 28ac8462c4b9a6c5e2e7d0da033149181fb519c3 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Fri, 31 May 2024 01:39:27 -0400
Subject: [PATCH 2/3] [clang][clang-doc] add unit file check
---
.../Inputs/clang-doc-project1/CMakeLists.txt | 14 -
.../test/clang-doc/clang-doc-project1.cpp | 361 +++++++++++++++++-
2 files changed, 360 insertions(+), 15 deletions(-)
delete mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
deleted file mode 100644
index a865714e04b17..0000000000000
--- a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-project(clang_doc_project1)
-
-set(CMAKE_CXX_STANDARD 17)
-
-# Add the executable
-add_executable(ProjectClangDoc1
- src/main.cpp
- src/Calculator.cpp
- src/Circle.cpp
- src/Rectangle.cpp
-)
-
-# Include directories
-target_include_directories(ProjectClangDoc1 PUBLIC include)
diff --git a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
index 8c0289519854d..c382396ea4cab 100644
--- a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
+++ b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
@@ -6,6 +6,365 @@
// RUN: cp %S/Inputs/clang-doc-project1/*.h %T/clang-doc/include
// RUN: cp %S/Inputs/clang-doc-project1/*.cpp %T/clang-doc/src
// RUN: cd %T/clang-doc/build
-// RUN: clang-doc --format=html --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json
+// RUN: clang-doc --format=html --repository=github.com --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json
+// RUN: FileCheck -input-file=%T/clang-doc/docs/index_json.js -check-prefix=CHECK-JSON-INDEX %s
+// RUN: FileCheck -input-file=%T/clang-doc/docs/GlobalNamespace/Shape.html -check-prefix=CHECK-HTML-SHAPE %s
+// RUN: FileCheck -input-file=%T/clang-doc/docs/GlobalNamespace/Calculator.html -check-prefix=CHECK-HTML-CALC %s
+// RUN: FileCheck -input-file=%T/clang-doc/docs/GlobalNamespace/Rectangle.html -check-prefix=CHECK-HTML-RECTANGLE %s
+// RUN: FileCheck -input-file=%T/clang-doc/docs/GlobalNamespace/Circle.html -check-prefix=CHECK-HTML-CIRCLE %s
+
+// CHECK-JSON-INDEX: var JsonIndex = `
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "",
+// CHECK-JSON-INDEX: "RefType": "default",
+// CHECK-JSON-INDEX: "Path": "",
+// CHECK-JSON-INDEX: "Children": [
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "GlobalNamespace",
+// CHECK-JSON-INDEX: "RefType": "namespace",
+// CHECK-JSON-INDEX: "Path": "GlobalNamespace",
+// CHECK-JSON-INDEX: "Children": [
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "Calculator",
+// CHECK-JSON-INDEX: "RefType": "record",
+// CHECK-JSON-INDEX: "Path": "GlobalNamespace",
+// CHECK-JSON-INDEX: "Children": []
+// CHECK-JSON-INDEX: },
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "Circle",
+// CHECK-JSON-INDEX: "RefType": "record",
+// CHECK-JSON-INDEX: "Path": "GlobalNamespace",
+// CHECK-JSON-INDEX: "Children": []
+// CHECK-JSON-INDEX: },
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "Rectangle",
+// CHECK-JSON-INDEX: "RefType": "record",
+// CHECK-JSON-INDEX: "Path": "GlobalNamespace",
+// CHECK-JSON-INDEX: "Children": []
+// CHECK-JSON-INDEX: },
+// CHECK-JSON-INDEX: {
+// CHECK-JSON-INDEX: "USR": "{{([0-9A-F]{40})}}",
+// CHECK-JSON-INDEX: "Name": "Shape",
+// CHECK-JSON-INDEX: "RefType": "record",
+// CHECK-JSON-INDEX: "Path": "GlobalNamespace",
+// CHECK-JSON-INDEX: "Children": []
+// CHECK-JSON-INDEX: }
+// CHECK-JSON-INDEX: ]
+// CHECK-JSON-INDEX: }
+// CHECK-JSON-INDEX: ]
+// CHECK-JSON-INDEX: }`;
+
+// CHECK-HTML-SHAPE: <!DOCTYPE html>
+// CHECK-HTML-SHAPE: <meta charset="utf-8"/>
+// CHECK-HTML-SHAPE: <title>class Shape</title>
+// CHECK-HTML-SHAPE: <link rel="stylesheet" href="{{.*}}clang-doc-default-stylesheet.css"/>
+// CHECK-HTML-SHAPE: <script src="{{.*}}index.js"></script>
+// CHECK-HTML-SHAPE: <script src="{{.*}}index_json.js"></script>
+// CHECK-HTML-SHAPE: <header id="project-title"></header>
+// CHECK-HTML-SHAPE: <main>
+// CHECK-HTML-SHAPE: <div id="sidebar-left" path="GlobalNamespace" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div>
+// CHECK-HTML-SHAPE: <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
+// CHECK-HTML-SHAPE: <h1>class Shape</h1>
+// CHECK-HTML-SHAPE: <p>Defined at line 8 of file {{.*}}Shape.h</p>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <p> Provides a common interface for different types of shapes.</p>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: <h2 id="Functions">Functions</h2>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <h3 id="{{([0-9A-F]{40})}}">~Shape</h3>
+// CHECK-HTML-SHAPE: <p>public void ~Shape()</p>
+// CHECK-HTML-SHAPE: <p>Defined at line 13 of file {{.*}}Shape.h</p>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <div></div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: <h3 id="{{([0-9A-F]{40})}}">area</h3>
+// CHECK-HTML-SHAPE: <p>public double area()</p>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <div></div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: <h3 id="{{([0-9A-F]{40})}}">perimeter</h3>
+// CHECK-HTML-SHAPE: <p>public double perimeter()</p>
+// CHECK-HTML-SHAPE: <div>
+// CHECK-HTML-SHAPE: <div></div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
+// CHECK-HTML-SHAPE: <ol>
+// CHECK-HTML-SHAPE: <li>
+// CHECK-HTML-SHAPE: <span>
+// CHECK-HTML-SHAPE: <a href="#Functions">Functions</a>
+// CHECK-HTML-SHAPE: </span>
+// CHECK-HTML-SHAPE: <ul>
+// CHECK-HTML-SHAPE: <li>
+// CHECK-HTML-SHAPE: <span>
+// CHECK-HTML-SHAPE: <a href="#{{([0-9A-F]{40})}}">~Shape</a>
+// CHECK-HTML-SHAPE: </span>
+// CHECK-HTML-SHAPE: </li>
+// CHECK-HTML-SHAPE: <li>
+// CHECK-HTML-SHAPE: <span>
+// CHECK-HTML-SHAPE: <a href="#{{([0-9A-F]{40})}}">area</a>
+// CHECK-HTML-SHAPE: </span>
+// CHECK-HTML-SHAPE: </li>
+// CHECK-HTML-SHAPE: <li>
+// CHECK-HTML-SHAPE: <span>
+// CHECK-HTML-SHAPE: <a href="#{{([0-9A-F]{40})}}">perimeter</a>
+// CHECK-HTML-SHAPE: </span>
+// CHECK-HTML-SHAPE: </li>
+// CHECK-HTML-SHAPE: </ul>
+// CHECK-HTML-SHAPE: </li>
+// CHECK-HTML-SHAPE: </ol>
+// CHECK-HTML-SHAPE: </div>
+// CHECK-HTML-SHAPE: </main>
+
+// CHECK-HTML-CALC: <!DOCTYPE html>
+// CHECK-HTML-CALC: <meta charset="utf-8"/>
+// CHECK-HTML-CALC: <title>class Calculator</title>
+// CHECK-HTML-CALC: <link rel="stylesheet" href="{{.*}}clang-doc-default-stylesheet.css"/>
+// CHECK-HTML-CALC: <script src="{{.*}}index.js"></script>
+// CHECK-HTML-CALC: <script src="{{.*}}index_json.js"></script>
+// CHECK-HTML-CALC: <header id="project-title"></header>
+// CHECK-HTML-CALC: <main>
+// CHECK-HTML-CALC: <div id="sidebar-left" path="GlobalNamespace" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div>
+// CHECK-HTML-CALC: <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
+// CHECK-HTML-CALC: <h1>class Calculator</h1>
+// CHECK-HTML-CALC: <p>Defined at line 8 of file {{.*}}Calculator.h</p>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <p> Provides basic arithmetic operations.</p>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: <h2 id="Functions">Functions</h2>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <h3 id="{{([0-9A-F]{40})}}">add</h3>
+// CHECK-HTML-CALC: <p>public int add(int a, int b)</p>
+// CHECK-HTML-CALC: <p>Defined at line 4 of file {{.*}}Calculator.cpp</p>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <div></div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: <h3 id="{{([0-9A-F]{40})}}">subtract</h3>
+// CHECK-HTML-CALC: <p>public int subtract(int a, int b)</p>
+// CHECK-HTML-CALC: <p>Defined at line 8 of file {{.*}}Calculator.cpp</p>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <div></div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: <h3 id="{{([0-9A-F]{40})}}">multiply</h3>
+// CHECK-HTML-CALC: <p>public int multiply(int a, int b)</p>
+// CHECK-HTML-CALC: <p>Defined at line 12 of file {{.*}}Calculator.cpp</p>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <div></div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: <h3 id="{{([0-9A-F]{40})}}">divide</h3>
+// CHECK-HTML-CALC: <p>public double divide(int a, int b)</p>
+// CHECK-HTML-CALC: <p>Defined at line 16 of file {{.*}}Calculator.cpp</p>
+// CHECK-HTML-CALC: <div>
+// CHECK-HTML-CALC: <div></div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
+// CHECK-HTML-CALC: <ol>
+// CHECK-HTML-CALC: <li>
+// CHECK-HTML-CALC: <span>
+// CHECK-HTML-CALC: <a href="#Functions">Functions</a>
+// CHECK-HTML-CALC: </span>
+// CHECK-HTML-CALC: <ul>
+// CHECK-HTML-CALC: <li>
+// CHECK-HTML-CALC: <span>
+// CHECK-HTML-CALC: <a href="#{{([0-9A-F]{40})}}">add</a>
+// CHECK-HTML-CALC: </span>
+// CHECK-HTML-CALC: </li>
+// CHECK-HTML-CALC: <li>
+// CHECK-HTML-CALC: <span>
+// CHECK-HTML-CALC: <a href="#{{([0-9A-F]{40})}}">subtract</a>
+// CHECK-HTML-CALC: </span>
+// CHECK-HTML-CALC: </li>
+// CHECK-HTML-CALC: <li>
+// CHECK-HTML-CALC: <span>
+// CHECK-HTML-CALC: <a href="#{{([0-9A-F]{40})}}">multiply</a>
+// CHECK-HTML-CALC: </span>
+// CHECK-HTML-CALC: </li>
+// CHECK-HTML-CALC: <li>
+// CHECK-HTML-CALC: <span>
+// CHECK-HTML-CALC: <a href="#{{([0-9A-F]{40})}}">divide</a>
+// CHECK-HTML-CALC: </span>
+// CHECK-HTML-CALC: </li>
+// CHECK-HTML-CALC: </ul>
+// CHECK-HTML-CALC: </li>
+// CHECK-HTML-CALC: </ol>
+// CHECK-HTML-CALC: </div>
+// CHECK-HTML-CALC: </main>
+
+// CHECK-HTML-RECTANGLE: <!DOCTYPE html>
+// CHECK-HTML-RECTANGLE: <meta charset="utf-8"/>
+// CHECK-HTML-RECTANGLE: <title>class Rectangle</title>
+// CHECK-HTML-RECTANGLE: <link rel="stylesheet" href="{{.*}}clang-doc-default-stylesheet.css"/>
+// CHECK-HTML-RECTANGLE: <script src="{{.*}}index.js"></script>
+// CHECK-HTML-RECTANGLE: <script src="{{.*}}index_json.js"></script>
+// CHECK-HTML-RECTANGLE: <header id="project-title"></header>
+// CHECK-HTML-RECTANGLE: <main>
+// CHECK-HTML-RECTANGLE: <div id="sidebar-left" path="GlobalNamespace" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div>
+// CHECK-HTML-RECTANGLE: <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
+// CHECK-HTML-RECTANGLE: <h1>class Rectangle</h1>
+// CHECK-HTML-RECTANGLE: <p>Defined at line 10 of file {{.*}}Rectangle.h</p>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <p> Represents a rectangle with a given width and height.</p>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: <p>
+// CHECK-HTML-RECTANGLE: Inherits from
+// CHECK-HTML-RECTANGLE: <a href="Shape.html">Shape</a>
+// CHECK-HTML-RECTANGLE: </p>
+// CHECK-HTML-RECTANGLE: <h2 id="Members">Members</h2>
+// CHECK-HTML-RECTANGLE: <ul>
+// CHECK-HTML-RECTANGLE: <li>private double width_</li>
+// CHECK-HTML-RECTANGLE: <li>private double height_</li>
+// CHECK-HTML-RECTANGLE: </ul>
+// CHECK-HTML-RECTANGLE: <h2 id="Functions">Functions</h2>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <h3 id="{{([0-9A-F]{40})}}">Rectangle</h3>
+// CHECK-HTML-RECTANGLE: <p>public void Rectangle(double width, double height)</p>
+// CHECK-HTML-RECTANGLE: <p>Defined at line 3 of file {{.*}}Rectangle.cpp</p>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <div></div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: <h3 id="{{([0-9A-F]{40})}}">area</h3>
+// CHECK-HTML-RECTANGLE: <p>public double area()</p>
+// CHECK-HTML-RECTANGLE: <p>Defined at line 6 of file {{.*}}Rectangle.cpp</p>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <div></div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: <h3 id="{{([0-9A-F]{40})}}">perimeter</h3>
+// CHECK-HTML-RECTANGLE: <p>public double perimeter()</p>
+// CHECK-HTML-RECTANGLE: <p>Defined at line 10 of file {{.*}}Rectangle.cpp</p>
+// CHECK-HTML-RECTANGLE: <div>
+// CHECK-HTML-RECTANGLE: <div></div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
+// CHECK-HTML-RECTANGLE: <ol>
+// CHECK-HTML-RECTANGLE: <li>
+// CHECK-HTML-RECTANGLE: <span>
+// CHECK-HTML-RECTANGLE: <a href="#Members">Members</a>
+// CHECK-HTML-RECTANGLE: </span>
+// CHECK-HTML-RECTANGLE: </li>
+// CHECK-HTML-RECTANGLE: <li>
+// CHECK-HTML-RECTANGLE: <span>
+// CHECK-HTML-RECTANGLE: <a href="#Functions">Functions</a>
+// CHECK-HTML-RECTANGLE: </span>
+// CHECK-HTML-RECTANGLE: <ul>
+// CHECK-HTML-RECTANGLE: <li>
+// CHECK-HTML-RECTANGLE: <span>
+// CHECK-HTML-RECTANGLE: <a href="#{{([0-9A-F]{40})}}">Rectangle</a>
+// CHECK-HTML-RECTANGLE: </span>
+// CHECK-HTML-RECTANGLE: </li>
+// CHECK-HTML-RECTANGLE: <li>
+// CHECK-HTML-RECTANGLE: <span>
+// CHECK-HTML-RECTANGLE: <a href="#{{([0-9A-F]{40})}}">area</a>
+// CHECK-HTML-RECTANGLE: </span>
+// CHECK-HTML-RECTANGLE: </li>
+// CHECK-HTML-RECTANGLE: <li>
+// CHECK-HTML-RECTANGLE: <span>
+// CHECK-HTML-RECTANGLE: <a href="#{{([0-9A-F]{40})}}">perimeter</a>
+// CHECK-HTML-RECTANGLE: </span>
+// CHECK-HTML-RECTANGLE: </li>
+// CHECK-HTML-RECTANGLE: </ul>
+// CHECK-HTML-RECTANGLE: </li>
+// CHECK-HTML-RECTANGLE: </ol>
+// CHECK-HTML-RECTANGLE: </div>
+// CHECK-HTML-RECTANGLE: </main>
+
+// CHECK-HTML-CIRCLE: <!DOCTYPE html>
+// CHECK-HTML-CIRCLE: <meta charset="utf-8"/>
+// CHECK-HTML-CIRCLE: <title>class Circle</title>
+// CHECK-HTML-CIRCLE: <link rel="stylesheet" href="{{.*}}clang-doc-default-stylesheet.css"/>
+// CHECK-HTML-CIRCLE: <script src="{{.*}}index.js"></script>
+// CHECK-HTML-CIRCLE: <script src="{{.*}}index_json.js"></script>
+// CHECK-HTML-CIRCLE: <header id="project-title"></header>
+// CHECK-HTML-CIRCLE: <main>
+// CHECK-HTML-CIRCLE: <div id="sidebar-left" path="GlobalNamespace" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div>
+// CHECK-HTML-CIRCLE: <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content">
+// CHECK-HTML-CIRCLE: <h1>class Circle</h1>
+// CHECK-HTML-CIRCLE: <p>Defined at line 10 of file {{.*}}Circle.h</p>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <p> Represents a circle with a given radius.</p>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: <p>
+// CHECK-HTML-CIRCLE: Inherits from
+// CHECK-HTML-CIRCLE: <a href="Shape.html">Shape</a>
+// CHECK-HTML-CIRCLE: </p>
+// CHECK-HTML-CIRCLE: <h2 id="Members">Members</h2>
+// CHECK-HTML-CIRCLE: <ul>
+// CHECK-HTML-CIRCLE: <li>private double radius_</li>
+// CHECK-HTML-CIRCLE: </ul>
+// CHECK-HTML-CIRCLE: <h2 id="Functions">Functions</h2>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <h3 id="{{([0-9A-F]{40})}}">Circle</h3>
+// CHECK-HTML-CIRCLE: <p>public void Circle(double radius)</p>
+// CHECK-HTML-CIRCLE: <p>Defined at line 3 of file {{.*}}Circle.cpp</p>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <div></div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: <h3 id="{{([0-9A-F]{40})}}">area</h3>
+// CHECK-HTML-CIRCLE: <p>public double area()</p>
+// CHECK-HTML-CIRCLE: <p>Defined at line 5 of file {{.*}}Circle.cpp</p>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <div></div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: <h3 id="{{([0-9A-F]{40})}}">perimeter</h3>
+// CHECK-HTML-CIRCLE: <p>public double perimeter()</p>
+// CHECK-HTML-CIRCLE: <p>Defined at line 9 of file {{.*}}Circle.cpp</p>
+// CHECK-HTML-CIRCLE: <div>
+// CHECK-HTML-CIRCLE: <div></div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
+// CHECK-HTML-CIRCLE: <ol>
+// CHECK-HTML-CIRCLE: <li>
+// CHECK-HTML-CIRCLE: <span>
+// CHECK-HTML-CIRCLE: <a href="#Members">Members</a>
+// CHECK-HTML-CIRCLE: </span>
+// CHECK-HTML-CIRCLE: </li>
+// CHECK-HTML-CIRCLE: <li>
+// CHECK-HTML-CIRCLE: <span>
+// CHECK-HTML-CIRCLE: <a href="#Functions">Functions</a>
+// CHECK-HTML-CIRCLE: </span>
+// CHECK-HTML-CIRCLE: <ul>
+// CHECK-HTML-CIRCLE: <li>
+// CHECK-HTML-CIRCLE: <span>
+// CHECK-HTML-CIRCLE: <a href="#{{([0-9A-F]{40})}}">Circle</a>
+// CHECK-HTML-CIRCLE: </span>
+// CHECK-HTML-CIRCLE: </li>
+// CHECK-HTML-CIRCLE: <li>
+// CHECK-HTML-CIRCLE: <span>
+// CHECK-HTML-CIRCLE: <a href="#{{([0-9A-F]{40})}}">area</a>
+// CHECK-HTML-CIRCLE: </span>
+// CHECK-HTML-CIRCLE: </li>
+// CHECK-HTML-CIRCLE: <li>
+// CHECK-HTML-CIRCLE: <span>
+// CHECK-HTML-CIRCLE: <a href="#{{([0-9A-F]{40})}}">perimeter</a>
+// CHECK-HTML-CIRCLE: </span>
+// CHECK-HTML-CIRCLE: </li>
+// CHECK-HTML-CIRCLE: </ul>
+// CHECK-HTML-CIRCLE: </li>
+// CHECK-HTML-CIRCLE: </ol>
+// CHECK-HTML-CIRCLE: </div>
+// CHECK-HTML-CIRCLE: </main>
+
+
+
+
>From 408e85354e95f2e16e2b3bd703365db3c7beef30 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Fri, 31 May 2024 01:43:09 -0400
Subject: [PATCH 3/3] [clang][clang-doc] delete patch
---
0001-clang-doc-add-e2e-unit-test.patch | 369 -------------------------
1 file changed, 369 deletions(-)
delete mode 100644 0001-clang-doc-add-e2e-unit-test.patch
diff --git a/0001-clang-doc-add-e2e-unit-test.patch b/0001-clang-doc-add-e2e-unit-test.patch
deleted file mode 100644
index 1c8f20e51100b..0000000000000
--- a/0001-clang-doc-add-e2e-unit-test.patch
+++ /dev/null
@@ -1,369 +0,0 @@
-From 26dc42ff5f6f4fd4d2d0bea3dae785f70f835803 Mon Sep 17 00:00:00 2001
-From: PeterChou1 <peter.chou at mail.utoronto.ca>
-Date: Thu, 30 May 2024 21:55:27 -0400
-Subject: [PATCH] [clang-doc] add e2e unit test
-
----
- .../Inputs/clang-doc-project1/CMakeLists.txt | 14 ++++++
- .../Inputs/clang-doc-project1/Calculator.cpp | 21 +++++++++
- .../Inputs/clang-doc-project1/Calculator.h | 46 +++++++++++++++++++
- .../Inputs/clang-doc-project1/Circle.cpp | 11 +++++
- .../Inputs/clang-doc-project1/Circle.h | 35 ++++++++++++++
- .../Inputs/clang-doc-project1/Rectangle.cpp | 12 +++++
- .../Inputs/clang-doc-project1/Rectangle.h | 37 +++++++++++++++
- .../Inputs/clang-doc-project1/Shape.h | 30 ++++++++++++
- .../clang-doc-project1/database_template.json | 22 +++++++++
- .../Inputs/clang-doc-project1/main.cpp | 25 ++++++++++
- .../test/clang-doc/clang-doc-project1.cpp | 11 +++++
- 11 files changed, 264 insertions(+)
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
- create mode 100644 clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
- create mode 100644 clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
-
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
-new file mode 100644
-index 000000000000..a865714e04b1
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/CMakeLists.txt
-@@ -0,0 +1,14 @@
-+project(clang_doc_project1)
-+
-+set(CMAKE_CXX_STANDARD 17)
-+
-+# Add the executable
-+add_executable(ProjectClangDoc1
-+ src/main.cpp
-+ src/Calculator.cpp
-+ src/Circle.cpp
-+ src/Rectangle.cpp
-+)
-+
-+# Include directories
-+target_include_directories(ProjectClangDoc1 PUBLIC include)
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
-new file mode 100644
-index 000000000000..df1778c3b9d5
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.cpp
-@@ -0,0 +1,21 @@
-+#include "Calculator.h"
-+#include <stdexcept>
-+
-+int Calculator::add(int a, int b) {
-+ return a + b;
-+}
-+
-+int Calculator::subtract(int a, int b) {
-+ return a - b;
-+}
-+
-+int Calculator::multiply(int a, int b) {
-+ return a * b;
-+}
-+
-+double Calculator::divide(int a, int b) {
-+ if (b == 0) {
-+ throw std::invalid_argument("Division by zero");
-+ }
-+ return static_cast<double>(a) / b;
-+}
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
-new file mode 100644
-index 000000000000..6811834bc015
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Calculator.h
-@@ -0,0 +1,46 @@
-+#pragma once
-+
-+/**
-+ * @brief A simple calculator class.
-+ *
-+ * Provides basic arithmetic operations.
-+ */
-+class Calculator {
-+public:
-+ /**
-+ * @brief Adds two integers.
-+ *
-+ * @param a First integer.
-+ * @param b Second integer.
-+ * @return int The sum of a and b.
-+ */
-+ int add(int a, int b);
-+
-+ /**
-+ * @brief Subtracts the second integer from the first.
-+ *
-+ * @param a First integer.
-+ * @param b Second integer.
-+ * @return int The result of a - b.
-+ */
-+ int subtract(int a, int b);
-+
-+ /**
-+ * @brief Multiplies two integers.
-+ *
-+ * @param a First integer.
-+ * @param b Second integer.
-+ * @return int The product of a and b.
-+ */
-+ int multiply(int a, int b);
-+
-+ /**
-+ * @brief Divides the first integer by the second.
-+ *
-+ * @param a First integer.
-+ * @param b Second integer.
-+ * @return double The result of a / b.
-+ * @throw std::invalid_argument if b is zero.
-+ */
-+ double divide(int a, int b);
-+};
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
-new file mode 100644
-index 000000000000..823384a4d97e
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.cpp
-@@ -0,0 +1,11 @@
-+#include "Circle.h"
-+
-+Circle::Circle(double radius) : radius_(radius) {}
-+
-+double Circle::area() const {
-+ return 3.141 * radius_ * radius_;
-+}
-+
-+double Circle::perimeter() const {
-+ return 3.141 * radius_;
-+}
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
-new file mode 100644
-index 000000000000..7bee3ffa9253
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Circle.h
-@@ -0,0 +1,35 @@
-+#pragma once
-+
-+#include "Shape.h"
-+
-+/**
-+ * @brief Circle class derived from Shape.
-+ *
-+ * Represents a circle with a given radius.
-+ */
-+class Circle : public Shape {
-+public:
-+ /**
-+ * @brief Constructs a new Circle object.
-+ *
-+ * @param radius Radius of the circle.
-+ */
-+ Circle(double radius);
-+
-+ /**
-+ * @brief Calculates the area of the circle.
-+ *
-+ * @return double The area of the circle.
-+ */
-+ double area() const override;
-+
-+ /**
-+ * @brief Calculates the perimeter of the circle.
-+ *
-+ * @return double The perimeter of the circle.
-+ */
-+ double perimeter() const override;
-+
-+private:
-+ double radius_; ///< Radius of the circle.
-+};
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
-new file mode 100644
-index 000000000000..7ffc769157eb
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.cpp
-@@ -0,0 +1,12 @@
-+#include "Rectangle.h"
-+
-+Rectangle::Rectangle(double width, double height)
-+ : width_(width), height_(height) {}
-+
-+double Rectangle::area() const {
-+ return width_ * height_;
-+}
-+
-+double Rectangle::perimeter() const {
-+ return 2 * (width_ + height_);
-+}
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
-new file mode 100644
-index 000000000000..8c6223a4f618
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Rectangle.h
-@@ -0,0 +1,37 @@
-+#pragma once
-+
-+#include "Shape.h"
-+
-+/**
-+ * @brief Rectangle class derived from Shape.
-+ *
-+ * Represents a rectangle with a given width and height.
-+ */
-+class Rectangle : public Shape {
-+public:
-+ /**
-+ * @brief Constructs a new Rectangle object.
-+ *
-+ * @param width Width of the rectangle.
-+ * @param height Height of the rectangle.
-+ */
-+ Rectangle(double width, double height);
-+
-+ /**
-+ * @brief Calculates the area of the rectangle.
-+ *
-+ * @return double The area of the rectangle.
-+ */
-+ double area() const override;
-+
-+ /**
-+ * @brief Calculates the perimeter of the rectangle.
-+ *
-+ * @return double The perimeter of the rectangle.
-+ */
-+ double perimeter() const override;
-+
-+private:
-+ double width_; ///< Width of the rectangle.
-+ double height_; ///< Height of the rectangle.
-+};
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
-new file mode 100644
-index 000000000000..e5c5d4c9e441
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/Shape.h
-@@ -0,0 +1,30 @@
-+#pragma once
-+
-+/**
-+ * @brief Abstract base class for shapes.
-+ *
-+ * Provides a common interface for different types of shapes.
-+ */
-+class Shape {
-+public:
-+ /**
-+ * @brief Virtual destructor.
-+ */
-+ virtual ~Shape() {}
-+
-+ /**
-+ * @brief Calculates the area of the shape.
-+ *
-+ * @return double The area of the shape.
-+ */
-+ virtual double area() const = 0;
-+
-+ /**
-+ * @brief Calculates the perimeter of the shape.
-+ *
-+ * @return double The perimeter of the shape.
-+ */
-+ virtual double perimeter() const = 0;
-+};
-+
-+
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
-new file mode 100644
-index 000000000000..0549c5b718f0
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/database_template.json
-@@ -0,0 +1,22 @@
-+[
-+{
-+ "directory": "$test_dir/build",
-+ "command": "clang++ -o main.o -I../include $test_dir/src/main.cpp",
-+ "file": "$test_dir/src/main.cpp"
-+},
-+{
-+ "directory": "$test_dir/build",
-+ "command": "clang++ -o Calculator.o -I../include $test_dir/src/Calculator.cpp",
-+ "file": "$test_dir/src/Calculator.cpp"
-+},
-+{
-+ "directory": "$test_dir/build",
-+ "command": "clang++ -o Circle.o -I../include $test_dir/src/Circle.cpp",
-+ "file": "$test_dir/src/Circle.cpp"
-+},
-+{
-+ "directory": "$test_dir/build",
-+ "command": "clang++ -o Rectangle.o -I../include $test_dir/src/Rectangle.cpp",
-+ "file": "$test_dir/src/Rectangle.cpp"
-+}
-+]
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
-new file mode 100644
-index 000000000000..e20732c7de37
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/Inputs/clang-doc-project1/main.cpp
-@@ -0,0 +1,25 @@
-+#include <iostream>
-+#include "Calculator.h"
-+#include "Circle.h"
-+#include "Rectangle.h"
-+
-+int main() {
-+ // Calculator
-+ Calculator calc;
-+ std::cout << "Add: " << calc.add(3, 4) << std::endl;
-+ std::cout << "Subtract: " << calc.subtract(10, 5) << std::endl;
-+ std::cout << "Multiply: " << calc.multiply(2, 3) << std::endl;
-+ std::cout << "Divide: " << calc.divide(10, 2) << std::endl;
-+
-+ // Circle
-+ Circle circle(5.0);
-+ std::cout << "Circle Area: " << circle.area() << std::endl;
-+ std::cout << "Circle Perimeter: " << circle.perimeter() << std::endl;
-+
-+ // Rectangle
-+ Rectangle rectangle(4.0, 6.0);
-+ std::cout << "Rectangle Area: " << rectangle.area() << std::endl;
-+ std::cout << "Rectangle Perimeter: " << rectangle.perimeter() << std::endl;
-+
-+ return 0;
-+}
-\ No newline at end of file
-diff --git a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
-new file mode 100644
-index 000000000000..8c0289519854
---- /dev/null
-+++ b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp
-@@ -0,0 +1,11 @@
-+// RUN: mkdir -p %T/clang-doc/build
-+// RUN: mkdir -p %T/clang-doc/include
-+// RUN: mkdir -p %T/clang-doc/src
-+// RUN: mkdir -p %T/clang-doc/docs
-+// RUN: sed 's|$test_dir|%/T/clang-doc|g' %S/Inputs/clang-doc-project1/database_template.json > %T/clang-doc/build/compile_commands.json
-+// RUN: cp %S/Inputs/clang-doc-project1/*.h %T/clang-doc/include
-+// RUN: cp %S/Inputs/clang-doc-project1/*.cpp %T/clang-doc/src
-+// RUN: cd %T/clang-doc/build
-+// RUN: clang-doc --format=html --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json
-+
-+
---
-2.36.1.windows.1
-
More information about the cfe-commits
mailing list