https://github.com/PeterChou1 updated https://github.com/llvm/llvm-project/pull/93928
>From a4141043cb67a8396a82724f4d5d0ec3db0cdfe6 Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Thu, 30 May 2024 22:22:02 -0400 Subject: [PATCH 1/4] [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.c...@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.c...@mail.utoronto.ca> Date: Fri, 31 May 2024 01:39:27 -0400 Subject: [PATCH 2/4] [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.c...@mail.utoronto.ca> Date: Fri, 31 May 2024 01:43:09 -0400 Subject: [PATCH 3/4] [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.c...@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 - >From c67a85b25aa37782ef184f3cbde830a2c1e19fee Mon Sep 17 00:00:00 2001 From: PeterChou1 <peter.c...@mail.utoronto.ca> Date: Fri, 31 May 2024 13:15:41 -0400 Subject: [PATCH 4/4] [clang][clang-doc] find out where asset files are stored --- clang-tools-extra/clang-doc/tool/ClangDocMain.cpp | 4 ++++ clang-tools-extra/test/clang-doc/clang-doc-project1.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 21b581fa6df2e..b12c0ddcbd93f 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -188,6 +188,7 @@ Example usage for a project using a compile commands database: llvm::sys::path::native(ClangDocPath, NativeClangDocPath); llvm::SmallString<128> AssetsPath; AssetsPath = llvm::sys::path::parent_path(NativeClangDocPath); + llvm::sys::path::append(AssetsPath, "..", "share", "clang"); llvm::SmallString<128> DefaultStylesheet; llvm::sys::path::native(AssetsPath, DefaultStylesheet); @@ -199,6 +200,9 @@ Example usage for a project using a compile commands database: CDCtx.UserStylesheets.insert(CDCtx.UserStylesheets.begin(), std::string(DefaultStylesheet)); CDCtx.FilesToCopy.emplace_back(IndexJS.str()); + + llvm::outs() << "Index JS: " << IndexJS << "\n"; + llvm::outs() << "Default Stylesheets: " << DefaultStylesheet << "\n"; } // Mapping phase 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 c382396ea4cab..26b6a533342a4 100644 --- a/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp +++ b/clang-tools-extra/test/clang-doc/clang-doc-project1.cpp @@ -6,7 +6,7 @@ // 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 --repository=github.com --executor=all-TUs --output=%T/clang-doc/docs ./compile_commands.json +// RUN: clang-doc --format=html --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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits