Initial work, running into problems already. See main.cpp for comments.
This commit is contained in:
67
CMakeLists.txt
Normal file
67
CMakeLists.txt
Normal file
@@ -0,0 +1,67 @@
|
||||
# 2024 Josh O'Leary @ Redacted Software
|
||||
|
||||
cmake_minimum_required(VERSION 3.18...3.25)
|
||||
project(
|
||||
jtest
|
||||
VERSION 1.0
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
|
||||
message(FATAL_ERROR "In-source builds are not allowed!")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
include(cmake/CPM.cmake)
|
||||
|
||||
######################
|
||||
# Create a library
|
||||
|
||||
|
||||
|
||||
file(GLOB_RECURSE jtest_HEADERS "include/jtest/*.h" "include/jtest/*.hpp")
|
||||
file(GLOB_RECURSE jtest_SRC "src/jtest/*.c" "src/jtest/*.cpp")
|
||||
|
||||
# TODO: Fix Event needing to be included too, it should be an automatically-managed depencency of jlog!!!
|
||||
CPMAddPackage(
|
||||
NAME Event
|
||||
URL https://git.redacted.cc/josh/Event/archive/Release-6.zip
|
||||
)
|
||||
|
||||
CPMAddPackage(
|
||||
NAME jlog
|
||||
URL https://git.redacted.cc/josh/jlog/archive/Prerelease-5.zip
|
||||
)
|
||||
|
||||
include_directories(${Event_SOURCE_DIR}/include)
|
||||
include_directories(${jlog_SOURCE_DIR}/include)
|
||||
|
||||
if (UNIX)
|
||||
add_library(jtest SHARED ${jtest_SRC})
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
add_library(jtest STATIC ${jtest_SRC})
|
||||
endif()
|
||||
|
||||
target_include_directories(jtest PUBLIC ${PROJECT_SOURCE_DIR}/include)
|
||||
|
||||
|
||||
set_target_properties(jtest PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
|
||||
install(FILES ${jtest_HEADERS} DESTINATION include/${PROJECT_NAME})
|
||||
|
||||
####################
|
||||
# Create Executable
|
||||
|
||||
|
||||
target_link_libraries(jtest PUBLIC Event jlog)
|
||||
|
||||
# Add an executable with main srces
|
||||
add_executable(TestSuiteDemo main.cpp)
|
||||
|
||||
# link the new library target with the binary target
|
||||
target_link_libraries(TestSuiteDemo PUBLIC jtest)
|
24
cmake/CPM.cmake
Normal file
24
cmake/CPM.cmake
Normal file
@@ -0,0 +1,24 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
|
||||
|
||||
set(CPM_DOWNLOAD_VERSION 0.38.7)
|
||||
set(CPM_HASH_SUM "83e5eb71b2bbb8b1f2ad38f1950287a057624e385c238f6087f94cdfc44af9c5")
|
||||
|
||||
if(CPM_SOURCE_CACHE)
|
||||
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
else()
|
||||
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||
endif()
|
||||
|
||||
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
||||
|
||||
file(DOWNLOAD
|
||||
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||
${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}
|
||||
)
|
||||
|
||||
include(${CPM_DOWNLOAD_LOCATION})
|
45
include/jtest/jtest.hpp
Normal file
45
include/jtest/jtest.hpp
Normal file
@@ -0,0 +1,45 @@
|
||||
/// Josh Unit Test Library
|
||||
|
||||
#pragma once
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <jlog/jlog.hpp>
|
||||
|
||||
namespace jtest {
|
||||
|
||||
// Requirements
|
||||
//
|
||||
|
||||
bool check(bool condition) {
|
||||
if (!condition)
|
||||
throw;
|
||||
return condition;
|
||||
}
|
||||
|
||||
bool test(const std::string& testname, const std::function<void()>& callback, const std::string& file, int line)
|
||||
{
|
||||
try {
|
||||
callback();
|
||||
} catch(...) {
|
||||
jlog::log({
|
||||
{.colorCode = jlog::ansi_escape_codes::FG_RED, .content = testname},
|
||||
{.content = "Failed!"}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
jlog::log({
|
||||
{.content = std::format("{}:{}", file, line)},
|
||||
{.colorCode = jlog::ansi_escape_codes::FG_GREEN, .content = testname},
|
||||
{.content = "Passed!", .delimiter = ""}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
void run_tests() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#define TEST(a, b) jtest::test(a, b, __FILE__, __LINE__);
|
26
main.cpp
Normal file
26
main.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// Created by dawsh on 6/16/24.
|
||||
//
|
||||
|
||||
#include <cassert>
|
||||
|
||||
#include "include/jtest/jtest.hpp"
|
||||
|
||||
// Look into a different mechanism more similar to gtest wherein we have a TEST macro
|
||||
// that declares and "registers" a test, and then inside our main block we call RUN_ALL_TESTS(argc, argv);
|
||||
|
||||
// Running into a suituation in which we can't catch assertations or "checks"
|
||||
// Additionally, The tests appear to run out-of-order, but lambda functions shouldn't be asynchronous on their own?!!
|
||||
int main()
|
||||
{
|
||||
|
||||
TEST("Test1", []{
|
||||
jtest::check(2+2 == 4);
|
||||
});
|
||||
|
||||
TEST("Test2", [] {
|
||||
jtest::check(2+2 == 5);
|
||||
});
|
||||
|
||||
jtest::run_tests();
|
||||
}
|
3
src/jtest/jtest.cpp
Normal file
3
src/jtest/jtest.cpp
Normal file
@@ -0,0 +1,3 @@
|
||||
//
|
||||
// Created by dawsh on 6/16/24.
|
||||
//
|
Reference in New Issue
Block a user