Report when no contracts to compile

updates
This commit is contained in:
andy53
2022-12-19 13:47:03 +01:00
committed by Nikola Matic
parent 73fcf69188
commit 3bc535e1a1
6 changed files with 91 additions and 3 deletions
+5
View File
@@ -225,6 +225,11 @@ EOF
sed -i.bak -e 's/ Consider adding "pragma .*$//' "$stderr_path"
sed -i.bak -e 's/\(Unimplemented feature error.* in \).*$/\1<FILENAME REMOVED>/' "$stderr_path"
sed -i.bak -e 's/"version":[ ]*"[^"]*"/"version": "<VERSION REMOVED>"/' "$stdout_path"
if [[ $stdout_expectation_file != "" && $stderr_expectation_file != "" ]]
then
sed -i.bak -e '/^Compiler run successful\. No contracts to compile\.$/d' "$stdout_path"
sed -i.bak -e '/^Compiler run successful\. No output generated\.$/d' "$stdout_path"
fi
# Remove bytecode (but not linker references). Since non-JSON output is unstructured,
# use metadata markers for detection to have some confidence that it's actually bytecode
@@ -0,0 +1 @@
--combined-json ast --pretty-json --json-indent 4
@@ -0,0 +1,2 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
@@ -0,0 +1,36 @@
{
"sourceList":
[
"no_contract_combined_json/input.sol"
],
"sources":
{
"no_contract_combined_json/input.sol":
{
"AST":
{
"absolutePath": "no_contract_combined_json/input.sol",
"exportedSymbols": {},
"id": 2,
"license": "GPL-3.0",
"nodeType": "SourceUnit",
"nodes":
[
{
"id": 1,
"literals":
[
"solidity",
">=",
"0.0"
],
"nodeType": "PragmaDirective",
"src": "36:22:0"
}
],
"src": "36:22:0"
}
}
},
"version": "<VERSION REMOVED>"
}
+44 -1
View File
@@ -25,6 +25,7 @@
#include <test/Common.h>
#include <test/libsolidity/util/SoltestErrors.h>
#include <liblangutil/SemVerHandler.h>
#include <test/FilesystemUtils.h>
#include <libsolutil/JSON.h>
@@ -44,6 +45,7 @@ using namespace std;
using namespace solidity::frontend;
using namespace solidity::test;
using namespace solidity::util;
using namespace solidity::langutil;
using PathSet = set<boost::filesystem::path>;
@@ -1006,10 +1008,14 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
canonicalWorkDir / "lib",
};
string const expectedStdoutContent = "Compiler run successful. No contracts to compile.\n";
OptionsReaderAndMessages result = runCLI(commandLine, "");
BOOST_TEST(result.stderrContent == "");
BOOST_TEST(result.stdoutContent == "");
if (SemVerVersion{string(VersionString)}.isPrerelease())
BOOST_TEST(result.stdoutContent == "");
else
BOOST_TEST(result.stdoutContent == expectedStdoutContent);
BOOST_REQUIRE(result.success);
BOOST_TEST(result.options == expectedOptions);
BOOST_TEST(result.reader.sourceUnits() == expectedSources);
@@ -1018,6 +1024,43 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
BOOST_TEST(result.reader.basePath() == expectedWorkDir / "base/");
}
BOOST_AUTO_TEST_CASE(cli_no_contracts_to_compile)
{
string const contractSource = R"(
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
enum Status { test }
)";
string const expectedStdoutContent = "Compiler run successful. No contracts to compile.\n";
OptionsReaderAndMessages result = runCLI({"solc", "-"}, contractSource);
if (SemVerVersion{string(VersionString)}.isPrerelease())
BOOST_TEST(result.stdoutContent == "");
else
BOOST_TEST(result.stdoutContent == expectedStdoutContent);
BOOST_REQUIRE(result.success);
}
BOOST_AUTO_TEST_CASE(cli_no_output)
{
string const contractSource = R"(
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.0;
abstract contract A {
function B() public virtual returns(uint);
})";
string const expectedStdoutContent = "Compiler run successful. No output generated.\n";
OptionsReaderAndMessages result = runCLI({"solc", "-"}, contractSource);
if (SemVerVersion{string(VersionString)}.isPrerelease())
BOOST_TEST(result.stdoutContent == "");
else
BOOST_TEST(result.stdoutContent == expectedStdoutContent);
BOOST_REQUIRE(result.success);
}
BOOST_AUTO_TEST_CASE(standard_json_include_paths)
{
TemporaryDirectory tempDir({"base/", "include/", "lib/nested/"}, TEST_CASE_NAME);