Skip to content

Commit 01d883f

Browse files
authored
Merge pull request #10 from KyleKincer/codex/identify-and-implement-unit-testing-improvement
feat(assert): add contains assertion
2 parents a6f4c6f + 45dc7d8 commit 01d883f

File tree

3 files changed

+71
-13
lines changed

3 files changed

+71
-13
lines changed

docs/guide.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ The framework includes built-in assertion methods accessible through `$t.assert`
135135
- `$t.assert.isNull($t; $value; $message)` - Value must be null
136136
- `$t.assert.isNotNull($t; $value; $message)` - Value must not be null
137137
- `$t.assert.fail($t; $message)` - Force test failure
138+
- `$t.assert.contains($t; $container; $value; $message)` - Text or collection must contain value
138139

139140
### Usage Example
140141
```4d

testing/Project/Sources/Classes/Assert.4dm

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,40 @@ Function isNull($t : Object; $value : Variant; $message : Text)
4545
End if
4646

4747
Function isNotNull($t : Object; $value : Variant; $message : Text)
48-
If ($value=Null)
49-
If (Count parameters>=3)
50-
This.fail($t; $message)
51-
Else
52-
This.fail($t; "Assertion failed: value is Null")
53-
End if
54-
End if
48+
If ($value=Null)
49+
If (Count parameters>=3)
50+
This.fail($t; $message)
51+
Else
52+
This.fail($t; "Assertion failed: value is Null")
53+
End if
54+
End if
55+
56+
Function contains($t : Object; $container : Variant; $value : Variant; $message : Text)
57+
var $found : Boolean
58+
var $type : Integer
59+
$found:=False
60+
$type:=Value type:C1509($container)
61+
62+
Case of
63+
: ($type=Is text:K8:3)
64+
$found:=(Position:C15(String:C10($value); $container)>0)
65+
: ($type=Is collection:K8:32)
66+
$found:=($container.indexOf($value)#-1)
67+
Else
68+
If (Count parameters>=4)
69+
This.fail($t; $message)
70+
Else
71+
This.fail($t; "Assertion failed: unsupported type for contains")
72+
End if
73+
return
74+
End case
75+
76+
If (Not:C34($found))
77+
If (Count parameters>=4)
78+
This.fail($t; $message)
79+
Else
80+
This.fail($t; "Assertion failed: container does not contain value")
81+
End if
82+
End if
5583

5684

testing/Project/Sources/Classes/_AssertTest.4dm

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,43 @@ Function test_message_logging($t : cs:C1710.Testing)
157157
$t.assert.areEqual($t; "Custom failure message"; $mockTest.logMessages[0]; "Should log the provided message")
158158

159159
Function test_multiple_assertions($t : cs:C1710.Testing)
160-
var $mockTest : cs:C1710.Testing
161-
$mockTest:=cs:C1710.Testing.new()
160+
var $mockTest : cs:C1710.Testing
161+
$mockTest:=cs:C1710.Testing.new()
162162

163163
// Test multiple assertions accumulating messages
164164
$t.assert.areEqual($mockTest; 1; 2; "First failure")
165165
$t.assert.areEqual($mockTest; "a"; "b"; "Second failure")
166166

167-
$t.assert.isTrue($t; $mockTest.failed; "Multiple failed assertions should mark test as failed")
168-
$t.assert.areEqual($t; 2; $mockTest.logMessages.length; "Should accumulate multiple failure messages")
169-
$t.assert.areEqual($t; "First failure"; $mockTest.logMessages[0]; "Should store first message")
170-
$t.assert.areEqual($t; "Second failure"; $mockTest.logMessages[1]; "Should store second message")
167+
$t.assert.isTrue($t; $mockTest.failed; "Multiple failed assertions should mark test as failed")
168+
$t.assert.areEqual($t; 2; $mockTest.logMessages.length; "Should accumulate multiple failure messages")
169+
$t.assert.areEqual($t; "First failure"; $mockTest.logMessages[0]; "Should store first message")
170+
$t.assert.areEqual($t; "Second failure"; $mockTest.logMessages[1]; "Should store second message")
171+
172+
Function test_contains_with_text($t : cs:C1710.Testing)
173+
var $mockTest : cs:C1710.Testing
174+
$mockTest:=cs:C1710.Testing.new()
175+
176+
// Successful text containment
177+
$t.assert.contains($mockTest; "hello world"; "world"; "Should find substring")
178+
$t.assert.isFalse($t; $mockTest.failed; "Valid substring should pass")
179+
180+
// Failing text containment
181+
$mockTest:=cs:C1710.Testing.new()
182+
$t.assert.contains($mockTest; "hello"; "world"; "Missing substring should fail")
183+
$t.assert.isTrue($t; $mockTest.failed; "Missing substring should fail")
184+
185+
Function test_contains_with_collection($t : cs:C1710.Testing)
186+
var $mockTest : cs:C1710.Testing
187+
$mockTest:=cs:C1710.Testing.new()
188+
189+
var $col : Collection
190+
$col:=["a"; "b"; "c"]
191+
192+
// Successful collection containment
193+
$t.assert.contains($mockTest; $col; "b"; "Should find element in collection")
194+
$t.assert.isFalse($t; $mockTest.failed; "Existing element should pass")
195+
196+
// Failing collection containment
197+
$mockTest:=cs:C1710.Testing.new()
198+
$t.assert.contains($mockTest; $col; "d"; "Missing element should fail")
199+
$t.assert.isTrue($t; $mockTest.failed; "Missing element should fail")

0 commit comments

Comments
 (0)