From d3dd2972c169eb368be43d77a2db7c2540e5a3ce Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Thu, 5 Feb 2015 15:45:13 +0100 Subject: [PATCH 1/3] separated libnatspec --- CMakeLists.txt | 1 + natspec.cpp | 124 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 natspec.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 764bf928e..36876eea6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ target_link_libraries(testeth ethcore) target_link_libraries(testeth secp256k1) target_link_libraries(testeth solidity) target_link_libraries(testeth webthree) +target_link_libraries(testeth natspec) if (JSONRPC) target_link_libraries(testeth web3jsonrpc) diff --git a/natspec.cpp b/natspec.cpp new file mode 100644 index 000000000..9ce8e39c6 --- /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 . + */ +/** @file natspec.cpp + * @author Marek Kotewicz + * @date 2015 + */ + +#include +#include +#include + +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() From 1954c0686d05c26e98c3da2cc009f93c3a6f8af2 Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Thu, 5 Feb 2015 18:45:37 +0100 Subject: [PATCH 2/3] fixed natspec evaluator result on error --- natspec.cpp | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/natspec.cpp b/natspec.cpp index 9ce8e39c6..73e70fc59 100644 --- a/natspec.cpp +++ b/natspec.cpp @@ -1,16 +1,16 @@ /* 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 . */ @@ -30,13 +30,13 @@ 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"); } @@ -44,13 +44,13 @@ BOOST_AUTO_TEST_CASE(natspec_eval_function_exists) 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"); } @@ -58,16 +58,15 @@ BOOST_AUTO_TEST_CASE(natspec_js_eval) 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"); @@ -76,13 +75,13 @@ BOOST_AUTO_TEST_CASE(natspec_create_custom_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"); } @@ -90,7 +89,7 @@ BOOST_AUTO_TEST_CASE(natspec_js_eval_separated_expressions) BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params) { cnote << "testing natspec evaluation of input params"; - + // given char const* abi = R"([ { @@ -111,9 +110,9 @@ BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params) ] } ])"; - + NatspecExpressionEvaluator e(abi, "'f'", "[4]"); - + // when string result = e.evalExpression("Will multiply `a` by 7 and return `a * 7`.").toStdString(); @@ -121,4 +120,18 @@ BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params) BOOST_CHECK_EQUAL(result, "Will multiply 4 by 7 and return 28."); } +BOOST_AUTO_TEST_CASE(natspec_js_eval_error) +{ + cnote << "testing natspec evaluation of incorrect input"; + + // given + NatspecExpressionEvaluator e; + + // when + string result = e.evalExpression("`test(`").toStdString(); + + // then + BOOST_CHECK_EQUAL(result, "`test(`"); +} + BOOST_AUTO_TEST_SUITE_END() From aea7de95565260c9f09c65007ea5e9629080b566 Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Fri, 6 Feb 2015 13:38:28 +0100 Subject: [PATCH 3/3] removed output messages in tests && spaces --- natspec.cpp | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/natspec.cpp b/natspec.cpp index 73e70fc59..827f96625 100644 --- a/natspec.cpp +++ b/natspec.cpp @@ -29,44 +29,32 @@ 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"); @@ -74,22 +62,16 @@ BOOST_AUTO_TEST_CASE(natspec_create_custom_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"([ { @@ -110,26 +92,19 @@ BOOST_AUTO_TEST_CASE(natspec_js_eval_input_params) ] } ])"; - 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_CASE(natspec_js_eval_error) { - cnote << "testing natspec evaluation of incorrect input"; - // given NatspecExpressionEvaluator e; - // when string result = e.evalExpression("`test(`").toStdString(); - // then BOOST_CHECK_EQUAL(result, "`test(`"); }