aboutsummaryrefslogtreecommitdiffstats
path: root/solidityParser.cpp
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-12-03 14:46:55 +0800
committerChristian <c@ethdev.com>2014-12-03 17:44:46 +0800
commit5b6a211b8aea80fc857e043fe5eb33f43c3f7df4 (patch)
tree3f50bd614fff7fcf75c71f82a82733d4dfc4ef82 /solidityParser.cpp
parente7201a032429534b4cde33c21c00777c04448b15 (diff)
downloaddexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.gz
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.bz2
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.lz
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.xz
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.tar.zst
dexon-solidity-5b6a211b8aea80fc857e043fe5eb33f43c3f7df4.zip
Import directive.
Diffstat (limited to 'solidityParser.cpp')
-rw-r--r--solidityParser.cpp55
1 files changed, 53 insertions, 2 deletions
diff --git a/solidityParser.cpp b/solidityParser.cpp
index 6a97a5d9..a9e2d531 100644
--- a/solidityParser.cpp
+++ b/solidityParser.cpp
@@ -21,13 +21,15 @@
*/
#include <string>
-
+#include <memory>
#include <libdevcore/Log.h>
#include <libsolidity/Scanner.h>
#include <libsolidity/Parser.h>
#include <libsolidity/Exceptions.h>
#include <boost/test/unit_test.hpp>
+using namespace std;
+
namespace dev
{
namespace solidity
@@ -40,7 +42,12 @@ namespace
ASTPointer<ContractDefinition> parseText(std::string const& _source)
{
Parser parser;
- return parser.parse(std::make_shared<Scanner>(CharStream(_source)));
+ ASTPointer<SourceUnit> sourceUnit = parser.parse(std::make_shared<Scanner>(CharStream(_source)));
+ for (ASTPointer<ASTNode> const& node: sourceUnit->getNodes())
+ if (ASTPointer<ContractDefinition> contract = dynamic_pointer_cast<ContractDefinition>(node))
+ return contract;
+ BOOST_FAIL("No contract found in source.");
+ return ASTPointer<ContractDefinition>();
}
}
@@ -380,6 +387,50 @@ BOOST_AUTO_TEST_CASE(statement_starting_with_type_conversion)
BOOST_CHECK_NO_THROW(parseText(text));
}
+BOOST_AUTO_TEST_CASE(import_directive)
+{
+ char const* text = "import \"abc\";\n"
+ "contract test {\n"
+ " function fun() {\n"
+ " uint64(2);\n"
+ " }\n"
+ "}\n";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
+BOOST_AUTO_TEST_CASE(multiple_contracts)
+{
+ char const* text = "contract test {\n"
+ " function fun() {\n"
+ " uint64(2);\n"
+ " }\n"
+ "}\n"
+ "contract test2 {\n"
+ " function fun() {\n"
+ " uint64(2);\n"
+ " }\n"
+ "}\n";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
+BOOST_AUTO_TEST_CASE(multiple_contracts_and_imports)
+{
+ char const* text = "import \"abc\";\n"
+ "contract test {\n"
+ " function fun() {\n"
+ " uint64(2);\n"
+ " }\n"
+ "}\n"
+ "import \"def\";\n"
+ "contract test2 {\n"
+ " function fun() {\n"
+ " uint64(2);\n"
+ " }\n"
+ "}\n"
+ "import \"ghi\";\n";
+ BOOST_CHECK_NO_THROW(parseText(text));
+}
+
BOOST_AUTO_TEST_SUITE_END()
}