Skip to content

Commit f8b84e5

Browse files
authored
Merge pull request #14 from VBA-tools/v2
V2: Evented Approach
2 parents 69a2dd7 + 1696e87 commit f8b84e5

23 files changed

+843
-2318
lines changed

build/dev.vbs

Lines changed: 0 additions & 536 deletions
This file was deleted.
-51.4 KB
Binary file not shown.
-104 KB
Binary file not shown.
-8.66 KB
Binary file not shown.

specs/Excel-TDD - Specs.xlsm

-44.2 KB
Binary file not shown.

specs/SpecSuiteSpecs.bas

Lines changed: 0 additions & 32 deletions
This file was deleted.

specs/Specs_Fixture.cls

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
VERSION 1.0 CLASS
2+
BEGIN
3+
MultiUse = -1 'True
4+
END
5+
Attribute VB_Name = "Specs_Fixture"
6+
Attribute VB_GlobalNameSpace = False
7+
Attribute VB_Creatable = False
8+
Attribute VB_PredeclaredId = False
9+
Attribute VB_Exposed = True
10+
Private WithEvents pSuite As SpecSuite
11+
Attribute pSuite.VB_VarHelpID = -1
12+
13+
Public BeforeEachCallCount As Long
14+
Public ResultCalls As Collection
15+
Public AfterEachCallCount As Long
16+
17+
Public Sub ListenTo(Suite As SpecSuite)
18+
Set pSuite = Suite
19+
End Sub
20+
21+
Private Sub pSuite_BeforeEach()
22+
BeforeEachCallCount = BeforeEachCallCount + 1
23+
End Sub
24+
25+
Private Sub pSuite_Result(Spec As SpecDefinition)
26+
Me.ResultCalls.Add Spec
27+
End Sub
28+
29+
Private Sub pSuite_AfterEach()
30+
AfterEachCallCount = AfterEachCallCount + 1
31+
End Sub
32+
33+
Private Sub Class_Initialize()
34+
Set Me.ResultCalls = New Collection
35+
End Sub
36+
Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
1-
Attribute VB_Name = "SpecDefinitionSpecs"
1+
Attribute VB_Name = "Specs_SpecDefinition"
22
Public Function Specs() As SpecSuite
33
Set Specs = New SpecSuite
44
Specs.Description = "SpecDefinition"
55

6+
Dim Reporter As New ImmediateReporter
7+
Reporter.ListenTo Specs
8+
69
Dim TestSuite As New SpecSuite
710
Dim Definition As SpecDefinition
811
Dim Expectation As SpecExpectation
9-
12+
1013
With Specs.It("should pass if all expectations pass")
1114
Set Definition = TestSuite.It("should pass")
1215
With Definition
1316
.Expect("A").ToEqual "A"
1417
.Expect(2).ToEqual 2
1518
.Expect("pass").ToEqual "pass"
1619
End With
17-
18-
.Expect(Definition.Result).ToEqual SpecResult.Pass
20+
21+
.Expect(Definition.Result).ToEqual SpecResultType.Pass
1922
End With
20-
23+
2124
With Specs.It("should fail if any expectation fails")
2225
Set Definition = TestSuite.It("should fail")
2326
With Definition
2427
.Expect("A").ToEqual "A"
2528
.Expect(2).ToEqual 2
2629
.Expect("pass").ToEqual "fail"
2730
End With
28-
29-
.Expect(Definition.Result).ToEqual SpecResult.Fail
31+
32+
.Expect(Definition.Result).ToEqual SpecResultType.Fail
3033
End With
31-
34+
3235
With Specs.It("should contain collection of failed expectations")
3336
Set Definition = TestSuite.It("should fail")
3437
With Definition
@@ -37,20 +40,18 @@ Public Function Specs() As SpecSuite
3740
.Expect("pass").ToEqual "fail"
3841
.Expect(True).ToEqual False
3942
End With
40-
41-
.Expect(Definition.Result).ToEqual SpecResult.Fail
43+
44+
.Expect(Definition.Result).ToEqual SpecResultType.Fail
4245
.Expect(Definition.FailedExpectations(1).Actual).ToEqual 2
43-
.Expect(Definition.FailedExpectations(1).Result).ToEqual ExpectResult.Fail
46+
.Expect(Definition.FailedExpectations(1).Passed).ToEqual False
4447
.Expect(Definition.FailedExpectations(2).Actual).ToEqual "pass"
45-
.Expect(Definition.FailedExpectations(2).Result).ToEqual ExpectResult.Fail
48+
.Expect(Definition.FailedExpectations(2).Passed).ToEqual False
4649
.Expect(Definition.FailedExpectations(3).Actual).ToEqual True
47-
.Expect(Definition.FailedExpectations(3).Result).ToEqual ExpectResult.Fail
50+
.Expect(Definition.FailedExpectations(3).Passed).ToEqual False
4851
End With
49-
52+
5053
With Specs.It("should be pending if there are no expectations")
5154
Set Definition = TestSuite.It("pending")
52-
.Expect(Definition.Result).ToEqual SpecResult.Pending
55+
.Expect(Definition.Result).ToEqual SpecResultType.Pending
5356
End With
54-
55-
InlineRunner.RunSuite Specs
5657
End Function

specs/SpecExpectationSpecs.bas renamed to specs/Specs_SpecExpectation.bas

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
Attribute VB_Name = "SpecExpectationSpecs"
1+
Attribute VB_Name = "Specs_SpecExpectation"
22
Public Function Specs() As SpecSuite
3+
Dim Expectation As SpecExpectation
4+
35
Set Specs = New SpecSuite
46
Specs.Description = "SpecExpectation"
57

