summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2020-04-02 18:02:10 +0200
committerMax Kellermann <max@musicpd.org>2020-04-02 18:02:10 +0200
commit12b97bbe3896df558b3b8f52e8d9d495058aa996 (patch)
tree4430cf6fcd89a7c9d389f1f903c927b6d5297d1a /test
parent7d7bd51bc0a4748593e774decc91a1dbc939fd90 (diff)
parent5ccfcffcc124e406233359fe8fe65b704b98b8c8 (diff)
Merge tag 'v0.21.22'
release v0.21.22
Diffstat (limited to 'test')
-rw-r--r--test/ContainerScan.cxx3
-rw-r--r--test/DumpDatabase.cxx3
-rw-r--r--test/ReadApeTags.cxx3
-rw-r--r--test/ShutdownHandler.hxx4
-rw-r--r--test/WriteFile.cxx3
-rw-r--r--test/dump_playlist.cxx3
-rw-r--r--test/meson.build19
-rw-r--r--test/net/TestIPv4Address.cxx13
-rw-r--r--test/net/TestIPv6Address.cxx13
-rw-r--r--test/read_conf.cxx3
-rw-r--r--test/read_tags.cxx9
-rw-r--r--test/run_decoder.cxx7
-rw-r--r--test/run_filter.cxx3
-rw-r--r--test/run_gunzip.cxx3
-rw-r--r--test/run_input.cxx5
-rw-r--r--test/run_output.cxx3
-rw-r--r--test/time/TestConvert.cxx65
-rw-r--r--test/time/TestISO8601.cxx (renamed from test/TestISO8601.cxx)0
-rw-r--r--test/time/meson.build17
19 files changed, 142 insertions, 37 deletions
diff --git a/test/ContainerScan.cxx b/test/ContainerScan.cxx
index 5a7cc41df..886adb0ba 100644
--- a/test/ContainerScan.cxx
+++ b/test/ContainerScan.cxx
@@ -23,6 +23,7 @@
#include "decoder/DecoderList.hxx"
#include "decoder/DecoderPlugin.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "fs/io/StdioOutputStream.hxx"
#include "fs/io/BufferedOutputStream.hxx"
#include "util/PrintException.hxx"
@@ -63,7 +64,7 @@ try {
return EXIT_FAILURE;
}
- const Path path = Path::FromFS(argv[1]);
+ const FromNarrowPath path = argv[1];
const ScopeDecoderPluginsInit decoder_plugins_init({});
diff --git a/test/DumpDatabase.cxx b/test/DumpDatabase.cxx
index 402aa31fe..05b98bd1d 100644
--- a/test/DumpDatabase.cxx
+++ b/test/DumpDatabase.cxx
@@ -29,6 +29,7 @@
#include "ConfigGlue.hxx"
#include "tag/Config.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "event/Thread.hxx"
#include "util/ScopeExit.hxx"
#include "util/PrintException.hxx"
@@ -106,7 +107,7 @@ try {
return 1;
}
- const Path config_path = Path::FromFS(argv[1]);
+ const FromNarrowPath config_path = argv[1];
const char *const plugin_name = argv[2];
const DatabasePlugin *plugin = GetDatabasePluginByName(plugin_name);
diff --git a/test/ReadApeTags.cxx b/test/ReadApeTags.cxx
index 90f50a46b..1ac4957d5 100644
--- a/test/ReadApeTags.cxx
+++ b/test/ReadApeTags.cxx
@@ -21,6 +21,7 @@
#include "tag/ApeLoader.hxx"
#include "thread/Mutex.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "input/InputStream.hxx"
#include "input/LocalOpen.hxx"
#include "util/StringView.hxx"
@@ -58,7 +59,7 @@ try {
return EXIT_FAILURE;
}
- const Path path = Path::FromFS(argv[1]);
+ const FromNarrowPath path = argv[1];
Mutex mutex;
diff --git a/test/ShutdownHandler.hxx b/test/ShutdownHandler.hxx
index 4215275fd..41f44d3c7 100644
--- a/test/ShutdownHandler.hxx
+++ b/test/ShutdownHandler.hxx
@@ -29,8 +29,8 @@ public:
};
#ifdef _WIN32
-ShutdownHandler::ShutdownHandler(EventLoop &loop) {}
-ShutdownHandler::~ShutdownHandler() {}
+inline ShutdownHandler::ShutdownHandler(EventLoop &) {}
+inline ShutdownHandler::~ShutdownHandler() {}
#endif
#endif
diff --git a/test/WriteFile.cxx b/test/WriteFile.cxx
index 587eecdb2..4832ee17e 100644
--- a/test/WriteFile.cxx
+++ b/test/WriteFile.cxx
@@ -18,6 +18,7 @@
*/
#include "fs/io/FileOutputStream.hxx"
+#include "fs/NarrowPath.hxx"
#include "util/PrintException.hxx"
#include <cerrno>
@@ -55,7 +56,7 @@ try {
return EXIT_FAILURE;
}
- const Path path = Path::FromFS(argv[1]);
+ const FromNarrowPath path = argv[1];
FileOutputStream fos(path);
diff --git a/test/dump_playlist.cxx b/test/dump_playlist.cxx
index 34892a557..6f8dadabe 100644
--- a/test/dump_playlist.cxx
+++ b/test/dump_playlist.cxx
@@ -28,6 +28,7 @@
#include "playlist/PlaylistRegistry.hxx"
#include "playlist/PlaylistPlugin.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "fs/io/BufferedOutputStream.hxx"
#include "fs/io/StdioOutputStream.hxx"
#include "thread/Cond.hxx"
@@ -54,7 +55,7 @@ try {
return EXIT_FAILURE;
}
- const Path config_path = Path::FromFS(argv[1]);
+ const FromNarrowPath config_path = argv[1];
uri = argv[2];
/* initialize MPD */
diff --git a/test/meson.build b/test/meson.build
index 0f01aca3e..e3f2a6fa6 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -24,6 +24,7 @@ gtest_dep = declare_dependency(
)
subdir('net')
+subdir('time')
executable(
'read_conf',
@@ -52,19 +53,6 @@ test('TestUtil', executable(
],
))
-test(
- 'TestTime',
- executable(
- 'TestTime',
- 'TestISO8601.cxx',
- include_directories: inc,
- dependencies: [
- time_dep,
- gtest_dep,
- ],
- ),
-)
-
test('TestRewindInputStream', executable(
'TestRewindInputStream',
'TestRewindInputStream.cxx',
@@ -326,6 +314,11 @@ if curl_dep.found()
include_directories: inc,
dependencies: [
curl_dep,
+
+ # Explicitly linking with zlib here works around a linker
+ # failure on Windows, because our Windows CURL build is
+ # statically linked and thus declares no dependency on zlib
+ zlib_dep,
],
)
diff --git a/test/net/TestIPv4Address.cxx b/test/net/TestIPv4Address.cxx
index aa7f727be..a6c05e681 100644
--- a/test/net/TestIPv4Address.cxx
+++ b/test/net/TestIPv4Address.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2019 Max Kellermann <max.kellermann@gmail.com>
+ * Copyright 2012-2020 Max Kellermann <max.kellermann@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -34,13 +34,22 @@
#include <stdexcept>
+#ifndef _WIN32
#include <arpa/inet.h>
+#endif
static std::string
ToString(const struct in_addr &a)
{
+#ifdef _WIN32
+ /* on mingw32, the parameter is non-const (PVOID) */
+ const auto p = const_cast<struct in_addr *>(&a);
+#else
+ const auto p = &a;
+#endif
+
char buffer[256];
- const char *result = inet_ntop(AF_INET, &a, buffer, sizeof(buffer));
+ const char *result = inet_ntop(AF_INET, p, buffer, sizeof(buffer));
if (result == nullptr)
throw std::runtime_error("inet_ntop() failed");
return result;
diff --git a/test/net/TestIPv6Address.cxx b/test/net/TestIPv6Address.cxx
index 325d25bbf..cdadf6a7f 100644
--- a/test/net/TestIPv6Address.cxx
+++ b/test/net/TestIPv6Address.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2019 Max Kellermann <max.kellermann@gmail.com>
+ * Copyright 2012-2020 Max Kellermann <max.kellermann@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -34,13 +34,22 @@
#include <stdexcept>
+#ifndef _WIN32
#include <arpa/inet.h>
+#endif
static std::string
ToString(const struct in6_addr &a)
{
+#ifdef _WIN32
+ /* on mingw32, the parameter is non-const (PVOID) */
+ const auto p = const_cast<struct in6_addr *>(&a);
+#else
+ const auto p = &a;
+#endif
+
char buffer[256];
- const char *result = inet_ntop(AF_INET6, &a, buffer, sizeof(buffer));
+ const char *result = inet_ntop(AF_INET6, p, buffer, sizeof(buffer));
if (result == nullptr)
throw std::runtime_error("inet_ntop() failed");
return result;
diff --git a/test/read_conf.cxx b/test/read_conf.cxx
index 5350102f0..eaec60a6d 100644
--- a/test/read_conf.cxx
+++ b/test/read_conf.cxx
@@ -21,6 +21,7 @@
#include "config/Param.hxx"
#include "config/File.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "util/PrintException.hxx"
#include "util/RuntimeError.hxx"
@@ -34,7 +35,7 @@ try {
return EXIT_FAILURE;
}
- const Path config_path = Path::FromFS(argv[1]);
+ const FromNarrowPath config_path = argv[1];
const char *name = argv[2];
const auto option = ParseConfigOptionName(name);
diff --git a/test/read_tags.cxx b/test/read_tags.cxx
index c47c37665..7a1c32e9b 100644
--- a/test/read_tags.cxx
+++ b/test/read_tags.cxx
@@ -27,6 +27,7 @@
#include "tag/Handler.hxx"
#include "tag/Generic.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "pcm/AudioFormat.hxx"
#include "util/ScopeExit.hxx"
#include "util/StringBuffer.hxx"
@@ -97,7 +98,7 @@ try {
}
decoder_name = argv[1];
- const Path path = Path::FromFS(argv[2]);
+ const char *path = argv[2];
EventThread io_thread;
io_thread.Start();
@@ -116,7 +117,7 @@ try {
DumpTagHandler h;
bool success;
try {
- success = plugin->ScanFile(path, h);
+ success = plugin->ScanFile(FromNarrowPath(path), h);
} catch (...) {
PrintException(std::current_exception());
success = false;
@@ -126,7 +127,7 @@ try {
InputStreamPtr is;
if (!success && plugin->scan_stream != nullptr) {
- is = InputStream::OpenReady(path.c_str(), mutex);
+ is = InputStream::OpenReady(path, mutex);
success = plugin->ScanStream(*is, h);
}
@@ -139,7 +140,7 @@ try {
if (is)
ScanGenericTags(*is, h);
else
- ScanGenericTags(path, h);
+ ScanGenericTags(FromNarrowPath(path), h);
}
return 0;
diff --git a/test/run_decoder.cxx b/test/run_decoder.cxx
index 8b8e6ef61..1147e4faf 100644
--- a/test/run_decoder.cxx
+++ b/test/run_decoder.cxx
@@ -26,6 +26,7 @@
#include "input/Init.hxx"
#include "input/InputStream.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "pcm/AudioFormat.hxx"
#include "util/OptionDef.hxx"
#include "util/OptionParser.hxx"
@@ -44,7 +45,7 @@ struct CommandLine {
const char *decoder = nullptr;
const char *uri = nullptr;
- Path config_path = nullptr;
+ FromNarrowPath config_path;
bool verbose = false;
@@ -72,7 +73,7 @@ ParseCommandLine(int argc, char **argv)
while (auto o = option_parser.Next()) {
switch (Option(o.index)) {
case OPTION_CONFIG:
- c.config_path = Path::FromFS(o.value);
+ c.config_path = o.value;
break;
case OPTION_VERBOSE:
@@ -205,7 +206,7 @@ try {
MyDecoderClient client(c.seek_where);
if (plugin->file_decode != nullptr) {
try {
- plugin->FileDecode(client, Path::FromFS(c.uri));
+ plugin->FileDecode(client, FromNarrowPath(c.uri));
} catch (StopDecoder) {
}
} else if (plugin->stream_decode != nullptr) {
diff --git a/test/run_filter.cxx b/test/run_filter.cxx
index 77c76106a..44b54b88c 100644
--- a/test/run_filter.cxx
+++ b/test/run_filter.cxx
@@ -19,6 +19,7 @@
#include "ConfigGlue.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "filter/LoadOne.hxx"
#include "filter/Filter.hxx"
#include "filter/Prepared.hxx"
@@ -123,7 +124,7 @@ try {
return EXIT_FAILURE;
}
- const Path config_path = Path::FromFS(argv[1]);
+ const FromNarrowPath config_path = argv[1];
AudioFormat audio_format(44100, SampleFormat::S16, 2);
diff --git a/test/run_gunzip.cxx b/test/run_gunzip.cxx
index fe719bfa4..a5227df4b 100644
--- a/test/run_gunzip.cxx
+++ b/test/run_gunzip.cxx
@@ -20,6 +20,7 @@
#include "fs/io/GunzipReader.hxx"
#include "fs/io/FileReader.hxx"
#include "fs/io/StdioOutputStream.hxx"
+#include "fs/NarrowPath.hxx"
#include "util/PrintException.hxx"
#include <stdio.h>
@@ -62,7 +63,7 @@ try {
return EXIT_FAILURE;
}
- Path path = Path::FromFS(argv[1]);
+ FromNarrowPath path = argv[1];
CopyGunzip(stdout, path);
return EXIT_SUCCESS;
diff --git a/test/run_input.cxx b/test/run_input.cxx
index d10a17518..20fe8c2d7 100644
--- a/test/run_input.cxx
+++ b/test/run_input.cxx
@@ -32,6 +32,7 @@
#include "Log.hxx"
#include "LogBackend.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "fs/io/BufferedOutputStream.hxx"
#include "fs/io/StdioOutputStream.hxx"
#include "util/ConstBuffer.hxx"
@@ -51,7 +52,7 @@
struct CommandLine {
const char *uri = nullptr;
- Path config_path = nullptr;
+ FromNarrowPath config_path;
bool verbose = false;
@@ -79,7 +80,7 @@ ParseCommandLine(int argc, char **argv)
while (auto o = option_parser.Next()) {
switch (Option(o.index)) {
case OPTION_CONFIG:
- c.config_path = Path::FromFS(o.value);
+ c.config_path = o.value;
break;
case OPTION_VERBOSE:
diff --git a/test/run_output.cxx b/test/run_output.cxx
index 232c94d38..7c0730152 100644
--- a/test/run_output.cxx
+++ b/test/run_output.cxx
@@ -23,6 +23,7 @@
#include "ConfigGlue.hxx"
#include "event/Thread.hxx"
#include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
#include "pcm/AudioParser.hxx"
#include "pcm/AudioFormat.hxx"
#include "util/StringBuffer.hxx"
@@ -111,7 +112,7 @@ try {
return EXIT_FAILURE;
}
- const Path config_path = Path::FromFS(argv[1]);
+ const FromNarrowPath config_path = argv[1];
AudioFormat audio_format(44100, SampleFormat::S16, 2);
diff --git a/test/time/TestConvert.cxx b/test/time/TestConvert.cxx
new file mode 100644
index 000000000..ff31d7097
--- /dev/null
+++ b/test/time/TestConvert.cxx
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2020 Max Kellermann <max.kellermann@gmail.com>
+ * All rights reserved.
+ *
+ * author: Max Kellermann <mk@cm4all.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "time/Convert.hxx"
+
+#include <gtest/gtest.h>
+
+static constexpr time_t times[] = {
+ 1234567890,
+ 1580566807,
+ 1585750807,
+ 1590934807,
+};
+
+TEST(Time, LocalTime)
+{
+ /* convert back and forth using local time zone */
+
+ for (const auto t : times) {
+ auto tp = std::chrono::system_clock::from_time_t(t);
+ auto tm = LocalTime(tp);
+ EXPECT_EQ(MakeTime(tm), tp);
+ }
+}
+
+TEST(Time, GmTime)
+{
+ /* convert back and forth using UTC */
+
+ for (const auto t : times) {
+ auto tp = std::chrono::system_clock::from_time_t(t);
+ auto tm = GmTime(tp);
+ EXPECT_EQ(std::chrono::system_clock::to_time_t(TimeGm(tm)),
+ t);
+ }
+}
diff --git a/test/TestISO8601.cxx b/test/time/TestISO8601.cxx
index cd0897c1a..cd0897c1a 100644
--- a/test/TestISO8601.cxx
+++ b/test/time/TestISO8601.cxx
diff --git a/test/time/meson.build b/test/time/meson.build
new file mode 100644
index 000000000..53b583cf1
--- /dev/null
+++ b/test/time/meson.build
@@ -0,0 +1,17 @@
+test_time_sources = [
+ 'TestConvert.cxx',
+ 'TestISO8601.cxx',
+]
+
+test(
+ 'TestTime',
+ executable(
+ 'TestTime',
+ test_time_sources,
+ include_directories: inc,
+ dependencies: [
+ time_dep,
+ gtest_dep,
+ ],
+ ),
+)