From 065a5eb3396e7bc68a36b439a74422e43d58c001 Mon Sep 17 00:00:00 2001 From: David Wells Date: Sat, 5 Dec 2015 20:23:40 -0500 Subject: [PATCH] Add a test for DOS-format parameter files. This verifies that issue #1691 was fixed by commit e9244cdffe. --- tests/bits/parameter_handler_dos_endings.cc | 66 +++++++++++++++++++ .../bits/parameter_handler_dos_endings.output | 2 + 2 files changed, 68 insertions(+) create mode 100644 tests/bits/parameter_handler_dos_endings.cc create mode 100644 tests/bits/parameter_handler_dos_endings.output diff --git a/tests/bits/parameter_handler_dos_endings.cc b/tests/bits/parameter_handler_dos_endings.cc new file mode 100644 index 0000000000..4021a34683 --- /dev/null +++ b/tests/bits/parameter_handler_dos_endings.cc @@ -0,0 +1,66 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2015 - 2015 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + + +// ParameterHandler could not handle files with DOS line endings. + +#include +#include +#include +#include +#include + +using namespace dealii; + +void test () +{ + ParameterHandler foo; + foo.enter_subsection("bar"); + foo.declare_entry("val", "1.0", dealii::Patterns::Double(), ""); + foo.leave_subsection(); + + /* + * At some point in the future deal.II may change its VCS settings so that + * all files are automatically converted to Unix ('\n') line endings. Since + * this bug involves files with DOS ('\r\n') line endings the parameter file + * must be stored here as a string. + */ + std::stringstream file_contents; + file_contents << "# Note that this file has DOS (\\r\\n) line endings.\r\n"; + file_contents << "\r\n"; + file_contents << "subsection bar \r\n"; + file_contents << " set val = 123.456\r\n"; + file_contents << "end\r\n"; + + std::istringstream input_stream(file_contents.str()); + bool okay = foo.read_input(input_stream); + AssertThrow(okay, ExcMessage("read_input failed")); + + foo.enter_subsection("bar"); + deallog << foo.get ("val") << std::endl; + foo.leave_subsection(); +} + +int main () +{ + std::ofstream logfile("output"); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + test (); + + return 0; +} diff --git a/tests/bits/parameter_handler_dos_endings.output b/tests/bits/parameter_handler_dos_endings.output new file mode 100644 index 0000000000..9691d4c41e --- /dev/null +++ b/tests/bits/parameter_handler_dos_endings.output @@ -0,0 +1,2 @@ + +DEAL::123.456 -- 2.39.5