interface: move searchForSubstring out of Error class into a separate file

This commit is contained in:
Yoichi Hirai 2016-11-24 16:45:17 +01:00
parent 2faaddca05
commit 384c4546f1
No known key found for this signature in database
GPG Key ID: E7B75D080FCF7992
4 changed files with 67 additions and 9 deletions

View File

@ -56,10 +56,3 @@ Error::Error(Type _type): m_type(_type)
break;
}
}
bool Error::searchForSubstring(const std::string& _substr) const
{
if (const std::string* str = boost::get_error_info<errinfo_comment>(*this))
return str->find(_substr) != std::string::npos;
return _substr.empty();
}

View File

@ -0,0 +1,32 @@
/*
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/>.
*/
/** @file ErrorCheck.cpp
* @author Yoichi Hirai <i@yoichihirai.com>
* @date 2016
*/
#include <test/libsolidity/ErrorCheck.h>
#include <libdevcore/Exceptions.h>
#include <string>
bool dev::solidity::searchErrorMessage(Error const& _err, std::string const& _substr)
{
if (const std::string* errorMessage = boost::get_error_info<dev::errinfo_comment>(_err))
return errorMessage->find(_substr) != std::string::npos;
return _substr.empty();
}

View File

@ -0,0 +1,32 @@
/*
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/>.
*/
/** @file ErrorCheck.h
* @author Yoichi Hirai <i@yoichihirai.com>
* @date 2016
*/
#pragma once
#include <libsolidity/interface/Exceptions.h>
namespace dev
{
namespace solidity
{
bool searchErrorMessage(Error const& _err, std::string const& _substr);
}
}

View File

@ -31,6 +31,7 @@
#include <libsolidity/analysis/GlobalContext.h>
#include <libsolidity/analysis/TypeChecker.h>
#include "../TestHelper.h"
#include "ErrorCheck.h"
using namespace std;
@ -165,7 +166,7 @@ do \
{ \
Error err = expectError((text), (warning)); \
BOOST_CHECK(err.type() == (Error::Type::typ)); \
BOOST_CHECK(err.searchForSubstring(substring)); \
BOOST_CHECK(searchErrorMessage(err, substring)); \
} while(0)
// [checkError(text, type, substring)] asserts that the compilation down to typechecking
@ -4104,7 +4105,7 @@ BOOST_AUTO_TEST_CASE(warn_nonpresent_pragma)
auto sourceAndError = parseAnalyseAndReturnError(text, true, false);
BOOST_REQUIRE(!!sourceAndError.second);
BOOST_REQUIRE(!!sourceAndError.first);
BOOST_CHECK(sourceAndError.second->searchForSubstring("Source file does not specify required compiler version!"));
BOOST_CHECK(searchErrorMessage(*sourceAndError.second, "Source file does not specify required compiler version!"));
}
BOOST_AUTO_TEST_CASE(unsatisfied_version)