mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #14480 from ethereum/refactor-preamble
Unify preamble injection in `AnalysisFramework`
This commit is contained in:
commit
ef5f131862
@ -112,6 +112,8 @@ set(libsolidity_util_sources
|
|||||||
libsolidity/util/BytesUtils.cpp
|
libsolidity/util/BytesUtils.cpp
|
||||||
libsolidity/util/BytesUtilsTests.cpp
|
libsolidity/util/BytesUtilsTests.cpp
|
||||||
libsolidity/util/BytesUtils.h
|
libsolidity/util/BytesUtils.h
|
||||||
|
libsolidity/util/Common.cpp
|
||||||
|
libsolidity/util/Common.h
|
||||||
libsolidity/util/ContractABIUtils.cpp
|
libsolidity/util/ContractABIUtils.cpp
|
||||||
libsolidity/util/ContractABIUtils.h
|
libsolidity/util/ContractABIUtils.h
|
||||||
libsolidity/util/SoltestErrors.h
|
libsolidity/util/SoltestErrors.h
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <test/libsolidity/AnalysisFramework.h>
|
#include <test/libsolidity/AnalysisFramework.h>
|
||||||
|
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
#include <test/Common.h>
|
#include <test/Common.h>
|
||||||
|
|
||||||
#include <libsolidity/interface/CompilerStack.h>
|
#include <libsolidity/interface/CompilerStack.h>
|
||||||
@ -51,13 +52,7 @@ AnalysisFramework::parseAnalyseAndReturnError(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
compiler().reset();
|
compiler().reset();
|
||||||
// Do not insert license if it is already present.
|
compiler().setSources({{"", _insertLicenseAndVersionPragma ? withPreamble(_source) : _source}});
|
||||||
bool insertLicense = _insertLicenseAndVersionPragma && _source.find("// SPDX-License-Identifier:") == string::npos;
|
|
||||||
compiler().setSources({{"",
|
|
||||||
string{_insertLicenseAndVersionPragma ? "pragma solidity >=0.0;\n" : ""} +
|
|
||||||
string{insertLicense ? "// SPDX-License-Identifier: GPL-3.0\n" : ""} +
|
|
||||||
_source
|
|
||||||
}});
|
|
||||||
compiler().setEVMVersion(solidity::test::CommonOptions::get().evmVersion());
|
compiler().setEVMVersion(solidity::test::CommonOptions::get().evmVersion());
|
||||||
compiler().setParserErrorRecovery(_allowRecoveryErrors);
|
compiler().setParserErrorRecovery(_allowRecoveryErrors);
|
||||||
_allowMultipleErrors = _allowMultipleErrors || _allowRecoveryErrors;
|
_allowMultipleErrors = _allowMultipleErrors || _allowRecoveryErrors;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-3.0
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
|
||||||
#include <test/libsolidity/GasTest.h>
|
#include <test/libsolidity/GasTest.h>
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
#include <test/Common.h>
|
#include <test/Common.h>
|
||||||
#include <libsolutil/CommonIO.h>
|
#include <libsolutil/CommonIO.h>
|
||||||
#include <libsolutil/JSON.h>
|
#include <libsolutil/JSON.h>
|
||||||
@ -99,7 +100,6 @@ void GasTest::printUpdatedExpectations(ostream& _stream, string const& _linePref
|
|||||||
|
|
||||||
TestCase::TestResult GasTest::run(ostream& _stream, string const& _linePrefix, bool _formatted)
|
TestCase::TestResult GasTest::run(ostream& _stream, string const& _linePrefix, bool _formatted)
|
||||||
{
|
{
|
||||||
string const preamble = "pragma solidity >=0.0;\n// SPDX-License-Identifier: GPL-3.0\n";
|
|
||||||
compiler().reset();
|
compiler().reset();
|
||||||
// Prerelease CBOR metadata varies in size due to changing version numbers and build dates.
|
// Prerelease CBOR metadata varies in size due to changing version numbers and build dates.
|
||||||
// This leads to volatile creation cost estimates. Therefore we force the compiler to
|
// This leads to volatile creation cost estimates. Therefore we force the compiler to
|
||||||
@ -113,7 +113,7 @@ TestCase::TestResult GasTest::run(ostream& _stream, string const& _linePrefix, b
|
|||||||
}
|
}
|
||||||
settings.expectedExecutionsPerDeployment = m_optimiseRuns;
|
settings.expectedExecutionsPerDeployment = m_optimiseRuns;
|
||||||
compiler().setOptimiserSettings(settings);
|
compiler().setOptimiserSettings(settings);
|
||||||
compiler().setSources({{"", preamble + m_source}});
|
compiler().setSources({{"", withPreamble(m_source)}});
|
||||||
|
|
||||||
if (!compiler().parseAndAnalyze() || !compiler().compile())
|
if (!compiler().parseAndAnalyze() || !compiler().compile())
|
||||||
{
|
{
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
|
|
||||||
#include <liblangutil/DebugInfoSelection.h>
|
#include <liblangutil/DebugInfoSelection.h>
|
||||||
#include <liblangutil/Exceptions.h>
|
#include <liblangutil/Exceptions.h>
|
||||||
@ -48,12 +49,12 @@ bytes SolidityExecutionFramework::multiSourceCompileContract(
|
|||||||
{
|
{
|
||||||
if (_mainSourceName.has_value())
|
if (_mainSourceName.has_value())
|
||||||
solAssert(_sourceCode.find(_mainSourceName.value()) != _sourceCode.end(), "");
|
solAssert(_sourceCode.find(_mainSourceName.value()) != _sourceCode.end(), "");
|
||||||
map<string, string> sourcesWithPreamble = _sourceCode;
|
|
||||||
for (auto& entry: sourcesWithPreamble)
|
|
||||||
entry.second = addPreamble(entry.second);
|
|
||||||
|
|
||||||
m_compiler.reset();
|
m_compiler.reset();
|
||||||
m_compiler.setSources(sourcesWithPreamble);
|
m_compiler.setSources(withPreamble(
|
||||||
|
_sourceCode,
|
||||||
|
solidity::test::CommonOptions::get().useABIEncoderV1 // _addAbicoderV1Pragma
|
||||||
|
));
|
||||||
m_compiler.setLibraries(_libraryAddresses);
|
m_compiler.setLibraries(_libraryAddresses);
|
||||||
m_compiler.setRevertStringBehaviour(m_revertStrings);
|
m_compiler.setRevertStringBehaviour(m_revertStrings);
|
||||||
m_compiler.setEVMVersion(m_evmVersion);
|
m_compiler.setEVMVersion(m_evmVersion);
|
||||||
@ -141,18 +142,3 @@ bytes SolidityExecutionFramework::compileContract(
|
|||||||
_libraryAddresses
|
_libraryAddresses
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
string SolidityExecutionFramework::addPreamble(string const& _sourceCode)
|
|
||||||
{
|
|
||||||
// Silence compiler version warning
|
|
||||||
string preamble = "pragma solidity >=0.0;\n";
|
|
||||||
if (_sourceCode.find("// SPDX-License-Identifier:") == string::npos)
|
|
||||||
preamble += "// SPDX-License-Identifier: unlicensed\n";
|
|
||||||
if (
|
|
||||||
solidity::test::CommonOptions::get().useABIEncoderV1 &&
|
|
||||||
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos &&
|
|
||||||
_sourceCode.find("pragma abicoder") == string::npos
|
|
||||||
)
|
|
||||||
preamble += "pragma abicoder v1;\n";
|
|
||||||
return preamble + _sourceCode;
|
|
||||||
}
|
|
||||||
|
@ -79,9 +79,6 @@ public:
|
|||||||
std::map<std::string, solidity::test::Address> const& _libraryAddresses = {}
|
std::map<std::string, solidity::test::Address> const& _libraryAddresses = {}
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Returns @param _sourceCode prefixed with the version pragma and the abi coder v1 pragma,
|
|
||||||
/// the latter only if it is forced.
|
|
||||||
static std::string addPreamble(std::string const& _sourceCode);
|
|
||||||
protected:
|
protected:
|
||||||
using CompilerStack = solidity::frontend::CompilerStack;
|
using CompilerStack = solidity::frontend::CompilerStack;
|
||||||
std::optional<uint8_t> m_eofVersion;
|
std::optional<uint8_t> m_eofVersion;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <test/libsolidity/SyntaxTest.h>
|
#include <test/libsolidity/SyntaxTest.h>
|
||||||
|
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
#include <test/Common.h>
|
#include <test/Common.h>
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
@ -43,24 +44,10 @@ SyntaxTest::SyntaxTest(string const& _filename, langutil::EVMVersion _evmVersion
|
|||||||
m_parserErrorRecovery = _parserErrorRecovery;
|
m_parserErrorRecovery = _parserErrorRecovery;
|
||||||
}
|
}
|
||||||
|
|
||||||
string SyntaxTest::addPreamble(string const& _sourceCode)
|
|
||||||
{
|
|
||||||
// Silence compiler version warning
|
|
||||||
string preamble = "pragma solidity >=0.0;\n";
|
|
||||||
// NOTE: this check is intentionally loose to match weird cases.
|
|
||||||
// We can manually adjust a test case where this causes problem.
|
|
||||||
if (_sourceCode.find("SPDX-License-Identifier:") == string::npos)
|
|
||||||
preamble += "// SPDX-License-Identifier: GPL-3.0\n";
|
|
||||||
return preamble + _sourceCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SyntaxTest::setupCompiler()
|
void SyntaxTest::setupCompiler()
|
||||||
{
|
{
|
||||||
compiler().reset();
|
compiler().reset();
|
||||||
auto sourcesWithPragma = m_sources.sources;
|
compiler().setSources(withPreamble(m_sources.sources));
|
||||||
for (auto& source: sourcesWithPragma)
|
|
||||||
source.second = addPreamble(source.second);
|
|
||||||
compiler().setSources(sourcesWithPragma);
|
|
||||||
compiler().setEVMVersion(m_evmVersion);
|
compiler().setEVMVersion(m_evmVersion);
|
||||||
compiler().setParserErrorRecovery(m_parserErrorRecovery);
|
compiler().setParserErrorRecovery(m_parserErrorRecovery);
|
||||||
compiler().setOptimiserSettings(
|
compiler().setOptimiserSettings(
|
||||||
|
@ -48,9 +48,6 @@ public:
|
|||||||
SyntaxTest(std::string const& _filename, langutil::EVMVersion _evmVersion, bool _parserErrorRecovery = false);
|
SyntaxTest(std::string const& _filename, langutil::EVMVersion _evmVersion, bool _parserErrorRecovery = false);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Returns @param _sourceCode prefixed with the version pragma and the SPDX license identifier.
|
|
||||||
static std::string addPreamble(std::string const& _sourceCode);
|
|
||||||
|
|
||||||
virtual void setupCompiler();
|
virtual void setupCompiler();
|
||||||
void parseAndAnalyze() override;
|
void parseAndAnalyze() override;
|
||||||
virtual void filterObtainedErrors();
|
virtual void filterObtainedErrors();
|
||||||
|
67
test/libsolidity/util/Common.cpp
Normal file
67
test/libsolidity/util/Common.cpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace solidity;
|
||||||
|
using namespace solidity::frontend;
|
||||||
|
|
||||||
|
string test::withPreamble(string const& _sourceCode, bool _addAbicoderV1Pragma)
|
||||||
|
{
|
||||||
|
static string const versionPragma = "pragma solidity >=0.0;\n";
|
||||||
|
static string const licenseComment = "// SPDX-License-Identifier: GPL-3.0\n";
|
||||||
|
static string const abicoderPragma = "pragma abicoder v1;\n";
|
||||||
|
|
||||||
|
// NOTE: These checks are intentionally loose to match weird cases.
|
||||||
|
// We can manually adjust a test case where this causes problem.
|
||||||
|
bool licenseMissing = _sourceCode.find("SPDX-License-Identifier:") == string::npos;
|
||||||
|
bool abicoderMissing =
|
||||||
|
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos &&
|
||||||
|
_sourceCode.find("pragma abicoder") == string::npos;
|
||||||
|
|
||||||
|
return
|
||||||
|
versionPragma +
|
||||||
|
(licenseMissing ? licenseComment : "") +
|
||||||
|
(abicoderMissing && _addAbicoderV1Pragma ? abicoderPragma : "") +
|
||||||
|
_sourceCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringMap test::withPreamble(StringMap _sources, bool _addAbicoderV1Pragma)
|
||||||
|
{
|
||||||
|
for (auto&& [sourceName, source]: _sources)
|
||||||
|
source = withPreamble(source, _addAbicoderV1Pragma);
|
||||||
|
|
||||||
|
return _sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
string test::stripPreReleaseWarning(string const& _stderrContent)
|
||||||
|
{
|
||||||
|
static regex const preReleaseWarningRegex{
|
||||||
|
R"(Warning( \(3805\))?: This is a pre-release compiler version, please do not use it in production\.\n)"
|
||||||
|
R"((\n)?)"
|
||||||
|
};
|
||||||
|
static regex const noOutputRegex{
|
||||||
|
R"(Compiler run successful, no output requested\.\n)"
|
||||||
|
};
|
||||||
|
|
||||||
|
string output = regex_replace(_stderrContent, preReleaseWarningRegex, "");
|
||||||
|
return regex_replace(std::move(output), noOutputRegex, "");
|
||||||
|
}
|
37
test/libsolidity/util/Common.h
Normal file
37
test/libsolidity/util/Common.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
|
||||||
|
/// Utilities shared by multiple libsolidity tests.
|
||||||
|
|
||||||
|
#include <libsolidity/interface/CompilerStack.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace solidity::frontend::test
|
||||||
|
{
|
||||||
|
|
||||||
|
/// @returns @p _sourceCode prefixed with the version pragma and the SPDX license identifier.
|
||||||
|
/// Can optionally also insert an abicoder pragma when missing.
|
||||||
|
std::string withPreamble(std::string const& _sourceCode, bool _addAbicoderV1Pragma = false);
|
||||||
|
|
||||||
|
/// @returns a copy of @p _sources with preamble prepended to all sources.
|
||||||
|
StringMap withPreamble(StringMap _sources, bool _addAbicoderV1Pragma = false);
|
||||||
|
|
||||||
|
std::string stripPreReleaseWarning(std::string const& _stderrContent);
|
||||||
|
|
||||||
|
} // namespace solidity::frontend::test
|
@ -24,6 +24,7 @@
|
|||||||
#include <test/solc/Common.h>
|
#include <test/solc/Common.h>
|
||||||
|
|
||||||
#include <test/Common.h>
|
#include <test/Common.h>
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
#include <test/libsolidity/util/SoltestErrors.h>
|
#include <test/libsolidity/util/SoltestErrors.h>
|
||||||
#include <liblangutil/SemVerHandler.h>
|
#include <liblangutil/SemVerHandler.h>
|
||||||
#include <test/FilesystemUtils.h>
|
#include <test/FilesystemUtils.h>
|
||||||
@ -921,10 +922,7 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
|
|||||||
TemporaryDirectory tempDir({"base/", "include/", "lib/nested/"}, TEST_CASE_NAME);
|
TemporaryDirectory tempDir({"base/", "include/", "lib/nested/"}, TEST_CASE_NAME);
|
||||||
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
||||||
|
|
||||||
string const preamble =
|
string const mainContractSource = withPreamble(
|
||||||
"// SPDX-License-Identifier: GPL-3.0\n"
|
|
||||||
"pragma solidity >=0.0;\n";
|
|
||||||
string const mainContractSource = preamble +
|
|
||||||
"import \"contract.sol\";\n"
|
"import \"contract.sol\";\n"
|
||||||
"import \"contract_via_callback.sol\";\n"
|
"import \"contract_via_callback.sol\";\n"
|
||||||
"import \"include.sol\";\n"
|
"import \"include.sol\";\n"
|
||||||
@ -932,8 +930,10 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
|
|||||||
"import \"nested.sol\";\n"
|
"import \"nested.sol\";\n"
|
||||||
"import \"nested_via_callback.sol\";\n"
|
"import \"nested_via_callback.sol\";\n"
|
||||||
"import \"lib.sol\";\n"
|
"import \"lib.sol\";\n"
|
||||||
"import \"lib_via_callback.sol\";\n";
|
"import \"lib_via_callback.sol\";\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
string const onlyPreamble = withPreamble("");
|
||||||
createFilesWithParentDirs(
|
createFilesWithParentDirs(
|
||||||
{
|
{
|
||||||
tempDir.path() / "base/contract.sol",
|
tempDir.path() / "base/contract.sol",
|
||||||
@ -945,7 +945,7 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
|
|||||||
tempDir.path() / "lib/lib.sol",
|
tempDir.path() / "lib/lib.sol",
|
||||||
tempDir.path() / "lib/lib_via_callback.sol",
|
tempDir.path() / "lib/lib_via_callback.sol",
|
||||||
},
|
},
|
||||||
preamble
|
onlyPreamble
|
||||||
);
|
);
|
||||||
createFilesWithParentDirs({tempDir.path() / "base/main.sol"}, mainContractSource);
|
createFilesWithParentDirs({tempDir.path() / "base/main.sol"}, mainContractSource);
|
||||||
|
|
||||||
@ -985,14 +985,14 @@ BOOST_AUTO_TEST_CASE(cli_include_paths)
|
|||||||
|
|
||||||
map<string, string> expectedSources = {
|
map<string, string> expectedSources = {
|
||||||
{"main.sol", mainContractSource},
|
{"main.sol", mainContractSource},
|
||||||
{"contract.sol", preamble},
|
{"contract.sol", onlyPreamble},
|
||||||
{"contract_via_callback.sol", preamble},
|
{"contract_via_callback.sol", onlyPreamble},
|
||||||
{"include.sol", preamble},
|
{"include.sol", onlyPreamble},
|
||||||
{"include_via_callback.sol", preamble},
|
{"include_via_callback.sol", onlyPreamble},
|
||||||
{"nested.sol", preamble},
|
{"nested.sol", onlyPreamble},
|
||||||
{"nested_via_callback.sol", preamble},
|
{"nested_via_callback.sol", onlyPreamble},
|
||||||
{"lib.sol", preamble},
|
{"lib.sol", onlyPreamble},
|
||||||
{"lib_via_callback.sol", preamble},
|
{"lib_via_callback.sol", onlyPreamble},
|
||||||
};
|
};
|
||||||
|
|
||||||
vector<boost::filesystem::path> expectedIncludePaths = {
|
vector<boost::filesystem::path> expectedIncludePaths = {
|
||||||
@ -1066,14 +1066,12 @@ BOOST_AUTO_TEST_CASE(standard_json_include_paths)
|
|||||||
TemporaryDirectory tempDir({"base/", "include/", "lib/nested/"}, TEST_CASE_NAME);
|
TemporaryDirectory tempDir({"base/", "include/", "lib/nested/"}, TEST_CASE_NAME);
|
||||||
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
||||||
|
|
||||||
string const preamble =
|
string const mainContractSource = withPreamble(
|
||||||
"// SPDX-License-Identifier: GPL-3.0\n"
|
|
||||||
"pragma solidity >=0.0;\n";
|
|
||||||
string const mainContractSource = preamble +
|
|
||||||
"import 'contract_via_callback.sol';\n"
|
"import 'contract_via_callback.sol';\n"
|
||||||
"import 'include_via_callback.sol';\n"
|
"import 'include_via_callback.sol';\n"
|
||||||
"import 'nested_via_callback.sol';\n"
|
"import 'nested_via_callback.sol';\n"
|
||||||
"import 'lib_via_callback.sol';\n";
|
"import 'lib_via_callback.sol';\n"
|
||||||
|
);
|
||||||
|
|
||||||
string const standardJsonInput = R"(
|
string const standardJsonInput = R"(
|
||||||
{
|
{
|
||||||
@ -1084,6 +1082,7 @@ BOOST_AUTO_TEST_CASE(standard_json_include_paths)
|
|||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
|
|
||||||
|
string const onlyPreamble = withPreamble("");
|
||||||
createFilesWithParentDirs(
|
createFilesWithParentDirs(
|
||||||
{
|
{
|
||||||
tempDir.path() / "base/contract_via_callback.sol",
|
tempDir.path() / "base/contract_via_callback.sol",
|
||||||
@ -1091,7 +1090,7 @@ BOOST_AUTO_TEST_CASE(standard_json_include_paths)
|
|||||||
tempDir.path() / "lib/nested/nested_via_callback.sol",
|
tempDir.path() / "lib/nested/nested_via_callback.sol",
|
||||||
tempDir.path() / "lib/lib_via_callback.sol",
|
tempDir.path() / "lib/lib_via_callback.sol",
|
||||||
},
|
},
|
||||||
preamble
|
onlyPreamble
|
||||||
);
|
);
|
||||||
|
|
||||||
boost::filesystem::path expectedWorkDir = "/" / boost::filesystem::canonical(tempDir).relative_path();
|
boost::filesystem::path expectedWorkDir = "/" / boost::filesystem::canonical(tempDir).relative_path();
|
||||||
@ -1121,10 +1120,10 @@ BOOST_AUTO_TEST_CASE(standard_json_include_paths)
|
|||||||
// because FileReader is only used once to initialize the compiler stack and after that
|
// because FileReader is only used once to initialize the compiler stack and after that
|
||||||
// its sources are irrelevant (even though the callback still stores everything it loads).
|
// its sources are irrelevant (even though the callback still stores everything it loads).
|
||||||
map<string, string> expectedSources = {
|
map<string, string> expectedSources = {
|
||||||
{"contract_via_callback.sol", preamble},
|
{"contract_via_callback.sol", onlyPreamble},
|
||||||
{"include_via_callback.sol", preamble},
|
{"include_via_callback.sol", onlyPreamble},
|
||||||
{"nested_via_callback.sol", preamble},
|
{"nested_via_callback.sol", onlyPreamble},
|
||||||
{"lib_via_callback.sol", preamble},
|
{"lib_via_callback.sol", onlyPreamble},
|
||||||
};
|
};
|
||||||
|
|
||||||
vector<boost::filesystem::path> expectedIncludePaths = {
|
vector<boost::filesystem::path> expectedIncludePaths = {
|
||||||
@ -1335,14 +1334,10 @@ BOOST_AUTO_TEST_CASE(cli_include_paths_ambiguous_import)
|
|||||||
TemporaryDirectory tempDir({"base/", "include/"}, TEST_CASE_NAME);
|
TemporaryDirectory tempDir({"base/", "include/"}, TEST_CASE_NAME);
|
||||||
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
TemporaryWorkingDirectory tempWorkDir(tempDir);
|
||||||
|
|
||||||
string const preamble =
|
// Ambiguous: both base/contract.sol and include/contract.sol match the import.
|
||||||
"// SPDX-License-Identifier: GPL-3.0\n"
|
string const mainContractSource = withPreamble("import \"contract.sol\";");
|
||||||
"pragma solidity >=0.0;\n";
|
|
||||||
string const mainContractSource = preamble +
|
|
||||||
// Ambiguous: both base/contract.sol and include/contract.sol match the import.
|
|
||||||
"import \"contract.sol\";";
|
|
||||||
|
|
||||||
createFilesWithParentDirs({"base/contract.sol", "include/contract.sol"}, preamble);
|
createFilesWithParentDirs({"base/contract.sol", "include/contract.sol"}, withPreamble(""));
|
||||||
|
|
||||||
boost::filesystem::path expectedWorkDir = "/" / boost::filesystem::canonical(tempDir).relative_path();
|
boost::filesystem::path expectedWorkDir = "/" / boost::filesystem::canonical(tempDir).relative_path();
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-3.0
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
|
||||||
#include <test/solc/Common.h>
|
#include <test/solc/Common.h>
|
||||||
|
#include <test/libsolidity/util/Common.h>
|
||||||
|
|
||||||
#include <solc/CommandLineInterface.h>
|
#include <solc/CommandLineInterface.h>
|
||||||
|
|
||||||
@ -79,17 +80,3 @@ test::OptionsReaderAndMessages test::runCLI(
|
|||||||
stripPreReleaseWarning(serr.str()),
|
stripPreReleaseWarning(serr.str()),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
string test::stripPreReleaseWarning(string const& _stderrContent)
|
|
||||||
{
|
|
||||||
static regex const preReleaseWarningRegex{
|
|
||||||
R"(Warning( \(3805\))?: This is a pre-release compiler version, please do not use it in production\.\n)"
|
|
||||||
R"((\n)?)"
|
|
||||||
};
|
|
||||||
static regex const noOutputRegex{
|
|
||||||
R"(Compiler run successful, no output requested\.\n)"
|
|
||||||
};
|
|
||||||
|
|
||||||
string output = regex_replace(_stderrContent, preReleaseWarningRegex, "");
|
|
||||||
return regex_replace(std::move(output), noOutputRegex, "");
|
|
||||||
}
|
|
||||||
|
@ -67,6 +67,4 @@ OptionsReaderAndMessages runCLI(
|
|||||||
std::string const& _standardInputContent = ""
|
std::string const& _standardInputContent = ""
|
||||||
);
|
);
|
||||||
|
|
||||||
std::string stripPreReleaseWarning(std::string const& _stderrContent);
|
|
||||||
|
|
||||||
} // namespace solidity::frontend::test
|
} // namespace solidity::frontend::test
|
||||||
|
@ -19,6 +19,7 @@ add_executable(isoltest
|
|||||||
../TestCase.cpp
|
../TestCase.cpp
|
||||||
../TestCaseReader.cpp
|
../TestCaseReader.cpp
|
||||||
../libsolidity/util/BytesUtils.cpp
|
../libsolidity/util/BytesUtils.cpp
|
||||||
|
../libsolidity/util/Common.cpp
|
||||||
../libsolidity/util/ContractABIUtils.cpp
|
../libsolidity/util/ContractABIUtils.cpp
|
||||||
../libsolidity/util/TestFileParser.cpp
|
../libsolidity/util/TestFileParser.cpp
|
||||||
../libsolidity/util/TestFunctionCall.cpp
|
../libsolidity/util/TestFunctionCall.cpp
|
||||||
|
Loading…
Reference in New Issue
Block a user