aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/parsing/DocStringParser.cpp10
-rwxr-xr-xscripts/soltest.sh43
-rw-r--r--test/boostTest.cpp4
-rw-r--r--test/libsolidity/SyntaxTest.cpp6
-rw-r--r--test/libsolidity/syntaxTests/docstring_empty_description.sol6
6 files changed, 62 insertions, 8 deletions
diff --git a/Changelog.md b/Changelog.md
index 2e950f1d..1b1d86b1 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -7,6 +7,7 @@ Bugfixes:
* Code Generator: Bugfix in modifier lookup in libraries.
* Commandline interface: Support ``--evm-version constantinople`` properly.
* Standard JSON: Support ``constantinople`` as ``evmVersion`` properly.
+ * DocString Parser: Fix error message for empty descriptions.
### 0.4.21 (2018-03-07)
diff --git a/libsolidity/parsing/DocStringParser.cpp b/libsolidity/parsing/DocStringParser.cpp
index 0409de72..d058d556 100644
--- a/libsolidity/parsing/DocStringParser.cpp
+++ b/libsolidity/parsing/DocStringParser.cpp
@@ -119,21 +119,17 @@ DocStringParser::iter DocStringParser::parseDocTagParam(iter _pos, iter _end)
return _end;
}
auto nameEndPos = firstSpaceOrTab(nameStartPos, _end);
- if (nameEndPos == _end)
- {
- appendError("End of param name not found: " + string(nameStartPos, _end));
- return _end;
- }
auto paramName = string(nameStartPos, nameEndPos);
auto descStartPos = skipWhitespace(nameEndPos, _end);
- if (descStartPos == _end)
+ auto nlPos = find(descStartPos, _end, '\n');
+
+ if (descStartPos == nlPos)
{
appendError("No description given for param " + paramName);
return _end;
}
- auto nlPos = find(descStartPos, _end, '\n');
auto paramDesc = string(descStartPos, nlPos);
newTag("param");
m_lastTag->paramName = paramName;
diff --git a/scripts/soltest.sh b/scripts/soltest.sh
new file mode 100755
index 00000000..00f484a1
--- /dev/null
+++ b/scripts/soltest.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+set -e
+
+REPO_ROOT="$(dirname "$0")"/..
+USE_DEBUGGER=0
+DEBUGGER="gdb --args"
+BOOST_OPTIONS=
+SOLTEST_OPTIONS=
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ --debugger)
+ shift
+ DEBUGGER="$1"
+ USE_DEBUGGER=1
+ ;;
+ --debug)
+ USE_DEBUGGER=1
+ ;;
+ --boost-options)
+ shift
+ BOOST_OPTIONS="${BOOST_OPTIONS} $1"
+ ;;
+ -t)
+ shift
+ BOOST_OPTIONS="${BOOST_OPTIONS} -t $1"
+ ;;
+ --show-progress | -p)
+ BOOST_OPTIONS="${BOOST_OPTIONS} $1"
+ ;;
+ *)
+ SOLTEST_OPTIONS="${SOLTEST_OPTIONS} $1"
+ ;;
+ esac
+ shift
+done
+if [ "$USE_DEBUGGER" -ne "0" ]; then
+ DEBUG_PREFIX=${DEBUGGER}
+fi
+
+exec ${DEBUG_PREFIX} ${REPO_ROOT}/build/test/soltest ${BOOST_OPTIONS} -- --testpath ${REPO_ROOT}/test ${SOLTEST_OPTIONS}
diff --git a/test/boostTest.cpp b/test/boostTest.cpp
index e557ff95..8ad97db3 100644
--- a/test/boostTest.cpp
+++ b/test/boostTest.cpp
@@ -55,6 +55,10 @@ test_suite* init_unit_test_suite( int /*argc*/, char* /*argv*/[] )
{
master_test_suite_t& master = framework::master_test_suite();
master.p_name.value = "SolidityTests";
+ solAssert(
+ !dev::test::Options::get().testPath.empty(),
+ "No test path specified. The --testpath argument is required."
+ );
solAssert(dev::solidity::test::SyntaxTest::registerTests(
master,
dev::test::Options::get().testPath / "libsolidity",
diff --git a/test/libsolidity/SyntaxTest.cpp b/test/libsolidity/SyntaxTest.cpp
index f1c60458..45a851b6 100644
--- a/test/libsolidity/SyntaxTest.cpp
+++ b/test/libsolidity/SyntaxTest.cpp
@@ -21,6 +21,7 @@
#include <boost/throw_exception.hpp>
#include <cctype>
#include <fstream>
+#include <memory>
#include <stdexcept>
using namespace dev;
@@ -188,6 +189,9 @@ int SyntaxTest::registerTests(
}
else
{
+ static vector<unique_ptr<string>> filenames;
+
+ filenames.emplace_back(new string(_path.string()));
_suite.add(make_test_case(
[fullpath]
{
@@ -196,7 +200,7 @@ int SyntaxTest::registerTests(
BOOST_ERROR("Test expectation mismatch.\n" + errorStream.str());
},
_path.stem().string(),
- _path.string(),
+ *filenames.back(),
0
));
numTestsAdded = 1;
diff --git a/test/libsolidity/syntaxTests/docstring_empty_description.sol b/test/libsolidity/syntaxTests/docstring_empty_description.sol
new file mode 100644
index 00000000..0caa1b23
--- /dev/null
+++ b/test/libsolidity/syntaxTests/docstring_empty_description.sol
@@ -0,0 +1,6 @@
+contract C {
+ /// @param id
+ function vote(uint id) public;
+}
+// ----
+// DocstringParsingError: No description given for param id