diff options
author | Dan Volkov <amdcrafting@gmail.com> | 2022-09-18 01:07:22 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-18 00:07:22 +0200 |
commit | fcfcdcd7b3783194d1bb3a868fe989b0c79c1262 (patch) | |
tree | 4f07c55593d98326e6606504ecec521c9dd0a796 /tests | |
parent | f69cddcb757d20454497e351c62d1ab3e826bf81 (diff) | |
download | pygments-git-fcfcdcd7b3783194d1bb3a868fe989b0c79c1262.tar.gz |
Add func lexer (#2232)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/examplefiles/func/test.fc | 52 | ||||
-rw-r--r-- | tests/examplefiles/func/test.fc.output | 429 | ||||
-rw-r--r-- | tests/test_func.py | 44 |
3 files changed, 525 insertions, 0 deletions
diff --git a/tests/examplefiles/func/test.fc b/tests/examplefiles/func/test.fc new file mode 100644 index 00000000..b196a6b4 --- /dev/null +++ b/tests/examplefiles/func/test.fc @@ -0,0 +1,52 @@ +#include "../"; +#pragma version >=1.0.0; + +global int k_const; +const int k = 1; + +() recv_internal(int my_balance, int msg_value, cell in_msg_full, slice in_msg_body) impure { + slice cs = in_msg_full.begin_parse(); + int flags = cs~load_uint(0x4_1_0); + + if ((flags & 1) == true) { ;; ignore all bounced messages + return (); + } + + slice sender_address = cs~load_msg_addr(); + + {- + {- + test - is test + -} + -} + + ;; Send message + var message = begin_cell() + .store_uint(0x18, 6) + .store_slice(sender_address) + .store_coins(0) + .store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1) + .store_slice("Hello, world!"s) + .end_cell(); + + send_raw_message(message, 64); + + ;; Update counter + var cs = get_data().begin_parse(); + var counter = data~load_uint(32); + + store_data( + begin_cell() + .store_uint(counter + 1, 32) + .end_cell() + ); +} + +() recv_external(slice in_msg) impure { + throw(0xffff); +} + +int counter() method_id { + var data = get_data().begin_parse(); + return data~load_uint(32); +}
\ No newline at end of file diff --git a/tests/examplefiles/func/test.fc.output b/tests/examplefiles/func/test.fc.output new file mode 100644 index 00000000..39358e23 --- /dev/null +++ b/tests/examplefiles/func/test.fc.output @@ -0,0 +1,429 @@ +'#include' Keyword +' ' Text.Whitespace +'"../"' Literal.String +';' Text +'\n' Text.Whitespace + +'#pragma' Keyword +' ' Text.Whitespace +'version' Keyword +' ' Text.Whitespace +'>=1.0.0' Literal.Number +';' Text +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'global' Keyword.Constant +' ' Text.Whitespace +'int' Keyword.Type +' ' Text.Whitespace +'k_const' Name.Variable +';' Punctuation +'\n' Text.Whitespace + +'const' Keyword.Constant +' ' Text.Whitespace +'int' Keyword.Type +' ' Text.Whitespace +'k' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'1' Literal.Number +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'recv_internal' Name.Function +'(' Punctuation +'int' Keyword.Type +' ' Text.Whitespace +'my_balance' Name.Variable +',' Punctuation +' ' Text.Whitespace +'int' Keyword.Type +' ' Text.Whitespace +'msg_value' Name.Variable +',' Punctuation +' ' Text.Whitespace +'cell' Keyword.Type +' ' Text.Whitespace +'in_msg_full' Name.Variable +',' Punctuation +' ' Text.Whitespace +'slice' Keyword.Type +' ' Text.Whitespace +'in_msg_body' Name.Variable +')' Punctuation +' ' Text.Whitespace +'impure' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'slice' Keyword.Type +' ' Text.Whitespace +'cs' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'in_msg_full' Name.Variable +'.' Punctuation +'begin_parse' Name.Function +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'int' Keyword.Type +' ' Text.Whitespace +'flags' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'cs' Name.Variable +'~' Punctuation +'load_uint' Name.Function +'(' Punctuation +'0x4_1_0' Literal.Number +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'(' Punctuation +'(' Punctuation +'flags' Name.Variable +' ' Text.Whitespace +'&' Operator +' ' Text.Whitespace +'1' Literal.Number +')' Punctuation +' ' Text.Whitespace +'==' Operator +' ' Text.Whitespace +'true' Keyword.Constant +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +' ' Text.Whitespace +';; ignore all bounced messages' Comment.Singleline +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'slice' Keyword.Type +' ' Text.Whitespace +'sender_address' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'cs' Name.Variable +'~' Punctuation +'load_msg_addr' Name.Function +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'{-' Comment.Multiline +'\n ' Comment.Multiline +'{-' Comment.Multiline +'\n test ' Comment.Multiline +'-' Comment.Multiline +' is test\n ' Comment.Multiline +'-}' Comment.Multiline +'\n ' Comment.Multiline +'-}' Comment.Multiline +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +';; Send message' Comment.Singleline +'\n' Text.Whitespace + +' ' Text.Whitespace +'var' Keyword.Type +' ' Text.Whitespace +'message' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'begin_cell' Name.Function +'(' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_uint' Name.Function +'(' Punctuation +'0x18' Literal.Number +',' Punctuation +' ' Text.Whitespace +'6' Literal.Number +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_slice' Name.Function +'(' Punctuation +'sender_address' Name.Variable +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_coins' Name.Function +'(' Punctuation +'0' Literal.Number +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_uint' Name.Function +'(' Punctuation +'0' Literal.Number +',' Punctuation +' ' Text.Whitespace +'1' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'4' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'4' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'64' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'32' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'1' Literal.Number +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'1' Literal.Number +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_slice' Name.Function +'(' Punctuation +'"Hello, world!"s' Literal.String +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'end_cell' Name.Function +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'send_raw_message' Name.Function +'(' Punctuation +'message' Name.Variable +',' Punctuation +' ' Text.Whitespace +'64' Literal.Number +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +';; Update counter' Comment.Singleline +'\n' Text.Whitespace + +' ' Text.Whitespace +'var' Keyword.Type +' ' Text.Whitespace +'cs' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'get_data' Name.Function +'(' Punctuation +')' Punctuation +'.' Punctuation +'begin_parse' Name.Function +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'var' Keyword.Type +' ' Text.Whitespace +'counter' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'data' Name.Variable +'~' Punctuation +'load_uint' Name.Function +'(' Punctuation +'32' Literal.Number +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'store_data' Name.Function +'(' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'begin_cell' Name.Function +'(' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'store_uint' Name.Function +'(' Punctuation +'counter' Name.Variable +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'1' Literal.Number +',' Punctuation +' ' Text.Whitespace +'32' Literal.Number +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'end_cell' Name.Function +'(' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'recv_external' Name.Function +'(' Punctuation +'slice' Keyword.Type +' ' Text.Whitespace +'in_msg' Name.Variable +')' Punctuation +' ' Text.Whitespace +'impure' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'throw' Name.Function +'(' Punctuation +'0xffff' Literal.Number +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'int' Keyword.Type +' ' Text.Whitespace +'counter' Name.Function +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'method_id' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'var' Keyword.Type +' ' Text.Whitespace +'data' Name.Variable +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'get_data' Name.Function +'(' Punctuation +')' Punctuation +'.' Punctuation +'begin_parse' Name.Function +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'data' Name.Variable +'~' Punctuation +'load_uint' Name.Function +'(' Punctuation +'32' Literal.Number +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace diff --git a/tests/test_func.py b/tests/test_func.py new file mode 100644 index 00000000..c494b9cc --- /dev/null +++ b/tests/test_func.py @@ -0,0 +1,44 @@ +import pytest +from pygments.lexers.func import FuncLexer +from pygments.token import Token, Name + +@pytest.fixture(scope='module') +def lexer_func(): + yield FuncLexer() + + +@pytest.mark.parametrize('text', ( + 'take(first)Entry', '"not_a_string', 'msg.sender', 'send_message,then_terminate', '_')) +def test_func_not_identifier(lexer_func, text): + """Test text that should **not** be tokenized as identifier.""" + assert list(lexer_func.get_tokens(text))[0] != (Name.Variable, text) + + +@pytest.mark.parametrize('text', ( + '`test identifier`', 'simple_identifier', 'query\'\'', + '_internal_value', 'get_pubkeys&signatures', + 'dict::udict_set_builder', '2+2=2*2', '-alsovalidname', '{hehehe}')) +def test_func_identifier(lexer_func, text): + """Test text that should be tokenized as identifier.""" + assert list(lexer_func.get_tokens(text))[0] == (Name.Variable, text) + + +@pytest.mark.parametrize('text', ( +'`test identifier`(', 'simple_identifier(', 'query\'\'(', +'_internal_value(', 'get_pubkeys&signatures(', +'dict::udict_set_builder(', '2+2=2*2(', '-alsovalidname(', '{hehehe}(')) +def test_func_function(lexer_func, text): + """Test text that should be tokenized as identifier.""" + assert list(lexer_func.get_tokens(text))[0] == (Name.Function, text[:-1]) + + +@pytest.mark.parametrize('text', ('0x0f', '0x1_2', '123', '0b10', '0xffff_fff', '1')) +def test_func_number(lexer_func, text): + """Test text that should be tokenized as number.""" + assert list(lexer_func.get_tokens(text))[0] == (Token.Literal.Number, text) + + +@pytest.mark.parametrize('text', ('0x0f_m', '0X1_2', '12d3', '0b1_0f', '0bff_fff', '0b')) +def test_func_not_number(lexer_func, text): + """Test text that should *not* be tokenized as number.""" + assert list(lexer_func.get_tokens(text))[0] != (Token.Literal.Number, text) |