Add syntax tests to augment the test coverage of

libsolidity/parsing/Scanner.cpp and libsolidity/parsing/Scanner.h
Fix #4627 and PR #5003.

- Add multiline comment test
- Add upper case hex literal test
- Add test for unicode escapes
- Add test for strings with escaped newlines
- Add test for string escapes
- Add test for strings that do not terminate before end of file
- Add test for unterminated blocks
This commit is contained in:
herrBez 2018-09-15 13:03:47 +02:00
parent 2409986cf3
commit faa0caae08
12 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,13 @@
/*
* This is a multi-line comment
* it should create no problems
*
*/
contract test {
/*
* this is another multi-line comment
*
*/
}
// ----

View File

@ -0,0 +1,7 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "\t\b\n\r\f\'\"\\\b";
return escapeCharacters;
}
}
// ----

View File

@ -0,0 +1,9 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "This a test
";
return escapeCharacters;
}
}
// ----
// ParserError: (100-112): Expected primary expression.

View File

@ -0,0 +1,8 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "text \";
return escapeCharacters;
}
}
// ----
// ParserError: (100-109): Expected primary expression.

View File

@ -0,0 +1,7 @@
contract test {
function f() public pure returns (bytes32) {
bytes32 escapeCharacters = "This a test
}
}
// ----
// ParserError: (100-112): Expected primary expression.

View File

@ -0,0 +1,4 @@
contract test {
function f() pure public { "abc\
// ----
// ParserError: (47-53): Expected primary expression.

View File

@ -0,0 +1,31 @@
contract test {
function oneByteUTF8() public pure returns (bytes32) {
bytes32 usdollar = "aaa\u0024aaa";
return usdollar;
}
function twoBytesUTF8() public pure returns (bytes32) {
bytes32 cent = "aaa\u00A2aaa";
return cent;
}
function threeBytesUTF8() public pure returns (bytes32) {
bytes32 eur = "aaa\u20ACaaa";
return eur;
}
function together() public pure returns (bytes32) {
bytes32 res = "\u0024\u00A2\u20AC";
return res;
}
// this function returns an invalid unicode character
function invalidLiteral() public pure returns(bytes32) {
bytes32 invalid = "\u00xx";
return invalid;
}
}
// ----
// ParserError: (678-681): Expected primary expression.

View File

@ -0,0 +1,4 @@
contract c {
function f() pure public { 1.
// ----
// ParserError: (47-47): Expected identifier but got end of source

View File

@ -0,0 +1,5 @@
contract test {
function f() pure public { 1.x; }
}
// ----
// TypeError: (47-50): Member "x" not found or not visible after argument-dependent lookup in int_const 1.

View File

@ -0,0 +1,4 @@
contract c {
function f() pure public { 0.
// ----
// ParserError: (47-47): Expected identifier but got end of source

View File

@ -0,0 +1,5 @@
contract test {
function f() pure public { 0.x; }
}
// ----
// TypeError: (47-50): Member "x" not found or not visible after argument-dependent lookup in int_const 0.

View File

@ -0,0 +1,9 @@
contract test {
function f() public pure returns (uint256) {
uint256 a = 0x1234aAbcC;
uint256 b = 0x1234ABCDEF;
return a + b;
}
}
// ----