8+
Dim Reporter As New ImmediateReporter
9+
Reporter.ListenTo Specs
10+
611
With Specs.It("ToEqual/ToNotEqual")
712
.Expect("A").ToEqual "A"
813
.Expect(2).ToEqual 2
@@ -156,11 +161,31 @@ Public Function Specs() As SpecSuite
156161
End With
157162

158163
With Specs.It("RunMatcher")
159-
.Expect(100).RunMatcher "SpecExpectationSpecs.ToBeWithin", "to be within", 90, 110
160-
.Expect(Nothing).RunMatcher "SpecExpectationSpecs.ToBeNothing", "to be nothing"
164+
.Expect(100).RunMatcher "Specs_SpecExpectation.ToBeWithin", "to be within", 90, 110
165+
.Expect(Nothing).RunMatcher "Specs_SpecExpectation.ToBeNothing", "to be nothing"
161166
End With
162167

163-
InlineRunner.RunSuite Specs
168+
With Specs.It("should set Passed")
169+
Set Expectation = New SpecExpectation
170+
Expectation.Actual = 4
171+
Expectation.ToEqual 4
172+
173+
.Expect(Expectation.Passed).ToEqual True
174+
175+
Expectation.ToEqual 3
176+
.Expect(Expectation.Passed).ToEqual False
177+
End With
178+
179+
With Specs.It("should set FailureMessage")
180+
Set Expectation = New SpecExpectation
181+
Expectation.Actual = 4
182+
183+
Expectation.ToEqual 4
184+
.Expect(Expectation.FailureMessage).ToEqual ""
185+
186+
Expectation.ToEqual 3
187+
.Expect(Expectation.FailureMessage).ToEqual "Expected 4 to equal 3"
188+
End With
164189
End Function
165190

166191
Public Function ToBeWithin(Actual As Variant, Args As Variant) As Variant
@@ -179,7 +204,7 @@ Public Function ToBeWithin(Actual As Variant, Args As Variant) As Variant
179204
End Function
180205

181206
Public Function ToBeNothing(Actual As Variant) As Variant
182-
If IsObject(Actual) Then
207+
If VBA.IsObject(Actual) Then
183208
If Actual Is Nothing Then
184209
ToBeNothing = True
185210
Else

specs/Specs_SpecSuite.bas

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
Attribute VB_Name = "Specs_SpecSuite"
2+
Public Function Specs() As SpecSuite
3+
Dim Suite As SpecSuite
4+
5+
Set Specs = New SpecSuite
6+
Specs.Description = "SpecSuite"
7+
8+
Dim Reporter As New ImmediateReporter
9+
Reporter.ListenTo Specs
10+
11+
Dim Fixture As New Specs_Fixture
12+
Fixture.ListenTo Specs
13+
14+
With Specs.It("should fire BeforeEach event", "id")
15+
.Expect(Fixture.BeforeEachCallCount).ToEqual 1
16+
.Expect(1 + 1).ToEqual 2
17+
End With
18+
19+
With Specs.It("should fire Result event")
20+
.Expect(Fixture.ResultCalls(1).Description).ToEqual "should fire BeforeEach event"
21+
.Expect(Fixture.ResultCalls(1).Result).ToEqual SpecResultType.Pass
22+
.Expect(Fixture.ResultCalls(1).Expectations.Count).ToEqual 2
23+
.Expect(Fixture.ResultCalls(1).Id).ToEqual "id"
24+
End With
25+
26+
With Specs.It("should fire AfterEach event")
27+
.Expect(Fixture.AfterEachCallCount).ToEqual 2
28+
End With
29+
30+
With Specs.It("should store specs")
31+
Set Suite = New SpecSuite
32+
With Suite.It("(pass)", "(1)")
33+
.Expect(4).ToEqual 4
34+
End With
35+
With Suite.It("(fail)", "(2)")
36+
.Expect(4).ToEqual 3
37+
End With
38+
With Suite.It("(pending)", "(3)")
39+
End With
40+
41+
.Expect(Suite.Specs.Count).ToEqual 3
42+
.Expect(Suite.PassedSpecs.Count).ToEqual 1
43+
.Expect(Suite.FailedSpecs.Count).ToEqual 1
44+
.Expect(Suite.PendingSpecs.Count).ToEqual 1
45+
46+
.Expect(Suite.PassedSpecs(1).Description).ToEqual "(pass)"
47+
.Expect(Suite.FailedSpecs(1).Description).ToEqual "(fail)"
48+
.Expect(Suite.PendingSpecs(1).Description).ToEqual "(pending)"
49+
End With
50+
51+
With Specs.It("should have overall result")
52+
Set Suite = New SpecSuite
53+
54+
.Expect(Suite.Result).ToEqual SpecResultType.Pending
55+
56+
With Suite.It("(pending)", "(1)")
57+
End With
58+
59+
.Expect(Suite.Result).ToEqual SpecResultType.Pending
60+
61+
With Suite.It("(pass)", "(2)")
62+
.Expect(4).ToEqual 4
63+
End With
64+
65+
.Expect(Suite.Result).ToEqual SpecResultType.Pass
66+
67+
With Suite.It("(fail)", "(3)")
68+
.Expect(4).ToEqual 3
69+
End With
70+
71+
.Expect(Suite.Result).ToEqual SpecResultType.Fail
72+
73+
With Suite.It("(pass)", "(4)")
74+
.Expect(4).ToEqual 4
75+
End With
76+
77+
.Expect(Suite.Result).ToEqual SpecResultType.Fail
78+
End With
79+
End Function

0 commit comments

Comments
 (0)