mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Combine test path discovery.
This commit is contained in:
parent
50247dc8d1
commit
9da62384ee
50
test/Common.cpp
Normal file
50
test/Common.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <test/Common.h>
|
||||||
|
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
|
namespace dev
|
||||||
|
{
|
||||||
|
namespace test
|
||||||
|
{
|
||||||
|
|
||||||
|
boost::filesystem::path discoverTestPath()
|
||||||
|
{
|
||||||
|
auto const searchPath =
|
||||||
|
{
|
||||||
|
fs::current_path() / ".." / ".." / ".." / "test",
|
||||||
|
fs::current_path() / ".." / ".." / "test",
|
||||||
|
fs::current_path() / ".." / "test",
|
||||||
|
fs::current_path() / "test",
|
||||||
|
fs::current_path()
|
||||||
|
};
|
||||||
|
for (auto const& basePath: searchPath)
|
||||||
|
{
|
||||||
|
fs::path syntaxTestPath = basePath / "libsolidity" / "syntaxTests";
|
||||||
|
if (fs::exists(syntaxTestPath) && fs::is_directory(syntaxTestPath))
|
||||||
|
return basePath;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
35
test/Common.h
Normal file
35
test/Common.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
namespace dev
|
||||||
|
{
|
||||||
|
namespace test
|
||||||
|
{
|
||||||
|
|
||||||
|
/// Tries to find a path that contains the directories "libsolidity/syntaxTests"
|
||||||
|
/// and returns it if found.
|
||||||
|
/// The routine searches in the current directory, and inside the "test" directory
|
||||||
|
/// starting from the current directory and up to three levels up.
|
||||||
|
/// @returns the path of the first match or an empty path if not found.
|
||||||
|
boost::filesystem::path discoverTestPath();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include <test/Options.h>
|
#include <test/Options.h>
|
||||||
|
|
||||||
|
#include <test/Common.h>
|
||||||
|
|
||||||
#include <libsolidity/interface/EVMVersion.h>
|
#include <libsolidity/interface/EVMVersion.h>
|
||||||
#include <libsolidity/interface/Exceptions.h>
|
#include <libsolidity/interface/Exceptions.h>
|
||||||
|
|
||||||
@ -74,25 +76,7 @@ Options::Options()
|
|||||||
testPath = path;
|
testPath = path;
|
||||||
|
|
||||||
if (testPath.empty())
|
if (testPath.empty())
|
||||||
{
|
testPath = discoverTestPath();
|
||||||
auto const searchPath =
|
|
||||||
{
|
|
||||||
fs::current_path() / ".." / ".." / ".." / "test",
|
|
||||||
fs::current_path() / ".." / ".." / "test",
|
|
||||||
fs::current_path() / ".." / "test",
|
|
||||||
fs::current_path() / "test",
|
|
||||||
fs::current_path()
|
|
||||||
};
|
|
||||||
for (auto const& basePath : searchPath)
|
|
||||||
{
|
|
||||||
fs::path syntaxTestPath = basePath / "libsolidity" / "syntaxTests";
|
|
||||||
if (fs::exists(syntaxTestPath) && fs::is_directory(syntaxTestPath))
|
|
||||||
{
|
|
||||||
testPath = basePath;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Options::validate() const
|
void Options::validate() const
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
add_executable(solfuzzer fuzzer.cpp)
|
add_executable(solfuzzer fuzzer.cpp)
|
||||||
target_link_libraries(solfuzzer PRIVATE libsolc evmasm ${Boost_PROGRAM_OPTIONS_LIBRARIES} ${Boost_SYSTEM_LIBRARIES})
|
target_link_libraries(solfuzzer PRIVATE libsolc evmasm ${Boost_PROGRAM_OPTIONS_LIBRARIES} ${Boost_SYSTEM_LIBRARIES})
|
||||||
|
|
||||||
add_executable(isoltest isoltest.cpp ../Options.cpp ../libsolidity/TestCase.cpp ../libsolidity/SyntaxTest.cpp
|
add_executable(isoltest isoltest.cpp ../Options.cpp ../Common.cpp ../libsolidity/TestCase.cpp ../libsolidity/SyntaxTest.cpp
|
||||||
../libsolidity/AnalysisFramework.cpp ../libsolidity/SolidityExecutionFramework.cpp ../ExecutionFramework.cpp
|
../libsolidity/AnalysisFramework.cpp ../libsolidity/SolidityExecutionFramework.cpp ../ExecutionFramework.cpp
|
||||||
../RPCSession.cpp ../libsolidity/ASTJSONTest.cpp)
|
../RPCSession.cpp ../libsolidity/ASTJSONTest.cpp)
|
||||||
target_link_libraries(isoltest PRIVATE libsolc solidity evmasm ${Boost_PROGRAM_OPTIONS_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES})
|
target_link_libraries(isoltest PRIVATE libsolc solidity evmasm ${Boost_PROGRAM_OPTIONS_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES})
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libdevcore/CommonIO.h>
|
#include <libdevcore/CommonIO.h>
|
||||||
|
|
||||||
|
#include <test/Common.h>
|
||||||
#include <test/libsolidity/AnalysisFramework.h>
|
#include <test/libsolidity/AnalysisFramework.h>
|
||||||
#include <test/libsolidity/SyntaxTest.h>
|
#include <test/libsolidity/SyntaxTest.h>
|
||||||
#include <test/libsolidity/ASTJSONTest.h>
|
#include <test/libsolidity/ASTJSONTest.h>
|
||||||
@ -47,7 +49,7 @@ struct TestStats
|
|||||||
int successCount;
|
int successCount;
|
||||||
int testCount;
|
int testCount;
|
||||||
operator bool() const { return successCount == testCount; }
|
operator bool() const { return successCount == testCount; }
|
||||||
TestStats& operator+=(TestStats const& _other)
|
TestStats& operator+=(TestStats const& _other) noexcept
|
||||||
{
|
{
|
||||||
successCount += _other.successCount;
|
successCount += _other.successCount;
|
||||||
testCount += _other.testCount;
|
testCount += _other.testCount;
|
||||||
@ -285,25 +287,6 @@ void setupTerminal()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
fs::path discoverTestPath()
|
|
||||||
{
|
|
||||||
auto const searchPath =
|
|
||||||
{
|
|
||||||
fs::current_path() / ".." / ".." / ".." / "test",
|
|
||||||
fs::current_path() / ".." / ".." / "test",
|
|
||||||
fs::current_path() / ".." / "test",
|
|
||||||
fs::current_path() / "test",
|
|
||||||
fs::current_path()
|
|
||||||
};
|
|
||||||
for (auto const& basePath: searchPath)
|
|
||||||
{
|
|
||||||
fs::path syntaxTestPath = basePath / "libsolidity" / "syntaxTests";
|
|
||||||
if (fs::exists(syntaxTestPath) && fs::is_directory(syntaxTestPath))
|
|
||||||
return basePath;
|
|
||||||
}
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::optional<TestStats> runTestSuite(
|
boost::optional<TestStats> runTestSuite(
|
||||||
string const& _name,
|
string const& _name,
|
||||||
fs::path const& _basePath,
|
fs::path const& _basePath,
|
||||||
@ -384,7 +367,7 @@ Allowed options)",
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (testPath.empty())
|
if (testPath.empty())
|
||||||
testPath = discoverTestPath();
|
testPath = dev::test::discoverTestPath();
|
||||||
|
|
||||||
TestStats global_stats{0, 0};
|
TestStats global_stats{0, 0};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user