aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity
diff options
context:
space:
mode:
Diffstat (limited to 'test/libsolidity')
-rw-r--r--test/libsolidity/JSONCompiler.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/libsolidity/JSONCompiler.cpp b/test/libsolidity/JSONCompiler.cpp
index eb079744..cebace88 100644
--- a/test/libsolidity/JSONCompiler.cpp
+++ b/test/libsolidity/JSONCompiler.cpp
@@ -35,6 +35,7 @@ extern "C"
{
extern char const* version();
extern char const* license();
+extern char const* compileJSON(char const* _input, bool _optimize);
extern char const* compileJSONMulti(char const* _input, bool _optimize);
extern char const* compileJSONCallback(char const* _input, bool _optimize, void* _readCallback);
}
@@ -49,6 +50,14 @@ namespace test
namespace
{
+Json::Value compileSingle(string const& _input)
+{
+ string output(compileJSON(_input.c_str(), dev::test::Options::get().optimize));
+ Json::Value ret;
+ BOOST_REQUIRE(Json::Reader().parse(output, ret, false));
+ return ret;
+}
+
Json::Value compileMulti(string const& _input, bool _callback)
{
string output(
@@ -132,6 +141,48 @@ BOOST_AUTO_TEST_CASE(basic_compilation)
);
}
+BOOST_AUTO_TEST_CASE(single_compilation)
+{
+ Json::Value result = compileSingle("contract A { }");
+ BOOST_CHECK(result.isObject());
+
+ BOOST_CHECK(result["contracts"].isObject());
+ BOOST_CHECK(result["contracts"][":A"].isObject());
+ Json::Value contract = result["contracts"][":A"];
+ BOOST_CHECK(contract.isObject());
+ BOOST_CHECK(contract["interface"].isString());
+ BOOST_CHECK_EQUAL(contract["interface"].asString(), "[]");
+ BOOST_CHECK(contract["bytecode"].isString());
+ BOOST_CHECK_EQUAL(
+ dev::test::bytecodeSansMetadata(contract["bytecode"].asString()),
+ "60606040523415600e57600080fd5b5b603680601c6000396000f30060606040525b600080fd00"
+ );
+ BOOST_CHECK(contract["runtimeBytecode"].isString());
+ BOOST_CHECK_EQUAL(
+ dev::test::bytecodeSansMetadata(contract["runtimeBytecode"].asString()),
+ "60606040525b600080fd00"
+ );
+ BOOST_CHECK(contract["functionHashes"].isObject());
+ BOOST_CHECK(contract["gasEstimates"].isObject());
+ BOOST_CHECK_EQUAL(
+ dev::jsonCompactPrint(contract["gasEstimates"]),
+ "{\"creation\":[62,10800],\"external\":{},\"internal\":{}}"
+ );
+ BOOST_CHECK(contract["metadata"].isString());
+ BOOST_CHECK(dev::test::isValidMetadata(contract["metadata"].asString()));
+ BOOST_CHECK(result["sources"].isObject());
+ BOOST_CHECK(result["sources"][""].isObject());
+ BOOST_CHECK(result["sources"][""]["AST"].isObject());
+ BOOST_CHECK_EQUAL(
+ dev::jsonCompactPrint(result["sources"][""]["AST"]),
+ "{\"attributes\":{\"absolutePath\":\"\",\"exportedSymbols\":{\"A\":[1]}},"
+ "\"children\":[{\"attributes\":{\"baseContracts\":[null],\"contractDependencies\":[null],"
+ "\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":true,\"linearizedBaseContracts\":[1],"
+ "\"name\":\"A\",\"nodes\":[null],\"scope\":2},\"id\":1,\"name\":\"ContractDefinition\","
+ "\"src\":\"0:14:0\"}],\"id\":2,\"name\":\"SourceUnit\",\"src\":\"0:14:0\"}"
+ );
+}
+
BOOST_AUTO_TEST_SUITE_END()
}