11" Syntax highlighting tests for vim-solidity
22
3- " Helper function is defined in test/vimrc
4-
53Before:
64 set rtp+=.
75 filetype plugin indent on
@@ -20,9 +18,11 @@ Given solidity (transient keyword):
2018 }
2119
2220Execute (transient should be highlighted as keyword):
23- normal! /transient
24- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
25- AssertEqual 'solKeyword', l:group
21+ setfiletype solidity
22+ call search('transient', 'w')
23+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
24+ Log 'Syntax group for transient: ' . g:syn
25+ AssertEqual 'solKeyword', g:syn
2626
2727Given solidity (unchecked block):
2828 function test() public {
@@ -32,33 +32,37 @@ Given solidity (unchecked block):
3232 }
3333
3434Execute (unchecked should be highlighted as keyword):
35- normal! /unchecked
36- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
37- AssertEqual 'solKeyword', l:group
35+ setfiletype solidity
36+ call search('unchecked', 'w')
37+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
38+ AssertEqual 'solKeyword', g:syn
3839
3940Given solidity (custom error):
4041 error InsufficientBalance(uint256 available, uint256 required);
4142
4243Execute (error should be highlighted as keyword):
43- normal! /error
44- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
45- AssertEqual 'solKeyword', l:group
44+ setfiletype solidity
45+ call search('error', 'w')
46+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
47+ AssertEqual 'solKeyword', g:syn
4648
4749Given solidity (fallback function):
4850 fallback() external payable {}
4951
5052Execute (fallback should be highlighted as keyword):
51- normal! /fallback
52- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
53- AssertEqual 'solKeyword', l:group
53+ setfiletype solidity
54+ call search('fallback', 'w')
55+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
56+ AssertEqual 'solKeyword', g:syn
5457
5558Given solidity (receive function):
5659 receive() external payable {}
5760
5861Execute (receive should be highlighted as keyword):
59- normal! /receive
60- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
61- AssertEqual 'solKeyword', l:group
62+ setfiletype solidity
63+ call search('receive', 'w')
64+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
65+ AssertEqual 'solKeyword', g:syn
6266
6367# ==============================================================================
6468# Issue #15: String Literal Bug
@@ -68,31 +72,15 @@ Given solidity (string with function signature):
6872 bytes32 hash = keccak256(bytes("submitSomething(bytes)"));
6973 uint256 value = 42;
7074
71- Execute (string should close properly and value should highlight correctly):
72- " Check that string is highlighted
73- normal! /"submitSomething
74- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
75- AssertEqual 'solString', l:group
76-
77- " Check that content after string is highlighted correctly
78- normal! /value
79- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
80- " Should be highlighted as identifier (no specific group) or Number group
81- " The important thing is it's NOT solString
82- AssertNotEqual 'solString', l:group
83-
84- Given solidity (multiple strings with parens):
85- string memory a = "func(uint256)";
86- string memory b = "other(bytes)";
87-
88- Execute (both strings should be highlighted independently):
89- normal! /"func
90- let l:group1 = synIDattr(synID(line('.'), col('.'), 1), 'name')
91- AssertEqual 'solString', l:group1
75+ Execute (string should close properly):
76+ setfiletype solidity
77+ call search('submitSomething', 'w')
78+ let g:syn1 = synIDattr(synID(line('.'), col('.'), 1), 'name')
79+ AssertEqual 'solString', g:syn1
9280
93- normal! /"other
94- let l:group2 = synIDattr(synID(line('.'), col('.'), 1), 'name')
95- AssertEqual 'solString', l:group2
81+ call search('value', 'w')
82+ let g:syn2 = synIDattr(synID(line('.'), col('.'), 1), 'name')
83+ Assert g:syn2 !=# 'solString', 'value should not be highlighted as string'
9684
9785# ==============================================================================
9886# Basic Syntax Elements
@@ -102,66 +90,40 @@ Given solidity (contract declaration):
10290 contract MyContract {
10391 }
10492
105- Execute (contract should be highlighted as Type):
106- normal! /contract
107- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
108- AssertEqual 'solContract', l:group
109-
110- normal! /MyContract
111- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
112- AssertEqual 'solContractName', l:group
113-
114- Given solidity (function declaration):
115- function test() public pure returns (uint256) {
116- return 42;
117- }
118-
119- Execute (function elements should be highlighted correctly):
120- normal! /function
121- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
122- AssertEqual 'solFunction', l:group
93+ Execute (contract keyword should be highlighted):
94+ setfiletype solidity
95+ call search('contract', 'w')
96+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
97+ AssertEqual 'solContract', g:syn
12398
124- normal! /test
125- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
126- AssertEqual 'solFuncName', l:group
99+ Given solidity (uint256 type):
100+ uint256 value;
127101
128- normal! /public
129- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
130- AssertEqual 'solKeyword', l:group
131-
132- normal! /uint256
133- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
134- AssertEqual 'solBuiltinType', l:group
135-
136- Given solidity (comments and natspec):
137- /// @notice This is a natspec comment
138- // Regular comment
139- /* Block comment */
140-
141- Execute (comments should be highlighted):
142- normal! gg
143- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
144- AssertEqual 'solLineComment', l:group
102+ Execute (uint256 should be highlighted as builtin type):
103+ setfiletype solidity
104+ call search('uint256', 'w')
105+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
106+ AssertEqual 'solBuiltinType', g:syn
145107
146108# ==============================================================================
147109# Assembly / Yul
148110# ==============================================================================
149111
150112Given solidity (assembly block):
151- assembly {
152- let x := add(1, 2)
153- sstore(0, x)
113+ function test() public {
114+ assembly {
115+ let x := add(1, 2)
116+ }
154117 }
155118
156- Execute (assembly keywords should be highlighted):
157- normal! /assembly
158- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
159- AssertEqual 'yul', l:group
160-
161- normal! /add
162- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
163- AssertEqual 'yulAssemblyOp', l:group
164-
165- normal! /sstore
166- let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name')
167- AssertEqual 'yulAssemblyOp', l:group
119+ Execute (assembly keyword should be highlighted):
120+ setfiletype solidity
121+ call search('assembly', 'w')
122+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
123+ AssertEqual 'yul', g:syn
124+
125+ Execute (add opcode should be highlighted):
126+ setfiletype solidity
127+ call search('add', 'w')
128+ let g:syn = synIDattr(synID(line('.'), col('.'), 1), 'name')
129+ AssertEqual 'yulAssemblyOp', g:syn
0 commit comments