From 91cc72bcd457646253ac859a882f1fae699d053a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Mon, 31 Jul 2023 19:52:27 +0200 Subject: [PATCH 1/8] NatspecJSONTest based on SyntaxTest --- test/CMakeLists.txt | 2 + test/InteractiveTests.h | 2 + test/libsolidity/NatspecJSONTest.cpp | 210 +++++++++++++++++++++++++++ test/libsolidity/NatspecJSONTest.h | 82 +++++++++++ test/tools/CMakeLists.txt | 1 + 5 files changed, 297 insertions(+) create mode 100644 test/libsolidity/NatspecJSONTest.cpp create mode 100644 test/libsolidity/NatspecJSONTest.h diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 119104aca..b3b678983 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -84,6 +84,8 @@ set(libsolidity_sources libsolidity/Metadata.cpp libsolidity/MemoryGuardTest.cpp libsolidity/MemoryGuardTest.h + libsolidity/NatspecJSONTest.cpp + libsolidity/NatspecJSONTest.h libsolidity/SemanticTest.cpp libsolidity/SemanticTest.h libsolidity/SemVerMatcher.cpp diff --git a/test/InteractiveTests.h b/test/InteractiveTests.h index 01e47afe0..5021d801b 100644 --- a/test/InteractiveTests.h +++ b/test/InteractiveTests.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +75,7 @@ Testsuite const g_interactiveTestsuites[] = { {"Semantic", "libsolidity", "semanticTests", false, true, &SemanticTest::create}, {"JSON AST", "libsolidity", "ASTJSON", false, false, &ASTJSONTest::create}, {"JSON ABI", "libsolidity", "ABIJson", false, false, &ABIJsonTest::create}, + {"JSON Natspec", "libsolidity", "natspecJSON", false, false, &NatspecJSONTest::create}, {"SMT Checker", "libsolidity", "smtCheckerTests", true, false, &SMTCheckerTest::create}, {"Gas Estimates", "libsolidity", "gasTests", false, false, &GasTest::create}, {"Memory Guard", "libsolidity", "memoryGuardTests", false, false, &MemoryGuardTest::create}, diff --git a/test/libsolidity/NatspecJSONTest.cpp b/test/libsolidity/NatspecJSONTest.cpp new file mode 100644 index 000000000..434d5b392 --- /dev/null +++ b/test/libsolidity/NatspecJSONTest.cpp @@ -0,0 +1,210 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . + */ +/** + * Unit tests for the solidity compiler ABI JSON Interface output. + */ + +#include + +#include +#include + +#include + +#include + +#include + +using namespace std; +using namespace solidity::frontend::test; +using namespace solidity::util; + +ostream& solidity::frontend::test::operator<<(ostream& _output, NatspecJSONKind _kind) +{ + switch (_kind) { + case NatspecJSONKind::Devdoc: _output << "devdoc"; break; + case NatspecJSONKind::Userdoc: _output << "userdoc"; break; + } + return _output; +} + +unique_ptr NatspecJSONTest::create(Config const& _config) +{ + return make_unique(_config.filename, _config.evmVersion); +} + +void NatspecJSONTest::parseCustomExpectations(istream& _stream) +{ + soltestAssert(m_expectedNatspecJSON.empty()); + + // We expect a series of expectations in the following format: + // + // // + // // + + string line; + while (getline(_stream, line)) + { + string_view strippedLine = expectLinePrefix(line); + if (strippedLine.empty()) + continue; + + auto [contractName, kind] = parseExpectationHeader(strippedLine); + + string rawJSON = extractExpectationJSON(_stream); + string jsonErrors; + Json::Value parsedJSON; + bool jsonParsingSuccessful = jsonParseStrict(rawJSON, parsedJSON, &jsonErrors); + if (!jsonParsingSuccessful) + BOOST_THROW_EXCEPTION(runtime_error(fmt::format( + "Malformed JSON in {} expectation for contract {}.\n" + "Note that JSON expectations must be pretty-printed to be split correctly. " + "The object is assumed to and at the first unindented closing brace.\n" + "{}", + toString(kind), + contractName, + rawJSON + ))); + + m_expectedNatspecJSON[string(contractName)][kind] = parsedJSON; + } +} + +bool NatspecJSONTest::expectationsMatch() +{ + // NOTE: Comparing pretty printed Json::Values to avoid using its operator==, which fails to + // compare equal numbers as equal. For example, for 'version' field the value is sometimes int, + // sometimes uint and they compare as different even when both are 1. + return + SyntaxTest::expectationsMatch() && + prettyPrinted(obtainedNatspec()) == prettyPrinted(m_expectedNatspecJSON); +} + +void NatspecJSONTest::printExpectedResult(ostream& _stream, string const& _linePrefix, bool _formatted) const +{ + SyntaxTest::printExpectedResult(_stream, _linePrefix, _formatted); + if (!m_expectedNatspecJSON.empty()) + { + _stream << _linePrefix << "----" << endl; + printIndented(_stream, formatNatspecExpectations(m_expectedNatspecJSON), _linePrefix); + } +} + +void NatspecJSONTest::printObtainedResult(ostream& _stream, string const& _linePrefix, bool _formatted) const +{ + SyntaxTest::printObtainedResult(_stream, _linePrefix, _formatted); + + NatspecMap natspecJSON = obtainedNatspec(); + if (!natspecJSON.empty()) + { + _stream << _linePrefix << "----" << endl; + // TODO: Diff both versions and highlight differences. + // We should have a helper for doing that in newly defined test cases without much effort. + printIndented(_stream, formatNatspecExpectations(natspecJSON), _linePrefix); + } +} + +tuple NatspecJSONTest::parseExpectationHeader(string_view _line) +{ + for (NatspecJSONKind kind: {NatspecJSONKind::Devdoc, NatspecJSONKind::Userdoc}) + { + string kindSuffix = " " + toString(kind); + if (boost::algorithm::ends_with(_line, kindSuffix)) + return {_line.substr(0, _line.size() - kindSuffix.size()), kind}; + } + + BOOST_THROW_EXCEPTION(runtime_error( + "Natspec kind (devdoc/userdoc) not present in the expectation: "s.append(_line) + )); +} + +string NatspecJSONTest::extractExpectationJSON(istream& _stream) +{ + string rawJSON; + string line; + while (getline(_stream, line)) + { + string_view strippedLine = expectLinePrefix(line); + rawJSON += strippedLine; + rawJSON += "\n"; + + if (boost::algorithm::starts_with(strippedLine, "}")) + break; + } + + return rawJSON; +} + +string_view NatspecJSONTest::expectLinePrefix(string_view _line) +{ + size_t startPosition = 0; + if (!boost::algorithm::starts_with(_line, "//")) + BOOST_THROW_EXCEPTION(runtime_error( + "Expectation line is not a comment: "s.append(_line) + )); + + startPosition += 2; + if (startPosition < _line.size() && _line[startPosition] == ' ') + ++startPosition; + + return _line.substr(startPosition, _line.size() - startPosition); +} + +string NatspecJSONTest::formatNatspecExpectations(NatspecMap const& _expectations) const +{ + string output; + bool first = true; + // NOTE: Not sorting explicitly because CompilerStack seems to put contracts roughly in the + // order in which they appear in the source, which is much better than alphabetical order. + for (auto const& [contractName, expectationsForAllKinds]: _expectations) + for (auto const& [jsonKind, natspecJSON]: expectationsForAllKinds) + { + if (!first) + output += "\n\n"; + first = false; + + output += contractName + " " + toString(jsonKind) + "\n"; + output += jsonPrint(natspecJSON, {JsonFormat::Pretty, 4}); + } + + return output; +} + +NatspecMap NatspecJSONTest::obtainedNatspec() const +{ + if (compiler().state() < CompilerStack::AnalysisSuccessful) + return {}; + + NatspecMap result; + for (string contractName: compiler().contractNames()) + { + result[contractName][NatspecJSONKind::Devdoc] = compiler().natspecDev(contractName); + result[contractName][NatspecJSONKind::Userdoc] = compiler().natspecUser(contractName); + } + + return result; +} + +SerializedNatspecMap NatspecJSONTest::prettyPrinted(NatspecMap const& _expectations) const +{ + SerializedNatspecMap result; + for (auto const& [contractName, expectationsForAllKinds]: _expectations) + for (auto const& [jsonKind, natspecJSON]: expectationsForAllKinds) + result[contractName][jsonKind] = jsonPrint(natspecJSON, {JsonFormat::Pretty, 4}); + + return result; +} diff --git a/test/libsolidity/NatspecJSONTest.h b/test/libsolidity/NatspecJSONTest.h new file mode 100644 index 000000000..762b88d10 --- /dev/null +++ b/test/libsolidity/NatspecJSONTest.h @@ -0,0 +1,82 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 +/** + * Unit tests for the Natspec userdoc and devdoc JSON output. + */ + +#pragma once + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace solidity::frontend::test +{ + +enum class NatspecJSONKind +{ + Devdoc, + Userdoc, +}; + +std::ostream& operator<<(std::ostream& _output, NatspecJSONKind _kind); + +using NatspecMap = std::map>; +using SerializedNatspecMap = std::map>; + +class NatspecJSONTest: public SyntaxTest +{ +public: + + static std::unique_ptr create(Config const& _config); + + NatspecJSONTest(std::string const& _filename, langutil::EVMVersion _evmVersion): + SyntaxTest( + _filename, + _evmVersion, + langutil::Error::Severity::Error // _minSeverity + ) + {} + +protected: + void parseCustomExpectations(std::istream& _stream) override; + bool expectationsMatch() override; + void printExpectedResult(std::ostream& _stream, std::string const& _linePrefix, bool _formatted) const override; + void printObtainedResult(std::ostream& _stream, std::string const& _linePrefix, bool _formatted) const override; + + NatspecMap m_expectedNatspecJSON; + +private: + static std::tuple parseExpectationHeader(std::string_view _line); + static std::string extractExpectationJSON(std::istream& _stream); + static std::string_view expectLinePrefix(std::string_view _line); + + std::string formatNatspecExpectations(NatspecMap const& _expectations) const; + SerializedNatspecMap prettyPrinted(NatspecMap const& _expectations) const; + NatspecMap obtainedNatspec() const; +}; + +} diff --git a/test/tools/CMakeLists.txt b/test/tools/CMakeLists.txt index 2e57718bd..a86e6382d 100644 --- a/test/tools/CMakeLists.txt +++ b/test/tools/CMakeLists.txt @@ -25,6 +25,7 @@ add_executable(isoltest ../libsolidity/util/TestFunctionCall.cpp ../libsolidity/GasTest.cpp ../libsolidity/MemoryGuardTest.cpp + ../libsolidity/NatspecJSONTest.cpp ../libsolidity/SyntaxTest.cpp ../libsolidity/SemanticTest.cpp ../libsolidity/AnalysisFramework.cpp From 1041f071f0f0709b93360b40e636c222e6289f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Wed, 9 Aug 2023 17:42:41 +0200 Subject: [PATCH 2/8] SolidityNatspecJSON: A few tweaks and small fixes before automatic conversion - Expectation order matching the order of contracts in the source - Typos in test names - Redundant prefixes in test names - Wrong 'king' in some expectations (it's not checked by the test suite) --- test/libsolidity/SolidityNatspecJSON.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/libsolidity/SolidityNatspecJSON.cpp b/test/libsolidity/SolidityNatspecJSON.cpp index 9ecd35aef..eaf707f31 100644 --- a/test/libsolidity/SolidityNatspecJSON.cpp +++ b/test/libsolidity/SolidityNatspecJSON.cpp @@ -788,7 +788,7 @@ BOOST_AUTO_TEST_CASE(emit_same_signature_event_different_libraries) "details": "This should not appear in Contract C dev doc" } }, - "kind": "user", + "kind": "dev", "methods": {}, "version": 1 } @@ -1042,9 +1042,9 @@ BOOST_AUTO_TEST_CASE(event_inheritance_interface) "methods": {} } )ABCDEF"; - checkNatspec(sourceCode, "ERC20", devDoc, false); checkNatspec(sourceCode, "A", devDoc, false); checkNatspec(sourceCode, "B", devDoc, false); + checkNatspec(sourceCode, "ERC20", devDoc, false); char const* userDoc = R"ABCDEF( { @@ -1058,9 +1058,9 @@ BOOST_AUTO_TEST_CASE(event_inheritance_interface) "methods": {} } )ABCDEF"; - checkNatspec(sourceCode, "ERC20", userDoc, true); checkNatspec(sourceCode, "A", userDoc, true); checkNatspec(sourceCode, "B", userDoc, true); + checkNatspec(sourceCode, "ERC20", userDoc, true); } BOOST_AUTO_TEST_CASE(event_inheritance) @@ -1098,9 +1098,9 @@ BOOST_AUTO_TEST_CASE(event_inheritance) "methods": {} } )ABCDEF"; - checkNatspec(sourceCode, "ERC20", devDoc, false); checkNatspec(sourceCode, "A", devDoc, false); checkNatspec(sourceCode, "B", devDoc, false); + checkNatspec(sourceCode, "ERC20", devDoc, false); char const* userDoc = R"ABCDEF( { @@ -1114,9 +1114,9 @@ BOOST_AUTO_TEST_CASE(event_inheritance) "methods": {} } )ABCDEF"; - checkNatspec(sourceCode, "ERC20", userDoc, true); checkNatspec(sourceCode, "A", userDoc, true); checkNatspec(sourceCode, "B", userDoc, true); + checkNatspec(sourceCode, "ERC20", userDoc, true); } BOOST_AUTO_TEST_CASE(dev_desc_after_nl) @@ -1578,7 +1578,7 @@ BOOST_AUTO_TEST_CASE(dev_multiline_comment) checkNatspec(sourceCode, "test", natspec, false); } -BOOST_AUTO_TEST_CASE(dev_documenting_no_return_paramname) +BOOST_AUTO_TEST_CASE(dev_documenting_no_return_param_name) { char const* sourceCode = R"( contract test { @@ -1721,7 +1721,7 @@ BOOST_AUTO_TEST_CASE(enum_no_docs) checkNatspec(sourceCode, "C", userDoc, true); } -BOOST_AUTO_TEST_CASE(natspec_notice_without_tag) +BOOST_AUTO_TEST_CASE(notice_without_tag) { char const* sourceCode = R"( contract test { @@ -1745,7 +1745,7 @@ BOOST_AUTO_TEST_CASE(natspec_notice_without_tag) checkNatspec(sourceCode, "test", natspec, true); } -BOOST_AUTO_TEST_CASE(natspec_multiline_notice_without_tag) +BOOST_AUTO_TEST_CASE(multiline_notice_without_tag) { char const* sourceCode = R"( contract test { @@ -1815,7 +1815,7 @@ BOOST_AUTO_TEST_CASE(dev_documenting_nonexistent_param) expectNatspecError(sourceCode); } -BOOST_AUTO_TEST_CASE(dev_documenting_no_paramname) +BOOST_AUTO_TEST_CASE(dev_documenting_no_param_name) { char const* sourceCode = R"( contract test { @@ -1829,7 +1829,7 @@ BOOST_AUTO_TEST_CASE(dev_documenting_no_paramname) expectNatspecError(sourceCode); } -BOOST_AUTO_TEST_CASE(dev_documenting_no_paramname_end) +BOOST_AUTO_TEST_CASE(dev_documenting_no_param_name_end) { char const* sourceCode = R"( contract test { @@ -2771,7 +2771,7 @@ BOOST_AUTO_TEST_CASE(user_inherit_parameter_mismatch) checkNatspec(sourceCode, "Token", natspec2, true); } -BOOST_AUTO_TEST_CASE(dev_explicit_inehrit_complex) +BOOST_AUTO_TEST_CASE(dev_explicit_inherit_complex) { char const *sourceCode1 = R"( interface ERC20 { From ba019e5a0106702050e149d3042353b4736ae836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Thu, 10 Aug 2023 16:43:18 +0200 Subject: [PATCH 3/8] SolidityNatspecJSON: Manual conversion of two test cases that would not be handled correctly by the script - dev_multiple_params_mixed_whitespace has whitespace that is not completely preserved - dev_explicit_inherit_complex is a multi-file test --- test/libsolidity/SolidityNatspecJSON.cpp | 94 ------------------- .../dev_explicit_inherit_complex.sol | 45 +++++++++ .../dev_multiple_params_mixed_whitespace.sol | 24 +++++ 3 files changed, 69 insertions(+), 94 deletions(-) create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol create mode 100644 test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol diff --git a/test/libsolidity/SolidityNatspecJSON.cpp b/test/libsolidity/SolidityNatspecJSON.cpp index eaf707f31..fd0ffd0fd 100644 --- a/test/libsolidity/SolidityNatspecJSON.cpp +++ b/test/libsolidity/SolidityNatspecJSON.cpp @@ -1170,29 +1170,6 @@ BOOST_AUTO_TEST_CASE(dev_multiple_params) checkNatspec(sourceCode, "test", natspec, false); } -BOOST_AUTO_TEST_CASE(dev_multiple_params_mixed_whitespace) -{ - char const* sourceCode = "contract test {\n" - " /// @dev Multiplies a number by 7 and adds second parameter\n" - " /// @param a Documentation for the first parameter\n" - " /// @param second Documentation for the second parameter\n" - " function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; }\n" - "}\n"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - BOOST_AUTO_TEST_CASE(dev_mutiline_param_description) { char const* sourceCode = R"( @@ -2771,77 +2748,6 @@ BOOST_AUTO_TEST_CASE(user_inherit_parameter_mismatch) checkNatspec(sourceCode, "Token", natspec2, true); } -BOOST_AUTO_TEST_CASE(dev_explicit_inherit_complex) -{ - char const *sourceCode1 = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - interface ERC21 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test2 - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - )"; - - char const *sourceCode2 = R"( - import "Interfaces.sol" as myInterfaces; - - contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { - /// @inheritdoc myInterfaces.ERC20 - function transfer(address too, uint amount) - override(myInterfaces.ERC20, myInterfaces.ERC21) external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - m_compilerStack.reset(); - m_compilerStack.setSources({ - {"Interfaces.sol", "pragma solidity >=0.0;\n" + std::string(sourceCode1)}, - {"Testfile.sol", "pragma solidity >=0.0;\n" + std::string(sourceCode2)} - }); - - m_compilerStack.setEVMVersion(solidity::test::CommonOptions::get().evmVersion()); - - BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed"); - - Json::Value generatedDocumentation = m_compilerStack.natspecDev("Token"); - Json::Value expectedDocumentation; - util::jsonParseStrict(natspec, expectedDocumentation); - - expectedDocumentation["version"] = Json::Value(Natspec::c_natspecVersion); - expectedDocumentation["kind"] = Json::Value("dev"); - - BOOST_CHECK_MESSAGE( - expectedDocumentation == generatedDocumentation, - "Expected:\n" << util::jsonPrettyPrint(expectedDocumentation) << - "\n but got:\n" << util::jsonPrettyPrint(generatedDocumentation) - ); -} - BOOST_AUTO_TEST_CASE(dev_different_return_name) { char const *sourceCode = R"( diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol new file mode 100644 index 000000000..02a0f2cc7 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol @@ -0,0 +1,45 @@ +==== Source: Interfaces.sol ==== +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +interface ERC21 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test2 + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +==== Source: Testfile.sol ==== +import "Interfaces.sol" as myInterfaces; + +contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { + /// @inheritdoc myInterfaces.ERC20 + function transfer(address too, uint amount) + override(myInterfaces.ERC20, myInterfaces.ERC21) external returns (bool) { + return false; + } +} + +// ---- +// ---- +// Testfile.sol:Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol new file mode 100644 index 000000000..50fb4d53b --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol @@ -0,0 +1,24 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter", +// "second": "Documentation for the second parameter" +// } +// } +// } +// } From 99bfdf930a8ae7900f0f7d04a01aee1dd9e1774c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Wed, 9 Aug 2023 18:16:14 +0200 Subject: [PATCH 4/8] SolidityNatspecJSON: Convert Boost-based test cases into natspectJSON/*.sol tests --- test/CMakeLists.txt | 1 - test/libsolidity/SolidityNatspecJSON.cpp | 3297 ----------------- test/libsolidity/natspecJSON/custom.sol | 34 + .../natspecJSON/custom_inheritance.sol | 25 + .../natspecJSON/dev_and_user_basic_test.sol | 29 + .../natspecJSON/dev_and_user_no_doc.sol | 20 + .../natspecJSON/dev_author_at_function.sol | 9 + .../natspecJSON/dev_constructor.sol | 22 + .../dev_constructor_and_function.sol | 44 + .../natspecJSON/dev_constructor_return.sol | 8 + .../natspecJSON/dev_contract_doc.sol | 21 + .../natspecJSON/dev_contract_no_doc.sol | 17 + .../natspecJSON/dev_default_inherit.sol | 72 + .../dev_default_inherit_variable.sol | 36 + .../natspecJSON/dev_desc_after_nl.sol | 25 + .../natspecJSON/dev_different_return_name.sol | 38 + .../dev_different_return_name_multiple.sol | 41 + ...nt_return_name_multiple_partly_unnamed.sol | 41 + ...different_return_name_multiple_unnamed.sol | 41 + .../dev_documenting_no_param_description.sol | 8 + .../dev_documenting_no_param_name.sol | 8 + .../dev_documenting_no_param_name_end.sol | 8 + .../dev_documenting_no_return_param_name.sol | 9 + .../dev_documenting_nonexistent_param.sol | 8 + .../natspecJSON/dev_explicit_inherit.sol | 54 + .../natspecJSON/dev_explicit_inherit2.sol | 70 + .../dev_explicit_inherit_partial.sol | 56 + .../dev_explicit_inherit_partial2.sol | 56 + .../dev_explicit_inherit_variable.sol | 43 + .../dev_inherit_parameter_mismatch.sol | 58 + .../natspecJSON/dev_multiline_comment.sol | 35 + .../natspecJSON/dev_multiline_return.sol | 33 + .../natspecJSON/dev_multiple_functions.sol | 54 + .../natspecJSON/dev_multiple_params.sol | 24 + .../dev_mutiline_param_description.sol | 25 + test/libsolidity/natspecJSON/dev_return.sol | 30 + .../natspecJSON/dev_return_desc_after_nl.sol | 33 + .../natspecJSON/dev_return_desc_multiple.sol | 35 + .../dev_return_desc_multiple_unamed.sol | 35 + .../dev_return_desc_multiple_unamed_mixed.sol | 35 + ...ev_return_desc_multiple_unamed_mixed_2.sol | 38 + .../dev_return_name_no_description.sol | 38 + .../natspecJSON/dev_return_no_params.sol | 20 + .../dev_struct_getter_override.sol | 47 + ...rride_different_return_parameter_names.sol | 47 + ..._struct_getter_override_no_return_name.sol | 44 + .../dev_title_at_function_error.sol | 9 + .../emit_event_from_foreign_contract.sol | 41 + ...t_from_foreign_contract_no_inheritance.sol | 31 + ...m_foreign_contract_with_same_signature.sol | 74 + ...me_signature_event_different_libraries.sol | 66 + ...nt_different_libraries_missing_natspec.sol | 34 + ..._same_signature_event_library_contract.sol | 68 + ...event_library_contract_missing_natspec.sol | 53 + ...same_signature_event_library_inherited.sol | 46 + ...vent_library_inherited_missing_natspec.sol | 30 + .../libsolidity/natspecJSON/empty_comment.sol | 10 + test/libsolidity/natspecJSON/enum_no_docs.sol | 26 + test/libsolidity/natspecJSON/error.sol | 42 + .../natspecJSON/error_multiple.sol | 66 + test/libsolidity/natspecJSON/event.sol | 40 + .../natspecJSON/event_inheritance.sol | 104 + .../event_inheritance_interface.sol | 104 + .../multiline_notice_without_tag.sol | 18 + .../natspecJSON/notice_without_tag.sol | 17 + .../natspecJSON/private_state_variable.sol | 23 + .../natspecJSON/public_state_variable.sol | 36 + .../public_state_variable_struct.sol | 40 + .../public_state_variable_struct_repeated.sol | 13 + .../libsolidity/natspecJSON/slash3_slash3.sol | 18 + .../libsolidity/natspecJSON/slash3_slash4.sol | 18 + test/libsolidity/natspecJSON/slash4.sol | 11 + test/libsolidity/natspecJSON/star3.sol | 13 + .../natspecJSON/struct_no_docs.sol | 27 + .../natspecJSON/user_basic_test.sol | 17 + .../natspecJSON/user_constructor.sol | 17 + .../user_constructor_and_function.sol | 23 + .../natspecJSON/user_default_inherit.sol | 57 + .../user_default_inherit_variable.sol | 35 + .../natspecJSON/user_empty_contract.sol | 8 + .../natspecJSON/user_empty_natspec_test.sol | 13 + .../natspecJSON/user_explicit_inherit.sol | 44 + .../natspecJSON/user_explicit_inherit2.sol | 55 + .../user_explicit_inherit_partial.sol | 46 + .../user_explicit_inherit_partial2.sol | 46 + .../user_explicit_inherit_variable.sol | 42 + .../user_inherit_parameter_mismatch.sol | 48 + .../natspecJSON/user_multiline_comment.sol | 20 + .../user_multiline_empty_lines.sol | 22 + .../natspecJSON/user_multiple_functions.sol | 37 + .../natspecJSON/user_newline_break.sol | 21 + 91 files changed, 3103 insertions(+), 3298 deletions(-) delete mode 100644 test/libsolidity/SolidityNatspecJSON.cpp create mode 100644 test/libsolidity/natspecJSON/custom.sol create mode 100644 test/libsolidity/natspecJSON/custom_inheritance.sol create mode 100644 test/libsolidity/natspecJSON/dev_and_user_basic_test.sol create mode 100644 test/libsolidity/natspecJSON/dev_and_user_no_doc.sol create mode 100644 test/libsolidity/natspecJSON/dev_author_at_function.sol create mode 100644 test/libsolidity/natspecJSON/dev_constructor.sol create mode 100644 test/libsolidity/natspecJSON/dev_constructor_and_function.sol create mode 100644 test/libsolidity/natspecJSON/dev_constructor_return.sol create mode 100644 test/libsolidity/natspecJSON/dev_contract_doc.sol create mode 100644 test/libsolidity/natspecJSON/dev_contract_no_doc.sol create mode 100644 test/libsolidity/natspecJSON/dev_default_inherit.sol create mode 100644 test/libsolidity/natspecJSON/dev_default_inherit_variable.sol create mode 100644 test/libsolidity/natspecJSON/dev_desc_after_nl.sol create mode 100644 test/libsolidity/natspecJSON/dev_different_return_name.sol create mode 100644 test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol create mode 100644 test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol create mode 100644 test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol create mode 100644 test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol create mode 100644 test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol create mode 100644 test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol create mode 100644 test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol create mode 100644 test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit.sol create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit2.sol create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol create mode 100644 test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol create mode 100644 test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol create mode 100644 test/libsolidity/natspecJSON/dev_multiline_comment.sol create mode 100644 test/libsolidity/natspecJSON/dev_multiline_return.sol create mode 100644 test/libsolidity/natspecJSON/dev_multiple_functions.sol create mode 100644 test/libsolidity/natspecJSON/dev_multiple_params.sol create mode 100644 test/libsolidity/natspecJSON/dev_mutiline_param_description.sol create mode 100644 test/libsolidity/natspecJSON/dev_return.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_desc_multiple.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_name_no_description.sol create mode 100644 test/libsolidity/natspecJSON/dev_return_no_params.sol create mode 100644 test/libsolidity/natspecJSON/dev_struct_getter_override.sol create mode 100644 test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol create mode 100644 test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol create mode 100644 test/libsolidity/natspecJSON/dev_title_at_function_error.sol create mode 100644 test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol create mode 100644 test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol create mode 100644 test/libsolidity/natspecJSON/emit_event_from_foreign_contract_with_same_signature.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol create mode 100644 test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol create mode 100644 test/libsolidity/natspecJSON/empty_comment.sol create mode 100644 test/libsolidity/natspecJSON/enum_no_docs.sol create mode 100644 test/libsolidity/natspecJSON/error.sol create mode 100644 test/libsolidity/natspecJSON/error_multiple.sol create mode 100644 test/libsolidity/natspecJSON/event.sol create mode 100644 test/libsolidity/natspecJSON/event_inheritance.sol create mode 100644 test/libsolidity/natspecJSON/event_inheritance_interface.sol create mode 100644 test/libsolidity/natspecJSON/multiline_notice_without_tag.sol create mode 100644 test/libsolidity/natspecJSON/notice_without_tag.sol create mode 100644 test/libsolidity/natspecJSON/private_state_variable.sol create mode 100644 test/libsolidity/natspecJSON/public_state_variable.sol create mode 100644 test/libsolidity/natspecJSON/public_state_variable_struct.sol create mode 100644 test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol create mode 100644 test/libsolidity/natspecJSON/slash3_slash3.sol create mode 100644 test/libsolidity/natspecJSON/slash3_slash4.sol create mode 100644 test/libsolidity/natspecJSON/slash4.sol create mode 100644 test/libsolidity/natspecJSON/star3.sol create mode 100644 test/libsolidity/natspecJSON/struct_no_docs.sol create mode 100644 test/libsolidity/natspecJSON/user_basic_test.sol create mode 100644 test/libsolidity/natspecJSON/user_constructor.sol create mode 100644 test/libsolidity/natspecJSON/user_constructor_and_function.sol create mode 100644 test/libsolidity/natspecJSON/user_default_inherit.sol create mode 100644 test/libsolidity/natspecJSON/user_default_inherit_variable.sol create mode 100644 test/libsolidity/natspecJSON/user_empty_contract.sol create mode 100644 test/libsolidity/natspecJSON/user_empty_natspec_test.sol create mode 100644 test/libsolidity/natspecJSON/user_explicit_inherit.sol create mode 100644 test/libsolidity/natspecJSON/user_explicit_inherit2.sol create mode 100644 test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol create mode 100644 test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol create mode 100644 test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol create mode 100644 test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol create mode 100644 test/libsolidity/natspecJSON/user_multiline_comment.sol create mode 100644 test/libsolidity/natspecJSON/user_multiline_empty_lines.sol create mode 100644 test/libsolidity/natspecJSON/user_multiple_functions.sol create mode 100644 test/libsolidity/natspecJSON/user_newline_break.sol diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b3b678983..f8242db7a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -97,7 +97,6 @@ set(libsolidity_sources libsolidity/SolidityExecutionFramework.h libsolidity/SolidityExpressionCompiler.cpp libsolidity/SolidityNameAndTypeResolution.cpp - libsolidity/SolidityNatspecJSON.cpp libsolidity/SolidityOptimizer.cpp libsolidity/SolidityParser.cpp libsolidity/SolidityTypes.cpp diff --git a/test/libsolidity/SolidityNatspecJSON.cpp b/test/libsolidity/SolidityNatspecJSON.cpp deleted file mode 100644 index fd0ffd0fd..000000000 --- a/test/libsolidity/SolidityNatspecJSON.cpp +++ /dev/null @@ -1,3297 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see . - */ -/** - * @author Lefteris Karapetsas - * @date 2014 - * Unit tests for the solidity compiler JSON Interface output. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace solidity::langutil; - -namespace solidity::frontend::test -{ - -class DocumentationChecker -{ -public: - void checkNatspec( - std::string const& _code, - std::string const& _contractName, - std::string const& _expectedDocumentationString, - bool _userDocumentation - ) - { - m_compilerStack.reset(); - m_compilerStack.setSources({{"", "pragma solidity >=0.0;\n" + _code}}); - m_compilerStack.setEVMVersion(solidity::test::CommonOptions::get().evmVersion()); - BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed"); - - Json::Value generatedDocumentation; - if (_userDocumentation) - generatedDocumentation = m_compilerStack.natspecUser(_contractName); - else - generatedDocumentation = m_compilerStack.natspecDev(_contractName); - Json::Value expectedDocumentation; - std::string parseError; - BOOST_REQUIRE_MESSAGE(util::jsonParseStrict(_expectedDocumentationString, expectedDocumentation, &parseError), parseError); - - expectedDocumentation["version"] = Json::Value(Natspec::c_natspecVersion); - expectedDocumentation["kind"] = Json::Value(_userDocumentation ? "user" : "dev"); - - BOOST_CHECK_MESSAGE( - expectedDocumentation == generatedDocumentation, - "Expected:\n" << util::jsonPrettyPrint(expectedDocumentation) << - "\n but got:\n" << util::jsonPrettyPrint(generatedDocumentation) - ); - } - - void expectNatspecError(std::string const& _code) - { - m_compilerStack.reset(); - m_compilerStack.setSources({{"", "pragma solidity >=0.0;\n" + _code}}); - m_compilerStack.setEVMVersion(solidity::test::CommonOptions::get().evmVersion()); - BOOST_CHECK(!m_compilerStack.parseAndAnalyze()); - BOOST_REQUIRE(Error::containsErrorOfType(m_compilerStack.errors(), Error::Type::DocstringParsingError)); - } - -protected: - CompilerStack m_compilerStack; -}; - -BOOST_FIXTURE_TEST_SUITE(SolidityNatspecJSON, DocumentationChecker) - -BOOST_AUTO_TEST_CASE(user_empty_natspec_test) -{ - char const* sourceCode = R"( - contract test { - /// - /// - function f() public { - } - } - )"; - - char const* natspec = R"( - { - "methods": {} - } - )"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(user_newline_break) -{ - char const* sourceCode = R"( - contract test { - /// - /// @notice hello - - /// @notice world - function f() public { - } - } - )"; - - char const* natspec = R"ABCDEF( - { - "methods": - { - "f()": - { - "notice": "world" - } - } - } - )ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(user_multiline_empty_lines) -{ - char const* sourceCode = R"( - contract test { - /** - * - * - * @notice hello world - */ - function f() public { - } - } - )"; - - char const* natspec = R"ABCDEF( - { - "methods": - { - "f()": - { - "notice": "hello world" - } - } - } - )ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - - -BOOST_AUTO_TEST_CASE(user_basic_test) -{ - char const* sourceCode = R"( - contract test { - /// @notice Multiplies `a` by 7 - function mul(uint a) public returns(uint d) { return a * 7; } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256)\":{ \"notice\": \"Multiplies `a` by 7\"}" - "}}"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_and_user_basic_test) -{ - char const* sourceCode = R"( - contract test { - /// @notice Multiplies `a` by 7 - /// @dev Multiplies a number by 7 - function mul(uint a) public returns (uint d) { return a * 7; } - } - )"; - - char const* devNatspec = R"R( - { - "methods": - { - "mul(uint256)": - { - "details": "Multiplies a number by 7" - } - } - })R"; - - char const* userNatspec = R"R( - { - "methods": - { - "mul(uint256)": - { - "notice": "Multiplies `a` by 7" - } - } - })R"; - - checkNatspec(sourceCode, "test", devNatspec, false); - checkNatspec(sourceCode, "test", userNatspec, true); -} - -BOOST_AUTO_TEST_CASE(user_multiline_comment) -{ - char const* sourceCode = R"( - contract test { - /// @notice Multiplies `a` by 7 - /// and then adds `b` - function mul_and_add(uint a, uint256 b) public returns (uint256 d) { - return (a * 7) + b; - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul_and_add(uint256,uint256)\":{ \"notice\": \"Multiplies `a` by 7 and then adds `b`\"}" - "}}"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(user_multiple_functions) -{ - char const* sourceCode = R"( - contract test { - /// @notice Multiplies `a` by 7 and then adds `b` - function mul_and_add(uint a, uint256 b) public returns (uint256 d) { - return (a * 7) + b; - } - - /// @notice Divides `input` by `div` - function divide(uint input, uint div) public returns (uint d) { - return input / div; - } - - /// @notice Subtracts 3 from `input` - function sub(int input) public returns (int d) { - return input - 3; - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul_and_add(uint256,uint256)\":{ \"notice\": \"Multiplies `a` by 7 and then adds `b`\"}," - " \"divide(uint256,uint256)\":{ \"notice\": \"Divides `input` by `div`\"}," - " \"sub(int256)\":{ \"notice\": \"Subtracts 3 from `input`\"}" - "}}"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(user_empty_contract) -{ - char const* sourceCode = R"( - contract test { } - )"; - - char const* natspec = "{\"methods\":{} }"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_and_user_no_doc) -{ - char const* sourceCode = R"( - contract test { - function mul(uint a) public returns (uint d) { - return a * 7; - } - function sub(int input) public returns (int d) { - return input - 3; - } - } - )"; - - char const* devNatspec = "{\"methods\":{}}"; - char const* userNatspec = "{\"methods\":{}}"; - - checkNatspec(sourceCode, "test", devNatspec, false); - checkNatspec(sourceCode, "test", userNatspec, true); -} - -BOOST_AUTO_TEST_CASE(public_state_variable) -{ - char const* sourceCode = R"( - contract test { - /// @notice example of notice - /// @dev example of dev - /// @return returns state - uint public state; - } - )"; - - char const* devDoc = R"R( - { - "methods": {}, - "stateVariables": - { - "state": - { - "details": "example of dev", - "return": "returns state", - "returns": - { - "_0": "returns state" - } - } - } - } - )R"; - checkNatspec(sourceCode, "test", devDoc, false); - - char const* userDoc = R"R( - { - "methods": - { - "state()": - { - "notice": "example of notice" - } - } - } - )R"; - checkNatspec(sourceCode, "test", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(public_state_variable_struct) -{ - char const* sourceCode = R"( - contract Bank { - struct Coin { - string observeGraphicURL; - string reverseGraphicURL; - } - - /// @notice Get the n-th coin I own - /// @return observeGraphicURL Front pic - /// @return reverseGraphicURL Back pic - Coin[] public coinStack; - } - )"; - - char const* devDoc = R"R( - { - "methods": {}, - "stateVariables": - { - "coinStack": - { - "returns": - { - "observeGraphicURL": "Front pic", - "reverseGraphicURL": "Back pic" - } - } - } - } - )R"; - checkNatspec(sourceCode, "Bank", devDoc, false); - - char const* userDoc = R"R( - { - "methods": - { - "coinStack(uint256)": - { - "notice": "Get the n-th coin I own" - } - } - } - )R"; - checkNatspec(sourceCode, "Bank", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(public_state_variable_struct_repeated) -{ - char const* sourceCode = R"( - contract Bank { - struct Coin { - string obverseGraphicURL; - string reverseGraphicURL; - } - - /// @notice Get the n-th coin I own - /// @return obverseGraphicURL Front pic - /// @return obverseGraphicURL Front pic - Coin[] public coinStack; - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(private_state_variable) -{ - char const* sourceCode = R"( - contract test { - /// @dev example of dev - uint private state; - } - )"; - - char const* devDoc = R"( - { - "methods": {}, - "stateVariables": - { - "state": - { - "details": "example of dev" - } - } - } - )"; - checkNatspec(sourceCode, "test", devDoc, false); - - char const* userDoc = R"( - { - "methods":{} - } - )"; - checkNatspec(sourceCode, "test", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(event) -{ - char const* sourceCode = R"( - contract ERC20 { - /// @notice This event is emitted when a transfer occurs. - /// @param from The source account. - /// @param to The destination account. - /// @param amount The amount. - /// @dev A test case! - event Transfer(address indexed from, address indexed to, uint amount); - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "details": "A test case!", - "params": - { - "amount": "The amount.", "from": "The source account.", "to": "The destination account." - } - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "ERC20", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "notice": "This event is emitted when a transfer occurs." - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "ERC20", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_event_from_foreign_contract) -{ - char const* sourceCode = R"( - contract X { - /// @notice Userdoc for event E. - /// @dev Devdoc for event E. - event E(); - } - - contract C { - function g() public { - emit X.E(); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "E()": - { - "details": "Devdoc for event E." - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "E()": - { - "notice": "Userdoc for event E." - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_event_from_foreign_contract_with_same_signature) -{ - char const* sourceCode = R"( - contract C { - /// @notice C.E event - /// @dev C.E event - event E(uint256 value); - } - - contract D { - /// @notice D.E event - /// @dev D.E event - event E(uint256 value); - - function test() public { - emit C.E(1); - emit E(2); - } - } - )"; - - char const* devDocC = R"ABCDEF( - { - "events": - { - "E(uint256)": - { - "details": "C.E event" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDocC, false); - - char const* devDocD = R"ABCDEF( - { - "events": - { - "E(uint256)": - { - "details": "D.E event" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "D", devDocD, false); - - char const* userDocC = R"ABCDEF( - { - "events": - { - "E(uint256)": - { - "notice": "C.E event" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDocC, true); - - char const* userDocD = R"ABCDEF( - { - "events": - { - "E(uint256)": - { - "notice": "D.E event" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "D", userDocD, true); -} - -// Tests that emitting an event from contract C in contract D does not inherit natspec from C.E -BOOST_AUTO_TEST_CASE(emit_event_from_foreign_contract_no_inheritance) -{ - char const* sourceCode = R"( - contract C { - /// @notice C.E event - /// @dev C.E event - event E(); - } - - contract D { - event E(); - - function test() public { - emit C.E(); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "D", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "D", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_library_contract) -{ - char const* sourceCode = R"( - library L { - /// @notice This event is defined in Library L - /// @dev This should not appear in Contract C dev doc - event SameSignatureEvent(uint16); - /// @notice This event is defined in Library L - /// @dev This should appear in Contract C dev doc - event LibraryEvent(uint32); - } - contract C { - /// @notice This event is defined in Contract C - /// @dev This should appear in Contract C dev doc - event SameSignatureEvent(uint16); - /// @notice This event is defined in Contract C - /// @dev This should appear in contract C dev doc - event ContractEvent(uint32); - function f() public { - emit L.SameSignatureEvent(0); - emit SameSignatureEvent(1); - emit L.LibraryEvent(2); - emit ContractEvent(3); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "ContractEvent(uint32)": - { - "details": "This should appear in contract C dev doc" - }, - "LibraryEvent(uint32)": - { - "details": "This should appear in Contract C dev doc" - }, - "SameSignatureEvent(uint16)": - { - "details": "This should appear in Contract C dev doc" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "ContractEvent(uint32)": - { - "notice": "This event is defined in Contract C" - }, - "LibraryEvent(uint32)": - { - "notice": "This event is defined in Library L" - }, - "SameSignatureEvent(uint16)": - { - "notice": "This event is defined in Contract C" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_different_libraries) -{ - char const* sourceCode = R"( - library L1 { - /// @notice This event is defined in Library L1 - /// @dev This should not appear in Contract C dev doc - event SameSignatureEvent(uint16); - } - library L2 { - /// @notice This event is defined in Library L2 - /// @dev This should not appear in Contract C dev doc - event SameSignatureEvent(uint16); - } - library L3 { - /// @notice This event is defined in Library L3 - /// @dev This should not appear in Contract C dev doc - event SameSignatureEvent(uint16); - } - contract C { - function f() public { - emit L1.SameSignatureEvent(0); - emit L2.SameSignatureEvent(1); - emit L3.SameSignatureEvent(2); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); - - char const* libraryDevDoc = R"ABCDEF( - { - "events": - { - "SameSignatureEvent(uint16)": - { - "details": "This should not appear in Contract C dev doc" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "L1", libraryDevDoc, false); - - char const* libraryUserDoc = R"ABCDEF( - { - "events": - { - "SameSignatureEvent(uint16)": - { - "notice": "This event is defined in Library L1" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "L1", libraryUserDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_library_inherited) -{ - char const* sourceCode = R"( - contract D { - /// @notice This event is defined in contract D - /// @dev This should appear in Contract C dev doc - event SameSignatureEvent(uint16); - } - library L { - /// @notice This event is defined in Library L - /// @dev This should not appear in Contract C - event SameSignatureEvent(uint16); - } - contract C is D { - function f() public { - emit L.SameSignatureEvent(0); - emit D.SameSignatureEvent(1); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "SameSignatureEvent(uint16)": - { - "details": "This should appear in Contract C dev doc" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "SameSignatureEvent(uint16)": - { - "notice": "This event is defined in contract D" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_library_contract_missing_natspec) -{ - char const* sourceCode = R"( - library L { - /// @notice This event is defined in library L - /// @dev This should not appear in contract C devdoc - event SameSignatureEvent(uint16); - /// @notice This event is defined in library L - /// @dev This should appear in contract C devdoc - event LibraryEvent(uint32); - } - contract C { - event SameSignatureEvent(uint16); - /// @notice This event is defined in contract C - event ContractEvent(uint32); - function f() public { - emit L.SameSignatureEvent(0); - emit SameSignatureEvent(1); - emit L.LibraryEvent(2); - emit ContractEvent(3); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "LibraryEvent(uint32)": - { - "details": "This should appear in contract C devdoc" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "ContractEvent(uint32)": - { - "notice": "This event is defined in contract C" - }, - "LibraryEvent(uint32)": - { - "notice": "This event is defined in library L" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_different_libraries_missing_natspec) -{ - char const* sourceCode = R"( - library L1 { - event SameSignatureEvent(uint16); - } - library L2 { - /// @notice This event is defined in library L2 - /// @dev This should not appear in Contract C devdoc - event SameSignatureEvent(uint16); - } - library L3 { - event SameSignatureEvent(uint16); - } - contract C { - function f() public { - emit L1.SameSignatureEvent(0); - emit L2.SameSignatureEvent(1); - emit L3.SameSignatureEvent(2); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(emit_same_signature_event_library_inherited_missing_natspec) -{ - char const* sourceCode = R"( - contract D { - event SameSignatureEvent(uint16); - } - library L { - /// @notice This event is defined in library L - /// @dev This should not appear in contract C devdoc - event SameSignatureEvent(uint16); - } - contract C is D { - function f() public { - emit L.SameSignatureEvent(0); - emit D.SameSignatureEvent(1); - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - } - )ABCDEF"; - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(event_inheritance_interface) -{ - char const* sourceCode = R"( - interface ERC20 { - /// @notice This event is emitted when a transfer occurs. - /// @param from The source account. - /// @param to The destination account. - /// @param amount The amount. - /// @dev A test case! - event Transfer(address indexed from, address indexed to, uint amount); - } - contract A is ERC20 { - } - contract B is A { - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "details": "A test case!", - "params": - { - "amount": "The amount.", - "from": "The source account.", - "to": "The destination account." - } - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "A", devDoc, false); - checkNatspec(sourceCode, "B", devDoc, false); - checkNatspec(sourceCode, "ERC20", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "notice": "This event is emitted when a transfer occurs." - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "A", userDoc, true); - checkNatspec(sourceCode, "B", userDoc, true); - checkNatspec(sourceCode, "ERC20", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(event_inheritance) -{ - char const* sourceCode = R"( - contract ERC20 { - /// @notice This event is emitted when a transfer occurs. - /// @param from The source account. - /// @param to The destination account. - /// @param amount The amount. - /// @dev A test case! - event Transfer(address indexed from, address indexed to, uint amount); - } - contract A is ERC20 { - } - contract B is A { - } - )"; - - char const* devDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "details": "A test case!", - "params": - { - "amount": "The amount.", - "from": "The source account.", - "to": "The destination account." - } - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "A", devDoc, false); - checkNatspec(sourceCode, "B", devDoc, false); - checkNatspec(sourceCode, "ERC20", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "events": - { - "Transfer(address,address,uint256)": - { - "notice": "This event is emitted when a transfer occurs." - } - }, - "methods": {} - } - )ABCDEF"; - checkNatspec(sourceCode, "A", userDoc, true); - checkNatspec(sourceCode, "B", userDoc, true); - checkNatspec(sourceCode, "ERC20", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(dev_desc_after_nl) -{ - char const* sourceCode = R"( - contract test { - /// @dev - /// Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param second Documentation for the second parameter - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_multiple_params) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param second Documentation for the second parameter - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_mutiline_param_description) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_multiple_functions) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param second Documentation for the second parameter - function mul(uint a, uint second) public returns (uint d) { - return a * 7 + second; - } - /// @dev Divides 2 numbers - /// @param input Documentation for the input parameter - /// @param div Documentation for the div parameter - function divide(uint input, uint div) public returns (uint d) { - return input / div; - } - /// @dev Subtracts 3 from `input` - /// @param input Documentation for the input parameter - function sub(int input) public returns (int d) { - return input - 3; - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " }\n" - " },\n" - " \"divide(uint256,uint256)\":{ \n" - " \"details\": \"Divides 2 numbers\",\n" - " \"params\": {\n" - " \"input\": \"Documentation for the input parameter\",\n" - " \"div\": \"Documentation for the div parameter\"\n" - " }\n" - " },\n" - " \"sub(int256)\":{ \n" - " \"details\": \"Subtracts 3 from `input`\",\n" - " \"params\": {\n" - " \"input\": \"Documentation for the input parameter\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_no_params) -{ - char const* sourceCode = R"( - contract test { - /// @return d The result of the multiplication - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = R"ABCDEF( - { - "methods": - { - "mul(uint256,uint256)": - { - "returns": { "d": "The result of the multiplication" } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return d The result of the multiplication - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"d\": \"The result of the multiplication\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_desc_after_nl) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return - /// d The result of the multiplication - function mul(uint a, uint second) public returns (uint d) { - return a * 7 + second; - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"d\": \"The result of the multiplication\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_desc_multiple_unamed_mixed) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return The result of the multiplication - /// @return _cookies And cookies with nutella - function mul(uint a, uint second) public returns (uint, uint _cookies) { - uint mul = a * 7; - return (mul, second); - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"_0\": \"The result of the multiplication\",\n" - " \"_cookies\": \"And cookies with nutella\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_desc_multiple_unamed_mixed_2) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return _cookies And cookies with nutella - /// @return The result of the multiplication - /// @return _milk And milk with nutella - function mul(uint a, uint second) public returns (uint _cookies, uint, uint _milk) { - uint mul = a * 7; - uint milk = 4; - return (mul, second, milk); - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"_cookies\": \"And cookies with nutella\",\n" - " \"_1\": \"The result of the multiplication\",\n" - " \"_milk\": \"And milk with nutella\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_desc_multiple_unamed) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return The result of the multiplication - /// @return And cookies with nutella - function mul(uint a, uint second) public returns (uint, uint) { - uint mul = a * 7; - return (mul, second); - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"_0\": \"The result of the multiplication\",\n" - " \"_1\": \"And cookies with nutella\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_desc_multiple) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return d The result of the multiplication - /// @return f And cookies with nutella - function mul(uint a, uint second) public returns (uint d, uint f) { - uint mul = a * 7; - return (mul, second); - } - } - )"; - - char const* natspec = "{" - "\"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Multiplies a number by 7 and adds second parameter\",\n" - " \"params\": {\n" - " \"a\": \"Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines\",\n" - " \"second\": \"Documentation for the second parameter\"\n" - " },\n" - " \"returns\": {\n" - " \"d\": \"The result of the multiplication\",\n" - " \"f\": \"And cookies with nutella\"\n" - " }\n" - " }\n" - "}}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_multiline_return) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return d The result of the multiplication - /// and cookies with nutella - function mul(uint a, uint second) public returns (uint d) { - return a * 7 + second; - } - } - )"; - - char const* natspec = R"R({ - "methods": - { - "mul(uint256,uint256)": - { - "details": "Multiplies a number by 7 and adds second parameter", - "params": - { - "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", - "second": "Documentation for the second parameter" - }, - "returns": - { - "d": "The result of the multiplication and cookies with nutella" - } - } - } - })R"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_multiline_comment) -{ - char const* sourceCode = R"( - contract test { - /** - * @dev Multiplies a number by 7 and adds second parameter - * @param a Documentation for the first parameter starts here. - * Since it's a really complicated parameter we need 2 lines - * @param second Documentation for the second parameter - * @return d The result of the multiplication - * and cookies with nutella - */ - function mul(uint a, uint second) public returns (uint d) { - return a * 7 + second; - } - } - )"; - - char const* natspec = R"R( - { - "methods": - { - "mul(uint256,uint256)": - { - "details": "Multiplies a number by 7 and adds second parameter", - "params": - { - "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", - "second": "Documentation for the second parameter" - }, - "returns": - { - "d": "The result of the multiplication and cookies with nutella" - } - } - } - })R"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_documenting_no_return_param_name) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param second Documentation for the second parameter - /// @return - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_contract_no_doc) -{ - char const* sourceCode = R"( - contract test { - /// @dev Mul function - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - " \"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Mul function\"\n" - " }\n" - " }\n" - "}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_contract_doc) -{ - char const* sourceCode = R"( - /// @author Lefteris - /// @title Just a test contract - contract test { - /// @dev Mul function - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = "{" - " \"author\": \"Lefteris\"," - " \"title\": \"Just a test contract\"," - " \"methods\":{" - " \"mul(uint256,uint256)\":{ \n" - " \"details\": \"Mul function\"\n" - " }\n" - " }\n" - "}"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_author_at_function) -{ - char const* sourceCode = R"( - /// @author Lefteris - /// @title Just a test contract - contract test { - /// @dev Mul function - /// @author John Doe - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(struct_no_docs) -{ - char const* sourceCode = R"( - contract C { - /// @title example of title - /// @author example of author - /// @notice example of notice - /// @dev example of dev - struct Example { - string text; - bool valid; - uint256 value; - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - })ABCDEF"; - - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - })ABCDEF"; - - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(enum_no_docs) -{ - char const* sourceCode = R"( - contract C { - /// @title example of title - /// @author example of author - /// @notice example of notice - /// @dev example of dev - enum Color { - Red, - Green - } - } - )"; - - char const* devDoc = R"ABCDEF( - { - "kind": "dev", - "methods": {}, - "version": 1 - })ABCDEF"; - - checkNatspec(sourceCode, "C", devDoc, false); - - char const* userDoc = R"ABCDEF( - { - "kind": "user", - "methods": {}, - "version": 1 - })ABCDEF"; - - checkNatspec(sourceCode, "C", userDoc, true); -} - -BOOST_AUTO_TEST_CASE(notice_without_tag) -{ - char const* sourceCode = R"( - contract test { - /// I do something awesome - function mul(uint a) public returns (uint d) { return a * 7; } - } - )"; - - - char const* natspec = R"ABCDEF( - { - "methods": - { - "mul(uint256)": - { - "notice": "I do something awesome" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(multiline_notice_without_tag) -{ - char const* sourceCode = R"( - contract test { - /// I do something awesome - /// which requires two lines to explain - function mul(uint a) public returns (uint d) { return a * 7; } - } - )"; - - char const* natspec = R"ABCDEF( - { - "methods": - { - "mul(uint256)": - { - "notice": "I do something awesome which requires two lines to explain" - } - } - } - )ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(empty_comment) -{ - char const* sourceCode = R"( - // - contract test - {} - )"; - char const* natspec = R"ABCDEF( - { - "methods": {} - } - )ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_title_at_function_error) -{ - char const* sourceCode = R"( - /// @author Lefteris - /// @title Just a test contract - contract test { - /// @dev Mul function - /// @title I really should not be here - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_documenting_nonexistent_param) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param not_existing Documentation for the second parameter - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_documenting_no_param_name) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_documenting_no_param_name_end) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param se - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_documenting_no_param_description) -{ - char const* sourceCode = R"( - contract test { - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter - /// @param second - function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(user_constructor) -{ - char const* sourceCode = R"( - contract test { - /// @notice this is a really nice constructor - constructor(uint a, uint second) { } - } - )"; - - char const* natspec = R"ABCDEF({ - "methods": - { - "constructor": - { - "notice": "this is a really nice constructor" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(user_constructor_and_function) -{ - char const* sourceCode = R"( - contract test { - /// @notice this is a really nice constructor - constructor(uint a, uint second) { } - /// another multiplier - function mul(uint a, uint second) public returns(uint d) { return a * 7 + second; } - } - )"; - - char const* natspec = R"ABCDEF({ - "methods": - { - "mul(uint256,uint256)": - { - "notice": "another multiplier" - }, - "constructor": - { - "notice": "this is a really nice constructor" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_constructor) -{ - char const *sourceCode = R"( - contract test { - /// @param a the parameter a is really nice and very useful - /// @param second the second parameter is not very useful, it just provides additional confusion - constructor(uint a, uint second) { } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "constructor": - { - "params": - { - "a": "the parameter a is really nice and very useful", - "second": "the second parameter is not very useful, it just provides additional confusion" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(dev_constructor_return) -{ - char const* sourceCode = R"( - contract test { - /// @param a the parameter a is really nice and very useful - /// @param second the second parameter is not very useful, it just provides additional confusion - /// @return return should not work within constructors - constructor(uint a, uint second) { } - } - )"; - - expectNatspecError(sourceCode); -} - -BOOST_AUTO_TEST_CASE(dev_constructor_and_function) -{ - char const *sourceCode = R"( - contract test { - /// @param a the parameter a is really nice and very useful - /// @param second the second parameter is not very useful, it just provides additional confusion - constructor(uint a, uint second) { } - /// @dev Multiplies a number by 7 and adds second parameter - /// @param a Documentation for the first parameter starts here. - /// Since it's a really complicated parameter we need 2 lines - /// @param second Documentation for the second parameter - /// @return d The result of the multiplication - /// and cookies with nutella - function mul(uint a, uint second) public returns(uint d) { - return a * 7 + second; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "mul(uint256,uint256)": - { - "details": "Multiplies a number by 7 and adds second parameter", - "params": - { - "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", - "second": "Documentation for the second parameter" - }, - "returns": - { - "d": "The result of the multiplication and cookies with nutella" - } - }, - "constructor": - { - "params": - { - "a": "the parameter a is really nice and very useful", - "second": "the second parameter is not very useful, it just provides additional confusion" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, false); -} - -BOOST_AUTO_TEST_CASE(slash4) -{ - char const* sourceCode = R"( - contract test { - //// @notice lorem ipsum - function f() public { } - } - )"; - - char const* natspec = R"( { "methods": {} } )"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(star3) -{ - char const* sourceCode = R"( - contract test { - /*** - * @notice lorem ipsum - */ - function f() public { } - } - )"; - - char const* natspec = R"( { "methods": {} } )"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(slash3_slash3) -{ - char const* sourceCode = R"( - contract test { - /// @notice lorem - /// ipsum - function f() public { } - } - )"; - - char const* natspec = R"ABCDEF({ - "methods": - { - "f()": { "notice": "lorem ipsum" } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(slash3_slash4) -{ - char const* sourceCode = R"( - contract test { - /// @notice lorem - //// ipsum - function f() public { } - } - )"; - - char const* natspec = R"ABCDEF({ - "methods": - { - "f()": { "notice": "lorem" } - } - })ABCDEF"; - - checkNatspec(sourceCode, "test", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_default_inherit_variable) -{ - char const *sourceCode = R"( - contract C { - /// @notice Hello world - /// @dev test - function x() virtual external returns (uint) { - return 1; - } - } - - contract D is C { - uint public override x; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": { "x()": { "details": "test" } } - })ABCDEF"; - - char const *natspec1 = R"ABCDEF({ - "methods": {}, - "stateVariables": - { - "x": - { - "details": "test" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "C", natspec, false); - checkNatspec(sourceCode, "D", natspec1, false); -} - -BOOST_AUTO_TEST_CASE(user_default_inherit_variable) -{ - char const *sourceCode = R"( - contract C { - /// @notice Hello world - /// @dev test - function x() virtual external returns (uint) { - return 1; - } - } - - contract D is C { - uint public override x; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": { "x()": { "notice": "Hello world" } } - })ABCDEF"; - - checkNatspec(sourceCode, "C", natspec, true); - checkNatspec(sourceCode, "D", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_explicit_inherit_variable) -{ - char const *sourceCode = R"( - contract B { - function x() virtual external returns (uint) { - return 1; - } - } - - contract C { - /// @notice Hello world - /// @dev test - function x() virtual external returns (uint) { - return 1; - } - } - - contract D is C, B { - /// @inheritdoc C - uint public override(C, B) x; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": { "x()": { "details": "test" } } - })ABCDEF"; - - char const *natspec1 = R"ABCDEF({ - "methods": {}, - "stateVariables": - { - "x": - { - "details": "test" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "C", natspec, false); - checkNatspec(sourceCode, "D", natspec1, false); -} - -BOOST_AUTO_TEST_CASE(user_explicit_inherit_variable) -{ - char const *sourceCode = R"( - contract B { - function x() virtual external returns (uint) { - return 1; - } - } - - contract C { - /// @notice Hello world - /// @dev test - function x() virtual external returns (uint) { - return 1; - } - } - - contract D is C, B { - /// @inheritdoc C - uint public override(C, B) x; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": { "x()": { "notice": "Hello world" } } - })ABCDEF"; - - checkNatspec(sourceCode, "C", natspec, true); - checkNatspec(sourceCode, "D", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_default_inherit) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// Second line. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract Middle is ERC20 { - function transfer(address to, uint amount) virtual override external returns (bool) - { - return false; - } - } - - contract Token is Middle { - function transfer(address to, uint amount) override external returns (bool) - { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "Middle", natspec, false); - checkNatspec(sourceCode, "Token", natspec, false); -} - -BOOST_AUTO_TEST_CASE(user_default_inherit) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// Second line. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract Middle is ERC20 { - function transfer(address to, uint amount) virtual override external returns (bool) - { - return false; - } - } - - contract Token is Middle { - function transfer(address to, uint amount) override external returns (bool) - { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "Middle", natspec, true); - checkNatspec(sourceCode, "Token", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_explicit_inherit) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 { - function transfer(address to, uint amount) virtual external returns (bool) { - return false; - } - } - - contract Token is ERC21, ERC20 { - /// @inheritdoc ERC20 - function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "Token", natspec, false); -} - -BOOST_AUTO_TEST_CASE(user_explicit_inherit) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 { - function transfer(address to, uint amount) virtual external returns (bool) { - return false; - } - } - - contract Token is ERC21, ERC20 { - /// @inheritdoc ERC20 - function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "Token", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_explicit_inherit2) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 is ERC20 { - function transfer(address to, uint amount) virtual override external returns (bool) { - return false; - } - } - - contract Token is ERC20 { - /// @inheritdoc ERC20 - function transfer(address to, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "ERC21", natspec, false); - checkNatspec(sourceCode, "Token", natspec, false); -} - -BOOST_AUTO_TEST_CASE(user_explicit_inherit2) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 is ERC20 { - function transfer(address to, uint amount) virtual override external returns (bool) { - return false; - } - } - - contract Token is ERC20 { - /// @inheritdoc ERC20 - function transfer(address to, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "ERC21", natspec, true); - checkNatspec(sourceCode, "Token", natspec, true); -} - -BOOST_AUTO_TEST_CASE(dev_explicit_inherit_partial2) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 is ERC20 { - /// @inheritdoc ERC20 - /// @dev override dev comment - /// @notice override notice - function transfer(address to, uint amount) virtual override external returns (bool) { - return false; - } - } - - contract Token is ERC21 { - function transfer(address to, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "override dev comment", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "Token", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(user_explicit_inherit_partial2) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 is ERC20 { - /// @inheritdoc ERC20 - /// @dev override dev comment - /// @notice override notice - function transfer(address to, uint amount) virtual override external returns (bool) { - return false; - } - } - - contract Token is ERC21 { - function transfer(address to, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "override notice" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "Token", natspec2, true); -} - -BOOST_AUTO_TEST_CASE(dev_explicit_inherit_partial) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 { - function transfer(address to, uint amount) virtual external returns (bool) { - return false; - } - } - - contract Token is ERC21, ERC20 { - /// @inheritdoc ERC20 - /// @dev override dev comment - /// @notice override notice - function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "override dev comment", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "Token", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(user_explicit_inherit_partial) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract ERC21 { - function transfer(address to, uint amount) virtual external returns (bool) { - return false; - } - } - - contract Token is ERC21, ERC20 { - /// @inheritdoc ERC20 - /// @dev override dev comment - /// @notice override notice - function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "override notice" - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "Token", natspec2, true); -} - -BOOST_AUTO_TEST_CASE(dev_inherit_parameter_mismatch) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract Middle is ERC20 { - function transfer(address to, uint amount) override virtual external returns (bool) { - return false; - } - } - - contract Token is Middle { - function transfer(address too, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "details": "test", - "params": - { - "amount": "amount to transfer", - "to": "address to transfer to" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": { } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, false); - checkNatspec(sourceCode, "Middle", natspec, false); - checkNatspec(sourceCode, "Token", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(user_inherit_parameter_mismatch) -{ - char const *sourceCode = R"( - interface ERC20 { - /// Transfer ``amount`` from ``msg.sender`` to ``to``. - /// @dev test - /// @param to address to transfer to - /// @param amount amount to transfer - function transfer(address to, uint amount) external returns (bool); - } - - contract Middle is ERC20 { - function transfer(address to, uint amount) override virtual external returns (bool) { - return false; - } - } - - contract Token is Middle { - function transfer(address too, uint amount) override external returns (bool) { - return false; - } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "transfer(address,uint256)": - { - "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": { } - })ABCDEF"; - - checkNatspec(sourceCode, "ERC20", natspec, true); - checkNatspec(sourceCode, "Middle", natspec, true); - checkNatspec(sourceCode, "Token", natspec2, true); -} - -BOOST_AUTO_TEST_CASE(dev_different_return_name) -{ - char const *sourceCode = R"( - contract A { - /// @return y value - function g(int x) public pure virtual returns (int y) { return x; } - } - - contract B is A { - function g(int x) public pure override returns (int z) { return x; } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "y": "value" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "z": "value" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); - checkNatspec(sourceCode, "B", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_different_return_name_multiple) -{ - char const *sourceCode = R"( - contract A { - /// @return a value A - /// @return b value B - function g(int x) public pure virtual returns (int a, int b) { return (1, 2); } - } - - contract B is A { - function g(int x) public pure override returns (int z, int y) { return (1, 2); } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "a": "value A", - "b": "value B" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "z": "value A", - "y": "value B" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); - checkNatspec(sourceCode, "B", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_different_return_name_multiple_partly_unnamed) -{ - char const *sourceCode = R"( - contract A { - /// @return value A - /// @return b value B - function g(int x) public pure virtual returns (int, int b) { return (1, 2); } - } - - contract B is A { - function g(int x) public pure override returns (int z, int) { return (1, 2); } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "_0": "value A", - "b": "value B" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "z": "value A", - "_1": "value B" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); - checkNatspec(sourceCode, "B", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_different_return_name_multiple_unnamed) -{ - char const *sourceCode = R"( - contract A { - /// @return value A - /// @return value B - function g(int x) public pure virtual returns (int, int) { return (1, 2); } - } - - contract B is A { - function g(int x) public pure override returns (int z, int y) { return (1, 2); } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "_0": "value A", - "_1": "value B" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "z": "value A", - "y": "value B" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); - checkNatspec(sourceCode, "B", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_return_name_no_description) -{ - char const *sourceCode = R"( - contract A { - /// @return a - function g(int x) public pure virtual returns (int a) { return 2; } - } - - contract B is A { - function g(int x) public pure override returns (int b) { return 2; } - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "a": "a" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": - { - "g(int256)": - { - "returns": - { - "b": "a" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); - checkNatspec(sourceCode, "B", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(error) -{ - char const* sourceCode = R"( - contract test { - /// Something failed. - /// @dev an error. - /// @param a first parameter - /// @param b second parameter - error E(uint a, uint b); - } - )"; - - char const* devdoc = R"X({ - "errors":{ - "E(uint256,uint256)": [{ - "details": "an error.", - "params": - { - "a": "first parameter", - "b": "second parameter" - } - }] - }, - "methods": {} - })X"; - - checkNatspec(sourceCode, "test", devdoc, false); - - char const* userdoc = R"X({ - "errors":{ - "E(uint256,uint256)": [{ - "notice": "Something failed." - }] - }, - "methods": {} - })X"; - checkNatspec(sourceCode, "test", userdoc, true); -} - -BOOST_AUTO_TEST_CASE(error_multiple) -{ - char const* sourceCode = R"( - contract A { - /// Something failed. - /// @dev an error. - /// @param x first parameter - /// @param y second parameter - error E(uint x, uint y); - } - contract test { - /// X Something failed. - /// @dev X an error. - /// @param a X first parameter - /// @param b X second parameter - error E(uint a, uint b); - function f(bool a) public pure { - if (a) - revert E(1, 2); - else - revert A.E(5, 6); - } - } - )"; - - char const* devdoc = R"X({ - "methods": {}, - "errors": - { - "E(uint256,uint256)": [ - { - "details": "an error.", - "params": - { - "x": "first parameter", - "y": "second parameter" - } - }, - { - "details": "X an error.", - "params": - { - "a": "X first parameter", - "b": "X second parameter" - } - } - ] - } - })X"; - - checkNatspec(sourceCode, "test", devdoc, false); - - char const* userdoc = R"X({ - "errors":{ - "E(uint256,uint256)": [ - { "notice": "Something failed." }, - { "notice": "X Something failed." } - ] - }, - "methods": {} - })X"; - checkNatspec(sourceCode, "test", userdoc, true); -} - -BOOST_AUTO_TEST_CASE(custom) -{ - char const* sourceCode = R"( - /// @custom:x one two three - /// @custom:y line - /// break - /// @custom:t one - /// @custom:t two - contract A { - /// @custom:note statevar - uint x; - /// @custom:since 2014 - function g(int x) public pure virtual returns (int, int) { return (1, 2); } - } - )"; - - char const* natspec = R"ABCDEF({ - "custom:t": "onetwo", - "custom:x": "one two three", - "custom:y": "line break", - "methods": - { - "g(int256)": - { - "custom:since": "2014" - } - }, - "stateVariables": { "x": { "custom:note": "statevar" } } - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspec, false); -} - -BOOST_AUTO_TEST_CASE(custom_inheritance) -{ - char const *sourceCode = R"( - contract A { - /// @custom:since 2014 - function g(uint x) public pure virtual {} - } - contract B is A { - function g(uint x) public pure override {} - } - )"; - - char const* natspecA = R"ABCDEF( - { - "methods": - { - "g(uint256)": - { - "custom:since": "2014" - } - } - })ABCDEF"; - char const* natspecB = R"ABCDEF( - { - "methods": {} - })ABCDEF"; - - checkNatspec(sourceCode, "A", natspecA, false); - checkNatspec(sourceCode, "B", natspecB, false); -} - -BOOST_AUTO_TEST_CASE(dev_struct_getter_override) -{ - char const *sourceCode = R"( - interface IThing { - /// @return x a number - /// @return y another number - function value() external view returns (uint128 x, uint128 y); - } - - contract Thing is IThing { - struct Value { - uint128 x; - uint128 y; - } - - Value public override value; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "value()": - { - "returns": - { - "x": "a number", - "y": "another number" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": {}, - "stateVariables": - { - "value": - { - "returns": - { - "x": "a number", - "y": "another number" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "IThing", natspec, false); - checkNatspec(sourceCode, "Thing", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_struct_getter_override_no_return_name) -{ - char const *sourceCode = R"( - interface IThing { - ///@return - function value(uint) external returns (uint128,uint128); - } - - contract Thing is IThing { - struct Value { - uint128 x; - uint128 A; - } - mapping(uint=>Value) public override value; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "value(uint256)": - { - "returns": - { - "_0": "" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": {}, - "stateVariables": - { - "value": - { - "return": "x ", - "returns": - { - "x": "" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "IThing", natspec, false); - checkNatspec(sourceCode, "Thing", natspec2, false); -} - -BOOST_AUTO_TEST_CASE(dev_struct_getter_override_different_return_parameter_names) -{ - char const *sourceCode = R"( - interface IThing { - /// @return x a number - /// @return y another number - function value() external view returns (uint128 x, uint128 y); - } - - contract Thing is IThing { - struct Value { - uint128 a; - uint128 b; - } - - Value public override value; - } - )"; - - char const *natspec = R"ABCDEF({ - "methods": - { - "value()": - { - "returns": - { - "x": "a number", - "y": "another number" - } - } - } - })ABCDEF"; - - char const *natspec2 = R"ABCDEF({ - "methods": {}, - "stateVariables": - { - "value": - { - "returns": - { - "a": "a number", - "b": "another number" - } - } - } - })ABCDEF"; - - checkNatspec(sourceCode, "IThing", natspec, false); - checkNatspec(sourceCode, "Thing", natspec2, false); -} - -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/test/libsolidity/natspecJSON/custom.sol b/test/libsolidity/natspecJSON/custom.sol new file mode 100644 index 000000000..8aa780e75 --- /dev/null +++ b/test/libsolidity/natspecJSON/custom.sol @@ -0,0 +1,34 @@ +/// @custom:x one two three +/// @custom:y line +/// break +/// @custom:t one +/// @custom:t two +contract A { + /// @custom:note statevar + uint x; + /// @custom:since 2014 + function g(int x) public pure virtual returns (int, int) { return (1, 2); } +} + +// ---- +// ---- +// :A devdoc +// { +// "custom:t": "onetwo", +// "custom:x": "one two three", +// "custom:y": "line break", +// "methods": +// { +// "g(int256)": +// { +// "custom:since": "2014" +// } +// }, +// "stateVariables": +// { +// "x": +// { +// "custom:note": "statevar" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/custom_inheritance.sol b/test/libsolidity/natspecJSON/custom_inheritance.sol new file mode 100644 index 000000000..815e4deeb --- /dev/null +++ b/test/libsolidity/natspecJSON/custom_inheritance.sol @@ -0,0 +1,25 @@ +contract A { + /// @custom:since 2014 + function g(uint x) public pure virtual {} +} +contract B is A { + function g(uint x) public pure override {} +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(uint256)": +// { +// "custom:since": "2014" +// } +// } +// } +// +// :B devdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol b/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol new file mode 100644 index 000000000..6b9d75ba7 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol @@ -0,0 +1,29 @@ +contract test { + /// @notice Multiplies `a` by 7 + /// @dev Multiplies a number by 7 + function mul(uint a) public returns (uint d) { return a * 7; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256)": +// { +// "details": "Multiplies a number by 7" +// } +// } +// } +// +// :test userdoc +// { +// "methods": +// { +// "mul(uint256)": +// { +// "notice": "Multiplies `a` by 7" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol b/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol new file mode 100644 index 000000000..aaf9ec315 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol @@ -0,0 +1,20 @@ +contract test { + function mul(uint a) public returns (uint d) { + return a * 7; + } + function sub(int input) public returns (int d) { + return input - 3; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": {} +// } +// +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/dev_author_at_function.sol b/test/libsolidity/natspecJSON/dev_author_at_function.sol new file mode 100644 index 000000000..7ea25a3e5 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_author_at_function.sol @@ -0,0 +1,9 @@ +/// @author Lefteris +/// @title Just a test contract +contract test { + /// @dev Mul function + /// @author John Doe + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_constructor.sol b/test/libsolidity/natspecJSON/dev_constructor.sol new file mode 100644 index 000000000..01fa9cb41 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_constructor.sol @@ -0,0 +1,22 @@ +contract test { + /// @param a the parameter a is really nice and very useful + /// @param second the second parameter is not very useful, it just provides additional confusion + constructor(uint a, uint second) { } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "constructor": +// { +// "params": +// { +// "a": "the parameter a is really nice and very useful", +// "second": "the second parameter is not very useful, it just provides additional confusion" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_constructor_and_function.sol b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol new file mode 100644 index 000000000..ea954827a --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol @@ -0,0 +1,44 @@ +contract test { + /// @param a the parameter a is really nice and very useful + /// @param second the second parameter is not very useful, it just provides additional confusion + constructor(uint a, uint second) { } + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return d The result of the multiplication + /// and cookies with nutella + function mul(uint a, uint second) public returns(uint d) { + return a * 7 + second; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "constructor": +// { +// "params": +// { +// "a": "the parameter a is really nice and very useful", +// "second": "the second parameter is not very useful, it just provides additional confusion" +// } +// }, +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication and cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_constructor_return.sol b/test/libsolidity/natspecJSON/dev_constructor_return.sol new file mode 100644 index 000000000..bee9a9d6e --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_constructor_return.sol @@ -0,0 +1,8 @@ +contract test { + /// @param a the parameter a is really nice and very useful + /// @param second the second parameter is not very useful, it just provides additional confusion + /// @return return should not work within constructors + constructor(uint a, uint second) { } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_contract_doc.sol b/test/libsolidity/natspecJSON/dev_contract_doc.sol new file mode 100644 index 000000000..22c45dfb8 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_contract_doc.sol @@ -0,0 +1,21 @@ +/// @author Lefteris +/// @title Just a test contract +contract test { + /// @dev Mul function + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "author": "Lefteris", +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Mul function" +// } +// }, +// "title": "Just a test contract" +// } diff --git a/test/libsolidity/natspecJSON/dev_contract_no_doc.sol b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol new file mode 100644 index 000000000..6e7d587d1 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol @@ -0,0 +1,17 @@ +contract test { + /// @dev Mul function + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Mul function" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit.sol b/test/libsolidity/natspecJSON/dev_default_inherit.sol new file mode 100644 index 000000000..6a106fbf0 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_default_inherit.sol @@ -0,0 +1,72 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// Second line. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract Middle is ERC20 { + function transfer(address to, uint amount) virtual override external returns (bool) + { + return false; + } +} + +contract Token is Middle { + function transfer(address to, uint amount) override external returns (bool) + { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Middle devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol new file mode 100644 index 000000000..7e75d30f8 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol @@ -0,0 +1,36 @@ +contract C { + /// @notice Hello world + /// @dev test + function x() virtual external returns (uint) { + return 1; + } +} + +contract D is C { + uint public override x; +} + +// ---- +// ---- +// :C devdoc +// { +// "methods": +// { +// "x()": +// { +// "details": "test" +// } +// } +// } +// +// :D devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "x": +// { +// "details": "test" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol new file mode 100644 index 000000000..745ab190b --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol @@ -0,0 +1,25 @@ +contract test { + /// @dev + /// Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter", +// "second": "Documentation for the second parameter" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name.sol b/test/libsolidity/natspecJSON/dev_different_return_name.sol new file mode 100644 index 000000000..3a1606dc5 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_different_return_name.sol @@ -0,0 +1,38 @@ +contract A { + /// @return y value + function g(int x) public pure virtual returns (int y) { return x; } +} + +contract B is A { + function g(int x) public pure override returns (int z) { return x; } +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "y": "value" +// } +// } +// } +// } +// +// :B devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "z": "value" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol new file mode 100644 index 000000000..8dc76fb70 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol @@ -0,0 +1,41 @@ +contract A { + /// @return a value A + /// @return b value B + function g(int x) public pure virtual returns (int a, int b) { return (1, 2); } +} + +contract B is A { + function g(int x) public pure override returns (int z, int y) { return (1, 2); } +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "a": "value A", +// "b": "value B" +// } +// } +// } +// } +// +// :B devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "y": "value B", +// "z": "value A" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol new file mode 100644 index 000000000..1fa8eb9fb --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol @@ -0,0 +1,41 @@ +contract A { + /// @return value A + /// @return b value B + function g(int x) public pure virtual returns (int, int b) { return (1, 2); } +} + +contract B is A { + function g(int x) public pure override returns (int z, int) { return (1, 2); } +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "_0": "value A", +// "b": "value B" +// } +// } +// } +// } +// +// :B devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "_1": "value B", +// "z": "value A" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol new file mode 100644 index 000000000..c0ce38726 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol @@ -0,0 +1,41 @@ +contract A { + /// @return value A + /// @return value B + function g(int x) public pure virtual returns (int, int) { return (1, 2); } +} + +contract B is A { + function g(int x) public pure override returns (int z, int y) { return (1, 2); } +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "_0": "value A", +// "_1": "value B" +// } +// } +// } +// } +// +// :B devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "y": "value B", +// "z": "value A" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol new file mode 100644 index 000000000..84a2f532d --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol @@ -0,0 +1,8 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol new file mode 100644 index 000000000..75b4fe5c0 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol @@ -0,0 +1,8 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol new file mode 100644 index 000000000..4ddeb7f9b --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol @@ -0,0 +1,8 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param se + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol b/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol new file mode 100644 index 000000000..e0b90bed0 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol @@ -0,0 +1,9 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second Documentation for the second parameter + /// @return + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol b/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol new file mode 100644 index 000000000..977833e00 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol @@ -0,0 +1,8 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param not_existing Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol new file mode 100644 index 000000000..f665035b9 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol @@ -0,0 +1,54 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 { + function transfer(address to, uint amount) virtual external returns (bool) { + return false; + } +} + +contract Token is ERC21, ERC20 { + /// @inheritdoc ERC20 + function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol new file mode 100644 index 000000000..c251f678e --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol @@ -0,0 +1,70 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 is ERC20 { + function transfer(address to, uint amount) virtual override external returns (bool) { + return false; + } +} + +contract Token is ERC20 { + /// @inheritdoc ERC20 + function transfer(address to, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :ERC21 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol new file mode 100644 index 000000000..bbe44ad7d --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol @@ -0,0 +1,56 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 { + function transfer(address to, uint amount) virtual external returns (bool) { + return false; + } +} + +contract Token is ERC21, ERC20 { + /// @inheritdoc ERC20 + /// @dev override dev comment + /// @notice override notice + function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol new file mode 100644 index 000000000..40a852a1e --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol @@ -0,0 +1,56 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 is ERC20 { + /// @inheritdoc ERC20 + /// @dev override dev comment + /// @notice override notice + function transfer(address to, uint amount) virtual override external returns (bool) { + return false; + } +} + +contract Token is ERC21 { + function transfer(address to, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol new file mode 100644 index 000000000..f868453d0 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol @@ -0,0 +1,43 @@ +contract B { + function x() virtual external returns (uint) { + return 1; + } +} + +contract C { + /// @notice Hello world + /// @dev test + function x() virtual external returns (uint) { + return 1; + } +} + +contract D is C, B { + /// @inheritdoc C + uint public override(C, B) x; +} + +// ---- +// ---- +// :C devdoc +// { +// "methods": +// { +// "x()": +// { +// "details": "test" +// } +// } +// } +// +// :D devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "x": +// { +// "details": "test" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol new file mode 100644 index 000000000..a395fc051 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol @@ -0,0 +1,58 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract Middle is ERC20 { + function transfer(address to, uint amount) override virtual external returns (bool) { + return false; + } +} + +contract Token is Middle { + function transfer(address too, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Middle devdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// } +// } +// +// :Token devdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/dev_multiline_comment.sol b/test/libsolidity/natspecJSON/dev_multiline_comment.sol new file mode 100644 index 000000000..9eb06e5c9 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_multiline_comment.sol @@ -0,0 +1,35 @@ +contract test { + /** + * @dev Multiplies a number by 7 and adds second parameter + * @param a Documentation for the first parameter starts here. + * Since it's a really complicated parameter we need 2 lines + * @param second Documentation for the second parameter + * @return d The result of the multiplication + * and cookies with nutella + */ + function mul(uint a, uint second) public returns (uint d) { + return a * 7 + second; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication and cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_multiline_return.sol b/test/libsolidity/natspecJSON/dev_multiline_return.sol new file mode 100644 index 000000000..88169fbf1 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_multiline_return.sol @@ -0,0 +1,33 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return d The result of the multiplication + /// and cookies with nutella + function mul(uint a, uint second) public returns (uint d) { + return a * 7 + second; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication and cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_functions.sol b/test/libsolidity/natspecJSON/dev_multiple_functions.sol new file mode 100644 index 000000000..2be5dae5a --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_multiple_functions.sol @@ -0,0 +1,54 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { + return a * 7 + second; + } + /// @dev Divides 2 numbers + /// @param input Documentation for the input parameter + /// @param div Documentation for the div parameter + function divide(uint input, uint div) public returns (uint d) { + return input / div; + } + /// @dev Subtracts 3 from `input` + /// @param input Documentation for the input parameter + function sub(int input) public returns (int d) { + return input - 3; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "divide(uint256,uint256)": +// { +// "details": "Divides 2 numbers", +// "params": +// { +// "div": "Documentation for the div parameter", +// "input": "Documentation for the input parameter" +// } +// }, +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter", +// "second": "Documentation for the second parameter" +// } +// }, +// "sub(int256)": +// { +// "details": "Subtracts 3 from `input`", +// "params": +// { +// "input": "Documentation for the input parameter" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params.sol b/test/libsolidity/natspecJSON/dev_multiple_params.sol new file mode 100644 index 000000000..de3c57cf5 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_multiple_params.sol @@ -0,0 +1,24 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter + /// @param second Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter", +// "second": "Documentation for the second parameter" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol new file mode 100644 index 000000000..0ed4d08cb --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol @@ -0,0 +1,25 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return.sol b/test/libsolidity/natspecJSON/dev_return.sol new file mode 100644 index 000000000..ffe36c863 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return.sol @@ -0,0 +1,30 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return d The result of the multiplication + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol new file mode 100644 index 000000000..0ef904347 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol @@ -0,0 +1,33 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return + /// d The result of the multiplication + function mul(uint a, uint second) public returns (uint d) { + return a * 7 + second; + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol new file mode 100644 index 000000000..b8d167d2c --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol @@ -0,0 +1,35 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return d The result of the multiplication + /// @return f And cookies with nutella + function mul(uint a, uint second) public returns (uint d, uint f) { + uint mul = a * 7; + return (mul, second); + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "d": "The result of the multiplication", +// "f": "And cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol new file mode 100644 index 000000000..fc48d1f66 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol @@ -0,0 +1,35 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return The result of the multiplication + /// @return And cookies with nutella + function mul(uint a, uint second) public returns (uint, uint) { + uint mul = a * 7; + return (mul, second); + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "_0": "The result of the multiplication", +// "_1": "And cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol new file mode 100644 index 000000000..84d55a1f5 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol @@ -0,0 +1,35 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return The result of the multiplication + /// @return _cookies And cookies with nutella + function mul(uint a, uint second) public returns (uint, uint _cookies) { + uint mul = a * 7; + return (mul, second); + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "_0": "The result of the multiplication", +// "_cookies": "And cookies with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol new file mode 100644 index 000000000..9847c3ac2 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol @@ -0,0 +1,38 @@ +contract test { + /// @dev Multiplies a number by 7 and adds second parameter + /// @param a Documentation for the first parameter starts here. + /// Since it's a really complicated parameter we need 2 lines + /// @param second Documentation for the second parameter + /// @return _cookies And cookies with nutella + /// @return The result of the multiplication + /// @return _milk And milk with nutella + function mul(uint a, uint second) public returns (uint _cookies, uint, uint _milk) { + uint mul = a * 7; + uint milk = 4; + return (mul, second, milk); + } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "details": "Multiplies a number by 7 and adds second parameter", +// "params": +// { +// "a": "Documentation for the first parameter starts here. Since it's a really complicated parameter we need 2 lines", +// "second": "Documentation for the second parameter" +// }, +// "returns": +// { +// "_1": "The result of the multiplication", +// "_cookies": "And cookies with nutella", +// "_milk": "And milk with nutella" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_name_no_description.sol b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol new file mode 100644 index 000000000..555c7f925 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol @@ -0,0 +1,38 @@ +contract A { + /// @return a + function g(int x) public pure virtual returns (int a) { return 2; } +} + +contract B is A { + function g(int x) public pure override returns (int b) { return 2; } +} + +// ---- +// ---- +// :A devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "a": "a" +// } +// } +// } +// } +// +// :B devdoc +// { +// "methods": +// { +// "g(int256)": +// { +// "returns": +// { +// "b": "a" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_return_no_params.sol b/test/libsolidity/natspecJSON/dev_return_no_params.sol new file mode 100644 index 000000000..870058b07 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_return_no_params.sol @@ -0,0 +1,20 @@ +contract test { + /// @return d The result of the multiplication + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": +// { +// "mul(uint256,uint256)": +// { +// "returns": +// { +// "d": "The result of the multiplication" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol new file mode 100644 index 000000000..7cc09a183 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol @@ -0,0 +1,47 @@ +interface IThing { + /// @return x a number + /// @return y another number + function value() external view returns (uint128 x, uint128 y); +} + +contract Thing is IThing { + struct Value { + uint128 x; + uint128 y; + } + + Value public override value; +} + +// ---- +// ---- +// :IThing devdoc +// { +// "methods": +// { +// "value()": +// { +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// } +// } +// +// :Thing devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "value": +// { +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol new file mode 100644 index 000000000..050abfd7f --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol @@ -0,0 +1,47 @@ +interface IThing { + /// @return x a number + /// @return y another number + function value() external view returns (uint128 x, uint128 y); +} + +contract Thing is IThing { + struct Value { + uint128 a; + uint128 b; + } + + Value public override value; +} + +// ---- +// ---- +// :IThing devdoc +// { +// "methods": +// { +// "value()": +// { +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// } +// } +// +// :Thing devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "value": +// { +// "returns": +// { +// "a": "a number", +// "b": "another number" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol new file mode 100644 index 000000000..927037f12 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol @@ -0,0 +1,44 @@ +interface IThing { + ///@return + function value(uint) external returns (uint128,uint128); +} + +contract Thing is IThing { + struct Value { + uint128 x; + uint128 A; + } + mapping(uint=>Value) public override value; +} + +// ---- +// ---- +// :IThing devdoc +// { +// "methods": +// { +// "value(uint256)": +// { +// "returns": +// { +// "_0": "" +// } +// } +// } +// } +// +// :Thing devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "value": +// { +// "return": "x ", +// "returns": +// { +// "x": "" +// } +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/dev_title_at_function_error.sol b/test/libsolidity/natspecJSON/dev_title_at_function_error.sol new file mode 100644 index 000000000..8c9ed7bb9 --- /dev/null +++ b/test/libsolidity/natspecJSON/dev_title_at_function_error.sol @@ -0,0 +1,9 @@ +/// @author Lefteris +/// @title Just a test contract +contract test { + /// @dev Mul function + /// @title I really should not be here + function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; } +} + +// ---- diff --git a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol new file mode 100644 index 000000000..7733fd432 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol @@ -0,0 +1,41 @@ +contract X { + /// @notice Userdoc for event E. + /// @dev Devdoc for event E. + event E(); +} + +contract C { + function g() public { + emit X.E(); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "events": +// { +// "E()": +// { +// "details": "Devdoc for event E." +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "E()": +// { +// "notice": "Userdoc for event E." +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol new file mode 100644 index 000000000..ea1d66956 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol @@ -0,0 +1,31 @@ +// Tests that emitting an event from contract C in contract D does not inherit natspec from C.E + +contract C { + /// @notice C.E event + /// @dev C.E event + event E(); +} + +contract D { + event E(); + + function test() public { + emit C.E(); + } +} + +// ---- +// ---- +// :D devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :D userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_with_same_signature.sol b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_with_same_signature.sol new file mode 100644 index 000000000..6030c27d9 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_with_same_signature.sol @@ -0,0 +1,74 @@ +contract C { + /// @notice C.E event + /// @dev C.E event + event E(uint256 value); +} + +contract D { + /// @notice D.E event + /// @dev D.E event + event E(uint256 value); + + function test() public { + emit C.E(1); + emit E(2); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "events": +// { +// "E(uint256)": +// { +// "details": "C.E event" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "E(uint256)": +// { +// "notice": "C.E event" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :D devdoc +// { +// "events": +// { +// "E(uint256)": +// { +// "details": "D.E event" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :D userdoc +// { +// "events": +// { +// "E(uint256)": +// { +// "notice": "D.E event" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol new file mode 100644 index 000000000..a017849c9 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol @@ -0,0 +1,66 @@ +library L1 { + /// @notice This event is defined in Library L1 + /// @dev This should not appear in Contract C dev doc + event SameSignatureEvent(uint16); +} +library L2 { + /// @notice This event is defined in Library L2 + /// @dev This should not appear in Contract C dev doc + event SameSignatureEvent(uint16); +} +library L3 { + /// @notice This event is defined in Library L3 + /// @dev This should not appear in Contract C dev doc + event SameSignatureEvent(uint16); +} +contract C { + function f() public { + emit L1.SameSignatureEvent(0); + emit L2.SameSignatureEvent(1); + emit L3.SameSignatureEvent(2); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L1 devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L1 userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Library L1" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol new file mode 100644 index 000000000..06b739039 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol @@ -0,0 +1,34 @@ +library L1 { + event SameSignatureEvent(uint16); +} +library L2 { + /// @notice This event is defined in library L2 + /// @dev This should not appear in Contract C devdoc + event SameSignatureEvent(uint16); +} +library L3 { + event SameSignatureEvent(uint16); +} +contract C { + function f() public { + emit L1.SameSignatureEvent(0); + emit L2.SameSignatureEvent(1); + emit L3.SameSignatureEvent(2); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol new file mode 100644 index 000000000..d5b3d91fd --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol @@ -0,0 +1,68 @@ +library L { + /// @notice This event is defined in Library L + /// @dev This should not appear in Contract C dev doc + event SameSignatureEvent(uint16); + /// @notice This event is defined in Library L + /// @dev This should appear in Contract C dev doc + event LibraryEvent(uint32); +} +contract C { + /// @notice This event is defined in Contract C + /// @dev This should appear in Contract C dev doc + event SameSignatureEvent(uint16); + /// @notice This event is defined in Contract C + /// @dev This should appear in contract C dev doc + event ContractEvent(uint32); + function f() public { + emit L.SameSignatureEvent(0); + emit SameSignatureEvent(1); + emit L.LibraryEvent(2); + emit ContractEvent(3); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "events": +// { +// "ContractEvent(uint32)": +// { +// "details": "This should appear in contract C dev doc" +// }, +// "LibraryEvent(uint32)": +// { +// "details": "This should appear in Contract C dev doc" +// }, +// "SameSignatureEvent(uint16)": +// { +// "details": "This should appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "ContractEvent(uint32)": +// { +// "notice": "This event is defined in Contract C" +// }, +// "LibraryEvent(uint32)": +// { +// "notice": "This event is defined in Library L" +// }, +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Contract C" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol new file mode 100644 index 000000000..5da7a6c1c --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol @@ -0,0 +1,53 @@ +library L { + /// @notice This event is defined in library L + /// @dev This should not appear in contract C devdoc + event SameSignatureEvent(uint16); + /// @notice This event is defined in library L + /// @dev This should appear in contract C devdoc + event LibraryEvent(uint32); +} +contract C { + event SameSignatureEvent(uint16); + /// @notice This event is defined in contract C + event ContractEvent(uint32); + function f() public { + emit L.SameSignatureEvent(0); + emit SameSignatureEvent(1); + emit L.LibraryEvent(2); + emit ContractEvent(3); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "events": +// { +// "LibraryEvent(uint32)": +// { +// "details": "This should appear in contract C devdoc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "ContractEvent(uint32)": +// { +// "notice": "This event is defined in contract C" +// }, +// "LibraryEvent(uint32)": +// { +// "notice": "This event is defined in library L" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol new file mode 100644 index 000000000..9f2ed1ce3 --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol @@ -0,0 +1,46 @@ +contract D { + /// @notice This event is defined in contract D + /// @dev This should appear in Contract C dev doc + event SameSignatureEvent(uint16); +} +library L { + /// @notice This event is defined in Library L + /// @dev This should not appear in Contract C + event SameSignatureEvent(uint16); +} +contract C is D { + function f() public { + emit L.SameSignatureEvent(0); + emit D.SameSignatureEvent(1); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in contract D" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol new file mode 100644 index 000000000..106110a0f --- /dev/null +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol @@ -0,0 +1,30 @@ +contract D { + event SameSignatureEvent(uint16); +} +library L { + /// @notice This event is defined in library L + /// @dev This should not appear in contract C devdoc + event SameSignatureEvent(uint16); +} +contract C is D { + function f() public { + emit L.SameSignatureEvent(0); + emit D.SameSignatureEvent(1); + } +} + +// ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/empty_comment.sol b/test/libsolidity/natspecJSON/empty_comment.sol new file mode 100644 index 000000000..0f7d691a2 --- /dev/null +++ b/test/libsolidity/natspecJSON/empty_comment.sol @@ -0,0 +1,10 @@ +// +contract test +{} + +// ---- +// ---- +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/enum_no_docs.sol b/test/libsolidity/natspecJSON/enum_no_docs.sol new file mode 100644 index 000000000..021f7c6b2 --- /dev/null +++ b/test/libsolidity/natspecJSON/enum_no_docs.sol @@ -0,0 +1,26 @@ +contract C { + /// @title example of title + /// @author example of author + /// @notice example of notice + /// @dev example of dev + enum Color { + Red, + Green + } +} + +// ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/error.sol b/test/libsolidity/natspecJSON/error.sol new file mode 100644 index 000000000..71b6e9a62 --- /dev/null +++ b/test/libsolidity/natspecJSON/error.sol @@ -0,0 +1,42 @@ +contract test { + /// Something failed. + /// @dev an error. + /// @param a first parameter + /// @param b second parameter + error E(uint a, uint b); +} + +// ---- +// ---- +// :test devdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "details": "an error.", +// "params": +// { +// "a": "first parameter", +// "b": "second parameter" +// } +// } +// ] +// }, +// "methods": {} +// } +// +// :test userdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "notice": "Something failed." +// } +// ] +// }, +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/error_multiple.sol b/test/libsolidity/natspecJSON/error_multiple.sol new file mode 100644 index 000000000..cb47cfa6d --- /dev/null +++ b/test/libsolidity/natspecJSON/error_multiple.sol @@ -0,0 +1,66 @@ +contract A { + /// Something failed. + /// @dev an error. + /// @param x first parameter + /// @param y second parameter + error E(uint x, uint y); +} +contract test { + /// X Something failed. + /// @dev X an error. + /// @param a X first parameter + /// @param b X second parameter + error E(uint a, uint b); + function f(bool a) public pure { + if (a) + revert E(1, 2); + else + revert A.E(5, 6); + } +} + +// ---- +// ---- +// :test devdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "details": "an error.", +// "params": +// { +// "x": "first parameter", +// "y": "second parameter" +// } +// }, +// { +// "details": "X an error.", +// "params": +// { +// "a": "X first parameter", +// "b": "X second parameter" +// } +// } +// ] +// }, +// "methods": {} +// } +// +// :test userdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "notice": "Something failed." +// }, +// { +// "notice": "X Something failed." +// } +// ] +// }, +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/event.sol b/test/libsolidity/natspecJSON/event.sol new file mode 100644 index 000000000..bf719b709 --- /dev/null +++ b/test/libsolidity/natspecJSON/event.sol @@ -0,0 +1,40 @@ +contract ERC20 { + /// @notice This event is emitted when a transfer occurs. + /// @param from The source account. + /// @param to The destination account. + /// @param amount The amount. + /// @dev A test case! + event Transfer(address indexed from, address indexed to, uint amount); +} + +// ---- +// ---- +// :ERC20 devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :ERC20 userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/event_inheritance.sol b/test/libsolidity/natspecJSON/event_inheritance.sol new file mode 100644 index 000000000..e747b7175 --- /dev/null +++ b/test/libsolidity/natspecJSON/event_inheritance.sol @@ -0,0 +1,104 @@ +contract ERC20 { + /// @notice This event is emitted when a transfer occurs. + /// @param from The source account. + /// @param to The destination account. + /// @param amount The amount. + /// @dev A test case! + event Transfer(address indexed from, address indexed to, uint amount); +} +contract A is ERC20 { +} +contract B is A { +} + +// ---- +// ---- +// :A devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :A userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } +// +// :B devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :B userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } +// +// :ERC20 devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :ERC20 userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/event_inheritance_interface.sol b/test/libsolidity/natspecJSON/event_inheritance_interface.sol new file mode 100644 index 000000000..be93f9937 --- /dev/null +++ b/test/libsolidity/natspecJSON/event_inheritance_interface.sol @@ -0,0 +1,104 @@ +interface ERC20 { + /// @notice This event is emitted when a transfer occurs. + /// @param from The source account. + /// @param to The destination account. + /// @param amount The amount. + /// @dev A test case! + event Transfer(address indexed from, address indexed to, uint amount); +} +contract A is ERC20 { +} +contract B is A { +} + +// ---- +// ---- +// :A devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :A userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } +// +// :B devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :B userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } +// +// :ERC20 devdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "details": "A test case!", +// "params": +// { +// "amount": "The amount.", +// "from": "The source account.", +// "to": "The destination account." +// } +// } +// }, +// "methods": {} +// } +// +// :ERC20 userdoc +// { +// "events": +// { +// "Transfer(address,address,uint256)": +// { +// "notice": "This event is emitted when a transfer occurs." +// } +// }, +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol new file mode 100644 index 000000000..da28d3cd7 --- /dev/null +++ b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol @@ -0,0 +1,18 @@ +contract test { + /// I do something awesome + /// which requires two lines to explain + function mul(uint a) public returns (uint d) { return a * 7; } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "mul(uint256)": +// { +// "notice": "I do something awesome which requires two lines to explain" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/notice_without_tag.sol b/test/libsolidity/natspecJSON/notice_without_tag.sol new file mode 100644 index 000000000..658f5316a --- /dev/null +++ b/test/libsolidity/natspecJSON/notice_without_tag.sol @@ -0,0 +1,17 @@ +contract test { + /// I do something awesome + function mul(uint a) public returns (uint d) { return a * 7; } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "mul(uint256)": +// { +// "notice": "I do something awesome" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/private_state_variable.sol b/test/libsolidity/natspecJSON/private_state_variable.sol new file mode 100644 index 000000000..ed4bd56cc --- /dev/null +++ b/test/libsolidity/natspecJSON/private_state_variable.sol @@ -0,0 +1,23 @@ +contract test { + /// @dev example of dev + uint private state; +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "state": +// { +// "details": "example of dev" +// } +// } +// } +// +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/public_state_variable.sol b/test/libsolidity/natspecJSON/public_state_variable.sol new file mode 100644 index 000000000..517080602 --- /dev/null +++ b/test/libsolidity/natspecJSON/public_state_variable.sol @@ -0,0 +1,36 @@ +contract test { + /// @notice example of notice + /// @dev example of dev + /// @return returns state + uint public state; +} + +// ---- +// ---- +// :test devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "state": +// { +// "details": "example of dev", +// "return": "returns state", +// "returns": +// { +// "_0": "returns state" +// } +// } +// } +// } +// +// :test userdoc +// { +// "methods": +// { +// "state()": +// { +// "notice": "example of notice" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/public_state_variable_struct.sol b/test/libsolidity/natspecJSON/public_state_variable_struct.sol new file mode 100644 index 000000000..a8dff229d --- /dev/null +++ b/test/libsolidity/natspecJSON/public_state_variable_struct.sol @@ -0,0 +1,40 @@ +contract Bank { + struct Coin { + string observeGraphicURL; + string reverseGraphicURL; + } + + /// @notice Get the n-th coin I own + /// @return observeGraphicURL Front pic + /// @return reverseGraphicURL Back pic + Coin[] public coinStack; +} + +// ---- +// ---- +// :Bank devdoc +// { +// "methods": {}, +// "stateVariables": +// { +// "coinStack": +// { +// "returns": +// { +// "observeGraphicURL": "Front pic", +// "reverseGraphicURL": "Back pic" +// } +// } +// } +// } +// +// :Bank userdoc +// { +// "methods": +// { +// "coinStack(uint256)": +// { +// "notice": "Get the n-th coin I own" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol b/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol new file mode 100644 index 000000000..a6b4f7f84 --- /dev/null +++ b/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol @@ -0,0 +1,13 @@ +contract Bank { + struct Coin { + string obverseGraphicURL; + string reverseGraphicURL; + } + + /// @notice Get the n-th coin I own + /// @return obverseGraphicURL Front pic + /// @return obverseGraphicURL Front pic + Coin[] public coinStack; +} + +// ---- diff --git a/test/libsolidity/natspecJSON/slash3_slash3.sol b/test/libsolidity/natspecJSON/slash3_slash3.sol new file mode 100644 index 000000000..ea40cdaa9 --- /dev/null +++ b/test/libsolidity/natspecJSON/slash3_slash3.sol @@ -0,0 +1,18 @@ +contract test { + /// @notice lorem + /// ipsum + function f() public { } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "f()": +// { +// "notice": "lorem ipsum" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/slash3_slash4.sol b/test/libsolidity/natspecJSON/slash3_slash4.sol new file mode 100644 index 000000000..b8b5dc33e --- /dev/null +++ b/test/libsolidity/natspecJSON/slash3_slash4.sol @@ -0,0 +1,18 @@ +contract test { + /// @notice lorem + //// ipsum + function f() public { } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "f()": +// { +// "notice": "lorem" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/slash4.sol b/test/libsolidity/natspecJSON/slash4.sol new file mode 100644 index 000000000..1016d6204 --- /dev/null +++ b/test/libsolidity/natspecJSON/slash4.sol @@ -0,0 +1,11 @@ +contract test { + //// @notice lorem ipsum + function f() public { } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/star3.sol b/test/libsolidity/natspecJSON/star3.sol new file mode 100644 index 000000000..965ce1e66 --- /dev/null +++ b/test/libsolidity/natspecJSON/star3.sol @@ -0,0 +1,13 @@ +contract test { + /*** + * @notice lorem ipsum + */ + function f() public { } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/struct_no_docs.sol b/test/libsolidity/natspecJSON/struct_no_docs.sol new file mode 100644 index 000000000..e29a4b8e9 --- /dev/null +++ b/test/libsolidity/natspecJSON/struct_no_docs.sol @@ -0,0 +1,27 @@ +contract C { + /// @title example of title + /// @author example of author + /// @notice example of notice + /// @dev example of dev + struct Example { + string text; + bool valid; + uint256 value; + } +} + +// ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/user_basic_test.sol b/test/libsolidity/natspecJSON/user_basic_test.sol new file mode 100644 index 000000000..27df4c616 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_basic_test.sol @@ -0,0 +1,17 @@ +contract test { + /// @notice Multiplies `a` by 7 + function mul(uint a) public returns(uint d) { return a * 7; } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "mul(uint256)": +// { +// "notice": "Multiplies `a` by 7" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_constructor.sol b/test/libsolidity/natspecJSON/user_constructor.sol new file mode 100644 index 000000000..bd49a376c --- /dev/null +++ b/test/libsolidity/natspecJSON/user_constructor.sol @@ -0,0 +1,17 @@ +contract test { + /// @notice this is a really nice constructor + constructor(uint a, uint second) { } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "constructor": +// { +// "notice": "this is a really nice constructor" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_constructor_and_function.sol b/test/libsolidity/natspecJSON/user_constructor_and_function.sol new file mode 100644 index 000000000..0dd1b33fb --- /dev/null +++ b/test/libsolidity/natspecJSON/user_constructor_and_function.sol @@ -0,0 +1,23 @@ +contract test { + /// @notice this is a really nice constructor + constructor(uint a, uint second) { } + /// another multiplier + function mul(uint a, uint second) public returns(uint d) { return a * 7 + second; } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "constructor": +// { +// "notice": "this is a really nice constructor" +// }, +// "mul(uint256,uint256)": +// { +// "notice": "another multiplier" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_default_inherit.sol b/test/libsolidity/natspecJSON/user_default_inherit.sol new file mode 100644 index 000000000..ab92e6bc6 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_default_inherit.sol @@ -0,0 +1,57 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// Second line. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract Middle is ERC20 { + function transfer(address to, uint amount) virtual override external returns (bool) + { + return false; + } +} + +contract Token is Middle { + function transfer(address to, uint amount) override external returns (bool) + { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// } +// } +// +// :Middle userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_default_inherit_variable.sol b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol new file mode 100644 index 000000000..eee21cd91 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol @@ -0,0 +1,35 @@ +contract C { + /// @notice Hello world + /// @dev test + function x() virtual external returns (uint) { + return 1; + } +} + +contract D is C { + uint public override x; +} + +// ---- +// ---- +// :C userdoc +// { +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// } +// } +// +// :D userdoc +// { +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_empty_contract.sol b/test/libsolidity/natspecJSON/user_empty_contract.sol new file mode 100644 index 000000000..be7bc2a2f --- /dev/null +++ b/test/libsolidity/natspecJSON/user_empty_contract.sol @@ -0,0 +1,8 @@ +contract test { } + +// ---- +// ---- +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/user_empty_natspec_test.sol b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol new file mode 100644 index 000000000..08c438952 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol @@ -0,0 +1,13 @@ +contract test { + /// + /// + function f() public { + } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit.sol b/test/libsolidity/natspecJSON/user_explicit_inherit.sol new file mode 100644 index 000000000..96ab8effe --- /dev/null +++ b/test/libsolidity/natspecJSON/user_explicit_inherit.sol @@ -0,0 +1,44 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 { + function transfer(address to, uint amount) virtual external returns (bool) { + return false; + } +} + +contract Token is ERC21, ERC20 { + /// @inheritdoc ERC20 + function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol new file mode 100644 index 000000000..5be6140f0 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol @@ -0,0 +1,55 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 is ERC20 { + function transfer(address to, uint amount) virtual override external returns (bool) { + return false; + } +} + +contract Token is ERC20 { + /// @inheritdoc ERC20 + function transfer(address to, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :ERC21 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol new file mode 100644 index 000000000..5a865d822 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol @@ -0,0 +1,46 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 { + function transfer(address to, uint amount) virtual external returns (bool) { + return false; + } +} + +contract Token is ERC21, ERC20 { + /// @inheritdoc ERC20 + /// @dev override dev comment + /// @notice override notice + function transfer(address to, uint amount) override(ERC21, ERC20) external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol new file mode 100644 index 000000000..460c90dd9 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol @@ -0,0 +1,46 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract ERC21 is ERC20 { + /// @inheritdoc ERC20 + /// @dev override dev comment + /// @notice override notice + function transfer(address to, uint amount) virtual override external returns (bool) { + return false; + } +} + +contract Token is ERC21 { + function transfer(address to, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol new file mode 100644 index 000000000..9e6e96bf6 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol @@ -0,0 +1,42 @@ +contract B { + function x() virtual external returns (uint) { + return 1; + } +} + +contract C { + /// @notice Hello world + /// @dev test + function x() virtual external returns (uint) { + return 1; + } +} + +contract D is C, B { + /// @inheritdoc C + uint public override(C, B) x; +} + +// ---- +// ---- +// :C userdoc +// { +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// } +// } +// +// :D userdoc +// { +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol new file mode 100644 index 000000000..a427f16af --- /dev/null +++ b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol @@ -0,0 +1,48 @@ +interface ERC20 { + /// Transfer ``amount`` from ``msg.sender`` to ``to``. + /// @dev test + /// @param to address to transfer to + /// @param amount amount to transfer + function transfer(address to, uint amount) external returns (bool); +} + +contract Middle is ERC20 { + function transfer(address to, uint amount) override virtual external returns (bool) { + return false; + } +} + +contract Token is Middle { + function transfer(address too, uint amount) override external returns (bool) { + return false; + } +} + +// ---- +// ---- +// :ERC20 userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Middle userdoc +// { +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// } +// } +// +// :Token userdoc +// { +// "methods": {} +// } diff --git a/test/libsolidity/natspecJSON/user_multiline_comment.sol b/test/libsolidity/natspecJSON/user_multiline_comment.sol new file mode 100644 index 000000000..e8c7f61de --- /dev/null +++ b/test/libsolidity/natspecJSON/user_multiline_comment.sol @@ -0,0 +1,20 @@ +contract test { + /// @notice Multiplies `a` by 7 + /// and then adds `b` + function mul_and_add(uint a, uint256 b) public returns (uint256 d) { + return (a * 7) + b; + } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "mul_and_add(uint256,uint256)": +// { +// "notice": "Multiplies `a` by 7 and then adds `b`" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol new file mode 100644 index 000000000..93f20a195 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol @@ -0,0 +1,22 @@ +contract test { + /** + * + * + * @notice hello world + */ + function f() public { + } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "f()": +// { +// "notice": "hello world" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_multiple_functions.sol b/test/libsolidity/natspecJSON/user_multiple_functions.sol new file mode 100644 index 000000000..a2ae7f058 --- /dev/null +++ b/test/libsolidity/natspecJSON/user_multiple_functions.sol @@ -0,0 +1,37 @@ +contract test { + /// @notice Multiplies `a` by 7 and then adds `b` + function mul_and_add(uint a, uint256 b) public returns (uint256 d) { + return (a * 7) + b; + } + + /// @notice Divides `input` by `div` + function divide(uint input, uint div) public returns (uint d) { + return input / div; + } + + /// @notice Subtracts 3 from `input` + function sub(int input) public returns (int d) { + return input - 3; + } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "divide(uint256,uint256)": +// { +// "notice": "Divides `input` by `div`" +// }, +// "mul_and_add(uint256,uint256)": +// { +// "notice": "Multiplies `a` by 7 and then adds `b`" +// }, +// "sub(int256)": +// { +// "notice": "Subtracts 3 from `input`" +// } +// } +// } diff --git a/test/libsolidity/natspecJSON/user_newline_break.sol b/test/libsolidity/natspecJSON/user_newline_break.sol new file mode 100644 index 000000000..97744a74f --- /dev/null +++ b/test/libsolidity/natspecJSON/user_newline_break.sol @@ -0,0 +1,21 @@ +contract test { + /// + /// @notice hello + + /// @notice world + function f() public { + } +} + +// ---- +// ---- +// :test userdoc +// { +// "methods": +// { +// "f()": +// { +// "notice": "world" +// } +// } +// } From 481c7256cb222fc2792302f7c88a4c41e6bea125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Wed, 9 Aug 2023 19:33:35 +0200 Subject: [PATCH 5/8] natspecJSON: Include `version` and `kind` fields in expectations where missing --- test/libsolidity/natspecJSON/custom.sol | 4 +++- .../natspecJSON/custom_inheritance.sol | 8 +++++-- .../natspecJSON/dev_and_user_basic_test.sol | 8 +++++-- .../natspecJSON/dev_and_user_no_doc.sol | 8 +++++-- .../natspecJSON/dev_constructor.sol | 4 +++- .../dev_constructor_and_function.sol | 4 +++- .../natspecJSON/dev_contract_doc.sol | 4 +++- .../natspecJSON/dev_contract_no_doc.sol | 4 +++- .../natspecJSON/dev_default_inherit.sol | 12 +++++++--- .../dev_default_inherit_variable.sol | 8 +++++-- .../natspecJSON/dev_desc_after_nl.sol | 4 +++- .../natspecJSON/dev_different_return_name.sol | 8 +++++-- .../dev_different_return_name_multiple.sol | 8 +++++-- ...nt_return_name_multiple_partly_unnamed.sol | 8 +++++-- ...different_return_name_multiple_unnamed.sol | 8 +++++-- .../natspecJSON/dev_explicit_inherit.sol | 8 +++++-- .../natspecJSON/dev_explicit_inherit2.sol | 12 +++++++--- .../dev_explicit_inherit_complex.sol | 4 +++- .../dev_explicit_inherit_partial.sol | 8 +++++-- .../dev_explicit_inherit_partial2.sol | 8 +++++-- .../dev_explicit_inherit_variable.sol | 8 +++++-- .../dev_inherit_parameter_mismatch.sol | 12 +++++++--- .../natspecJSON/dev_multiline_comment.sol | 4 +++- .../natspecJSON/dev_multiline_return.sol | 4 +++- .../natspecJSON/dev_multiple_functions.sol | 4 +++- .../natspecJSON/dev_multiple_params.sol | 4 +++- .../dev_multiple_params_mixed_whitespace.sol | 4 +++- .../dev_mutiline_param_description.sol | 4 +++- test/libsolidity/natspecJSON/dev_return.sol | 4 +++- .../natspecJSON/dev_return_desc_after_nl.sol | 4 +++- .../natspecJSON/dev_return_desc_multiple.sol | 4 +++- .../dev_return_desc_multiple_unamed.sol | 4 +++- .../dev_return_desc_multiple_unamed_mixed.sol | 4 +++- ...ev_return_desc_multiple_unamed_mixed_2.sol | 4 +++- .../dev_return_name_no_description.sol | 8 +++++-- .../natspecJSON/dev_return_no_params.sol | 4 +++- .../dev_struct_getter_override.sol | 8 +++++-- ...rride_different_return_parameter_names.sol | 8 +++++-- ..._struct_getter_override_no_return_name.sol | 8 +++++-- .../libsolidity/natspecJSON/empty_comment.sol | 4 +++- test/libsolidity/natspecJSON/error.sol | 8 +++++-- .../natspecJSON/error_multiple.sol | 8 +++++-- test/libsolidity/natspecJSON/event.sol | 8 +++++-- .../natspecJSON/event_inheritance.sol | 24 ++++++++++++++----- .../event_inheritance_interface.sol | 24 ++++++++++++++----- .../multiline_notice_without_tag.sol | 4 +++- .../natspecJSON/notice_without_tag.sol | 4 +++- .../natspecJSON/private_state_variable.sol | 8 +++++-- .../natspecJSON/public_state_variable.sol | 8 +++++-- .../public_state_variable_struct.sol | 8 +++++-- .../libsolidity/natspecJSON/slash3_slash3.sol | 4 +++- .../libsolidity/natspecJSON/slash3_slash4.sol | 4 +++- test/libsolidity/natspecJSON/slash4.sol | 4 +++- test/libsolidity/natspecJSON/star3.sol | 4 +++- .../natspecJSON/user_basic_test.sol | 4 +++- .../natspecJSON/user_constructor.sol | 4 +++- .../user_constructor_and_function.sol | 4 +++- .../natspecJSON/user_default_inherit.sol | 12 +++++++--- .../user_default_inherit_variable.sol | 8 +++++-- .../natspecJSON/user_empty_contract.sol | 4 +++- .../natspecJSON/user_empty_natspec_test.sol | 4 +++- .../natspecJSON/user_explicit_inherit.sol | 8 +++++-- .../natspecJSON/user_explicit_inherit2.sol | 12 +++++++--- .../user_explicit_inherit_partial.sol | 8 +++++-- .../user_explicit_inherit_partial2.sol | 8 +++++-- .../user_explicit_inherit_variable.sol | 8 +++++-- .../user_inherit_parameter_mismatch.sol | 12 +++++++--- .../natspecJSON/user_multiline_comment.sol | 4 +++- .../user_multiline_empty_lines.sol | 4 +++- .../natspecJSON/user_multiple_functions.sol | 4 +++- .../natspecJSON/user_newline_break.sol | 4 +++- 71 files changed, 360 insertions(+), 120 deletions(-) diff --git a/test/libsolidity/natspecJSON/custom.sol b/test/libsolidity/natspecJSON/custom.sol index 8aa780e75..43fd7283e 100644 --- a/test/libsolidity/natspecJSON/custom.sol +++ b/test/libsolidity/natspecJSON/custom.sol @@ -17,6 +17,7 @@ contract A { // "custom:t": "onetwo", // "custom:x": "one two three", // "custom:y": "line break", +// "kind": "dev", // "methods": // { // "g(int256)": @@ -30,5 +31,6 @@ contract A { // { // "custom:note": "statevar" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/custom_inheritance.sol b/test/libsolidity/natspecJSON/custom_inheritance.sol index 815e4deeb..f4fb80b55 100644 --- a/test/libsolidity/natspecJSON/custom_inheritance.sol +++ b/test/libsolidity/natspecJSON/custom_inheritance.sol @@ -10,16 +10,20 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(uint256)": // { // "custom:since": "2014" // } -// } +// }, +// "version": 1 // } // // :B devdoc // { -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol b/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol index 6b9d75ba7..422522354 100644 --- a/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol +++ b/test/libsolidity/natspecJSON/dev_and_user_basic_test.sol @@ -8,22 +8,26 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256)": // { // "details": "Multiplies a number by 7" // } -// } +// }, +// "version": 1 // } // // :test userdoc // { +// "kind": "user", // "methods": // { // "mul(uint256)": // { // "notice": "Multiplies `a` by 7" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol b/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol index aaf9ec315..db7447914 100644 --- a/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol +++ b/test/libsolidity/natspecJSON/dev_and_user_no_doc.sol @@ -11,10 +11,14 @@ contract test { // ---- // :test devdoc // { -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_constructor.sol b/test/libsolidity/natspecJSON/dev_constructor.sol index 01fa9cb41..ffdcfea94 100644 --- a/test/libsolidity/natspecJSON/dev_constructor.sol +++ b/test/libsolidity/natspecJSON/dev_constructor.sol @@ -8,6 +8,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "constructor": @@ -18,5 +19,6 @@ contract test { // "second": "the second parameter is not very useful, it just provides additional confusion" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_constructor_and_function.sol b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol index ea954827a..e15f03f03 100644 --- a/test/libsolidity/natspecJSON/dev_constructor_and_function.sol +++ b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol @@ -17,6 +17,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "constructor": @@ -40,5 +41,6 @@ contract test { // "d": "The result of the multiplication and cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_contract_doc.sol b/test/libsolidity/natspecJSON/dev_contract_doc.sol index 22c45dfb8..5acc2d198 100644 --- a/test/libsolidity/natspecJSON/dev_contract_doc.sol +++ b/test/libsolidity/natspecJSON/dev_contract_doc.sol @@ -10,6 +10,7 @@ contract test { // :test devdoc // { // "author": "Lefteris", +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -17,5 +18,6 @@ contract test { // "details": "Mul function" // } // }, -// "title": "Just a test contract" +// "title": "Just a test contract", +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_contract_no_doc.sol b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol index 6e7d587d1..aa8a86a0e 100644 --- a/test/libsolidity/natspecJSON/dev_contract_no_doc.sol +++ b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol @@ -7,11 +7,13 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": // { // "details": "Mul function" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit.sol b/test/libsolidity/natspecJSON/dev_default_inherit.sol index 6a106fbf0..d144b3840 100644 --- a/test/libsolidity/natspecJSON/dev_default_inherit.sol +++ b/test/libsolidity/natspecJSON/dev_default_inherit.sol @@ -25,6 +25,7 @@ contract Token is Middle { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -36,11 +37,13 @@ contract Token is Middle { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Middle devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -52,11 +55,13 @@ contract Token is Middle { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -68,5 +73,6 @@ contract Token is Middle { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol index 7e75d30f8..1974bd651 100644 --- a/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol @@ -14,17 +14,20 @@ contract D is C { // ---- // :C devdoc // { +// "kind": "dev", // "methods": // { // "x()": // { // "details": "test" // } -// } +// }, +// "version": 1 // } // // :D devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -32,5 +35,6 @@ contract D is C { // { // "details": "test" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol index 745ab190b..f7e892ae8 100644 --- a/test/libsolidity/natspecJSON/dev_desc_after_nl.sol +++ b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol @@ -10,6 +10,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -21,5 +22,6 @@ contract test { // "second": "Documentation for the second parameter" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name.sol b/test/libsolidity/natspecJSON/dev_different_return_name.sol index 3a1606dc5..2b7160be1 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name.sol @@ -11,6 +11,7 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -20,11 +21,13 @@ contract B is A { // "y": "value" // } // } -// } +// }, +// "version": 1 // } // // :B devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -34,5 +37,6 @@ contract B is A { // "z": "value" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol index 8dc76fb70..90e21462c 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol @@ -12,6 +12,7 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -22,11 +23,13 @@ contract B is A { // "b": "value B" // } // } -// } +// }, +// "version": 1 // } // // :B devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -37,5 +40,6 @@ contract B is A { // "z": "value A" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol index 1fa8eb9fb..1ddf47aee 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol @@ -12,6 +12,7 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -22,11 +23,13 @@ contract B is A { // "b": "value B" // } // } -// } +// }, +// "version": 1 // } // // :B devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -37,5 +40,6 @@ contract B is A { // "z": "value A" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol index c0ce38726..cc172a8c8 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol @@ -12,6 +12,7 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -22,11 +23,13 @@ contract B is A { // "_1": "value B" // } // } -// } +// }, +// "version": 1 // } // // :B devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -37,5 +40,6 @@ contract B is A { // "z": "value A" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol index f665035b9..5efae37f2 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol @@ -23,6 +23,7 @@ contract Token is ERC21, ERC20 { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -34,11 +35,13 @@ contract Token is ERC21, ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -50,5 +53,6 @@ contract Token is ERC21, ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol index c251f678e..2f1f8f17f 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol @@ -23,6 +23,7 @@ contract Token is ERC20 { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -34,11 +35,13 @@ contract Token is ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :ERC21 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -50,11 +53,13 @@ contract Token is ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -66,5 +71,6 @@ contract Token is ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol index 02a0f2cc7..c87f6c30f 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol @@ -30,6 +30,7 @@ contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { // ---- // Testfile.sol:Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -41,5 +42,6 @@ contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol index bbe44ad7d..0dce69ccb 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol @@ -25,6 +25,7 @@ contract Token is ERC21, ERC20 { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -36,11 +37,13 @@ contract Token is ERC21, ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -52,5 +55,6 @@ contract Token is ERC21, ERC20 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol index 40a852a1e..e9590d9ce 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol @@ -25,6 +25,7 @@ contract Token is ERC21 { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -36,11 +37,13 @@ contract Token is ERC21 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -52,5 +55,6 @@ contract Token is ERC21 { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol index f868453d0..cf3b1aba3 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol @@ -21,17 +21,20 @@ contract D is C, B { // ---- // :C devdoc // { +// "kind": "dev", // "methods": // { // "x()": // { // "details": "test" // } -// } +// }, +// "version": 1 // } // // :D devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -39,5 +42,6 @@ contract D is C, B { // { // "details": "test" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol index a395fc051..579660f2f 100644 --- a/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol +++ b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol @@ -22,6 +22,7 @@ contract Token is Middle { // ---- // :ERC20 devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -33,11 +34,13 @@ contract Token is Middle { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Middle devdoc // { +// "kind": "dev", // "methods": // { // "transfer(address,uint256)": @@ -49,10 +52,13 @@ contract Token is Middle { // "to": "address to transfer to" // } // } -// } +// }, +// "version": 1 // } // // :Token devdoc // { -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_multiline_comment.sol b/test/libsolidity/natspecJSON/dev_multiline_comment.sol index 9eb06e5c9..7757636c9 100644 --- a/test/libsolidity/natspecJSON/dev_multiline_comment.sol +++ b/test/libsolidity/natspecJSON/dev_multiline_comment.sol @@ -16,6 +16,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -31,5 +32,6 @@ contract test { // "d": "The result of the multiplication and cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_multiline_return.sol b/test/libsolidity/natspecJSON/dev_multiline_return.sol index 88169fbf1..792cf11ce 100644 --- a/test/libsolidity/natspecJSON/dev_multiline_return.sol +++ b/test/libsolidity/natspecJSON/dev_multiline_return.sol @@ -14,6 +14,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -29,5 +30,6 @@ contract test { // "d": "The result of the multiplication and cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_multiple_functions.sol b/test/libsolidity/natspecJSON/dev_multiple_functions.sol index 2be5dae5a..f3fb5876a 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_functions.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_functions.sol @@ -22,6 +22,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "divide(uint256,uint256)": @@ -50,5 +51,6 @@ contract test { // "input": "Documentation for the input parameter" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params.sol b/test/libsolidity/natspecJSON/dev_multiple_params.sol index de3c57cf5..909452ee8 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_params.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_params.sol @@ -9,6 +9,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -20,5 +21,6 @@ contract test { // "second": "Documentation for the second parameter" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol index 50fb4d53b..f9dfa0b52 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol @@ -9,6 +9,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -20,5 +21,6 @@ contract test { // "second": "Documentation for the second parameter" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol index 0ed4d08cb..8c5092534 100644 --- a/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol +++ b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol @@ -10,6 +10,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -21,5 +22,6 @@ contract test { // "second": "Documentation for the second parameter" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return.sol b/test/libsolidity/natspecJSON/dev_return.sol index ffe36c863..e17c6466c 100644 --- a/test/libsolidity/natspecJSON/dev_return.sol +++ b/test/libsolidity/natspecJSON/dev_return.sol @@ -11,6 +11,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -26,5 +27,6 @@ contract test { // "d": "The result of the multiplication" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol index 0ef904347..4c17105fc 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol @@ -14,6 +14,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -29,5 +30,6 @@ contract test { // "d": "The result of the multiplication" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol index b8d167d2c..d902983a0 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol @@ -15,6 +15,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -31,5 +32,6 @@ contract test { // "f": "And cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol index fc48d1f66..877e14927 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol @@ -15,6 +15,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -31,5 +32,6 @@ contract test { // "_1": "And cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol index 84d55a1f5..2b8c1771a 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol @@ -15,6 +15,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -31,5 +32,6 @@ contract test { // "_cookies": "And cookies with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol index 9847c3ac2..208a95095 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol @@ -17,6 +17,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -34,5 +35,6 @@ contract test { // "_milk": "And milk with nutella" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_name_no_description.sol b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol index 555c7f925..a96535a61 100644 --- a/test/libsolidity/natspecJSON/dev_return_name_no_description.sol +++ b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol @@ -11,6 +11,7 @@ contract B is A { // ---- // :A devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -20,11 +21,13 @@ contract B is A { // "a": "a" // } // } -// } +// }, +// "version": 1 // } // // :B devdoc // { +// "kind": "dev", // "methods": // { // "g(int256)": @@ -34,5 +37,6 @@ contract B is A { // "b": "a" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_return_no_params.sol b/test/libsolidity/natspecJSON/dev_return_no_params.sol index 870058b07..e7e9e8cbb 100644 --- a/test/libsolidity/natspecJSON/dev_return_no_params.sol +++ b/test/libsolidity/natspecJSON/dev_return_no_params.sol @@ -7,6 +7,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": // { // "mul(uint256,uint256)": @@ -16,5 +17,6 @@ contract test { // "d": "The result of the multiplication" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol index 7cc09a183..5d9ce6e80 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol @@ -17,6 +17,7 @@ contract Thing is IThing { // ---- // :IThing devdoc // { +// "kind": "dev", // "methods": // { // "value()": @@ -27,11 +28,13 @@ contract Thing is IThing { // "y": "another number" // } // } -// } +// }, +// "version": 1 // } // // :Thing devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -43,5 +46,6 @@ contract Thing is IThing { // "y": "another number" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol index 050abfd7f..dcc86ed93 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol @@ -17,6 +17,7 @@ contract Thing is IThing { // ---- // :IThing devdoc // { +// "kind": "dev", // "methods": // { // "value()": @@ -27,11 +28,13 @@ contract Thing is IThing { // "y": "another number" // } // } -// } +// }, +// "version": 1 // } // // :Thing devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -43,5 +46,6 @@ contract Thing is IThing { // "b": "another number" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol index 927037f12..dc97cb8a9 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol @@ -15,6 +15,7 @@ contract Thing is IThing { // ---- // :IThing devdoc // { +// "kind": "dev", // "methods": // { // "value(uint256)": @@ -24,11 +25,13 @@ contract Thing is IThing { // "_0": "" // } // } -// } +// }, +// "version": 1 // } // // :Thing devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -40,5 +43,6 @@ contract Thing is IThing { // "x": "" // } // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/empty_comment.sol b/test/libsolidity/natspecJSON/empty_comment.sol index 0f7d691a2..db0f9e533 100644 --- a/test/libsolidity/natspecJSON/empty_comment.sol +++ b/test/libsolidity/natspecJSON/empty_comment.sol @@ -6,5 +6,7 @@ contract test // ---- // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/error.sol b/test/libsolidity/natspecJSON/error.sol index 71b6e9a62..c82412fec 100644 --- a/test/libsolidity/natspecJSON/error.sol +++ b/test/libsolidity/natspecJSON/error.sol @@ -24,7 +24,9 @@ contract test { // } // ] // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :test userdoc @@ -38,5 +40,7 @@ contract test { // } // ] // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/error_multiple.sol b/test/libsolidity/natspecJSON/error_multiple.sol index cb47cfa6d..336710ec3 100644 --- a/test/libsolidity/natspecJSON/error_multiple.sol +++ b/test/libsolidity/natspecJSON/error_multiple.sol @@ -45,7 +45,9 @@ contract test { // } // ] // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :test userdoc @@ -62,5 +64,7 @@ contract test { // } // ] // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/event.sol b/test/libsolidity/natspecJSON/event.sol index bf719b709..9887b021d 100644 --- a/test/libsolidity/natspecJSON/event.sol +++ b/test/libsolidity/natspecJSON/event.sol @@ -24,7 +24,9 @@ contract ERC20 { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :ERC20 userdoc @@ -36,5 +38,7 @@ contract ERC20 { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/event_inheritance.sol b/test/libsolidity/natspecJSON/event_inheritance.sol index e747b7175..7912bd1b5 100644 --- a/test/libsolidity/natspecJSON/event_inheritance.sol +++ b/test/libsolidity/natspecJSON/event_inheritance.sol @@ -28,7 +28,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :A userdoc @@ -40,7 +42,9 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } // // :B devdoc @@ -58,7 +62,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :B userdoc @@ -70,7 +76,9 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } // // :ERC20 devdoc @@ -88,7 +96,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :ERC20 userdoc @@ -100,5 +110,7 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/event_inheritance_interface.sol b/test/libsolidity/natspecJSON/event_inheritance_interface.sol index be93f9937..8b4137fcc 100644 --- a/test/libsolidity/natspecJSON/event_inheritance_interface.sol +++ b/test/libsolidity/natspecJSON/event_inheritance_interface.sol @@ -28,7 +28,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :A userdoc @@ -40,7 +42,9 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } // // :B devdoc @@ -58,7 +62,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :B userdoc @@ -70,7 +76,9 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } // // :ERC20 devdoc @@ -88,7 +96,9 @@ contract B is A { // } // } // }, -// "methods": {} +// "kind": "dev", +// "methods": {}, +// "version": 1 // } // // :ERC20 userdoc @@ -100,5 +110,7 @@ contract B is A { // "notice": "This event is emitted when a transfer occurs." // } // }, -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol index da28d3cd7..b29ccab0b 100644 --- a/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol +++ b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol @@ -8,11 +8,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "mul(uint256)": // { // "notice": "I do something awesome which requires two lines to explain" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/notice_without_tag.sol b/test/libsolidity/natspecJSON/notice_without_tag.sol index 658f5316a..215393244 100644 --- a/test/libsolidity/natspecJSON/notice_without_tag.sol +++ b/test/libsolidity/natspecJSON/notice_without_tag.sol @@ -7,11 +7,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "mul(uint256)": // { // "notice": "I do something awesome" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/private_state_variable.sol b/test/libsolidity/natspecJSON/private_state_variable.sol index ed4bd56cc..7d7707a8d 100644 --- a/test/libsolidity/natspecJSON/private_state_variable.sol +++ b/test/libsolidity/natspecJSON/private_state_variable.sol @@ -7,6 +7,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -14,10 +15,13 @@ contract test { // { // "details": "example of dev" // } -// } +// }, +// "version": 1 // } // // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/public_state_variable.sol b/test/libsolidity/natspecJSON/public_state_variable.sol index 517080602..5fda30cec 100644 --- a/test/libsolidity/natspecJSON/public_state_variable.sol +++ b/test/libsolidity/natspecJSON/public_state_variable.sol @@ -9,6 +9,7 @@ contract test { // ---- // :test devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -21,16 +22,19 @@ contract test { // "_0": "returns state" // } // } -// } +// }, +// "version": 1 // } // // :test userdoc // { +// "kind": "user", // "methods": // { // "state()": // { // "notice": "example of notice" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/public_state_variable_struct.sol b/test/libsolidity/natspecJSON/public_state_variable_struct.sol index a8dff229d..438247243 100644 --- a/test/libsolidity/natspecJSON/public_state_variable_struct.sol +++ b/test/libsolidity/natspecJSON/public_state_variable_struct.sol @@ -14,6 +14,7 @@ contract Bank { // ---- // :Bank devdoc // { +// "kind": "dev", // "methods": {}, // "stateVariables": // { @@ -25,16 +26,19 @@ contract Bank { // "reverseGraphicURL": "Back pic" // } // } -// } +// }, +// "version": 1 // } // // :Bank userdoc // { +// "kind": "user", // "methods": // { // "coinStack(uint256)": // { // "notice": "Get the n-th coin I own" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/slash3_slash3.sol b/test/libsolidity/natspecJSON/slash3_slash3.sol index ea40cdaa9..9c131ccc1 100644 --- a/test/libsolidity/natspecJSON/slash3_slash3.sol +++ b/test/libsolidity/natspecJSON/slash3_slash3.sol @@ -8,11 +8,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "f()": // { // "notice": "lorem ipsum" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/slash3_slash4.sol b/test/libsolidity/natspecJSON/slash3_slash4.sol index b8b5dc33e..4bdf5ba1a 100644 --- a/test/libsolidity/natspecJSON/slash3_slash4.sol +++ b/test/libsolidity/natspecJSON/slash3_slash4.sol @@ -8,11 +8,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "f()": // { // "notice": "lorem" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/slash4.sol b/test/libsolidity/natspecJSON/slash4.sol index 1016d6204..3acaea1f0 100644 --- a/test/libsolidity/natspecJSON/slash4.sol +++ b/test/libsolidity/natspecJSON/slash4.sol @@ -7,5 +7,7 @@ contract test { // ---- // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/star3.sol b/test/libsolidity/natspecJSON/star3.sol index 965ce1e66..c71fecad8 100644 --- a/test/libsolidity/natspecJSON/star3.sol +++ b/test/libsolidity/natspecJSON/star3.sol @@ -9,5 +9,7 @@ contract test { // ---- // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_basic_test.sol b/test/libsolidity/natspecJSON/user_basic_test.sol index 27df4c616..02d339e37 100644 --- a/test/libsolidity/natspecJSON/user_basic_test.sol +++ b/test/libsolidity/natspecJSON/user_basic_test.sol @@ -7,11 +7,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "mul(uint256)": // { // "notice": "Multiplies `a` by 7" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_constructor.sol b/test/libsolidity/natspecJSON/user_constructor.sol index bd49a376c..a3570f71d 100644 --- a/test/libsolidity/natspecJSON/user_constructor.sol +++ b/test/libsolidity/natspecJSON/user_constructor.sol @@ -7,11 +7,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "constructor": // { // "notice": "this is a really nice constructor" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_constructor_and_function.sol b/test/libsolidity/natspecJSON/user_constructor_and_function.sol index 0dd1b33fb..a6ace5f4a 100644 --- a/test/libsolidity/natspecJSON/user_constructor_and_function.sol +++ b/test/libsolidity/natspecJSON/user_constructor_and_function.sol @@ -9,6 +9,7 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "constructor": @@ -19,5 +20,6 @@ contract test { // { // "notice": "another multiplier" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_default_inherit.sol b/test/libsolidity/natspecJSON/user_default_inherit.sol index ab92e6bc6..459866247 100644 --- a/test/libsolidity/natspecJSON/user_default_inherit.sol +++ b/test/libsolidity/natspecJSON/user_default_inherit.sol @@ -25,33 +25,39 @@ contract Token is Middle { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." // } -// } +// }, +// "version": 1 // } // // :Middle userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_default_inherit_variable.sol b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol index eee21cd91..c470d0ba6 100644 --- a/test/libsolidity/natspecJSON/user_default_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol @@ -14,22 +14,26 @@ contract D is C { // ---- // :C userdoc // { +// "kind": "user", // "methods": // { // "x()": // { // "notice": "Hello world" // } -// } +// }, +// "version": 1 // } // // :D userdoc // { +// "kind": "user", // "methods": // { // "x()": // { // "notice": "Hello world" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_empty_contract.sol b/test/libsolidity/natspecJSON/user_empty_contract.sol index be7bc2a2f..afb1df7cb 100644 --- a/test/libsolidity/natspecJSON/user_empty_contract.sol +++ b/test/libsolidity/natspecJSON/user_empty_contract.sol @@ -4,5 +4,7 @@ contract test { } // ---- // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_empty_natspec_test.sol b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol index 08c438952..9c553e9a5 100644 --- a/test/libsolidity/natspecJSON/user_empty_natspec_test.sol +++ b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol @@ -9,5 +9,7 @@ contract test { // ---- // :test userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit.sol b/test/libsolidity/natspecJSON/user_explicit_inherit.sol index 96ab8effe..2f02f415f 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit.sol @@ -23,22 +23,26 @@ contract Token is ERC21, ERC20 { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol index 5be6140f0..74d76cd9e 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit2.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol @@ -23,33 +23,39 @@ contract Token is ERC20 { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :ERC21 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol index 5a865d822..7e85aae86 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol @@ -25,22 +25,26 @@ contract Token is ERC21, ERC20 { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "override notice" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol index 460c90dd9..6f9fa996e 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol @@ -25,22 +25,26 @@ contract Token is ERC21 { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "override notice" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol index 9e6e96bf6..f5171f4db 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol @@ -21,22 +21,26 @@ contract D is C, B { // ---- // :C userdoc // { +// "kind": "user", // "methods": // { // "x()": // { // "notice": "Hello world" // } -// } +// }, +// "version": 1 // } // // :D userdoc // { +// "kind": "user", // "methods": // { // "x()": // { // "notice": "Hello world" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol index a427f16af..2311106e3 100644 --- a/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol +++ b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol @@ -22,27 +22,33 @@ contract Token is Middle { // ---- // :ERC20 userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Middle userdoc // { +// "kind": "user", // "methods": // { // "transfer(address,uint256)": // { // "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." // } -// } +// }, +// "version": 1 // } // // :Token userdoc // { -// "methods": {} +// "kind": "user", +// "methods": {}, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_multiline_comment.sol b/test/libsolidity/natspecJSON/user_multiline_comment.sol index e8c7f61de..a656bc636 100644 --- a/test/libsolidity/natspecJSON/user_multiline_comment.sol +++ b/test/libsolidity/natspecJSON/user_multiline_comment.sol @@ -10,11 +10,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "mul_and_add(uint256,uint256)": // { // "notice": "Multiplies `a` by 7 and then adds `b`" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol index 93f20a195..edd01f549 100644 --- a/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol +++ b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol @@ -12,11 +12,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "f()": // { // "notice": "hello world" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_multiple_functions.sol b/test/libsolidity/natspecJSON/user_multiple_functions.sol index a2ae7f058..2a78e14cc 100644 --- a/test/libsolidity/natspecJSON/user_multiple_functions.sol +++ b/test/libsolidity/natspecJSON/user_multiple_functions.sol @@ -19,6 +19,7 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "divide(uint256,uint256)": @@ -33,5 +34,6 @@ contract test { // { // "notice": "Subtracts 3 from `input`" // } -// } +// }, +// "version": 1 // } diff --git a/test/libsolidity/natspecJSON/user_newline_break.sol b/test/libsolidity/natspecJSON/user_newline_break.sol index 97744a74f..64625864d 100644 --- a/test/libsolidity/natspecJSON/user_newline_break.sol +++ b/test/libsolidity/natspecJSON/user_newline_break.sol @@ -11,11 +11,13 @@ contract test { // ---- // :test userdoc // { +// "kind": "user", // "methods": // { // "f()": // { // "notice": "world" // } -// } +// }, +// "version": 1 // } From d083925bed298a58f164d78d938bc30bc3c28609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Mon, 21 Aug 2023 12:32:33 +0200 Subject: [PATCH 6/8] natspecJSON: Generate missing expectations (including errors) --- test/libsolidity/natspecJSON/custom.sol | 7 ++ .../natspecJSON/custom_inheritance.sol | 14 ++++ .../natspecJSON/dev_author_at_function.sol | 1 + .../natspecJSON/dev_constructor.sol | 7 ++ .../dev_constructor_and_function.sol | 7 ++ .../natspecJSON/dev_constructor_return.sol | 2 + .../natspecJSON/dev_contract_doc.sol | 7 ++ .../natspecJSON/dev_contract_no_doc.sol | 7 ++ .../natspecJSON/dev_default_inherit.sol | 39 ++++++++++ .../dev_default_inherit_variable.sol | 26 +++++++ .../natspecJSON/dev_desc_after_nl.sol | 7 ++ .../natspecJSON/dev_different_return_name.sol | 14 ++++ .../dev_different_return_name_multiple.sol | 14 ++++ ...nt_return_name_multiple_partly_unnamed.sol | 14 ++++ ...different_return_name_multiple_unnamed.sol | 14 ++++ .../dev_documenting_no_param_description.sol | 1 + .../dev_documenting_no_param_name.sol | 1 + .../dev_documenting_no_param_name_end.sol | 1 + .../dev_documenting_no_return_param_name.sol | 1 + .../dev_documenting_nonexistent_param.sol | 1 + .../natspecJSON/dev_explicit_inherit.sol | 40 ++++++++++ .../natspecJSON/dev_explicit_inherit2.sol | 39 ++++++++++ .../dev_explicit_inherit_complex.sol | 75 +++++++++++++++++++ .../dev_explicit_inherit_partial.sol | 40 ++++++++++ .../dev_explicit_inherit_partial2.sol | 57 ++++++++++++++ .../dev_explicit_inherit_variable.sol | 40 ++++++++++ .../dev_inherit_parameter_mismatch.sol | 33 ++++++++ .../natspecJSON/dev_multiline_comment.sol | 7 ++ .../natspecJSON/dev_multiline_return.sol | 7 ++ .../natspecJSON/dev_multiple_functions.sol | 7 ++ .../natspecJSON/dev_multiple_params.sol | 7 ++ .../dev_multiple_params_mixed_whitespace.sol | 7 ++ .../dev_mutiline_param_description.sol | 7 ++ test/libsolidity/natspecJSON/dev_return.sol | 7 ++ .../natspecJSON/dev_return_desc_after_nl.sol | 7 ++ .../natspecJSON/dev_return_desc_multiple.sol | 7 ++ .../dev_return_desc_multiple_unamed.sol | 7 ++ .../dev_return_desc_multiple_unamed_mixed.sol | 7 ++ ...ev_return_desc_multiple_unamed_mixed_2.sol | 7 ++ .../dev_return_name_no_description.sol | 14 ++++ .../natspecJSON/dev_return_no_params.sol | 7 ++ .../dev_struct_getter_override.sol | 14 ++++ ...rride_different_return_parameter_names.sol | 14 ++++ ..._struct_getter_override_no_return_name.sol | 14 ++++ .../dev_title_at_function_error.sol | 1 + .../emit_event_from_foreign_contract.sol | 28 +++++++ ...t_from_foreign_contract_no_inheritance.sol | 28 +++++++ ...me_signature_event_different_libraries.sol | 56 ++++++++++++++ ...nt_different_libraries_missing_natspec.sol | 56 ++++++++++++++ ..._same_signature_event_library_contract.sol | 36 +++++++++ ...event_library_contract_missing_natspec.sol | 36 +++++++++ ...same_signature_event_library_inherited.sol | 56 ++++++++++++++ ...vent_library_inherited_missing_natspec.sol | 42 +++++++++++ .../libsolidity/natspecJSON/empty_comment.sol | 7 ++ .../natspecJSON/error_multiple.sol | 37 +++++++++ .../multiline_notice_without_tag.sol | 7 ++ .../natspecJSON/notice_without_tag.sol | 7 ++ .../public_state_variable_struct_repeated.sol | 1 + .../libsolidity/natspecJSON/slash3_slash3.sol | 7 ++ .../libsolidity/natspecJSON/slash3_slash4.sol | 7 ++ test/libsolidity/natspecJSON/slash4.sol | 7 ++ test/libsolidity/natspecJSON/star3.sol | 7 ++ .../natspecJSON/user_basic_test.sol | 7 ++ .../natspecJSON/user_constructor.sol | 7 ++ .../user_constructor_and_function.sol | 7 ++ .../natspecJSON/user_default_inherit.sol | 54 +++++++++++++ .../user_default_inherit_variable.sol | 27 +++++++ .../natspecJSON/user_empty_contract.sol | 7 ++ .../natspecJSON/user_empty_natspec_test.sol | 7 ++ .../natspecJSON/user_explicit_inherit.sol | 50 +++++++++++++ .../natspecJSON/user_explicit_inherit2.sol | 54 +++++++++++++ .../user_explicit_inherit_partial.sol | 50 +++++++++++++ .../user_explicit_inherit_partial2.sol | 67 +++++++++++++++++ .../user_explicit_inherit_variable.sol | 41 ++++++++++ .../user_inherit_parameter_mismatch.sol | 43 +++++++++++ .../natspecJSON/user_multiline_comment.sol | 7 ++ .../user_multiline_empty_lines.sol | 7 ++ .../natspecJSON/user_multiple_functions.sol | 7 ++ .../natspecJSON/user_newline_break.sol | 7 ++ 79 files changed, 1531 insertions(+) diff --git a/test/libsolidity/natspecJSON/custom.sol b/test/libsolidity/natspecJSON/custom.sol index 43fd7283e..28073c0bf 100644 --- a/test/libsolidity/natspecJSON/custom.sol +++ b/test/libsolidity/natspecJSON/custom.sol @@ -34,3 +34,10 @@ contract A { // }, // "version": 1 // } +// +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/custom_inheritance.sol b/test/libsolidity/natspecJSON/custom_inheritance.sol index f4fb80b55..c4a1360fb 100644 --- a/test/libsolidity/natspecJSON/custom_inheritance.sol +++ b/test/libsolidity/natspecJSON/custom_inheritance.sol @@ -21,9 +21,23 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", // "methods": {}, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_author_at_function.sol b/test/libsolidity/natspecJSON/dev_author_at_function.sol index 7ea25a3e5..10a21f753 100644 --- a/test/libsolidity/natspecJSON/dev_author_at_function.sol +++ b/test/libsolidity/natspecJSON/dev_author_at_function.sol @@ -7,3 +7,4 @@ contract test { } // ---- +// DocstringParsingError 6546: (73-119): Documentation tag @author not valid for functions. diff --git a/test/libsolidity/natspecJSON/dev_constructor.sol b/test/libsolidity/natspecJSON/dev_constructor.sol index ffdcfea94..9cb1e05af 100644 --- a/test/libsolidity/natspecJSON/dev_constructor.sol +++ b/test/libsolidity/natspecJSON/dev_constructor.sol @@ -22,3 +22,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_constructor_and_function.sol b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol index e15f03f03..0954009f9 100644 --- a/test/libsolidity/natspecJSON/dev_constructor_and_function.sol +++ b/test/libsolidity/natspecJSON/dev_constructor_and_function.sol @@ -44,3 +44,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_constructor_return.sol b/test/libsolidity/natspecJSON/dev_constructor_return.sol index bee9a9d6e..4695806d2 100644 --- a/test/libsolidity/natspecJSON/dev_constructor_return.sol +++ b/test/libsolidity/natspecJSON/dev_constructor_return.sol @@ -6,3 +6,5 @@ contract test { } // ---- +// DocstringParsingError 6546: (20-239): Documentation tag @return not valid for constructor. +// DocstringParsingError 2604: (20-239): Documentation tag "@return return should not work within constructors" exceeds the number of return parameters. diff --git a/test/libsolidity/natspecJSON/dev_contract_doc.sol b/test/libsolidity/natspecJSON/dev_contract_doc.sol index 5acc2d198..3958a01ed 100644 --- a/test/libsolidity/natspecJSON/dev_contract_doc.sol +++ b/test/libsolidity/natspecJSON/dev_contract_doc.sol @@ -21,3 +21,10 @@ contract test { // "title": "Just a test contract", // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_contract_no_doc.sol b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol index aa8a86a0e..a60847d7e 100644 --- a/test/libsolidity/natspecJSON/dev_contract_no_doc.sol +++ b/test/libsolidity/natspecJSON/dev_contract_no_doc.sol @@ -17,3 +17,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit.sol b/test/libsolidity/natspecJSON/dev_default_inherit.sol index d144b3840..dd65ddfbe 100644 --- a/test/libsolidity/natspecJSON/dev_default_inherit.sol +++ b/test/libsolidity/natspecJSON/dev_default_inherit.sol @@ -41,6 +41,19 @@ contract Token is Middle { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// }, +// "version": 1 +// } +// // :Middle devdoc // { // "kind": "dev", @@ -59,6 +72,19 @@ contract Token is Middle { // "version": 1 // } // +// :Middle userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// }, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", @@ -76,3 +102,16 @@ contract Token is Middle { // }, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``. Second line." +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol index 1974bd651..89d57d011 100644 --- a/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/dev_default_inherit_variable.sol @@ -25,6 +25,19 @@ contract D is C { // "version": 1 // } // +// :C userdoc +// { +// "kind": "user", +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// }, +// "version": 1 +// } +// // :D devdoc // { // "kind": "dev", @@ -38,3 +51,16 @@ contract D is C { // }, // "version": 1 // } +// +// :D userdoc +// { +// "kind": "user", +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol index f7e892ae8..fd83ff1b9 100644 --- a/test/libsolidity/natspecJSON/dev_desc_after_nl.sol +++ b/test/libsolidity/natspecJSON/dev_desc_after_nl.sol @@ -25,3 +25,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name.sol b/test/libsolidity/natspecJSON/dev_different_return_name.sol index 2b7160be1..7d74cc294 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name.sol @@ -25,6 +25,13 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", @@ -40,3 +47,10 @@ contract B is A { // }, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol index 90e21462c..2a8ba399f 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple.sol @@ -27,6 +27,13 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", @@ -43,3 +50,10 @@ contract B is A { // }, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol index 1ddf47aee..c41336d8f 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_partly_unnamed.sol @@ -27,6 +27,13 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", @@ -43,3 +50,10 @@ contract B is A { // }, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol index cc172a8c8..3bf40011f 100644 --- a/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol +++ b/test/libsolidity/natspecJSON/dev_different_return_name_multiple_unnamed.sol @@ -27,6 +27,13 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", @@ -43,3 +50,10 @@ contract B is A { // }, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol index 84a2f532d..e02437ace 100644 --- a/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_description.sol @@ -6,3 +6,4 @@ contract test { } // ---- +// DocstringParsingError 9942: (20-156): No description given for param second diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol index 75b4fe5c0..c8da55d75 100644 --- a/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_name.sol @@ -6,3 +6,4 @@ contract test { } // ---- +// DocstringParsingError 3335: (20-149): No param name given diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol b/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol index 4ddeb7f9b..500092e1d 100644 --- a/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol +++ b/test/libsolidity/natspecJSON/dev_documenting_no_param_name_end.sol @@ -6,3 +6,4 @@ contract test { } // ---- +// DocstringParsingError 9942: (20-152): No description given for param se diff --git a/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol b/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol index e0b90bed0..2a99c78a8 100644 --- a/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol +++ b/test/libsolidity/natspecJSON/dev_documenting_no_return_param_name.sol @@ -7,3 +7,4 @@ contract test { } // ---- +// DocstringParsingError 5856: (20-211): Documentation tag "@return " does not contain the name of its return parameter. diff --git a/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol b/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol index 977833e00..a2ebc2652 100644 --- a/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol +++ b/test/libsolidity/natspecJSON/dev_documenting_nonexistent_param.sol @@ -6,3 +6,4 @@ contract test { } // ---- +// DocstringParsingError 3881: (20-201): Documented parameter "not_existing" not found in the parameter list of the function. diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol index 5efae37f2..a8ddb3133 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit.sol @@ -39,6 +39,33 @@ contract Token is ERC21, ERC20 { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", @@ -56,3 +83,16 @@ contract Token is ERC21, ERC20 { // }, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol index 2f1f8f17f..4c726f552 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit2.sol @@ -39,6 +39,19 @@ contract Token is ERC20 { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// // :ERC21 devdoc // { // "kind": "dev", @@ -57,6 +70,19 @@ contract Token is ERC20 { // "version": 1 // } // +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", @@ -74,3 +100,16 @@ contract Token is ERC20 { // }, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol index c87f6c30f..38726c778 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_complex.sol @@ -28,6 +28,68 @@ contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { // ---- // ---- +// Interfaces.sol:ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// +// Interfaces.sol:ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// +// Interfaces.sol:ERC21 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test2", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// +// Interfaces.sol:ERC21 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// // Testfile.sol:Token devdoc // { // "kind": "dev", @@ -45,3 +107,16 @@ contract Token is myInterfaces.ERC20, myInterfaces.ERC21 { // }, // "version": 1 // } +// +// Testfile.sol:Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol index 0dce69ccb..c69bd4121 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial.sol @@ -41,6 +41,33 @@ contract Token is ERC21, ERC20 { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", @@ -58,3 +85,16 @@ contract Token is ERC21, ERC20 { // }, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol index e9590d9ce..6bb49e887 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_partial2.sol @@ -41,6 +41,50 @@ contract Token is ERC21 { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// }, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", @@ -58,3 +102,16 @@ contract Token is ERC21 { // }, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol index cf3b1aba3..b35a92873 100644 --- a/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/dev_explicit_inherit_variable.sol @@ -19,6 +19,20 @@ contract D is C, B { // ---- // ---- +// :B devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :C devdoc // { // "kind": "dev", @@ -32,6 +46,19 @@ contract D is C, B { // "version": 1 // } // +// :C userdoc +// { +// "kind": "user", +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// }, +// "version": 1 +// } +// // :D devdoc // { // "kind": "dev", @@ -45,3 +72,16 @@ contract D is C, B { // }, // "version": 1 // } +// +// :D userdoc +// { +// "kind": "user", +// "methods": +// { +// "x()": +// { +// "notice": "Hello world" +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol index 579660f2f..a8ab60bd1 100644 --- a/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol +++ b/test/libsolidity/natspecJSON/dev_inherit_parameter_mismatch.sol @@ -38,6 +38,19 @@ contract Token is Middle { // "version": 1 // } // +// :ERC20 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// // :Middle devdoc // { // "kind": "dev", @@ -56,9 +69,29 @@ contract Token is Middle { // "version": 1 // } // +// :Middle userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "Transfer ``amount`` from ``msg.sender`` to ``to``." +// } +// }, +// "version": 1 +// } +// // :Token devdoc // { // "kind": "dev", // "methods": {}, // "version": 1 // } +// +// :Token userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_multiline_comment.sol b/test/libsolidity/natspecJSON/dev_multiline_comment.sol index 7757636c9..b86bcff92 100644 --- a/test/libsolidity/natspecJSON/dev_multiline_comment.sol +++ b/test/libsolidity/natspecJSON/dev_multiline_comment.sol @@ -35,3 +35,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_multiline_return.sol b/test/libsolidity/natspecJSON/dev_multiline_return.sol index 792cf11ce..cd3c1df98 100644 --- a/test/libsolidity/natspecJSON/dev_multiline_return.sol +++ b/test/libsolidity/natspecJSON/dev_multiline_return.sol @@ -33,3 +33,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_functions.sol b/test/libsolidity/natspecJSON/dev_multiple_functions.sol index f3fb5876a..899fb5e26 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_functions.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_functions.sol @@ -54,3 +54,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params.sol b/test/libsolidity/natspecJSON/dev_multiple_params.sol index 909452ee8..424f368d1 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_params.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_params.sol @@ -24,3 +24,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol index f9dfa0b52..61f45aa62 100644 --- a/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol +++ b/test/libsolidity/natspecJSON/dev_multiple_params_mixed_whitespace.sol @@ -24,3 +24,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol index 8c5092534..9bdfd0504 100644 --- a/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol +++ b/test/libsolidity/natspecJSON/dev_mutiline_param_description.sol @@ -25,3 +25,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return.sol b/test/libsolidity/natspecJSON/dev_return.sol index e17c6466c..c97897047 100644 --- a/test/libsolidity/natspecJSON/dev_return.sol +++ b/test/libsolidity/natspecJSON/dev_return.sol @@ -30,3 +30,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol index 4c17105fc..b6ae9f2f6 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_after_nl.sol @@ -33,3 +33,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol index d902983a0..0c93dfdd9 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple.sol @@ -35,3 +35,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol index 877e14927..1d93b4aba 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed.sol @@ -35,3 +35,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol index 2b8c1771a..6147aace7 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed.sol @@ -35,3 +35,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol index 208a95095..824671ee4 100644 --- a/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol +++ b/test/libsolidity/natspecJSON/dev_return_desc_multiple_unamed_mixed_2.sol @@ -38,3 +38,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_name_no_description.sol b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol index a96535a61..1e65a235a 100644 --- a/test/libsolidity/natspecJSON/dev_return_name_no_description.sol +++ b/test/libsolidity/natspecJSON/dev_return_name_no_description.sol @@ -25,6 +25,13 @@ contract B is A { // "version": 1 // } // +// :A userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :B devdoc // { // "kind": "dev", @@ -40,3 +47,10 @@ contract B is A { // }, // "version": 1 // } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_return_no_params.sol b/test/libsolidity/natspecJSON/dev_return_no_params.sol index e7e9e8cbb..37442f10a 100644 --- a/test/libsolidity/natspecJSON/dev_return_no_params.sol +++ b/test/libsolidity/natspecJSON/dev_return_no_params.sol @@ -20,3 +20,10 @@ contract test { // }, // "version": 1 // } +// +// :test userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol index 5d9ce6e80..019e1a335 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override.sol @@ -32,6 +32,13 @@ contract Thing is IThing { // "version": 1 // } // +// :IThing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :Thing devdoc // { // "kind": "dev", @@ -49,3 +56,10 @@ contract Thing is IThing { // }, // "version": 1 // } +// +// :Thing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol index dcc86ed93..0acfa70fc 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_different_return_parameter_names.sol @@ -32,6 +32,13 @@ contract Thing is IThing { // "version": 1 // } // +// :IThing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :Thing devdoc // { // "kind": "dev", @@ -49,3 +56,10 @@ contract Thing is IThing { // }, // "version": 1 // } +// +// :Thing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol index dc97cb8a9..06810957a 100644 --- a/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol +++ b/test/libsolidity/natspecJSON/dev_struct_getter_override_no_return_name.sol @@ -29,6 +29,13 @@ contract Thing is IThing { // "version": 1 // } // +// :IThing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :Thing devdoc // { // "kind": "dev", @@ -46,3 +53,10 @@ contract Thing is IThing { // }, // "version": 1 // } +// +// :Thing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/dev_title_at_function_error.sol b/test/libsolidity/natspecJSON/dev_title_at_function_error.sol index 8c9ed7bb9..2b18e8076 100644 --- a/test/libsolidity/natspecJSON/dev_title_at_function_error.sol +++ b/test/libsolidity/natspecJSON/dev_title_at_function_error.sol @@ -7,3 +7,4 @@ contract test { } // ---- +// DocstringParsingError 6546: (73-137): Documentation tag @title not valid for functions. diff --git a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol index 7733fd432..669775131 100644 --- a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol +++ b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract.sol @@ -39,3 +39,31 @@ contract C { // "methods": {}, // "version": 1 // } +// +// :X devdoc +// { +// "events": +// { +// "E()": +// { +// "details": "Devdoc for event E." +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :X userdoc +// { +// "events": +// { +// "E()": +// { +// "notice": "Userdoc for event E." +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol index ea1d66956..c89091391 100644 --- a/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol +++ b/test/libsolidity/natspecJSON/emit_event_from_foreign_contract_no_inheritance.sol @@ -16,6 +16,34 @@ contract D { // ---- // ---- +// :C devdoc +// { +// "events": +// { +// "E()": +// { +// "details": "C.E event" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "events": +// { +// "E()": +// { +// "notice": "C.E event" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :D devdoc // { // "kind": "dev", diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol index a017849c9..46c8cadf5 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries.sol @@ -64,3 +64,59 @@ contract C { // "methods": {}, // "version": 1 // } +// +// :L2 devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L2 userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Library L2" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L3 devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L3 userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Library L3" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol index 06b739039..ba51b10c6 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_different_libraries_missing_natspec.sol @@ -32,3 +32,59 @@ contract C { // "methods": {}, // "version": 1 // } +// +// :L1 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L1 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L2 devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C devdoc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L2 userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in library L2" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L3 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L3 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol index d5b3d91fd..9b198afde 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract.sol @@ -66,3 +66,39 @@ contract C { // "methods": {}, // "version": 1 // } +// +// :L devdoc +// { +// "events": +// { +// "LibraryEvent(uint32)": +// { +// "details": "This should appear in Contract C dev doc" +// }, +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L userdoc +// { +// "events": +// { +// "LibraryEvent(uint32)": +// { +// "notice": "This event is defined in Library L" +// }, +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Library L" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol index 5da7a6c1c..9bc2f57f3 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_contract_missing_natspec.sol @@ -51,3 +51,39 @@ contract C { // "methods": {}, // "version": 1 // } +// +// :L devdoc +// { +// "events": +// { +// "LibraryEvent(uint32)": +// { +// "details": "This should appear in contract C devdoc" +// }, +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in contract C devdoc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L userdoc +// { +// "events": +// { +// "LibraryEvent(uint32)": +// { +// "notice": "This event is defined in library L" +// }, +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in library L" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol index 9f2ed1ce3..ecc7ee627 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited.sol @@ -44,3 +44,59 @@ contract C is D { // "methods": {}, // "version": 1 // } +// +// :D devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should appear in Contract C dev doc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :D userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in contract D" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in Contract C" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in Library L" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol index 106110a0f..a3a6286c5 100644 --- a/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol +++ b/test/libsolidity/natspecJSON/emit_same_signature_event_library_inherited_missing_natspec.sol @@ -28,3 +28,45 @@ contract C is D { // "methods": {}, // "version": 1 // } +// +// :D devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :D userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :L devdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "details": "This should not appear in contract C devdoc" +// } +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :L userdoc +// { +// "events": +// { +// "SameSignatureEvent(uint16)": +// { +// "notice": "This event is defined in library L" +// } +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/empty_comment.sol b/test/libsolidity/natspecJSON/empty_comment.sol index db0f9e533..4310c26d2 100644 --- a/test/libsolidity/natspecJSON/empty_comment.sol +++ b/test/libsolidity/natspecJSON/empty_comment.sol @@ -4,6 +4,13 @@ contract test // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/error_multiple.sol b/test/libsolidity/natspecJSON/error_multiple.sol index 336710ec3..205e79a99 100644 --- a/test/libsolidity/natspecJSON/error_multiple.sol +++ b/test/libsolidity/natspecJSON/error_multiple.sol @@ -21,6 +21,43 @@ contract test { // ---- // ---- +// :A devdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "details": "an error.", +// "params": +// { +// "x": "first parameter", +// "y": "second parameter" +// } +// } +// ] +// }, +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :A userdoc +// { +// "errors": +// { +// "E(uint256,uint256)": +// [ +// { +// "notice": "Something failed." +// } +// ] +// }, +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// // :test devdoc // { // "errors": diff --git a/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol index b29ccab0b..4f055b2f0 100644 --- a/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol +++ b/test/libsolidity/natspecJSON/multiline_notice_without_tag.sol @@ -6,6 +6,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/notice_without_tag.sol b/test/libsolidity/natspecJSON/notice_without_tag.sol index 215393244..d56299339 100644 --- a/test/libsolidity/natspecJSON/notice_without_tag.sol +++ b/test/libsolidity/natspecJSON/notice_without_tag.sol @@ -5,6 +5,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol b/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol index a6b4f7f84..78a6f9eed 100644 --- a/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol +++ b/test/libsolidity/natspecJSON/public_state_variable_struct_repeated.sol @@ -11,3 +11,4 @@ contract Bank { } // ---- +// DocstringParsingError 5856: (113-236): Documentation tag "@return obverseGraphicURL Front pic" does not contain the name of its return parameter. diff --git a/test/libsolidity/natspecJSON/slash3_slash3.sol b/test/libsolidity/natspecJSON/slash3_slash3.sol index 9c131ccc1..fc8e47f96 100644 --- a/test/libsolidity/natspecJSON/slash3_slash3.sol +++ b/test/libsolidity/natspecJSON/slash3_slash3.sol @@ -6,6 +6,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/slash3_slash4.sol b/test/libsolidity/natspecJSON/slash3_slash4.sol index 4bdf5ba1a..c428f5e19 100644 --- a/test/libsolidity/natspecJSON/slash3_slash4.sol +++ b/test/libsolidity/natspecJSON/slash3_slash4.sol @@ -6,6 +6,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/slash4.sol b/test/libsolidity/natspecJSON/slash4.sol index 3acaea1f0..74997524e 100644 --- a/test/libsolidity/natspecJSON/slash4.sol +++ b/test/libsolidity/natspecJSON/slash4.sol @@ -5,6 +5,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/star3.sol b/test/libsolidity/natspecJSON/star3.sol index c71fecad8..24e742f8a 100644 --- a/test/libsolidity/natspecJSON/star3.sol +++ b/test/libsolidity/natspecJSON/star3.sol @@ -7,6 +7,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_basic_test.sol b/test/libsolidity/natspecJSON/user_basic_test.sol index 02d339e37..0ec21750d 100644 --- a/test/libsolidity/natspecJSON/user_basic_test.sol +++ b/test/libsolidity/natspecJSON/user_basic_test.sol @@ -5,6 +5,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_constructor.sol b/test/libsolidity/natspecJSON/user_constructor.sol index a3570f71d..0dedd30a6 100644 --- a/test/libsolidity/natspecJSON/user_constructor.sol +++ b/test/libsolidity/natspecJSON/user_constructor.sol @@ -5,6 +5,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_constructor_and_function.sol b/test/libsolidity/natspecJSON/user_constructor_and_function.sol index a6ace5f4a..5e8cfd04a 100644 --- a/test/libsolidity/natspecJSON/user_constructor_and_function.sol +++ b/test/libsolidity/natspecJSON/user_constructor_and_function.sol @@ -7,6 +7,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_default_inherit.sol b/test/libsolidity/natspecJSON/user_default_inherit.sol index 459866247..b4f97cfa3 100644 --- a/test/libsolidity/natspecJSON/user_default_inherit.sol +++ b/test/libsolidity/natspecJSON/user_default_inherit.sol @@ -23,6 +23,24 @@ contract Token is Middle { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -36,6 +54,24 @@ contract Token is Middle { // "version": 1 // } // +// :Middle devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Middle userdoc // { // "kind": "user", @@ -49,6 +85,24 @@ contract Token is Middle { // "version": 1 // } // +// :Token devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_default_inherit_variable.sol b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol index c470d0ba6..89d57d011 100644 --- a/test/libsolidity/natspecJSON/user_default_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/user_default_inherit_variable.sol @@ -12,6 +12,19 @@ contract D is C { // ---- // ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": +// { +// "x()": +// { +// "details": "test" +// } +// }, +// "version": 1 +// } +// // :C userdoc // { // "kind": "user", @@ -25,6 +38,20 @@ contract D is C { // "version": 1 // } // +// :D devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "x": +// { +// "details": "test" +// } +// }, +// "version": 1 +// } +// // :D userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_empty_contract.sol b/test/libsolidity/natspecJSON/user_empty_contract.sol index afb1df7cb..09f178606 100644 --- a/test/libsolidity/natspecJSON/user_empty_contract.sol +++ b/test/libsolidity/natspecJSON/user_empty_contract.sol @@ -2,6 +2,13 @@ contract test { } // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_empty_natspec_test.sol b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol index 9c553e9a5..aa19fac3a 100644 --- a/test/libsolidity/natspecJSON/user_empty_natspec_test.sol +++ b/test/libsolidity/natspecJSON/user_empty_natspec_test.sol @@ -7,6 +7,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit.sol b/test/libsolidity/natspecJSON/user_explicit_inherit.sol index 2f02f415f..a8ddb3133 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit.sol @@ -21,6 +21,24 @@ contract Token is ERC21, ERC20 { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -34,6 +52,38 @@ contract Token is ERC21, ERC20 { // "version": 1 // } // +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :Token devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol index 74d76cd9e..4c726f552 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit2.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit2.sol @@ -21,6 +21,24 @@ contract Token is ERC20 { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -34,6 +52,24 @@ contract Token is ERC20 { // "version": 1 // } // +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC21 userdoc // { // "kind": "user", @@ -47,6 +83,24 @@ contract Token is ERC20 { // "version": 1 // } // +// :Token devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol index 7e85aae86..c69bd4121 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial.sol @@ -23,6 +23,24 @@ contract Token is ERC21, ERC20 { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -36,6 +54,38 @@ contract Token is ERC21, ERC20 { // "version": 1 // } // +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :Token devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol index 6f9fa996e..6bb49e887 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_partial2.sol @@ -23,6 +23,24 @@ contract Token is ERC21 { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -36,6 +54,55 @@ contract Token is ERC21 { // "version": 1 // } // +// :ERC21 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// +// :ERC21 userdoc +// { +// "kind": "user", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "notice": "override notice" +// } +// }, +// "version": 1 +// } +// +// :Token devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "override dev comment", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol index f5171f4db..b35a92873 100644 --- a/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol +++ b/test/libsolidity/natspecJSON/user_explicit_inherit_variable.sol @@ -19,6 +19,33 @@ contract D is C, B { // ---- // ---- +// :B devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :B userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :C devdoc +// { +// "kind": "dev", +// "methods": +// { +// "x()": +// { +// "details": "test" +// } +// }, +// "version": 1 +// } +// // :C userdoc // { // "kind": "user", @@ -32,6 +59,20 @@ contract D is C, B { // "version": 1 // } // +// :D devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "x": +// { +// "details": "test" +// } +// }, +// "version": 1 +// } +// // :D userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol index 2311106e3..a8ab60bd1 100644 --- a/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol +++ b/test/libsolidity/natspecJSON/user_inherit_parameter_mismatch.sol @@ -20,6 +20,24 @@ contract Token is Middle { // ---- // ---- +// :ERC20 devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :ERC20 userdoc // { // "kind": "user", @@ -33,6 +51,24 @@ contract Token is Middle { // "version": 1 // } // +// :Middle devdoc +// { +// "kind": "dev", +// "methods": +// { +// "transfer(address,uint256)": +// { +// "details": "test", +// "params": +// { +// "amount": "amount to transfer", +// "to": "address to transfer to" +// } +// } +// }, +// "version": 1 +// } +// // :Middle userdoc // { // "kind": "user", @@ -46,6 +82,13 @@ contract Token is Middle { // "version": 1 // } // +// :Token devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :Token userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_multiline_comment.sol b/test/libsolidity/natspecJSON/user_multiline_comment.sol index a656bc636..5407c7fe8 100644 --- a/test/libsolidity/natspecJSON/user_multiline_comment.sol +++ b/test/libsolidity/natspecJSON/user_multiline_comment.sol @@ -8,6 +8,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol index edd01f549..12bc050e7 100644 --- a/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol +++ b/test/libsolidity/natspecJSON/user_multiline_empty_lines.sol @@ -10,6 +10,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_multiple_functions.sol b/test/libsolidity/natspecJSON/user_multiple_functions.sol index 2a78e14cc..3c6759bd2 100644 --- a/test/libsolidity/natspecJSON/user_multiple_functions.sol +++ b/test/libsolidity/natspecJSON/user_multiple_functions.sol @@ -17,6 +17,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", diff --git a/test/libsolidity/natspecJSON/user_newline_break.sol b/test/libsolidity/natspecJSON/user_newline_break.sol index 64625864d..7284c8808 100644 --- a/test/libsolidity/natspecJSON/user_newline_break.sol +++ b/test/libsolidity/natspecJSON/user_newline_break.sol @@ -9,6 +9,13 @@ contract test { // ---- // ---- +// :test devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// // :test userdoc // { // "kind": "user", From dc68480f72cb7321be3e228877ceb70ed7678f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Mon, 21 Aug 2023 11:28:03 +0200 Subject: [PATCH 7/8] Move Natspec syntax tests to natspecJSON --- scripts/error_codes.py | 1 + .../natspec => natspecJSON}/docstring_double_empty.sol | 0 .../{syntaxTests/natspec => natspecJSON}/docstring_enum.sol | 0 .../natspec => natspecJSON}/docstring_named_return_parameter.sol | 0 .../{syntaxTests/natspec => natspecJSON}/docstring_parameter.sol | 0 .../natspec => natspecJSON}/docstring_private_state_variable.sol | 0 .../natspec => natspecJSON}/docstring_state_variable.sol | 0 .../{syntaxTests/natspec => natspecJSON}/docstring_struct.sol | 0 .../{syntaxTests/natspec => natspecJSON}/docstring_variable.sol | 0 .../invalid/docstring_author_function.sol | 0 .../invalid/docstring_author_title_state_variable.sol | 0 .../invalid/docstring_empty_description.sol | 0 .../natspec => natspecJSON}/invalid/docstring_empty_tag.sol | 0 .../invalid/docstring_inherit_modifier_no_return.sol | 0 .../invalid/docstring_inherit_modifier_no_return2.sol | 0 .../natspec => natspecJSON}/invalid/docstring_inheritdoc.sol | 0 .../natspec => natspecJSON}/invalid/docstring_inheritdoc2.sol | 0 .../natspec => natspecJSON}/invalid/docstring_inheritdoc3.sol | 0 .../invalid/docstring_inheritdoc_emptys.sol | 0 .../invalid/docstring_inheritdoc_twice.sol | 0 .../invalid/docstring_inheritdoc_wrong_type.sol | 0 .../invalid/docstring_named_return_param_mismatch.sol | 0 .../invalid/docstring_non_public_state_variable_with_return.sol | 0 .../natspec => natspecJSON}/invalid/docstring_parameter.sol | 0 .../invalid/docstring_return_size_mismatch.sol | 0 .../invalid/docstring_state_variable_too_many_return_tags.sol | 0 .../invalid/docstring_too_many_return_tags.sol | 0 .../natspec => natspecJSON}/invalid/inherit_doc_events.sol | 0 .../{syntaxTests/natspec => natspecJSON}/invalid/invalid_tag.sol | 0 .../invalid => natspecJSON}/return_param_amount_differs.sol | 0 .../invalid => natspecJSON}/return_param_amount_differs2.sol | 0 31 files changed, 1 insertion(+) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_double_empty.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_enum.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_named_return_parameter.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_parameter.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_private_state_variable.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_state_variable.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_struct.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/docstring_variable.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_author_function.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_author_title_state_variable.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_empty_description.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_empty_tag.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inherit_modifier_no_return.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inherit_modifier_no_return2.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc2.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc3.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc_emptys.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc_twice.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_inheritdoc_wrong_type.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_named_return_param_mismatch.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_non_public_state_variable_with_return.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_parameter.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_return_size_mismatch.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_state_variable_too_many_return_tags.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/docstring_too_many_return_tags.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/inherit_doc_events.sol (100%) rename test/libsolidity/{syntaxTests/natspec => natspecJSON}/invalid/invalid_tag.sol (100%) rename test/libsolidity/{syntaxTests/natspec/invalid => natspecJSON}/return_param_amount_differs.sol (100%) rename test/libsolidity/{syntaxTests/natspec/invalid => natspecJSON}/return_param_amount_differs2.sol (100%) diff --git a/scripts/error_codes.py b/scripts/error_codes.py index 33a475214..8fe2c4c1b 100755 --- a/scripts/error_codes.py +++ b/scripts/error_codes.py @@ -171,6 +171,7 @@ def print_ids_per_file(ids, id_to_file_names, top_dir): def examine_id_coverage(top_dir, source_id_to_file_names, new_ids_only=False): test_sub_dirs = [ + path.join("test", "libsolidity", "natspecJSON"), path.join("test", "libsolidity", "smtCheckerTests"), path.join("test", "libsolidity", "syntaxTests"), path.join("test", "libyul", "yulSyntaxTests") diff --git a/test/libsolidity/syntaxTests/natspec/docstring_double_empty.sol b/test/libsolidity/natspecJSON/docstring_double_empty.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_double_empty.sol rename to test/libsolidity/natspecJSON/docstring_double_empty.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_enum.sol b/test/libsolidity/natspecJSON/docstring_enum.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_enum.sol rename to test/libsolidity/natspecJSON/docstring_enum.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_named_return_parameter.sol b/test/libsolidity/natspecJSON/docstring_named_return_parameter.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_named_return_parameter.sol rename to test/libsolidity/natspecJSON/docstring_named_return_parameter.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_parameter.sol b/test/libsolidity/natspecJSON/docstring_parameter.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_parameter.sol rename to test/libsolidity/natspecJSON/docstring_parameter.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_private_state_variable.sol b/test/libsolidity/natspecJSON/docstring_private_state_variable.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_private_state_variable.sol rename to test/libsolidity/natspecJSON/docstring_private_state_variable.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_state_variable.sol b/test/libsolidity/natspecJSON/docstring_state_variable.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_state_variable.sol rename to test/libsolidity/natspecJSON/docstring_state_variable.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_struct.sol b/test/libsolidity/natspecJSON/docstring_struct.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_struct.sol rename to test/libsolidity/natspecJSON/docstring_struct.sol diff --git a/test/libsolidity/syntaxTests/natspec/docstring_variable.sol b/test/libsolidity/natspecJSON/docstring_variable.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/docstring_variable.sol rename to test/libsolidity/natspecJSON/docstring_variable.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_author_function.sol b/test/libsolidity/natspecJSON/invalid/docstring_author_function.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_author_function.sol rename to test/libsolidity/natspecJSON/invalid/docstring_author_function.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_author_title_state_variable.sol b/test/libsolidity/natspecJSON/invalid/docstring_author_title_state_variable.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_author_title_state_variable.sol rename to test/libsolidity/natspecJSON/invalid/docstring_author_title_state_variable.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_empty_description.sol b/test/libsolidity/natspecJSON/invalid/docstring_empty_description.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_empty_description.sol rename to test/libsolidity/natspecJSON/invalid/docstring_empty_description.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_empty_tag.sol b/test/libsolidity/natspecJSON/invalid/docstring_empty_tag.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_empty_tag.sol rename to test/libsolidity/natspecJSON/invalid/docstring_empty_tag.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inherit_modifier_no_return.sol b/test/libsolidity/natspecJSON/invalid/docstring_inherit_modifier_no_return.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inherit_modifier_no_return.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inherit_modifier_no_return.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inherit_modifier_no_return2.sol b/test/libsolidity/natspecJSON/invalid/docstring_inherit_modifier_no_return2.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inherit_modifier_no_return2.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inherit_modifier_no_return2.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc2.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc2.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc2.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc2.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc3.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc3.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc3.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc3.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_emptys.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_emptys.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_emptys.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_emptys.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_twice.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_twice.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_twice.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_twice.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_wrong_type.sol b/test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_wrong_type.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_inheritdoc_wrong_type.sol rename to test/libsolidity/natspecJSON/invalid/docstring_inheritdoc_wrong_type.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_named_return_param_mismatch.sol b/test/libsolidity/natspecJSON/invalid/docstring_named_return_param_mismatch.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_named_return_param_mismatch.sol rename to test/libsolidity/natspecJSON/invalid/docstring_named_return_param_mismatch.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_non_public_state_variable_with_return.sol b/test/libsolidity/natspecJSON/invalid/docstring_non_public_state_variable_with_return.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_non_public_state_variable_with_return.sol rename to test/libsolidity/natspecJSON/invalid/docstring_non_public_state_variable_with_return.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_parameter.sol b/test/libsolidity/natspecJSON/invalid/docstring_parameter.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_parameter.sol rename to test/libsolidity/natspecJSON/invalid/docstring_parameter.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_return_size_mismatch.sol b/test/libsolidity/natspecJSON/invalid/docstring_return_size_mismatch.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_return_size_mismatch.sol rename to test/libsolidity/natspecJSON/invalid/docstring_return_size_mismatch.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_state_variable_too_many_return_tags.sol b/test/libsolidity/natspecJSON/invalid/docstring_state_variable_too_many_return_tags.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_state_variable_too_many_return_tags.sol rename to test/libsolidity/natspecJSON/invalid/docstring_state_variable_too_many_return_tags.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/docstring_too_many_return_tags.sol b/test/libsolidity/natspecJSON/invalid/docstring_too_many_return_tags.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/docstring_too_many_return_tags.sol rename to test/libsolidity/natspecJSON/invalid/docstring_too_many_return_tags.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/inherit_doc_events.sol b/test/libsolidity/natspecJSON/invalid/inherit_doc_events.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/inherit_doc_events.sol rename to test/libsolidity/natspecJSON/invalid/inherit_doc_events.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/invalid_tag.sol b/test/libsolidity/natspecJSON/invalid/invalid_tag.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/invalid_tag.sol rename to test/libsolidity/natspecJSON/invalid/invalid_tag.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/return_param_amount_differs.sol b/test/libsolidity/natspecJSON/return_param_amount_differs.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/return_param_amount_differs.sol rename to test/libsolidity/natspecJSON/return_param_amount_differs.sol diff --git a/test/libsolidity/syntaxTests/natspec/invalid/return_param_amount_differs2.sol b/test/libsolidity/natspecJSON/return_param_amount_differs2.sol similarity index 100% rename from test/libsolidity/syntaxTests/natspec/invalid/return_param_amount_differs2.sol rename to test/libsolidity/natspecJSON/return_param_amount_differs2.sol From b63a94031f424e0ca7ddb737430bf4930cb991c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Mon, 21 Aug 2023 11:29:36 +0200 Subject: [PATCH 8/8] Generate expectations for moved Natspec syntax tests --- .../natspecJSON/docstring_double_empty.sol | 14 +++++ .../natspecJSON/docstring_enum.sol | 14 +++++ .../docstring_named_return_parameter.sol | 23 ++++++++ .../natspecJSON/docstring_parameter.sol | 14 +++++ .../docstring_private_state_variable.sol | 21 +++++++ .../natspecJSON/docstring_state_variable.sol | 27 +++++++++ .../natspecJSON/docstring_struct.sol | 14 +++++ .../natspecJSON/docstring_variable.sol | 14 +++++ .../return_param_amount_differs.sol | 50 ++++++++++++++++ .../return_param_amount_differs2.sol | 57 +++++++++++++++++++ 10 files changed, 248 insertions(+) diff --git a/test/libsolidity/natspecJSON/docstring_double_empty.sol b/test/libsolidity/natspecJSON/docstring_double_empty.sol index a84d5d928..16222d0ac 100644 --- a/test/libsolidity/natspecJSON/docstring_double_empty.sol +++ b/test/libsolidity/natspecJSON/docstring_double_empty.sol @@ -5,3 +5,17 @@ contract C { } } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_enum.sol b/test/libsolidity/natspecJSON/docstring_enum.sol index d80484446..d5ace6b14 100644 --- a/test/libsolidity/natspecJSON/docstring_enum.sol +++ b/test/libsolidity/natspecJSON/docstring_enum.sol @@ -9,3 +9,17 @@ contract C { } } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_named_return_parameter.sol b/test/libsolidity/natspecJSON/docstring_named_return_parameter.sol index b7cbad677..01e0368d4 100644 --- a/test/libsolidity/natspecJSON/docstring_named_return_parameter.sol +++ b/test/libsolidity/natspecJSON/docstring_named_return_parameter.sol @@ -3,3 +3,26 @@ abstract contract C { function vote() public virtual returns (uint value); } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": +// { +// "vote()": +// { +// "returns": +// { +// "value": "The value returned by this function." +// } +// } +// }, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_parameter.sol b/test/libsolidity/natspecJSON/docstring_parameter.sol index 84a2c2ae0..deacbbcaa 100644 --- a/test/libsolidity/natspecJSON/docstring_parameter.sol +++ b/test/libsolidity/natspecJSON/docstring_parameter.sol @@ -10,3 +10,17 @@ contract C { } } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_private_state_variable.sol b/test/libsolidity/natspecJSON/docstring_private_state_variable.sol index 5b6cfcce4..2ea1747e0 100644 --- a/test/libsolidity/natspecJSON/docstring_private_state_variable.sol +++ b/test/libsolidity/natspecJSON/docstring_private_state_variable.sol @@ -4,3 +4,24 @@ contract C { uint private state; } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "state": +// { +// "details": "example of dev" +// } +// }, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_state_variable.sol b/test/libsolidity/natspecJSON/docstring_state_variable.sol index deb7bf22c..5627c2060 100644 --- a/test/libsolidity/natspecJSON/docstring_state_variable.sol +++ b/test/libsolidity/natspecJSON/docstring_state_variable.sol @@ -4,3 +4,30 @@ contract C { uint public state; } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "state": +// { +// "details": "example of dev" +// } +// }, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": +// { +// "state()": +// { +// "notice": "example of notice" +// } +// }, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_struct.sol b/test/libsolidity/natspecJSON/docstring_struct.sol index 621a88a53..91e5802dd 100644 --- a/test/libsolidity/natspecJSON/docstring_struct.sol +++ b/test/libsolidity/natspecJSON/docstring_struct.sol @@ -10,3 +10,17 @@ contract C { } } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/docstring_variable.sol b/test/libsolidity/natspecJSON/docstring_variable.sol index ccbd4c8a5..66a143ff8 100644 --- a/test/libsolidity/natspecJSON/docstring_variable.sol +++ b/test/libsolidity/natspecJSON/docstring_variable.sol @@ -11,3 +11,17 @@ contract C { } } // ---- +// ---- +// :C devdoc +// { +// "kind": "dev", +// "methods": {}, +// "version": 1 +// } +// +// :C userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/return_param_amount_differs.sol b/test/libsolidity/natspecJSON/return_param_amount_differs.sol index 7e40b10b9..2d18ce8a1 100644 --- a/test/libsolidity/natspecJSON/return_param_amount_differs.sol +++ b/test/libsolidity/natspecJSON/return_param_amount_differs.sol @@ -12,3 +12,53 @@ contract Thing is IThing { Value public override value; } +// ---- +// ---- +// :IThing devdoc +// { +// "kind": "dev", +// "methods": +// { +// "value()": +// { +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// }, +// "version": 1 +// } +// +// :IThing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :Thing devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "value": +// { +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// }, +// "version": 1 +// } +// +// :Thing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } diff --git a/test/libsolidity/natspecJSON/return_param_amount_differs2.sol b/test/libsolidity/natspecJSON/return_param_amount_differs2.sol index cffe2b390..e10802c10 100644 --- a/test/libsolidity/natspecJSON/return_param_amount_differs2.sol +++ b/test/libsolidity/natspecJSON/return_param_amount_differs2.sol @@ -14,3 +14,60 @@ contract Thing is IThing { mapping(uint256=>Value) public override value; } // ---- +// ---- +// :IThing devdoc +// { +// "kind": "dev", +// "methods": +// { +// "value(uint256)": +// { +// "params": +// { +// "v": "value to search for" +// }, +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// }, +// "version": 1 +// } +// +// :IThing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// } +// +// :Thing devdoc +// { +// "kind": "dev", +// "methods": {}, +// "stateVariables": +// { +// "value": +// { +// "params": +// { +// "v": "value to search for" +// }, +// "returns": +// { +// "x": "a number", +// "y": "another number" +// } +// } +// }, +// "version": 1 +// } +// +// :Thing userdoc +// { +// "kind": "user", +// "methods": {}, +// "version": 1 +// }