//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11, c++14
// UNSUPPORTED: no-localization
// <filesystem>
//
// class directory_entry
//
// template<class charT, class traits>
// friend basic_ostream<charT, traits>&
// operator<<(basic_ostream<charT, traits>& os, const directory_entry& d);
#include <filesystem>
#include <cassert>
#include <sstream>
#include "test_macros.h"
#include "make_string.h"
namespace fs = std::filesystem;
MultiStringType InStr = MKSTR("abcdefg/\"hijklmnop\"/qrstuvwxyz/123456789");
MultiStringType OutStr = MKSTR("\"abcdefg/\\\"hijklmnop\\\"/qrstuvwxyz/123456789\"");
template <class CharT>
void TestOutput() {
const char* input = static_cast<const char*>(InStr);
const CharT* expected_output = static_cast<const CharT*>(OutStr);
const fs::directory_entry dir = fs::directory_entry(fs::path(input));
std::basic_stringstream<CharT> stream;
auto& result = stream << dir;
assert(stream.str() == expected_output);
assert(&result == &stream);
}
int main(int, char**) {
TestOutput<char>();
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
TestOutput<wchar_t>();
#endif
// TODO(var-const): uncomment when it becomes possible to instantiate a `basic_ostream` object with a sized character
// type (see https://llvm.org/PR53119).
//TestOutput<char8_t>();
//TestOutput<char16_t>();
//TestOutput<char32_t>();
return 0;
}