aboutsummaryrefslogtreecommitdiffstats
path: root/natspec.cpp
diff options
context:
space:
mode:
authorMarek Kotewicz <marek.kotewicz@gmail.com>2015-02-05 22:45:13 +0800
committerMarek Kotewicz <marek.kotewicz@gmail.com>2015-02-05 22:45:13 +0800
commitd3dd2972c169eb368be43d77a2db7c2540e5a3ce (patch)
tree6a5fdacb995e699fa1d9bc39cc8be504892d8e4b /natspec.cpp
parent969366f46b83c57461fc5399fff76bd07738b6f2 (diff)
downloaddexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.tar.gz
dexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.tar.zst
dexon-solidity-d3dd2972c169eb368be43d77a2db7c2540e5a3ce.zip
separated libnatspec
Diffstat (limited to 'natspec.cpp')
-rw-r--r--natspec.cpp124
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()