From e26466b729de5bbb4cd578272fab2795cb66aee8 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 28 Nov 2016 00:58:41 +0000 Subject: LLL: add end-to-end tests --- test/liblll/EndToEndTest.cpp | 49 ++++++++++++++++++++++++++ test/liblll/ExecutionFramework.cpp | 33 ++++++++++++++++++ test/liblll/ExecutionFramework.h | 70 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 test/liblll/EndToEndTest.cpp create mode 100644 test/liblll/ExecutionFramework.cpp create mode 100644 test/liblll/ExecutionFramework.h (limited to 'test/liblll') diff --git a/test/liblll/EndToEndTest.cpp b/test/liblll/EndToEndTest.cpp new file mode 100644 index 00000000..c9b571f3 --- /dev/null +++ b/test/liblll/EndToEndTest.cpp @@ -0,0 +1,49 @@ +/* + 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 . +*/ +/** + * @author Alex Beregszaszi + * @date 2016 + * End to end tests for LLL. + */ + +#include +#include +#include +#include + +using namespace std; + +namespace dev +{ +namespace lll +{ +namespace test +{ + +BOOST_FIXTURE_TEST_SUITE(LLLEndToEndTest, LLLExecutionFramework) + +BOOST_AUTO_TEST_CASE(smoke_test) +{ + char const* sourceCode = "(returnlll { (return \"test\") })"; + compileAndRun(sourceCode); +} + +BOOST_AUTO_TEST_SUITE_END() + +} +} +} // end namespaces diff --git a/test/liblll/ExecutionFramework.cpp b/test/liblll/ExecutionFramework.cpp new file mode 100644 index 00000000..4719c5f5 --- /dev/null +++ b/test/liblll/ExecutionFramework.cpp @@ -0,0 +1,33 @@ +/* + 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 . +*/ +/** + * @author Alex Beregszaszi + * @date 2016 + * Framework for executing LLL contracts and testing them via RPC. + */ + +#include +#include +#include + +using namespace dev::test; +using namespace dev::lll::test; + +LLLExecutionFramework::LLLExecutionFramework() : + ExecutionFramework() +{ +} diff --git a/test/liblll/ExecutionFramework.h b/test/liblll/ExecutionFramework.h new file mode 100644 index 00000000..37162e7f --- /dev/null +++ b/test/liblll/ExecutionFramework.h @@ -0,0 +1,70 @@ +/* + 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 . +*/ +/** + * @author Alex Beregszaszi + * @date 2016 + * Framework for executing LLL contracts and testing them via RPC. + */ + +#pragma once + +#include + +#include "../ExecutionFramework.h" + +#include + +using namespace dev::test; + +namespace dev +{ +namespace lll +{ + +namespace test +{ + +class LLLExecutionFramework: public ExecutionFramework +{ + +public: + LLLExecutionFramework(); + + virtual bytes const& compileAndRunWithoutCheck( + std::string const& _sourceCode, + u256 const& _value = 0, + std::string const& _contractName = "", + bytes const& _arguments = bytes(), + std::map const& _libraryAddresses = std::map() + ) override + { + std::vector errors; + bytes bytecode = eth::compileLLL(_sourceCode, m_optimize, &errors); + if (!errors.empty()) + { + for (auto const& error: errors) + std::cerr << error << std::endl; + BOOST_ERROR("Compiling contract failed"); + } + sendMessage(bytecode + _arguments, true, _value); + return m_output; + } +}; + +} +} +} // end namespaces -- cgit