tests/MessageTracerTests.st
branchjv
changeset 4259 4f1299274d32
equal deleted inserted replaced
4258:e2bba335c949 4259:4f1299274d32
       
     1 "{ Package: 'stx:libbasic3/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 TestCase subclass:#MessageTracerTests
       
     6 	instanceVariableNames:'methods'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'System-Debugging-Support-Tests'
       
    10 !
       
    11 
       
    12 
       
    13 !MessageTracerTests methodsFor:'change & update'!
       
    14 
       
    15 update: aspect with: param from: sender
       
    16     aspect == #methodTrap ifTrue:[
       
    17         methods add: (param changeClass >> param changeSelector)
       
    18     ].
       
    19 
       
    20     "Created: / 28-08-2017 / 17:45:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    21 ! !
       
    22 
       
    23 !MessageTracerTests methodsFor:'private'!
       
    24 
       
    25 add: x to: y
       
    26     ^ x + y
       
    27 
       
    28     "Created: / 28-08-2017 / 15:59:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    29 ! !
       
    30 
       
    31 !MessageTracerTests methodsFor:'running'!
       
    32 
       
    33 setUp
       
    34     Smalltalk addDependent: self.
       
    35     methods := Set new.
       
    36 
       
    37     "Created: / 28-08-2017 / 17:41:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    38 !
       
    39 
       
    40 tearDown
       
    41     Smalltalk removeDependent: self.
       
    42     methods do:[:method | MessageTracer unwrapMethod: method ]
       
    43 
       
    44     "Created: / 28-08-2017 / 16:01:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    45     "Modified: / 28-08-2017 / 17:42:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    46 ! !
       
    47 
       
    48 !MessageTracerTests methodsFor:'tests - mocking'!
       
    49 
       
    50 test_mock_01a
       
    51     
       
    52     self assert: (self add: 1 to: 1) == 2.
       
    53     MessageTracer mock: #add:to: in: self class do: [ 0 ].
       
    54     self assert: (self add: 1 to: 1) == 0.
       
    55 
       
    56     "Created: / 28-08-2017 / 16:02:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    57 !
       
    58 
       
    59 test_mock_01b
       
    60     
       
    61     self assert: (self add: 1 to: 1) == 2.
       
    62     MessageTracer mock: #add:to: in: self class do: [ :r :x :y | r ].
       
    63     self assert: (self add: 1 to: 1) == self.
       
    64 
       
    65     "Created: / 28-08-2017 / 16:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    66 !
       
    67 
       
    68 test_mock_01c
       
    69     
       
    70     self assert: (self add: 1 to: 1) == 2.
       
    71     MessageTracer mock: #add:to: in: self class do: [ :r :x :y | x - y ].
       
    72     self assert: (self add: 1 to: 2) == -1.
       
    73 
       
    74     "Created: / 28-08-2017 / 16:04:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    75 !
       
    76 
       
    77 test_mock_01d
       
    78     
       
    79     self assert: (self add: 1 to: 1) == 2.
       
    80     MessageTracer mock: #add:to: in: self class do: [ :r :x :y :m | (m valueWithReceiver: r arguments: { x . y }) + 10 ].
       
    81     self assert: (self add: 1 to: 3) == 14.
       
    82 
       
    83     "Created: / 28-08-2017 / 16:05:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    84 !
       
    85 
       
    86 test_mock_02a
       
    87     | blocker value |
       
    88     
       
    89     self assert: (self add: 1 to: 1) == 2.
       
    90 
       
    91     MessageTracer mock: #add:to: in: self class do:[ 0 ].
       
    92     blocker := Semaphore new: 0.
       
    93     [ 
       
    94         value := self add: 10 to: -5.
       
    95         blocker signal.
       
    96     ] fork.
       
    97     blocker wait.
       
    98     self assert: value == 0.
       
    99 
       
   100     "Created: / 28-08-2017 / 16:08:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   101 !
       
   102 
       
   103 test_mock_02b
       
   104     | blocker1 blocker2 value |
       
   105     
       
   106     self assert: (self add: 1 to: 1) == 2.
       
   107 
       
   108     MessageTracer mock: #add:to: in: self class do:[ 0 ].
       
   109     blocker1 := Semaphore new: 0.
       
   110     [ 
       
   111         blocker2 := Semaphore new: 0.
       
   112         [
       
   113             value := self add: 10 to: -5.
       
   114             blocker2 signal.
       
   115         ] fork.
       
   116         blocker2 wait.
       
   117         blocker1 signal.
       
   118     ] fork.
       
   119     blocker1 wait.
       
   120     self assert: value == 0.
       
   121 
       
   122     "Created: / 28-08-2017 / 16:10:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   123 !
       
   124 
       
   125 test_mock_03a
       
   126     | blocker1 blocker2 threads |
       
   127     
       
   128 
       
   129     threads := Set new.    
       
   130 
       
   131     MessageTracer mock: #newProcess in: Block do:[:r :m |
       
   132         | p |
       
   133 
       
   134         p := m valueWithReceiver: r arguments: #().
       
   135         threads add: p.
       
   136         p
       
   137     ].
       
   138     ObjectMemory flushCaches.
       
   139     blocker1 := Semaphore new: 0.
       
   140     [ 
       
   141         blocker2 := Semaphore new: 0.
       
   142         [
       
   143             blocker2 signal.
       
   144         ] fork.
       
   145         blocker2 wait.
       
   146         blocker1 signal.
       
   147     ] fork.
       
   148     blocker1 wait.
       
   149     self assert: threads size == 2.
       
   150 
       
   151     "Created: / 28-08-2017 / 16:24:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   152 ! !
       
   153 
       
   154 !MessageTracerTests class methodsFor:'documentation'!
       
   155 
       
   156 version_HG
       
   157 
       
   158     ^ '$Changeset: <not expanded> $'
       
   159 ! !
       
   160