summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2025-02-01 20:37:32 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2025-02-21 18:11:26 +0100
commit7b2a17216ec5cb97eeb517863d7336cc04852b43 (patch)
tree36f90d6f2cdbe8b893c9b5138460ffbdc9a129d8 /test
parentdbacf0029104780556af5791f2c6a45edc7a5ec4 (diff)
WIP
Diffstat (limited to 'test')
-rw-r--r--test/ctor.cc41
-rw-r--r--test/execute_test.cc12
-rw-r--r--test/source_type_test.cc8
-rwxr-xr-xtest/suite/test.sh2
-rw-r--r--test/testprog.cc38
-rw-r--r--test/tmpfile.h31
-rw-r--r--test/tools_test.cc3
7 files changed, 127 insertions, 8 deletions
diff --git a/test/ctor.cc b/test/ctor.cc
index b7bcc6d..fa53802 100644
--- a/test/ctor.cc
+++ b/test/ctor.cc
@@ -23,6 +23,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"argsplit\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
},
},
@@ -40,6 +42,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"pointerlist\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
},
},
@@ -58,7 +62,10 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
.cxxflags = {
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
+ "-I../json/include",
"-DOUTPUT=\"deps\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
},
},
@@ -72,6 +79,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
.flags = {
.cxxflags = {
"-std=c++20", "-O3", "-Wall", "-Werror",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
},
},
@@ -92,6 +101,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"execute\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
.ldflags = { "-pthread" },
},
@@ -110,6 +121,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"tasks\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
.ldflags = { "-pthread" },
},
@@ -128,6 +141,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"cycle\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
.ldflags = { "-pthread" },
},
@@ -146,6 +161,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"source_type\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
.ldflags = { "-pthread" },
},
@@ -166,6 +183,8 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src", "-Iuunit",
"-DOUTPUT=\"tools\"",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
},
},
},
@@ -190,11 +209,33 @@ ctor::build_configurations ctorTestConfigs(const ctor::settings& settings)
"../src/tools.cc",
"../src/util.cc",
"../src/externals_manual.cc",
+ {ctor::toolchain::msvc, "../getopt-for-windows/getopt.c"},
},
.flags = {
+ .cflags = {
+ "-O3",
+// "-g",
+// "-Wall",
+// "-Wconversion",
+// "-Wextra",
+ //"-Werror",
+ "-I../src",
+ {ctor::toolchain::msvc, ctor::c_opt::custom, "/I../getopt-for-windows"},
+ {ctor::toolchain::msvc, ctor::c_opt::custom, "/D_X86_"},
+ {ctor::toolchain::msvc, ctor::c_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::c_opt::custom, "/external:W0"},
+ {ctor::toolchain::msvc, ctor::c_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
+ },
.cxxflags = {
"-std=c++20", "-O3", "-Wall", "-Werror",
"-I../src",
+ "-I../json/include",
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/I../getopt-for-windows"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_X86_"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/EHsc"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/external:W0"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/D_CRT_SECURE_NO_WARNINGS"},
+ {ctor::toolchain::msvc, ctor::cxx_opt::custom, "/Dstrdup=_strdup"},
},
.ldflags = { "-pthread" },
},
diff --git a/test/execute_test.cc b/test/execute_test.cc
index 722b6ea..6a376f8 100644
--- a/test/execute_test.cc
+++ b/test/execute_test.cc
@@ -36,11 +36,23 @@ public:
value = execute(s, "no-such-binary", {}, {}, false);
uASSERT_EQUAL(1, value);
value = execute(s, cmd, {"segfault"}, {}, false);
+#if !defined(_WIN32)
uASSERT_EQUAL(11, value);
+#else
+ uASSERT_EQUAL(3, value);
+#endif
value = execute(s, cmd, {"throw"}, {}, false);
+#if !defined(_WIN32)
uASSERT_EQUAL(6, value);
+#else
+ uASSERT_EQUAL(-1073740791, value);
+#endif
value = execute(s, cmd, {"abort"}, {}, false);
+#if !defined(_WIN32)
uASSERT_EQUAL(6, value);
+#else
+ uASSERT_EQUAL(-1073740791, value);
+#endif
}
void env()
diff --git a/test/source_type_test.cc b/test/source_type_test.cc
index 288f1e5..657260e 100644
--- a/test/source_type_test.cc
+++ b/test/source_type_test.cc
@@ -26,6 +26,14 @@ std::ostream& operator<<(std::ostream& stream, const ctor::language& lang)
return stream;
}
+const ctor::configuration& ctor::get_configuration()
+{
+ static ctor::configuration cfg{};
+ cfg.build_toolchain = ctor::toolchain::gcc;
+ cfg.build_arch = ctor::arch::unix;
+ return cfg;
+}
+
class TestableTaskCC
: public TaskCC
{
diff --git a/test/suite/test.sh b/test/suite/test.sh
index 97d2551..d57580f 100755
--- a/test/suite/test.sh
+++ b/test/suite/test.sh
@@ -1,4 +1,6 @@
#!/bin/bash
+#set -x
+
: ${CXX:=g++}
: ${CTORDIR:=../../build}
: ${BUILDDIR:=build}
diff --git a/test/testprog.cc b/test/testprog.cc
index 93edc3f..18c2c74 100644
--- a/test/testprog.cc
+++ b/test/testprog.cc
@@ -5,6 +5,14 @@
extern char **environ;
+#if defined(_WIN32)
+#define WINDOWS_LEAN_AND_MEAN
+#include <windows.h>
+#undef max
+#else
+extern char **environ; // see 'man environ'
+#endif
+
int main(int argc, const char* argv[])
{
if(argc < 2)
@@ -20,11 +28,41 @@ int main(int argc, const char* argv[])
{
return 0;
}
+
std::ofstream ostrm(argv[2], std::ios::binary);
+ if(ostrm.bad())
+ {
+ std::cout << "Error: Could not write to " << argv[2] << "\n";
+ }
+#if defined(_WIN32)
+ auto env_strings = GetEnvironmentStrings();
+ const char* ptr = env_strings;
+ std::string env;
+ while(true)
+ {
+ if(*ptr == '\0')
+ {
+ if(env.empty())
+ {
+ // no more
+ break;
+ }
+ ostrm << env << "\n";
+ env.clear();
+ ++ptr;
+ continue;
+ }
+
+ env += *ptr;
+ ++ptr;
+ }
+ FreeEnvironmentStrings(env_strings);
+#else
for(auto current = environ; *current; ++current)
{
ostrm << (*current) << "\n";
}
+#endif
}
if(cmd == "retval")
diff --git a/test/tmpfile.h b/test/tmpfile.h
index 5d114d0..a5d4043 100644
--- a/test/tmpfile.h
+++ b/test/tmpfile.h
@@ -4,7 +4,7 @@
#pragma once
#include <cstdlib>
-#include <unistd.h>
+#include <cstring>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
@@ -12,6 +12,9 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <io.h>
+#else
+#include <unistd.h>
#endif
struct tmp_file
@@ -19,23 +22,35 @@ struct tmp_file
tmp_file(const std::string& data = {})
{
int fd;
+ auto tmp_dir = std::filesystem::temp_directory_path();
+ auto tmp_file_template = tmp_dir / "ctor_tmp_file-XXXXXX";
+ filename = tmp_file_template.string();
+ auto buf = new char[filename.size() + 2];
+ memcpy(buf, filename.data(), filename.size() + 1);
#ifdef _WIN32
- char templ[] = "ctor_tmp_file-XXXXXX"; // buffer for filename
- _mktemp_s(templ, sizeof(templ));
- fd = open(templ, O_CREAT | O_RDWR);
+ _mktemp_s(buf, filename.size() + 2);
+ filename = buf;
+ fd = _open(filename.data(), O_CREAT | O_RDWR, _S_IWRITE);
+ auto sz = _write(fd, data.data(), data.size());
+ (void)sz;
+ _close(fd);
#else
- char templ[] = "/tmp/ctor_tmp_file-XXXXXX"; // buffer for filename
- fd = mkstemp(templ);
-#endif
- filename = templ;
+ fd = mkstemp(buf);
+ filename = buf;
auto sz = write(fd, data.data(), data.size());
(void)sz;
close(fd);
+#endif
+ delete[] buf;
}
~tmp_file()
{
+#ifdef _WIN32
+ _unlink(filename.data());
+#else
unlink(filename.data());
+#endif
}
const std::string& get() const
diff --git a/test/tools_test.cc b/test/tools_test.cc
index 5ae04c3..15270b3 100644
--- a/test/tools_test.cc
+++ b/test/tools_test.cc
@@ -22,6 +22,9 @@ std::ostream& operator<<(std::ostream& stream, const ctor::toolchain& toolchain)
case ctor::toolchain::clang:
stream << "ctor::toolchain::clang";
break;
+ case ctor::toolchain::msvc:
+ stream << "ctor::toolchain::msvc";
+ break;
}
return stream;
}