diff options
author | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-02-05 22:45:13 +0800 |
---|---|---|
committer | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-02-05 22:45:13 +0800 |
commit | d3dd2972c169eb368be43d77a2db7c2540e5a3ce (patch) | |
tree | 6a5fdacb995e699fa1d9bc39cc8be504892d8e4b /natspec.cpp | |
parent | 969366f46b83c57461fc5399fff76bd07738b6f2 (diff) | |
download | dexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.tar.gz dexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.tar.zst dexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.zip |
separated libnatspec
Diffstat (limited to 'natspec.cpp')
-rw-r--r-- | natspec.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/natspec.cpp b/natspec.cpp new file mode 100644 index 00000000..9ce8e39c --- /dev/null +++ b/natspec.cpp @@ -0,0 +1,124 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum 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. + + cpp-ethereum 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 cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. + */ +/** @file natspec.cpp + * @author Marek Kotewicz <marek@ethdev.com> + * @date 2015 + */ + +#include <boost/test/unit_test.hpp> +#include <libdevcore/Log.h> +#include <libnatspec/NatspecExpressionEvaluator.h> + +using namespace std; + +BOOST_AUTO_TEST_SUITE(natspec) + +BOOST_AUTO_TEST_CASE(natspec_eval_function_exists) +{ + cnote << "testing existance of evaluateExpression function"; + + // given + NatspecExpressionEvaluator e; + + // when + string result = e.evalExpression("`typeof evaluateExpression`").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "function"); +} + +BOOST_AUTO_TEST_CASE(natspec_js_eval) +{ + cnote << "testing natspec basic eval"; + + // given + NatspecExpressionEvaluator e; + + // when + string result = e.evalExpression("`1 + 2`").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "3"); +} + +BOOST_AUTO_TEST_CASE(natspec_create_custom_function) +{ + cnote << "testing creation and usage of custom js function"; + + // given + NatspecExpressionEvaluator e; + + + // when + auto x = e.evalExpression("`test = function (x) { return x + 'ok'; }`"); // ommit var, make it global + string result = e.evalExpression("`test(5)`").toStdString(); + string result2 = e.evalExpression("`typeof test`").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "5ok"); + BOOST_CHECK_EQUAL(result2, "function"); +} + +BOOST_AUTO_TEST_CASE(natspec_js_eval_separated_expressions) +{ + cnote << "testing natspec evaluation of separated expresioons"; + + // given + NatspecExpressionEvaluator e; + + // when + string result = e.evalExpression("`x = 1` + `y = 2` will be equal `x + y`").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "1 + 2 will be equal 3"); +} + +BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params) +{ + cnote << "testing natspec evaluation of input params"; + + // given + char const* abi = R"([ + { + "name": "f", + "constant": false, + "type": "function", + "inputs": [ + { + "name": "a", + "type": "uint256" + } + ], + "outputs": [ + { + "name": "d", + "type": "uint256" + } + ] + } + ])"; + + NatspecExpressionEvaluator e(abi, "'f'", "[4]"); + + // when + string result = e.evalExpression("Will multiply `a` by 7 and return `a * 7`.").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "Will multiply 4 by 7 and return 28."); +} + +BOOST_AUTO_TEST_SUITE_END() |