2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 2015,2017,2019, by the GROMACS development team, led by
5 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6 * and including many others, as listed in the AUTHORS file in the
7 * top-level source directory and at http://www.gromacs.org.
9 * GROMACS is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 2.1
12 * of the License, or (at your option) any later version.
14 * GROMACS is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with GROMACS; if not, see
21 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 * If you want to redistribute modifications to GROMACS, please
25 * consider that scientific software is very special. Version
26 * control is crucial - bugs must be traceable. We will be happy to
27 * consider code for inclusion in the official distribution, but
28 * derived work must not be called official GROMACS. Details are found
29 * in the README & COPYING files - if they are missing, get the
30 * official version at http://www.gromacs.org.
32 * To help us fund GROMACS development, we humbly ask that you cite
33 * the research papers on the package. Check out http://www.gromacs.org.
37 * Tests for help text formatting.
39 * \author Teemu Murtola <teemu.murtola@gmail.com>
40 * \ingroup module_onlinehelp
44 #include "gromacs/onlinehelp/helpwritercontext.h"
48 #include <gtest/gtest.h>
50 #include "gromacs/utility/arrayref.h"
51 #include "gromacs/utility/gmxassert.h"
52 #include "gromacs/utility/stringutil.h"
54 #include "testutils/stringtest.h"
59 /********************************************************************
60 * Tests for HelpWriterContext
63 class HelpWriterContextTest : public gmx::test::StringTestBase
66 void testFormatting(const std::string& text, gmx::HelpOutputFormat format, const char* id)
68 gmx::HelpWriterContext context(nullptr, format);
69 std::string result = context.substituteMarkupAndWrapToString(settings_, text);
74 case gmx::eHelpOutputFormat_Console: id = "Console"; break;
75 case gmx::eHelpOutputFormat_Rst: id = "reStructuredText"; break;
76 default: GMX_RELEASE_ASSERT(false, "Help output format testing not implemented");
79 checkText(result, id);
81 void testFormatting(const gmx::ArrayRef<const char* const>& text)
83 std::string testText = gmx::joinStrings(text, "\n");
84 testFormatting(testText, gmx::eHelpOutputFormat_Console, nullptr);
85 testFormatting(testText, gmx::eHelpOutputFormat_Rst, nullptr);
88 gmx::TextLineWrapperSettings settings_;
91 TEST_F(HelpWriterContextTest, FormatsParagraphs)
93 const char* const text[] = { "A quick", "brown fox", "jumps over a lazy dog.[PAR]",
94 "A quick brown fox", "jumps over", "a lazy dog." };
95 settings_.setLineLength(13);
99 TEST_F(HelpWriterContextTest, FormatsRstStyleParagraphs)
101 const char* const text[] = { "A quick", "brown fox", "jumps over a lazy dog.",
102 "", "A quick brown fox", "jumps over",
104 settings_.setLineLength(13);
105 testFormatting(text);
108 TEST_F(HelpWriterContextTest, CleansUpExtraWhitespace)
110 const char* const text[] = { "", "A quick ",
111 "brown fox ", "jumps over a lazy dog.",
112 "[PAR]", "A quick brown fox",
113 "jumps over", "a lazy dog.[PAR]" };
114 settings_.setLineLength(13);
115 testFormatting(text);
118 TEST_F(HelpWriterContextTest, FormatsLiteralText)
120 const char* const text[] = { "Sample paragraph::", "", " literal block",
121 " another line", "", "Normal paragraph",
123 testFormatting(text);
126 TEST_F(HelpWriterContextTest, FormatsLiteralTextAtBeginning)
128 const char* const text[] = {
129 "::", "", " literal block", " another line", "", "Normal paragraph"
131 testFormatting(text);
134 TEST_F(HelpWriterContextTest, FormatsLiteralTextWithIndentation)
136 const char* const text[] = { "Sample paragraph::",
139 " another indented line",
143 testFormatting(text);
146 TEST_F(HelpWriterContextTest, FormatsBulletList)
148 const char* const text[] = { "Sample list:",
151 "* second item that",
152 " spans multiple lines",
153 "* third item that has a single long line",
155 "Normal paragraph" };
156 // Wrapping to rst with a fixed line length does not currently work
157 // correctly, but it is not used, either.
158 settings_.setLineLength(15);
159 testFormatting(text);
162 TEST_F(HelpWriterContextTest, FormatsEnumeratedList)
164 const char* const text[] = { "Sample list:",
167 "2. second item that",
168 " spans multiple lines",
169 "3. third item that has a single long line",
171 "9. Item with extra indentation",
172 "10. Double digit item",
174 "Normal paragraph" };
175 // Wrapping to rst with a fixed line length does not currently work
176 // correctly, but it is not used, either.
177 settings_.setLineLength(15);
178 testFormatting(text);
181 TEST_F(HelpWriterContextTest, FormatsSimpleTable)
183 const char* const text[] = { "Simple table:",
185 "============ =============",
186 "First column Second header",
187 "============ =============",
189 "============ =============",
193 testFormatting(text);
196 TEST_F(HelpWriterContextTest, FormatsGridTable)
198 const char* const text[] = { "Grid table:",
200 "+--------------+---------------+",
201 "| First column | Second header |",
202 "+--------------+---------------+",
204 "+--------------+---------------+",
208 testFormatting(text);
211 TEST_F(HelpWriterContextTest, FormatsTitles)
213 const char* const text[] = {
214 "Title", "=====", "Some text without spacing", "", "Subtitle", "++++++++", "", "More text",
216 testFormatting(text);