mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[isoltest] Moves error types to dedicated file.
This commit is contained in:
parent
9b375edfe3
commit
a7a8ba73f9
@ -35,14 +35,6 @@ namespace solidity
|
|||||||
namespace test
|
namespace test
|
||||||
{
|
{
|
||||||
|
|
||||||
#define soltestAssert(CONDITION, DESCRIPTION) \
|
|
||||||
do \
|
|
||||||
{ \
|
|
||||||
if (!(CONDITION)) \
|
|
||||||
BOOST_THROW_EXCEPTION(runtime_error(DESCRIPTION)); \
|
|
||||||
} \
|
|
||||||
while (false)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common superclass of anything that can be run via isoltest.
|
* Common superclass of anything that can be run via isoltest.
|
||||||
*/
|
*/
|
||||||
|
128
test/libsolidity/util/SoltestErrors.h
Normal file
128
test/libsolidity/util/SoltestErrors.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
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 <libdevcore/AnsiColorized.h>
|
||||||
|
#include <libdevcore/CommonData.h>
|
||||||
|
#include <libdevcore/Exceptions.h>
|
||||||
|
|
||||||
|
namespace dev
|
||||||
|
{
|
||||||
|
namespace solidity
|
||||||
|
{
|
||||||
|
namespace test
|
||||||
|
{
|
||||||
|
|
||||||
|
#define soltestAssert(CONDITION, DESCRIPTION) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if (!(CONDITION)) \
|
||||||
|
BOOST_THROW_EXCEPTION(runtime_error(DESCRIPTION)); \
|
||||||
|
} \
|
||||||
|
while (false)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of a notice, warning or error that can occur while
|
||||||
|
* formatting and therefore updating an interactive function call test.
|
||||||
|
*/
|
||||||
|
struct FormatError
|
||||||
|
{
|
||||||
|
enum Type
|
||||||
|
{
|
||||||
|
Notice,
|
||||||
|
Warning,
|
||||||
|
Error
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit FormatError(Type _type, std::string _message):
|
||||||
|
type(_type),
|
||||||
|
message(std::move(_message))
|
||||||
|
{}
|
||||||
|
|
||||||
|
Type type;
|
||||||
|
std::string message;
|
||||||
|
};
|
||||||
|
using FormatErrors = std::vector<FormatError>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class that collects notices, warnings and errors and is able
|
||||||
|
* to format them for ANSI colorized output during the interactive update
|
||||||
|
* process in isoltest.
|
||||||
|
* Its purpose is to help users of isoltest to automatically
|
||||||
|
* update test files and always keep track of what is happening.
|
||||||
|
*/
|
||||||
|
class ErrorReporter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit ErrorReporter() {}
|
||||||
|
|
||||||
|
/// Adds a new FormatError of type Notice with the given message.
|
||||||
|
void notice(std::string _notice)
|
||||||
|
{
|
||||||
|
m_errors.push_back(FormatError{FormatError::Notice, std::move(_notice)});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Adds a new FormatError of type Warning with the given message.
|
||||||
|
void warning(std::string _warning)
|
||||||
|
{
|
||||||
|
m_errors.push_back(FormatError{FormatError::Warning, std::move(_warning)});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Adds a new FormatError of type Error with the given message.
|
||||||
|
void error(std::string _error)
|
||||||
|
{
|
||||||
|
m_errors.push_back(FormatError{FormatError::Error, std::move(_error)});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Prints all errors depending on their type using ANSI colorized output.
|
||||||
|
/// It will be used to print notices, warnings and errors during the
|
||||||
|
/// interactive update process.
|
||||||
|
std::string format(std::string const& _linePrefix, bool _formatted)
|
||||||
|
{
|
||||||
|
std::stringstream os;
|
||||||
|
for (auto const& error: m_errors)
|
||||||
|
{
|
||||||
|
switch (error.type)
|
||||||
|
{
|
||||||
|
case FormatError::Notice:
|
||||||
|
|
||||||
|
break;
|
||||||
|
case FormatError::Warning:
|
||||||
|
AnsiColorized(
|
||||||
|
os,
|
||||||
|
_formatted,
|
||||||
|
{formatting::YELLOW}
|
||||||
|
) << _linePrefix << "Warning: " << error.message << std::endl;
|
||||||
|
break;
|
||||||
|
case FormatError::Error:
|
||||||
|
AnsiColorized(
|
||||||
|
os,
|
||||||
|
_formatted,
|
||||||
|
{formatting::RED}
|
||||||
|
) << _linePrefix << "Error: " << error.message << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
FormatErrors m_errors;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,7 +15,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <test/libsolidity/util/TestFileParser.h>
|
#include <test/libsolidity/util/TestFileParser.h>
|
||||||
#include <test/TestCase.h>
|
#include <test/libsolidity/util/SoltestErrors.h>
|
||||||
|
|
||||||
#include <libsolidity/ast/Types.h>
|
#include <libsolidity/ast/Types.h>
|
||||||
#include <liblangutil/Exceptions.h>
|
#include <liblangutil/Exceptions.h>
|
||||||
@ -37,95 +37,6 @@ namespace solidity
|
|||||||
namespace test
|
namespace test
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* Representation of a notice, warning or error that can occur while
|
|
||||||
* formatting and therefore updating an interactive function call test.
|
|
||||||
*/
|
|
||||||
struct FormatError
|
|
||||||
{
|
|
||||||
enum Type
|
|
||||||
{
|
|
||||||
Notice,
|
|
||||||
Warning,
|
|
||||||
Error
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit FormatError(Type _type, std::string _message):
|
|
||||||
type(_type),
|
|
||||||
message(std::move(_message))
|
|
||||||
{}
|
|
||||||
|
|
||||||
Type type;
|
|
||||||
std::string message;
|
|
||||||
};
|
|
||||||
using FormatErrors = std::vector<FormatError>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class that collects notices, warnings and errors and is able
|
|
||||||
* to format them for ANSI colorized output during the interactive update
|
|
||||||
* process in isoltest.
|
|
||||||
* Its purpose is to help users of isoltest to automatically
|
|
||||||
* update test files and always keep track of what is happening.
|
|
||||||
*/
|
|
||||||
class ErrorReporter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit ErrorReporter() {}
|
|
||||||
|
|
||||||
/// Adds a new FormatError of type Notice with the given message.
|
|
||||||
void notice(std::string _notice)
|
|
||||||
{
|
|
||||||
m_errors.push_back(FormatError{FormatError::Notice, std::move(_notice)});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Adds a new FormatError of type Warning with the given message.
|
|
||||||
void warning(std::string _warning)
|
|
||||||
{
|
|
||||||
m_errors.push_back(FormatError{FormatError::Warning, std::move(_warning)});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Adds a new FormatError of type Error with the given message.
|
|
||||||
void error(std::string _error)
|
|
||||||
{
|
|
||||||
m_errors.push_back(FormatError{FormatError::Error, std::move(_error)});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prints all errors depending on their type using ANSI colorized output.
|
|
||||||
/// It will be used to print notices, warnings and errors during the
|
|
||||||
/// interactive update process.
|
|
||||||
std::string format(std::string const& _linePrefix, bool _formatted)
|
|
||||||
{
|
|
||||||
std::stringstream os;
|
|
||||||
for (auto const& error: m_errors)
|
|
||||||
{
|
|
||||||
switch (error.type)
|
|
||||||
{
|
|
||||||
case FormatError::Notice:
|
|
||||||
|
|
||||||
break;
|
|
||||||
case FormatError::Warning:
|
|
||||||
AnsiColorized(
|
|
||||||
os,
|
|
||||||
_formatted,
|
|
||||||
{formatting::YELLOW}
|
|
||||||
) << _linePrefix << "Warning: " << error.message << std::endl;
|
|
||||||
break;
|
|
||||||
case FormatError::Error:
|
|
||||||
AnsiColorized(
|
|
||||||
os,
|
|
||||||
_formatted,
|
|
||||||
{formatting::RED}
|
|
||||||
) << _linePrefix << "Error: " << error.message << std::endl;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return os.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
FormatErrors m_errors;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a function call and the result it returned. It stores the call
|
* Represents a function call and the result it returned. It stores the call
|
||||||
* representation itself, the actual byte result (if any) and a string representation
|
* representation itself, the actual byte result (if any) and a string representation
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <test/libyul/YulOptimizerTest.h>
|
#include <test/libyul/YulOptimizerTest.h>
|
||||||
|
|
||||||
|
#include <test/libsolidity/util/SoltestErrors.h>
|
||||||
#include <test/Options.h>
|
#include <test/Options.h>
|
||||||
|
|
||||||
#include <libyul/optimiser/BlockFlattener.h>
|
#include <libyul/optimiser/BlockFlattener.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user