diff options
author | Max Kellermann <max@musicpd.org> | 2020-04-02 18:02:10 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2020-04-02 18:02:10 +0200 |
commit | 12b97bbe3896df558b3b8f52e8d9d495058aa996 (patch) | |
tree | 4430cf6fcd89a7c9d389f1f903c927b6d5297d1a /test | |
parent | 7d7bd51bc0a4748593e774decc91a1dbc939fd90 (diff) | |
parent | 5ccfcffcc124e406233359fe8fe65b704b98b8c8 (diff) |
Merge tag 'v0.21.22'
release v0.21.22
Diffstat (limited to 'test')
-rw-r--r-- | test/ContainerScan.cxx | 3 | ||||
-rw-r--r-- | test/DumpDatabase.cxx | 3 | ||||
-rw-r--r-- | test/ReadApeTags.cxx | 3 | ||||
-rw-r--r-- | test/ShutdownHandler.hxx | 4 | ||||
-rw-r--r-- | test/WriteFile.cxx | 3 | ||||
-rw-r--r-- | test/dump_playlist.cxx | 3 | ||||
-rw-r--r-- | test/meson.build | 19 | ||||
-rw-r--r-- | test/net/TestIPv4Address.cxx | 13 | ||||
-rw-r--r-- | test/net/TestIPv6Address.cxx | 13 | ||||
-rw-r--r-- | test/read_conf.cxx | 3 | ||||
-rw-r--r-- | test/read_tags.cxx | 9 | ||||
-rw-r--r-- | test/run_decoder.cxx | 7 | ||||
-rw-r--r-- | test/run_filter.cxx | 3 | ||||
-rw-r--r-- | test/run_gunzip.cxx | 3 | ||||
-rw-r--r-- | test/run_input.cxx | 5 | ||||
-rw-r--r-- | test/run_output.cxx | 3 | ||||
-rw-r--r-- | test/time/TestConvert.cxx | 65 | ||||
-rw-r--r-- | test/time/TestISO8601.cxx (renamed from test/TestISO8601.cxx) | 0 | ||||
-rw-r--r-- | test/time/meson.build | 17 |
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, + ], + ), +) |