xref: /llvm-project/libcxx/test/std/input.output/iostream.format/print.fun/println.blank_line.sh.cpp (revision 6a54dfbfe534276d644d7f9c027f0deeb748dd53)
17f9f82e3SHristo Hristov //===----------------------------------------------------------------------===//
2*6a54dfbfSLouis Dionne //
37f9f82e3SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47f9f82e3SHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
57f9f82e3SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67f9f82e3SHristo Hristov //
77f9f82e3SHristo Hristov //===----------------------------------------------------------------------===//
87f9f82e3SHristo Hristov 
97f9f82e3SHristo Hristov // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
107f9f82e3SHristo Hristov // UNSUPPORTED: no-filesystem
117f9f82e3SHristo Hristov // UNSUPPORTED: executor-has-no-bash
127f9f82e3SHristo Hristov // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
137f9f82e3SHristo Hristov 
147f9f82e3SHristo Hristov // FIXME PRINT How to test println on Windows?
157f9f82e3SHristo Hristov // XFAIL: msvc, target={{.+}}-windows-gnu
167f9f82e3SHristo Hristov 
177f9f82e3SHristo Hristov // XFAIL: availability-fp_to_chars-missing
187f9f82e3SHristo Hristov 
197f9f82e3SHristo Hristov // <print>
207f9f82e3SHristo Hristov 
217f9f82e3SHristo Hristov //   void println();
227f9f82e3SHristo Hristov 
237f9f82e3SHristo Hristov // Testing this properly is quite hard; the function unconditionally
247f9f82e3SHristo Hristov // writes to stdout. When stdout is redirected to a file it is no longer
257f9f82e3SHristo Hristov // considered a terminal. The function is a small wrapper around
267f9f82e3SHristo Hristov //
277f9f82e3SHristo Hristov // template<class... Args>
287f9f82e3SHristo Hristov //   void println(FILE* stream, format_string<Args...> fmt, Args&&... args);
297f9f82e3SHristo Hristov //
307f9f82e3SHristo Hristov // So do minimal tests for this function and rely on the FILE* overload
317f9f82e3SHristo Hristov // to do more testing.
327f9f82e3SHristo Hristov //
337f9f82e3SHristo Hristov // The testing is based on the testing for std::cout.
347f9f82e3SHristo Hristov 
357f9f82e3SHristo Hristov // TODO PRINT Use lit builtin echo
367f9f82e3SHristo Hristov 
377f9f82e3SHristo Hristov // FILE_DEPENDENCIES: echo.sh
387f9f82e3SHristo Hristov // RUN: %{build}
39ea2392edSHristo Hristov // RUN: %{exec} bash echo.sh -ne "println blank line test: \n" > %t.expected
407f9f82e3SHristo Hristov // RUN: %{exec} "%t.exe" > %t.actual
417f9f82e3SHristo Hristov // RUN: diff -u %t.actual %t.expected
427f9f82e3SHristo Hristov 
437f9f82e3SHristo Hristov #include <print>
447f9f82e3SHristo Hristov 
457f9f82e3SHristo Hristov int main(int, char**) {
46ea2392edSHristo Hristov   // On some configurations the `diff -u` test fails if we print a single blank line character `\n`, so we print some text first.
47ea2392edSHristo Hristov   std::print("println blank line test: ");
487f9f82e3SHristo Hristov   std::println();
497f9f82e3SHristo Hristov 
507f9f82e3SHristo Hristov   return 0;
517f9f82e3SHristo Hristov }
52