-
-
Notifications
You must be signed in to change notification settings - Fork 353
/
RBMethodNodeTest.class.st
119 lines (93 loc) · 3.15 KB
/
RBMethodNodeTest.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"
SUnit tests for RBMethodNode
"
Class {
#name : #RBMethodNodeTest,
#superclass : #TestCase,
#category : #'AST-Core-Tests'
}
{ #category : #helpers }
RBMethodNodeTest >> methodWithArg: someArgName and: someAnotherArgName [
]
{ #category : #helpers }
RBMethodNodeTest >> parseMethod: aString [
^ RBParser parseMethod: aString
]
{ #category : #tests }
RBMethodNodeTest >> testAddingMethodProperties [
| ast |
ast := self parseMethod: 'one ^ self'.
self assert: ast methodProperties isNil.
ast methodPropertyAt: #testKey put: #testValue.
ast methodPropertyAt: #testKey2 put: #testValue2.
self assert: (ast methodPropertyAt: #testKey) equals: #testValue.
self assert: (ast methodPropertyAt: #testKey2) equals: #testValue2.
self assert: ast methodProperties class equals: AdditionalMethodState
]
{ #category : #tests }
RBMethodNodeTest >> testCachingMethodArguments [
| ast |
ast := (self class >> #methodWithArg:and:) ast.
ast propertyAt: #argumentNames put: #(wrongArg wrongArg2).
ast ensureCachedArgumentNames.
self assert: (ast methodPropertyAt: #argumentNames) equals: #(someArgName someAnotherArgName)
]
{ #category : #'testing-comments' }
RBMethodNodeTest >> testCommentedMethodHasComments [
| tree |
tree := self parseMethod: 'foo: abd bar: cde
"this is comment"
"this is another comment"
^ abd + cde'.
self assert: tree hasComments.
]
{ #category : #tests }
RBMethodNodeTest >> testSelectorAndArgumentNames [
self assert: (self parseMethod: 'one ^ self') selectorAndArgumentNames equals: 'one'.
self assert: (self parseMethod: 'one: aOne ^ self') selectorAndArgumentNames equals: 'one: aOne'.
self assert: (self parseMethod: 'one: aOne two: aTwo ^ self') selectorAndArgumentNames equals: 'one: aOne two: aTwo'.
self assert: (self parseMethod: '* aOne') selectorAndArgumentNames equals: '* aOne'.
self assert: (self parseMethod: '** aOne') selectorAndArgumentNames equals: '** aOne'
]
{ #category : #tests }
RBMethodNodeTest >> testSizeOfSignatureOfBinaryMethod [
| tree |
tree := self
parseMethod:
' + x
^ 2 + 3'.
self assert: tree conceptualSelectorSize equals: '+' size.
self assert: tree conceptualArgumentSize equals: 'x' size.
self assert: tree conceptualSignatureSize equals: '+' size + tree conceptualArgumentSize + 1
]
{ #category : #tests }
RBMethodNodeTest >> testSizeOfSignatureOfKeywordsMethod [
| tree |
tree := self
parseMethod:
'foo: abd bar: cde
^ abd + cde'.
self assert: tree conceptualSelectorSize equals: 'foo:bar:' size.
self assert: tree conceptualArgumentSize equals: 'abdcde' size.
self
assert: tree conceptualSignatureSize
equals: 'abdcde' size + 'foo:bar:' size + 3.
]
{ #category : #tests }
RBMethodNodeTest >> testSizeOfSignatureOfUnaryMethod [
| tree |
tree := self
parseMethod:
'foo
^ 2 + 3'.
self assert: tree conceptualSelectorSize equals: 'foo' size.
self assert: tree conceptualArgumentSize isZero.
self assert: tree conceptualSignatureSize equals: 'foo' size
]
{ #category : #'testing-comments' }
RBMethodNodeTest >> testUncommentMethodDoesNotHaveComments [
| tree |
tree := self parseMethod: 'foo: abd bar: cde
^ abd + cde'.
self deny: tree hasComments.
]