From 94707c6c3400eac275d07dfc9b840f9910db24ed Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Sun, 6 Nov 2016 21:05:43 -0500 Subject: [PATCH 1/5] Remove old code --- build/dev.vbs | 536 ------------------------------------------ src/BlankIWBProxy.cls | 135 ----------- src/IScenario.cls | 40 ---- src/IWBProxy.cls | 97 -------- src/Scenario.cls | 106 --------- src/SpecHelpers.bas | 467 ------------------------------------ src/WBProxy.cls | 170 -------------- 7 files changed, 1551 deletions(-) delete mode 100644 build/dev.vbs delete mode 100644 src/BlankIWBProxy.cls delete mode 100644 src/IScenario.cls delete mode 100644 src/IWBProxy.cls delete mode 100644 src/Scenario.cls delete mode 100644 src/SpecHelpers.bas delete mode 100644 src/WBProxy.cls diff --git a/build/dev.vbs b/build/dev.vbs deleted file mode 100644 index ff20ec3..0000000 --- a/build/dev.vbs +++ /dev/null @@ -1,536 +0,0 @@ -'' -' Dev -' (c) Tim Hall - https://github.com/timhall/Excel-REST -' -' Development steps for Excel-TDD -' Run: cscript build/dev.vbs -' -' @author: tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -Option Explicit - -Dim Args -Set Args = WScript.Arguments - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Dim Excel -Dim ExcelWasOpen -Set Excel = Nothing -Dim Workbook -Dim WorkbookWasOpen -Set Workbook = Nothing - -Dim SrcFolder -Dim SpecsFolder -SrcFolder = ".\src\" -SpecsFolder = ".\specs\" - -Dim BlankWorkbookPath -Dim BlankInlineWorkbookPath -Dim SpecsWorkbookPath -Dim ExampleInlineWorkbookPath -Dim ExampleDisplayWorkbookPath -BlankWorkbookPath = ".\Excel-TDD - Blank.xlsm" -BlankInlineWorkbookPath = ".\Excel-TDD - Blank - Inline.xlsm" -SpecsWorkbookPath = ".\specs\Excel-TDD - Specs.xlsm" -ExampleInlineWorkbookPath = ".\examples\Excel-TDD - Example - Inline.xlsm" -ExampleDisplayWorkbookPath = ".\examples\Excel-TDD - Example - Runner.xlsm" - -Dim Src -Src = Array( _ - "SpecSuite.cls", _ - "SpecDefinition.cls", _ - "SpecExpectation.cls" _ -) - -Dim Specs -Specs = Array( _ - "SpecSuiteSpecs.bas", _ - "SpecDefinitionSpecs.bas", _ - "SpecExpectationSpecs.bas" _ -) - -Dim InlineRunner -InlineRunner = Array( _ - "InlineRunner.bas" _ -) - -Dim DisplayRunner -DisplayRunner = Array( _ - "DisplayRunner.bas" _ -) - -Dim WorkbookExtensions -WorkbookExtensions = Array( _ - "IScenario.cls", _ - "Scenario.cls", _ - "IWBProxy.cls", _ - "WBProxy.cls" _ -) - -Dim Helpers -Helpers = Array( _ - "SpecHelpers.bas" _ -) - -Main - -Sub Main() - ' On Error Resume Next - - PrintLn "Excel-TDD v1.4.0 Development" - - ExcelWasOpen = OpenExcel(Excel) - - If Not Excel Is Nothing Then - Development - - CloseExcel Excel, ExcelWasOpen - ElseIf Err.Number <> 0 Then - PrintLn vbNewLine & "ERROR: Failed to open Excel" & vbNewLIne & Err.Description - End If - - Input vbNewLIne & "Done! Press any key to exit..." -End Sub - -Sub Development - PrintLn vbNewLine & _ - "Options:" & vbNewLine & _ - "- import [src/specs/inline/display/extensions/helpers/all] to [blank/inline/display/specs/example-inline/example-display/all/path...]" & vbNewLine & _ - "- export [src/specs/inline/display/extensions/helpers/all] from [blank/inline/display/specs/all/example-inline/example-display/path...]" & vbNewLine & _ - "- release" - - Dim Action - Action = Input(vbNewLine & "What would you like to do? <") - - If Action = "" Then - Exit Sub - End If - - Dim Parts - Parts = Split(Action, " ") - - ' Dim PartIndex - ' For PartIndex = LBound(Parts) To UBound(Parts) - ' PrintLn "Parts: " & PartIndex & ", " & Parts(PartIndex) - ' Next - - If UCase(Parts(0)) = "RELEASE" Then - Execute "import", "src", "all" - Execute "import", "inline", "inline" - Execute "import", "display", "display" - Execute "import", "extensions", "display" - Execute "import", "helpers", "specs" - Execute "import", "specs", "specs" - Execute "import", "inline", "specs" - Execute "import", "inline", "example-inline" - Execute "import", "display", "example-display" - Execute "import", "extensions", "example-display" - Execute "import", "helpers", "example-display" - ElseIf UBound(Parts) < 3 Or (UCase(Parts(0)) <> "IMPORT" And UCase(Parts(0)) <> "EXPORT") Then - PrintLn vbNewLine & "Error: Unrecognized action" - Else - If UBound(Parts) > 3 Then - ' Combine path (in case there were spaces in name) and remove quotes - Dim CustomPath - Dim i - For i = 3 To UBound(Parts) - If CustomPath = "" Then - CustomPath = Parts(i) - Else - CustomPath = CustomPath & " " & Parts(i) - End If - Next - CustomPath = Replace(CustomPath, """", "") - - Execute Parts(0), Parts(1), CustomPath - Else - Execute Parts(0), Parts(1), Parts(3) - End If - End If - - PrintLn "" - Development -End Sub - -Sub Execute(Name, ModulesDescription, WorkbookDescription) - ' PrintLn "Execute: " & Name & ", " & ModulesDescription & ", " & WorkbookDescription - - Dim Paths - Select Case UCase(WorkbookDescription) - Case "BLANK" - Paths = Array(BlankWorkbookPath, BlankInlineWorkbookPath) - Case "INLINE" - Paths = Array(BlankInlineWorkbookPath) - Case "DISPLAY" - Paths = Array(BlankWorkbookPath) - Case "SPECS" - Paths = Array(SpecsWorkbookPath) - Case "EXAMPLE-INLINE" - Paths = Array(ExampleInlineWorkbookPath) - Case "EXAMPLE-DISPLAY" - Paths = Array(ExampleDisplayWorkbookPath) - Case "ALL" - Paths = Array(BlankWorkbookPath, BlankInlineWorkbookPath, SpecsWorkbookPath, ExampleInlineWorkbookPath, ExampleDisplayWorkbookPath) - Case Else - Paths = Array(WorkbookDescription) - End Select - - Dim i - For i = LBound(Paths) To UBound(Paths) - ' PrintLn "Open: " & FullPath(Paths(i)) - WorkbookWasOpen = OpenWorkbook(Excel, FullPath(Paths(i)), Workbook) - - If Not Workbook Is Nothing Then - If Not VBAIsTrusted(Workbook) Then - PrintLn vbNewLine & _ - "ERROR: In order to install Excel-REST," & vbNewLine & _ - "access to the VBA project object model needs to be trusted in Excel." & vbNewLine & vbNewLine & _ - "To enable:" & vbNewLine & _ - "Options > Trust Center > Trust Center Settings > Macro Settings > " & vbnewLine & _ - "Trust access to the VBA project object model" - Else - If UCase(Name) = "IMPORT" Then - Import ModulesDescription, Workbook - ElseIf UCase(Name) = "EXPORT" Then - Export ModulesDescription, Workbook - End IF - End If - - CloseWorkbook Workbook, WorkbookWasOpen - ElseIf Err.Number <> 0 Then - PrintLn vbNewLine & "ERROR: Failed to open Workbook" & vbNewLine & Err.Description - Err.Clear - End If - Next -End Sub - -Sub Import(ModulesDescription, Workbook) - Dim Modules - Dim Folder - - Select Case UCase(ModulesDescription) - Case "SRC" - Modules = Src - Folder = SrcFolder - Case "INLINE" - Modules = InlineRunner - Folder = SrcFolder - Case "DISPLAY" - Modules = DisplayRunner - Folder = SrcFolder - Case "EXTENSIONS" - Modules = WorkbookExtensions - Folder = SrcFolder - Case "HELPERS" - Modules = Helpers - Folder = SrcFolder - Case "SPECS" - Modules = Specs - Folder = SpecsFolder - Case "ALL" - Import "src", Workbook - Import "specs", Workbook - Exit Sub - Case Else - PrintLn "ERROR: Unknown modules description: " & ModulesDescription - Exit Sub - End Select - - Print vbNewLine & "Importing " & ModulesDescription & " to " & Workbook.Name - - Dim i - For i = LBound(Modules) To UBound(Modules) - ImportModule Workbook, Folder, Modules(i) - Print "." - Next - - Print "Done!" -End Sub - -Sub Export(ModulesDescription, Workbook) - Dim Modules - Dim Folder - - Select Case UCase(ModulesDescription) - Case "SRC" - Modules = Src - Folder = SrcFolder - Case "INLINE" - Modules = InlineRunner - Folder = SrcFolder - Case "DISPLAY" - Modules = DisplayRunner - Folder = SrcFolder - Case "EXTENSIONS" - Modules = WorkbookExtensions - Folder = SrcFolder - Case "HELPERS" - Modules = Helpers - Folder = SrcFolder - Case "SPECS" - Modules = Specs - Folder = SpecsFolder - Case "ALL" - Import "src", Workbook - Import "specs", Workbook - Exit Sub - Case Else - PrintLn "ERROR: Unknown modules description: " & ModulesDescription - Exit Sub - End Select - - Print vbNewLine & "Exporting " & ModulesDescription & " from " & Workbook.Name - - Dim i - Dim Module - For i = LBound(Modules) To UBound(Modules) - Set Module = GetModule(Workbook, RemoveExtension(Modules(i))) - - If Not Module Is Nothing Then - Module.Export FullPath(Folder & Modules(i)) - Print "." - End If - Next - - Print "Done!" -End Sub - -'' -' Excel helpers -' ------------------------------------ ' - -'' -' Open Workbook and return whether Workbook was already open -' -' @param {Object} Excel -' @param {String} Path -' @param {Object} Workbook object to load Workbook into -' @return {Boolean} Workbook was already open -Function OpenWorkbook(Excel, Path, ByRef Workbook) - On Error Resume Next - - Path = FullPath(Path) - Set Workbook = Excel.Workbooks(GetFilename(Path)) - - If Workbook Is Nothing Or Err.Number <> 0 Then - Err.Clear - - If FileExists(Path) Then - Set Workbook = Excel.Workbooks.Open(Path) - Else - Path = Input(vbNewLine & _ - "Workbook not found at " & Path & vbNewLine & _ - "Would you like to try another location? [path.../cancel] <") - - If UCase(Path) <> "CANCEL" And Path <> "" Then - OpenWorkbook = OpenWorkbook(Excel, Path, Workbook) - End If - End If - OpenWorkbook = False - Else - OpenWorkbook = True - End If -End Function - -'' -' Close Workbook and save changes -' (keep open without saving changes if previously open) -' -' @param {Object} Workbook -' @param {Boolean} KeepWorkbookOpen -Sub CloseWorkbook(ByRef Workbook, KeepWorkbookOpen) - If Not KeepWorkbookOpen And Not Workbook Is Nothing Then - Workbook.Close True - End If - - Set Workbook = Nothing -End Sub - -'' -' Open Excel and return whether Excel was already open -' -' @param {Object} Excel object to load Excel into -' @return {Boolean} Excel was already open -Function OpenExcel(ByRef Excel) - On Error Resume Next - - Set Excel = GetObject(, "Excel.Application") - - If Excel Is Nothing Or Err.Number <> 0 Then - Err.Clear - - Set Excel = CreateObject("Excel.Application") - OpenExcel = False - Else - OpenExcel = True - End If -End Function - -'' -' Close Excel (keep open if previously open) -' -' @param {Object} Excel -' @param {Boolean} KeepExcelOpen -Sub CloseExcel(ByRef Excel, KeepExcelOpen) - If Not KeepExcelOpen And Not Excel Is Nothing Then - Excel.Quit - End If - - Set Excel = Nothing -End Sub - -'' -' Check if VBA is trusted -' -' @param {Object} Workbook -' @param {Boolean} -Function VBAIsTrusted(Workbook) - On Error Resume Next - Dim Count - Count = Workbook.VBProject.VBComponents.Count - - If Err.Number <> 0 Then - Err.Clear - VBAIsTrusted = False - Else - VBAIsTrusted = True - End If -End Function - -'' -' Get module -' -' @param {Object} Workbook -' @param {String} Name -Function GetModule(Workbook, Name) - Dim Module - Set GetModule = Nothing - - For Each Module In Workbook.VBProject.VBComponents - If Module.Name = Name Then - Set GetModule = Module - Exit Function - End If - Next -End Function - -'' -' Import module -' -' @param {Object} Workbook -' @param {String} Folder -' @param {String} Filename -Sub ImportModule(Workbook, Folder, Filename) - Dim Module - If Not Workbook Is Nothing Then - ' Check for existing and remove - Set Module = GetModule(Workbook, RemoveExtension(Filename)) - If Not Module Is Nothing Then - Workbook.VBProject.VBComponents.Remove Module - End If - - ' Import module - Workbook.VBProject.VBComponents.Import FullPath(Folder & Filename) - End If -End Sub - -'' -' Get module and backup (if found) -' -' @param {Object} Workbook -' @param {String} Name -' @param {String} Prefix -Function BackupModule(Workbook, Name, Prefix) - Dim Backup - Dim Existing - Set Backup = GetModule(Workbook, Name) - - If Not Backup Is Nothing Then - ' Remove any previous backups - Set Existing = GetModule(Workbook, Prefix & Name) - If Not Existing Is Nothing Then - Workbook.VBProject.VBComponents.Remove Existing - End If - - Backup.Name = Prefix & Name - End If - - Set BackupModule = Backup -End Function - -'' -' Restore module from backup (if found) -' -' @param {Object} Workbook -' @param {String} Name -' @param {String} Prefix -Sub RestoreModule(Workbook, Name, Prefix) - Dim Backup - Dim Module - Set Backup = GetModule(Workbook, Prefix & Name) - - If Not Backup Is Nothing Then - ' Find upgraded module (and remove if found) - Set Module = GetModule(Workbook, Name) - If Not Module Is Nothing Then - Workbook.VBProject.VBComponents.Remove Module - End If - - ' Restore backup - Backup.Name = Name - End If -End Sub - -'' -' Filesystem helpers -' ------------------------------------ ' - -Function FullPath(Path) - FullPath = FSO.GetAbsolutePathName(Path) -End Function - -Function GetFilename(Path) - Dim Parts - Parts = Split(Path, "\") - - GetFilename = Parts(UBound(Parts)) -End Function - -Function RemoveExtension(Name) - Dim Parts - Parts = Split(Name, ".") - - If UBound(Parts) > LBound(Parts) Then - ReDim Preserve Parts(UBound(Parts) - 1) - End If - - RemoveExtension = Join(Parts, ".") -End Function - -Function FileExists(Path) - FileExists = FSO.FileExists(Path) -End Function - -'' -' General helpers -' ------------------------------------ ' - -Sub Print(Message) - WScript.StdOut.Write Message -End Sub - -Sub PrintLn(Message) - Wscript.Echo Message -End Sub - -Function Input(Prompt) - If Prompt <> "" Then - Print Prompt & " " - End If - - Input = WScript.StdIn.ReadLine -End Function diff --git a/src/BlankIWBProxy.cls b/src/BlankIWBProxy.cls deleted file mode 100644 index 31fb006..0000000 --- a/src/BlankIWBProxy.cls +++ /dev/null @@ -1,135 +0,0 @@ -VERSION 1.0 CLASS -BEGIN - MultiUse = -1 'True -END -Attribute VB_Name = "BlankIWBProxy" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = False -Attribute VB_Exposed = False -'' -' BlankIWBProxy v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Blank implementation of IWBProxy -' -' @dependencies -' Microsoft Scripting Runtime -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -Implements IWBProxy - -Private pPath As String -Private pPassword As String -Private pInstance As Workbook -Private pMapping As Dictionary - -Public Sub DefineMapping(SheetName As String) - -End Sub - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Common to all IWBProxy implementations -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Sub IWBProxy_DefineMapping(SheetName As String) - Call Me.DefineMapping(SheetName) -End Sub - -Public Property Get Range(MappingKey As String) As Range - Set Range = SpecHelpers.GetRange(Instance, Mapping, MappingKey) -End Property -Private Property Get IWBProxy_Range(MappingKey As String) As Range - Set IWBProxy_Range = Range(MappingKey) -End Property -Public Property Set Range(MappingKey As String, Value As Range) - Call SpecHelpers.SetRange(Instance, Mapping, MappingKey, Value) -End Property -Private Property Set IWBProxy_Range(MappingKey As String, Value As Range) - Set Range(MappingKey) = Value -End Property - -Public Property Get Value(MappingKey As String) As Variant - Value = SpecHelpers.GetValue(Instance, Mapping, MappingKey) -End Property -Private Property Get IWBProxy_Value(MappingKey As String) As Variant - IWBProxy_Value = Value(MappingKey) -End Property -Public Property Let Value(MappingKey As String, NewValue As Variant) - Call SpecHelpers.SetValue(Instance, Mapping, MappingKey, NewValue) -End Property -Private Property Let IWBProxy_Value(MappingKey As String, NewValue As Variant) - Value(MappingKey) = NewValue -End Property - -Public Property Get Instance() As Workbook - Set Instance = pInstance -End Property -Private Property Get IWBProxy_Instance() As Workbook - Set IWBProxy_Instance = Instance -End Property -Public Property Set Instance(Value As Workbook) - Set pInstance = Value -End Property -Private Property Set IWBProxy_Instance(Value As Workbook) - Set Instance = Value -End Property - -Public Property Get Mapping() As Scripting.IDictionary - Set Mapping = IWBProxy_Mapping -End Property -Private Property Get IWBProxy_Mapping() As Scripting.IDictionary - If pMapping Is Nothing Then: Set pMapping = New Dictionary - Set IWBProxy_Mapping = pMapping -End Property -Public Property Set Mapping(Value As Scripting.IDictionary) - Set IWBProxy_Mapping = Value -End Property -Private Property Set IWBProxy_Mapping(Value As Scripting.IDictionary) - Set pMapping = Value -End Property - -Public Property Get Password() As String - Password = pPassword -End Property -Private Property Get IWBProxy_Password() As String - IWBProxy_Password = Password -End Property -Public Property Let Password(Value As String) - pPassword = Value -End Property -Private Property Let IWBProxy_Password(Value As String) - Password = Value -End Property - -Public Property Get Path() As String - Path = pPath -End Property -Private Property Get IWBProxy_Path() As String - IWBProxy_Path = Path -End Property -Public Property Let Path(Value As String) - pPath = Value -End Property -Private Property Let IWBProxy_Path(Value As String) - Path = Value -End Property - -Public Property Get TempPath() As String - TempPath = pTempPath -End Property -Public Property Get IWBProxy_TempPath() As String - IWBProxy_TempPath = TempPath -End Property -Public Property Let TempPath(Value As String) - pTempPath = Value -End Property -Public Property Let IWBProxy_TempPath(Value As String) - TempPath = Value -End Property - -Private Sub Class_Terminate() - Set Me.Instance = Nothing -End Sub diff --git a/src/IScenario.cls b/src/IScenario.cls deleted file mode 100644 index fa80a45..0000000 --- a/src/IScenario.cls +++ /dev/null @@ -1,40 +0,0 @@ -VERSION 1.0 CLASS -BEGIN - MultiUse = -1 'True -END -Attribute VB_Name = "IScenario" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = False -Attribute VB_Exposed = True -'' -' IScenario v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Interface for creating and running scenarios on workbooks -' -' @dependencies -' Microsoft Scripting Runtime -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -'' -' Generate a spec suite to run through a scenario for the given wb -' -' @param {IWBProxy} WB to perform scenario on -' @returns {SpecSuite} -' --------------------------------------------- ' - -Public Function RunScenario(WB As IWBProxy) As SpecSuite -End Function - -'' -' Load scenario from given sheet -' -' @param {String} SheetName to load scenario from -' --------------------------------------------- ' - -Public Sub Load(SheetName As String) -End Sub diff --git a/src/IWBProxy.cls b/src/IWBProxy.cls deleted file mode 100644 index 8eefb7b..0000000 --- a/src/IWBProxy.cls +++ /dev/null @@ -1,97 +0,0 @@ -VERSION 1.0 CLASS -BEGIN - MultiUse = -1 'True -END -Attribute VB_Name = "IWBProxy" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = False -Attribute VB_Exposed = True -'' -' IWBProxy v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Interface for generic workbook proxies -' that adds mapping functionality to workbooks -' -' @dependencies -' Microsoft Scripting Runtime -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Public Property Get Path() As String -End Property -Public Property Let Path(Value As String) -End Property - -Public Property Get TempPath() As String -End Property -Public Property Let TempPath(Value As String) -End Property - -Public Property Get Password() As String -End Property -Public Property Let Password(Value As String) -End Property - -Public Property Get Mapping() As Dictionary -End Property -Public Property Set Mapping(Value As Dictionary) -End Property - -Public Property Get Instance() As Workbook -End Property -Public Property Set Instance(Value As Workbook) -End Property - -'' -' Get value from workbook for provided mapping key -' -' @param {String} MappingKey -' @returns {Variant} Value from workbook -' --------------------------------------------- ' - -Public Property Get Value(MappingKey As String) As Variant -End Property - -'' -' Set value in workbook for provided mapping key -' -' @param {String} MappingKey -' @param {Variant} NewValue Value to set in workbook -' --------------------------------------------- ' - -Public Property Let Value(MappingKey As String, NewValue As Variant) -End Property - -'' -' Get reference to range from workbook for provided mapping key -' -' @param {String} MappingKey -' @returns {Range} Range from workbook -' --------------------------------------------- ' - -Public Property Get Range(MappingKey As String) As Range -End Property - -'' -' Set underlying range in workbook for provided mapping key -' -' @param {String} MappingKey -' @param {Variant} NewValue Value to set in workbook -' --------------------------------------------- ' - -Public Property Set Range(MappingKey As String, NewValue As Range) -End Property - -'' -' Define mapping -' -' @param {String} SheetName to load mapping from -' --------------------------------------------- ' - -Public Sub DefineMapping(SheetName As String) -End Sub - diff --git a/src/Scenario.cls b/src/Scenario.cls deleted file mode 100644 index b4d6158..0000000 --- a/src/Scenario.cls +++ /dev/null @@ -1,106 +0,0 @@ -VERSION 1.0 CLASS -BEGIN - MultiUse = -1 'True -END -Attribute VB_Name = "Scenario" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = False -Attribute VB_Exposed = True -'' -' Scenario v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Generic implementation of scenario -' -' @dependencies -' Microsoft Scripting Runtime -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -Implements IScenario - -Private Const ScenarioInputStartRow As Integer = 4 -Private Const ScenarioInputStartCol As Integer = 1 -Private Const ScenarioExpectedStartRow As Integer = 4 -Private Const ScenarioExpectedStartCol As Integer = 3 - -Private Description As String -Private InputValues As Dictionary -Private ExpectedValues As Dictionary - -'' -' Generate a spec suite to run through a scenario for the given wb -' -' @param {IWBProxy} WB to perform scenario on -' @param {String} Name of scenario -' @returns {SpecSuite} -' --------------------------------------------- ' - -Private Function IScenario_RunScenario(WB As IWBProxy) As SpecSuite - - Dim Specs As New SpecSuite - Dim KeyValue As Variant - - If Description = "" Then - Description = "should pass scenario" - End If - - SpecHelpers.OpenIWBProxy WB - - With Specs.It(Description) - ' Load input values - For Each KeyValue In InputValues.Keys - WB.Value(CStr(KeyValue)) = InputValues.Item(CStr(KeyValue)) - Next KeyValue - - ' Run expectations - For Each KeyValue In ExpectedValues.Keys - .Expect(WB.Value(CStr(KeyValue))).ToEqual ExpectedValues.Item(CStr(KeyValue)) - Next KeyValue - End With - - SpecHelpers.CloseIWBProxy WB - Set IScenario_RunScenario = Specs -End Function - -'' -' Load the scenario from a sheet -' -' @param {String} SheetName -' --------------------------------------------- ' - -Private Sub IScenario_Load(SheetName As String) - - Dim ScenarioSheet As Worksheet - Dim Row As Integer - Set InputValues = New Dictionary - Set ExpectedValues = New Dictionary - - If SpecHelpers.SheetExists(SheetName, ThisWorkbook) Then - Set ScenarioSheet = ThisWorkbook.Sheets(SheetName) - - Description = ScenarioSheet.Cells(1, ScenarioExpectedStartCol) - - Row = ScenarioInputStartRow - Do While ScenarioSheet.Cells(Row, ScenarioInputStartCol) <> "" - InputValues.Add _ - CStr(ScenarioSheet.Cells(Row, ScenarioInputStartCol)), _ - ScenarioSheet.Cells(Row, ScenarioInputStartCol + 1).Value - - Row = Row + 1 - Loop - - Row = ScenarioExpectedStartRow - Do While ScenarioSheet.Cells(Row, ScenarioExpectedStartCol) <> "" - ExpectedValues.Add _ - CStr(ScenarioSheet.Cells(Row, ScenarioExpectedStartCol)), _ - ScenarioSheet.Cells(Row, ScenarioExpectedStartCol + 1).Value - - Row = Row + 1 - Loop - - End If - -End Sub diff --git a/src/SpecHelpers.bas b/src/SpecHelpers.bas deleted file mode 100644 index 4208f12..0000000 --- a/src/SpecHelpers.bas +++ /dev/null @@ -1,467 +0,0 @@ -Attribute VB_Name = "SpecHelpers" -'' -' SpecHelpers v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' General utilities for specs -' -' @dependencies -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -'' -' Check if named range exists and return sheet index if it does -' -' @param {String} RangeName -' @param {String} [WB] Workbook to check or active workbook -' @returns {Integer} Index of sheet that named range is found on or -1 -' --------------------------------------------- ' - -Public Function NamedRangeExists(RangeName As String, Optional WB As Workbook) As Integer - Dim rngTest As Range, i As Long - - If WB Is Nothing Then: Set WB = ActiveWorkbook - With WB - On Error Resume Next - ' Loop through all sheets in workbook. In VBA, you MUST specify - ' the worksheet name which the named range is found on. Using - ' Named Ranges in worksheet functions DO work across sheets - ' without explicit reference. - For i = 1 To .Sheets.Count Step 1 - ' Try to set our variable as the named range. - Set rngTest = .Sheets(i).Range(RangeName) - - ' If there is no error then the name exists. - If Err = 0 Then - ' Set the function to TRUE & exit - NamedRangeExists = i - Exit Function - Else - ' Clear the error and keep trying - Err.Clear - End If - Next i - End With - - ' No range found, return -1 - NamedRangeExists = -1 -End Function - -'' -' Check if sheet exists in current workbook -' -' @param {String} sheetName -' @param {Workbook} [WB] Workbook to check or active workbook -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function SheetExists(SheetName As String, Optional WB As Workbook) As Boolean - Dim Sheet As Worksheet - - If WB Is Nothing Then: Set WB = ActiveWorkbook - If Not WB Is Nothing Then - For Each Sheet In WB.Sheets - If Sheet.Name = SheetName Then - SheetExists = True - Exit Function - End If - Next Sheet - End If -End Function - -'' -' Check if sheet is visible in current workbook -' -' @param {String} sheetName -' @param {Workbook} [WB] Workbook to check or active workbook -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function SheetIsVisible(SheetName As String, Optional WB As Workbook) As Boolean - - If WB Is Nothing Then: Set WB = ActiveWorkbook - If SheetExists(SheetName, WB) Then - Dim Sheet As Worksheet - Set Sheet = WB.Sheets(SheetName) - - Select Case WB.Sheets(SheetName).Visible - Case XlSheetVisibility.xlSheetVisible: SheetIsVisible = True - End Select - End If -End Function - -'' -' Check if workbook is protected -' -' @param {Workbook} [WB] Workbook to check or active workbook -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function WBIsProtected(Optional WB As Workbook) As Boolean - - If WB Is Nothing Then: Set WB = ActiveWorkbook - If WB.ProtectWindows Then WBIsProtected = True - If WB.ProtectStructure Then WBIsProtected = True -End Function - -'' -' Check if sheet is protected -' -' @param {String} sheetName -' @param {Workbook} [WB] Workbook to check or active workbook -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function SheetIsProtected(SheetName As String, Optional WB As Workbook) As Boolean - - If WB Is Nothing Then: Set WB = ActiveWorkbook - If WB.Sheets(SheetName).ProtectContents Then SheetIsProtected = True - If WB.Sheets(SheetName).ProtectDrawingObjects Then SheetIsProtected = True - If WB.Sheets(SheetName).ProtectScenarios Then SheetIsProtected = True -End Function - -'' -' Check if file exists -' -' @param {String} filePath -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function FileExists(filePath As String) As Boolean - On Error GoTo ErrorHandling - If Not Dir(filePath, vbDirectory) = vbNullString Then FileExists = True - -ErrorHandling: - On Error GoTo 0 -End Function - -'' -' Create SheetCell helper -' -' @param {String} sheetName -' @param {Integer} row -' @param {Integer} col -' @returns {Dictionary} -' --------------------------------------------- ' - -Public Function SheetCell(SheetName As String, Row As Integer, Col As Integer) As Dictionary - Set SheetCell = New Dictionary - SheetCell.Add "SheetName", SheetName - SheetCell.Add "Row", Row - SheetCell.Add "Col", Col -End Function - -'' -' Combine collections -' -' @param {Collection} collection1 -' @param {Collection} collection2 -' @returns {Collection} -' --------------------------------------------- ' - -Public Function CombineCollections(collection1 As Collection, collection2 As Collection) As Collection - Dim combined As New Collection - Dim Value As Variant - - For Each Value In collection1 - combined.Add Value - Next Value - For Each Value In collection2 - combined.Add Value - Next Value - - Set CombineCollections = combined -End Function - -'' -' Get last row for sheet -' -' @param {Worksheet} sheet -' @returns {Integer} -' --------------------------------------------- ' - -Public Function LastRow(Sheet As Worksheet) As Integer - Dim NumRows As Integer - NumRows = Sheet.UsedRange.Rows.Count - LastRow = Sheet.UsedRange.Rows(NumRows).Row -End Function - -'' -' Check if workbook is open -' -' @param {String} Path -' @returns {Boolean} -' --------------------------------------------- ' - -Public Function WorkbookIsOpen(Path As String) As Boolean - On Error Resume Next - Dim WB As Workbook - Set WB = Application.Workbooks(Filename) - On Error GoTo 0 - - ' If failed to load already open workbook, open it - If Err.Number = 0 Then - WorkbookIsOpen = True - End If - - Set WB = Nothing - Err.Clear -End Function - -'' -' Toggle screen updating and return previous updating value -' -' @param {Boolean} [Updating=False] -' @param {Boolean} [ToggleEvents=True] -' -' Example: -' Dim PrevUpdating As Boolean -' PrevUpdating = SpecHelpers.ToggleUpdating() -' -' ... Do screen-intensive stuff -' -' ' Restore previous updating status after hard work -' ToggleUpdating PrevUpdating -' -' --------------------------------------- ' -Public Function ToggleUpdating(Optional Updating As Boolean = False, Optional ToggleEvents As Boolean = True) As Boolean - ToggleUpdating = Application.ScreenUpdating - - Application.ScreenUpdating = Updating - If Updating Or Events Then - Application.EnableEvents = Updating - End If -End Function - -'' -' Run scenario using given scenario, sheet name, and IWBProxy -' -' @param {IScenario} Scenario -' @param {IWBProxy} WB to use for scenario -' @param {String} SheetName to load scenario from -' --------------------------------------------- ' - -Public Function RunScenario(Scenario As IScenario, WB As IWBProxy, SheetName As String) As SpecSuite - If SpecHelpers.SheetExists(SheetName, ThisWorkbook) Then - Scenario.Load SheetName - Set RunScenario = Scenario.RunScenario(WB) - Else - MsgBox "Warning" & vbNewLine & "No sheet was found for the following scenario: " & SheetName, Title:="Scenario sheet not found" - End If -End Function - -'' -' Run scenarios using given scenario, sheet name, and IWBProxy -' -' @param {IScenario} Scenario -' @param {IWBProxy} WB to use for scenario -' @param {String} ... Pass scenario sheet names as additional arguments -' -' Example: -' RunScenarios(Scenario, WB, "Scenario 1", "Scenario 2", "Scenario 3") -' --------------------------------------------- ' - -Public Function RunScenarios(Scenario As IScenario, WB As IWBProxy, ParamArray SheetNames() As Variant) As Collection - Dim i As Integer - Dim SheetName As String - Dim Spec As SpecSuite - Set RunScenarios = New Collection - - For i = LBound(SheetNames) To UBound(SheetNames) - SheetName = SheetNames(i) - Set Spec = SpecHelpers.RunScenario(Scenario, WB, SheetName) - - If Not Spec Is Nothing Then - RunScenarios.Add Spec - End If - Next i -End Function - -'' -' Run scenarios using given scenario and IWBProxy by matcher -' -' @param {IScenario} Scenario -' @param {IWBProxy} WB to use for scenario -' @param {String} Matcher to compare all sheet names to -' @param {Boolean} [MatchCase=False] -' -' Example: -' RunScenarios(Scenario, WB, "Scenario") -' Sheet Names: Spec Runner, Mapping, Scenario 1, and Advanced Scenario -' -> Runs scenarios for Scenario 1 and Advanced Scenario -' --------------------------------------------- ' - -Public Function RunScenariosByMatcher(Scenario As IScenario, WB As IWBProxy, Matcher As String, _ - Optional MatchCase As Boolean = False, Optional IgnoreBlank As Boolean = True) As Collection - - Set RunScenariosByMatcher = New Collection - - Dim Sheet As Worksheet - For Each Sheet In ThisWorkbook.Sheets - If Sheet.Name = "Blank Scenario" Then - If Not IgnoreBlank Then - RunScenariosByMatcher.Add SpecHelpers.RunScenario(Scenario, WB, Sheet.Name) - End If - ElseIf MatchCase Then - If InStr(Sheet.Name, Matcher) Then - RunScenariosByMatcher.Add SpecHelpers.RunScenario(Scenario, WB, Sheet.Name) - End If - Else - If InStr(UCase(Sheet.Name), UCase(Matcher)) Then - RunScenariosByMatcher.Add SpecHelpers.RunScenario(Scenario, WB, Sheet.Name) - End If - End If - Next Sheet -End Function - -'' -' Get value from workbook for provided mapping and key -' -' @param {Workbook} WB -' @param {Dictionary} Mapping -' @param {String} Key -' @returns {Variant} Value from workbook -' --------------------------------------------- ' - -Public Function GetValue(WB As Workbook, Mapping As Dictionary, Key As String) As Variant - Dim RangeRef As Range - - Set RangeRef = GetRange(WB, Mapping, Key) - If Not RangeRef Is Nothing Then - GetValue = RangeRef.Value - End If -End Function - -'' -' Set value in workbook for provided mapping and key -' -' @param {Workbook} WB -' @param {Dictionary} Mapping -' @param {String} Key -' @param {Variant} Value -' --------------------------------------------- ' - -Public Function SetValue(WB As Workbook, Mapping As Dictionary, Key As String, Value As Variant) - Dim RangeRef As Range - - Set RangeRef = GetRange(WB, Mapping, Key) - If Not RangeRef Is Nothing Then - RangeRef.Value = Value - End If -End Function - -'' -' Get reference to range from workbook for provided mapping and key -' -' @param {Workbook} WB -' @param {Dictionary} Mapping -' @param {String} Key -' @returns {Range} Range from workbook -' --------------------------------------------- ' - -Public Function GetRange(WB As Workbook, Mapping As Dictionary, Key As String) As Range - Dim MappingValue As Dictionary - Dim NamedRangeSheetIndex As Integer - - If Mapping.Exists(Key) Then - ' If mapping contains entry for key, use it to find range - Set MappingValue = Mapping.Item(Key) - Set GetRange = WB.Sheets(MappingValue("SheetName")) _ - .Cells(MappingValue("Row"), MappingValue("Col")) - Else - ' Check for named range matching mapping key - NamedRangeSheetIndex = SpecHelpers.NamedRangeExists(Key, WB) - If NamedRangeSheetIndex > 0 Then - Set GetRange = WB.Sheets(NamedRangeSheetIndex).Range(Key) - End If - End If -End Function - -'' -' Set range in workbook for provided mapping and key -' -' @param {Workbook} WB -' @param {Dictionary} Mapping -' @param {String} Key -' @param {Variant} Value -' --------------------------------------------- ' - -Public Function SetRange(WB As Workbook, Mapping As Dictionary, Key As String, Value As Range) - Dim RangeRef As Range - - Set RangeRef = GetRange(WB, Mapping, Key) - If Not IsEmpty(RangeRef) Then - Set RangeRef = Value - End If -End Function - -'' -' Open the workbook specified in the workbook proxy -' (Opens a temporary copy if the workbook is currently open) -' -' @param {Variant} WBOrInArray IWBProxy directly or in array -' --------------------------------------------- ' - -Public Sub OpenIWBProxy(WBOrInArray As Variant) - Dim WB As IWBProxy - - If TypeOf WBOrInArray Is IWBProxy Then - Set WB = WBOrInArray - Else - Set WB = WBOrInArray(0) - End If - - ' TODO temporary copy - Dim PrevUpdating As Boolean - PrevUpdating = SpecHelpers.ToggleUpdating - - If WB.Path <> "" Then - Set WB.Instance = Workbooks.Open(WB.Path, UpdateLinks:=False, Password:=WB.Password) - Else - Err.Raise vbObjectError + 1, "Specs", "Error: No workbook path defined" - End If - - SpecHelpers.ToggleUpdating PrevUpdating -End Sub - -'' -' Close the workbook specified in the workbook proxy -' -' @param {Variant} WBOrInArray IWBProxy directly or in array -' --------------------------------------------- ' - -Public Sub CloseIWBProxy(WBOrInArray As Variant) - Dim WB As IWBProxy - - If TypeOf WBOrInArray Is IWBProxy Then - Set WB = WBOrInArray - Else - Set WB = WBOrInArray(0) - End If - - If Not WB.Instance Is Nothing Then - WB.Instance.Close False - Set WB.Instance = Nothing - End If -End Sub - -'' -' Close and reopen the workbook specified in the workbook proxy -' -' @param {Variant} WBOrInArray IWBProxy directly or in array -' --------------------------------------------- ' - -Public Sub ReloadIWBProxy(WBOrInArray As Variant) - Dim WB As IWBProxy - - If TypeOf WBOrInArray Is IWBProxy Then - Set WB = WBOrInArray - Else - Set WB = WBOrInArray(0) - End If - - SpecHelpers.CloseIWBProxy WB - SpecHelpers.OpenIWBProxy WB -End Sub diff --git a/src/WBProxy.cls b/src/WBProxy.cls deleted file mode 100644 index 704cd2e..0000000 --- a/src/WBProxy.cls +++ /dev/null @@ -1,170 +0,0 @@ -VERSION 1.0 CLASS -BEGIN - MultiUse = -1 'True -END -Attribute VB_Name = "WBProxy" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = False -Attribute VB_Exposed = True -'' -' WBProxy v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Generic implementation of workbook proxy -' -' @dependencies -' Microsoft Scripting Runtime -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -Implements IWBProxy - -Private Const MappingSheetCellsStartRow As Integer = 4 -Private Const MappingSheetCellsStartCol As Integer = 1 -Private Const MappingValuesStartRow As Integer = 4 -Private Const MappingValuesStartCol As Integer = 5 - -Private pPath As String -Private pPassword As String -Private pInstance As Workbook -Private pMapping As Dictionary - -Public Sub DefineMapping(SheetName As String) - Dim MappingSheet As Worksheet - Dim Row As Integer - Set pMapping = New Dictionary - - If SpecHelpers.SheetExists(SheetName) Then - Set MappingSheet = ThisWorkbook.Sheets(SheetName) - - Row = MappingSheetCellsStartRow - Do While MappingSheet.Cells(Row, MappingSheetCellsStartCol) <> "" - Call pMapping.Add( _ - Trim(CStr(MappingSheet.Cells(Row, MappingSheetCellsStartCol))), _ - SheetCell( _ - MappingSheet.Cells(Row, MappingSheetCellsStartCol + 1), _ - MappingSheet.Cells(Row, MappingSheetCellsStartCol + 2), _ - MappingSheet.Cells(Row, MappingSheetCellsStartCol + 3) _ - ) _ - ) - - Row = Row + 1 - Loop - - Row = MappingValuesStartRow - Do While MappingSheet.Cells(Row, MappingValuesStartCol) <> "" - Call pMapping.Add( _ - Trim(CStr(MappingSheet.Cells(Row, MappingValuesStartCol))), _ - MappingSheet.Cells(Row, MappingValuesStartCol + 1) _ - ) - - Row = Row + 1 - Loop - End If -End Sub - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Common to all IWBProxy implementations -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Sub IWBProxy_DefineMapping(SheetName As String) - Call Me.DefineMapping(SheetName) -End Sub - -Public Property Get Range(MappingKey As String) As Range - Set Range = SpecHelpers.GetRange(Instance, Mapping, MappingKey) -End Property -Private Property Get IWBProxy_Range(MappingKey As String) As Range - Set IWBProxy_Range = Range(MappingKey) -End Property -Public Property Set Range(MappingKey As String, Value As Range) - Call SpecHelpers.SetRange(Instance, Mapping, MappingKey, Value) -End Property -Private Property Set IWBProxy_Range(MappingKey As String, Value As Range) - Set Range(MappingKey) = Value -End Property - -Public Property Get Value(MappingKey As String) As Variant - Value = SpecHelpers.GetValue(Instance, Mapping, MappingKey) -End Property -Private Property Get IWBProxy_Value(MappingKey As String) As Variant - IWBProxy_Value = Value(MappingKey) -End Property -Public Property Let Value(MappingKey As String, NewValue As Variant) - Call SpecHelpers.SetValue(Instance, Mapping, MappingKey, NewValue) -End Property -Private Property Let IWBProxy_Value(MappingKey As String, NewValue As Variant) - Value(MappingKey) = NewValue -End Property - -Public Property Get Instance() As Workbook - Set Instance = pInstance -End Property -Private Property Get IWBProxy_Instance() As Workbook - Set IWBProxy_Instance = Instance -End Property -Public Property Set Instance(Value As Workbook) - Set pInstance = Value -End Property -Private Property Set IWBProxy_Instance(Value As Workbook) - Set Instance = Value -End Property - -Public Property Get Mapping() As Dictionary - Set Mapping = IWBProxy_Mapping -End Property -Private Property Get IWBProxy_Mapping() As Dictionary - If pMapping Is Nothing Then: Set pMapping = New Dictionary - Set IWBProxy_Mapping = pMapping -End Property -Public Property Set Mapping(Value As Dictionary) - Set IWBProxy_Mapping = Value -End Property -Private Property Set IWBProxy_Mapping(Value As Dictionary) - Set pMapping = Value -End Property - -Public Property Get Password() As String - Password = pPassword -End Property -Private Property Get IWBProxy_Password() As String - IWBProxy_Password = Password -End Property -Public Property Let Password(Value As String) - pPassword = Value -End Property -Private Property Let IWBProxy_Password(Value As String) - Password = Value -End Property - -Public Property Get Path() As String - Path = pPath -End Property -Private Property Get IWBProxy_Path() As String - IWBProxy_Path = Path -End Property -Public Property Let Path(Value As String) - pPath = Value -End Property -Private Property Let IWBProxy_Path(Value As String) - Path = Value -End Property - -Public Property Get TempPath() As String - TempPath = pTempPath -End Property -Public Property Get IWBProxy_TempPath() As String - IWBProxy_TempPath = TempPath -End Property -Public Property Let TempPath(Value As String) - pTempPath = Value -End Property -Public Property Let IWBProxy_TempPath(Value As String) - TempPath = Value -End Property - -Private Sub Class_Terminate() - Set Me.Instance = Nothing -End Sub From a669e4898cd4583aa7c7c9d575fd1b2832de6827 Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Sun, 6 Nov 2016 21:57:21 -0500 Subject: [PATCH 2/5] Use evented approach and reporters --- src/ImmediateReporter.cls | 69 +++++++++ src/InlineRunner.bas | 170 ---------------------- src/SpecDefinition.cls | 137 ++++++------------ src/SpecExpectation.cls | 288 +++++++++++++++++++++++--------------- src/SpecSuite.cls | 130 ++++++++--------- 5 files changed, 343 insertions(+), 451 deletions(-) create mode 100644 src/ImmediateReporter.cls delete mode 100644 src/InlineRunner.bas diff --git a/src/ImmediateReporter.cls b/src/ImmediateReporter.cls new file mode 100644 index 0000000..d903ffe --- /dev/null +++ b/src/ImmediateReporter.cls @@ -0,0 +1,69 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "ImmediateReporter" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +'' +' ImmediateReporter v2.0.0-alpha +' (c) Tim Hall - https://github.com/VBA-tools/Excel-TDD +' +' Report results to Immediate Window +' +' @class ImmediateReporter +' @author tim.hall.engr@gmail.com +' @license MIT (http://www.opensource.org/licenses/mit-license.php) +' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +Private WithEvents pSpecs As SpecSuite +Attribute pSpecs.VB_VarHelpID = -1 +Private Finished As Boolean + +'' +' Listen to given SpecSuite +' +' @method ListenTo +' @param {SpecSuite} Specs +'' +Public Sub ListenTo(Specs As SpecSuite) + If Not pSpecs Is Nothing Then + Done + End If + + Debug.Print "= " & Now & " =" + Set pSpecs = Specs + Finished = False +End Sub + +'' +' Finish report for SpecSuite +' +' @method Done +'' +Public Function Done() + Finished = True + Debug.Print "= DONE = " & pSpecs.Results.Count & " =" +End Function + +Private Function ResultTypeToString(ResultType As SpecResultType) As String + Select Case ResultType + Case SpecResultType.Pass + ResultTypeToString = "PASS" + Case SpecResultType.Fail + ResultTypeToString = "FAIL" + Case SpecResultType.Pending + ResultTypeToString = "pending" + End Select +End Function + +Private Sub Class_Terminate() + If Not Finished Then + Done + End If +End Sub + +Private Sub pSpecs_Result(Description As String, ResultType As SpecResultType, Expectations As Collection, Id As String) + Debug.Print ResultTypeToString(ResultType) & " " & Description +End Sub diff --git a/src/InlineRunner.bas b/src/InlineRunner.bas deleted file mode 100644 index 98ba6bf..0000000 --- a/src/InlineRunner.bas +++ /dev/null @@ -1,170 +0,0 @@ -Attribute VB_Name = "InlineRunner" -'' -' InlineRunner v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Runner for outputting results of specs to Immediate window -' -' @dependencies -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -'' -' Run the given suite -' -' @param {SpecSuite} Specs -' @param {Boolean} [ShowFailureDetails=True] Show failed expectations -' @param {Boolean} [ShowPassed=False] Show passed specs -' @param {Boolean} [ShowSuiteDetails=False] Show details for suite -' --------------------------------------------- ' - -Public Sub RunSuite(Specs As SpecSuite, Optional ShowFailureDetails As Boolean = True, Optional ShowPassed As Boolean = False, Optional ShowSuiteDetails As Boolean = False) - Dim SuiteCol As New Collection - - SuiteCol.Add Specs - RunSuites SuiteCol, ShowFailureDetails, ShowPassed, ShowSuiteDetails -End Sub - -'' -' Run the given collection of spec suites -' -' @param {Collection} of SpecSuite -' @param {Boolean} [ShowFailureDetails=True] Show failed expectations -' @param {Boolean} [ShowPassed=False] Show passed specs -' @param {Boolean} [ShowSuiteDetails=True] Show details for suite -' --------------------------------------------- ' - -Public Sub RunSuites(SuiteCol As Collection, Optional ShowFailureDetails As Boolean = True, Optional ShowPassed As Boolean = False, Optional ShowSuiteDetails As Boolean = True) - Dim Suite As SpecSuite - Dim Spec As SpecDefinition - Dim TotalCount As Integer - Dim FailedSpecs As Integer - Dim PendingSpecs As Integer - Dim ShowingResults As Boolean - Dim Indentation As String - Dim i As Integer - - For Each Suite In SuiteCol - If Not Suite Is Nothing Then - TotalCount = TotalCount + Suite.SpecsCol.Count - - For Each Spec In Suite.SpecsCol - If Spec.Result = SpecResult.Fail Then - FailedSpecs = FailedSpecs + 1 - ElseIf Spec.Result = SpecResult.Pending Then - PendingSpecs = PendingSpecs + 1 - End If - Next Spec - End If - Next Suite - - Debug.Print vbNewLine & "= " & SummaryMessage(TotalCount, FailedSpecs, PendingSpecs) & " = " & Now & " =========================" - For Each Suite In SuiteCol - If Not Suite Is Nothing Then - If ShowSuiteDetails Then - Debug.Print SuiteMessage(Suite) - Indentation = " " - ShowingResults = True - Else - Indentation = "" - End If - - For Each Spec In Suite.SpecsCol - If Spec.Result = SpecResult.Fail Then - Debug.Print Indentation & FailureMessage(Spec, ShowFailureDetails, Indentation) - ShowingResults = True - ElseIf Spec.Result = SpecResult.Pending Then - Debug.Print Indentation & PendingMessage(Spec) - ShowingResults = True - ElseIf ShowPassed Then - Debug.Print Indentation & PassingMessage(Spec) - ShowingResults = True - End If - Next Spec - End If - Next Suite - - If ShowingResults Then - Debug.Print "===" - End If -End Sub - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Internal Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Function SummaryMessage(TotalCount As Integer, FailedSpecs As Integer, PendingSpecs As Integer) As String - If FailedSpecs = 0 Then - SummaryMessage = "PASS (" & TotalCount - PendingSpecs & " of " & TotalCount & " passed" - Else - SummaryMessage = "FAIL (" & FailedSpecs & " of " & TotalCount & " failed" - End If - - If PendingSpecs = 0 Then - SummaryMessage = SummaryMessage & ")" - Else - SummaryMessage = SummaryMessage & ", " & PendingSpecs & " pending)" - End If -End Function - -Private Function FailureMessage(Spec As SpecDefinition, ShowFailureDetails As Boolean, Indentation As String) As String - Dim FailedExpectation As SpecExpectation - Dim i As Integer - - FailureMessage = ResultMessage(Spec, "X") - - If ShowFailureDetails Then - FailureMessage = FailureMessage & vbNewLine - - For Each FailedExpectation In Spec.FailedExpectations - FailureMessage = FailureMessage & Indentation & " " & FailedExpectation.FailureMessage - - If i + 1 <> Spec.FailedExpectations.Count Then: FailureMessage = FailureMessage & vbNewLine - i = i + 1 - Next FailedExpectation - End If -End Function - -Private Function PendingMessage(Spec As SpecDefinition) As String - PendingMessage = ResultMessage(Spec, ".") -End Function - -Private Function PassingMessage(Spec As SpecDefinition) As String - PassingMessage = ResultMessage(Spec, "+") -End Function - -Private Function ResultMessage(Spec As SpecDefinition, Symbol As String) As String - ResultMessage = Symbol & " " - - If Spec.Id <> "" Then - ResultMessage = ResultMessage & Spec.Id & ": " - End If - - ResultMessage = ResultMessage & Spec.Description -End Function - -Private Function SuiteMessage(Suite As SpecSuite) As String - Dim HasFailures As Boolean - Dim Spec As SpecDefinition - - For Each Spec In Suite.SpecsCol - If Spec.Result = SpecResult.Fail Then - HasFailures = True - Exit For - End If - Next Spec - - If HasFailures Then - SuiteMessage = "X " - Else - SuiteMessage = "+ " - End If - - If Suite.Description <> "" Then - SuiteMessage = SuiteMessage & Suite.Description - Else - SuiteMessage = SuiteMessage & Suite.SpecsCol.Count & " specs" - End If -End Function diff --git a/src/SpecDefinition.cls b/src/SpecDefinition.cls index e7fb155..6d9d657 100644 --- a/src/SpecDefinition.cls +++ b/src/SpecDefinition.cls @@ -8,122 +8,75 @@ Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = True '' -' SpecDefinition v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD +' SpecDefinition v2.0.0-beta +' (c) Tim Hall - https://github.com/VBA-tools/Excel-TDD ' -' Provides helpers and acts as workbook proxy +' Collection of expectations for verifying spec ' -' @dependencies +' @class SpecDefinition ' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' +' @license MIT (http://www.opensource.org/licenses/mit-license.php) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +Option Explicit -Private pExpectations As Collection -Private pFailedExpectations As Collection - -Public Enum SpecResult - Pass - Fail - Pending -End Enum - - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Properties -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' --------------------------------------------- ' +' Events and Properties +' --------------------------------------------- ' Public Description As String Public Id As String +Public Expectations As VBA.Collection -Public Property Get Expectations() As Collection - If pExpectations Is Nothing Then - Set pExpectations = New Collection - End If - Set Expectations = pExpectations -End Property -Private Property Let Expectations(Value As Collection) - Set pExpectations = Value -End Property - -Public Property Get FailedExpectations() As Collection - If pFailedExpectations Is Nothing Then - Set pFailedExpectations = New Collection - End If - Set FailedExpectations = pFailedExpectations -End Property -Private Property Let FailedExpectations(Value As Collection) - Set pFailedExpectations = Value -End Property +Public Suite As SpecSuite - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' ' Public Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' '' -' Create a new expectation to test the defined value +' Create a new expectation to test the given actual value ' -' @param {Variant} value Value to be tested by expectation -' @returns {Expectation} -' --------------------------------------------- ' - -Public Function Expect(Optional Value As Variant) As SpecExpectation - Dim Exp As New SpecExpectation +' @method Expect +' @param {Variant} Actual value to test +' @return {SpecExpectation} +'' +Public Function Expect(Optional Actual As Variant) As SpecExpectation + Dim Expectation As New SpecExpectation - If VarType(Value) = vbObject Then - Set Exp.Actual = Value + If VBA.VarType(Actual) = VBA.vbObject Then + Set Expectation.Actual = Actual Else - Exp.Actual = Value + Expectation.Actual = Actual End If - Me.Expectations.Add Exp + Me.Expectations.Add Expectation - Set Expect = Exp + Set Expect = Expectation End Function -'' -' Run each expectation, store failed expectations, and return result -' -' @returns {SpecResult} Pass/Fail/Pending -' --------------------------------------------- ' +' ============================================= ' +' Private Functions +' ============================================= ' -Public Function Result() As SpecResult - Dim Exp As SpecExpectation - - ' Reset failed expectations - FailedExpectations = New Collection +Private Sub Class_Initialize() + Set Me.Expectations = New VBA.Collection +End Sub + +Private Sub Class_Terminate() + Dim ResultType As SpecResultType + Dim Expectation As SpecExpectation - ' If no expectations have been defined, return pending - If Me.Expectations.Count < 1 Then - Result = Pending + If Me.Expectations.Count = 0 Then + ResultType = SpecResultType.Pending Else - ' Loop through all expectations - For Each Exp In Me.Expectations - ' If expectation fails, store it - If Exp.Result = Fail Then - FailedExpectations.Add Exp + ResultType = SpecResultType.Pass + For Each Expectation In Me.Expectations + If Not Expectation.Passed Then + ResultType = SpecResultType.Fail + Exit For End If - Next Exp - - ' If no expectations failed, spec passes - If Me.FailedExpectations.Count > 0 Then - Result = Fail - Else - Result = Pass - End If + Next Expectation End If -End Function -'' -' Helper to get result name (i.e. "Pass", "Fail", "Pending") -' -' @returns {String} -' --------------------------------------------- ' + Me.Suite.AddResult Me.Description, ResultType, Me.Expectations, Me.Id +End Sub -Public Function ResultName() As String - Select Case Me.Result - Case Pass: ResultName = "Pass" - Case Fail: ResultName = "Fail" - Case Pending: ResultName = "Pending" - End Select -End Function diff --git a/src/SpecExpectation.cls b/src/SpecExpectation.cls index 3f58548..ed15002 100644 --- a/src/SpecExpectation.cls +++ b/src/SpecExpectation.cls @@ -8,51 +8,55 @@ Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = True '' -' SpecExpectation v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD +' SpecExpectation v2.0.0-beta +' (c) Tim Hall - https://github.com/VBA-tools/Excel-TDD ' ' Provides various tests that can be performed for a provided value ' -' @dependencies +' @class SpecExpectation ' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' +' @license MIT (http://www.opensource.org/licenses/mit-license.php) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +Option Explicit -Public Enum ExpectResult - Pass - Fail -End Enum +' --------------------------------------------- ' +' Properties +' --------------------------------------------- ' Public Actual As Variant Public Expected As Variant -Public Result As ExpectResult +Public Passed As Boolean Public FailureMessage As String - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' ' Public Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' '' -' Check if the actual value is equal / not equal to the expected value +' Check if the actual value is equal to the expected value ' -' @param {Variant} Expected -' --------------------------------------------- ' +' @method ToEqual +' @param {Variant} Expected value +'' Public Sub ToEqual(Expected As Variant) Check IsEqual(Me.Actual, Expected), "to equal", Expected:=Expected End Sub + +'' +' @method ToNotEqual +' @param {Variant} Expected value +'' Public Sub ToNotEqual(Expected As Variant) Check IsEqual(Me.Actual, Expected), "to not equal", Expected:=Expected, Inverse:=True End Sub Private Function IsEqual(Actual As Variant, Expected As Variant) As Variant - If IsError(Actual) Or IsError(Expected) Then + If VBA.IsError(Actual) Or VBA.IsError(Expected) Then IsEqual = False - ElseIf IsObject(Actual) Or IsObject(Expected) Then + ElseIf VBA.IsObject(Actual) Or VBA.IsObject(Expected) Then IsEqual = "Unsupported: Can't compare objects" - ElseIf VarType(Actual) = vbDouble And VarType(Expected) = vbDouble Then - ' It is inherently difficult/almost impossible to check equality of Double + ElseIf VBA.VarType(Actual) = vbDouble And VBA.VarType(Expected) = vbDouble Then + ' It is inherently difficult/almost impossible to Check equality of Double ' http://support.microsoft.com/kb/78113 ' ' Compare up to 15 significant figures @@ -64,36 +68,49 @@ Private Function IsEqual(Actual As Variant, Expected As Variant) As Variant End Function '' -' Check if the actual value is undefined / not undefined +' Check if the actual value is undefined ' (Nothing, Empty, Null, or Missing) -' --------------------------------------------- ' -Public Sub ToBeDefined() - Debug.Print "Excel-TDD: DEPRECATED, ToBeDefined() has been deprecated in favor of ToNotBeUndefined and will be removed in Excel-TDD v2.0.0" - Check IsUndefined(Me.Actual), "to be defined", Inverse:=True -End Sub +' +' @method ToBeUndefined +'' Public Sub ToBeUndefined() Check IsUndefined(Me.Actual), "to be undefined" End Sub + +'' +' Check if the actual value is not undefined +' (not Nothing, Empty, Null, or Missing) +' +' @method ToNotBeUndefined +'' Public Sub ToNotBeUndefined() Check IsUndefined(Me.Actual), "to not be undefined", Inverse:=True End Sub Private Function IsUndefined(Actual As Variant) As Variant - IsUndefined = IsNothing(Actual) Or IsEmpty(Actual) Or IsNull(Actual) Or IsMissing(Actual) + IsUndefined = IsNothing(Actual) Or VBA.IsEmpty(Actual) Or VBA.IsNull(Actual) Or VBA.IsMissing(Actual) End Function '' -' Check if the actual value is nothing / not nothing -' --------------------------------------------- ' +' Check if the actual value is Nothing +' +' @method ToBeNothing +'' Public Sub ToBeNothing() Check IsNothing(Me.Actual), "to be nothing" End Sub + +'' +' Check if the actual value is not Nothing +' +' @method ToNotBeNothing +'' Public Sub ToNotBeNothing() Check IsNothing(Me.Actual), "to not be nothing", Inverse:=True End Sub Private Function IsNothing(Actual As Variant) As Variant - If IsObject(Actual) Then + If VBA.IsObject(Actual) Then If Actual Is Nothing Then IsNothing = True Else @@ -105,40 +122,65 @@ Private Function IsNothing(Actual As Variant) As Variant End Function '' -' Check if the actual value is empty / not empty -' --------------------------------------------- ' +' Check if the actual value is empty +' +' @method ToBeEmpty +'' Public Sub ToBeEmpty() - Check IsEmpty(Me.Actual), "to be empty" + Check VBA.IsEmpty(Me.Actual), "to be empty" End Sub + +'' +' Check if the actual value is not empty +' +' @method ToNotBeEmpty +'' Public Sub ToNotBeEmpty() - Check IsEmpty(Me.Actual), "to not be empty", Inverse:=True + Check VBA.IsEmpty(Me.Actual), "to not be empty", Inverse:=True End Sub '' -' Check if the actual value is null / not null -' --------------------------------------------- ' +' Check if the actual value is null +' +' @method ToBeNull +'' Public Sub ToBeNull() - Check IsNull(Me.Actual), "to be null" + Check VBA.IsNull(Me.Actual), "to be null" End Sub + +'' +' Check if the actual value is not null +' +' @method ToNotBeNull +'' Public Sub ToNotBeNull() - Check IsNull(Me.Actual), "to not be null", Inverse:=True + Check VBA.IsNull(Me.Actual), "to not be null", Inverse:=True End Sub '' -' Check if the actual value is missing / not missing -' --------------------------------------------- ' +' Check if the actual value is missing +' +' @method ToBeMissing +'' Public Sub ToBeMissing() - Check IsMissing(Me.Actual), "to be missing" + Check VBA.IsMissing(Me.Actual), "to be missing" End Sub + +'' +' Check if the actual value is not missing +' +' @method ToNotBeMissing +'' Public Sub ToNotBeMissing() - Check IsMissing(Me.Actual), "to not be missing", Inverse:=True + Check VBA.IsMissing(Me.Actual), "to not be missing", Inverse:=True End Sub '' ' Check if the actual value is less than the expected value ' -' @param {Variant} Expected -' --------------------------------------------- ' +' @method ToBeLessThan / ToBeLT +' @param {Variant} Expected value +'' Public Sub ToBeLessThan(Expected As Variant) Check IsLT(Me.Actual, Expected), "to be less than", Expected:=Expected End Sub @@ -147,7 +189,7 @@ Public Sub ToBeLT(Expected As Variant) End Sub Private Function IsLT(Actual As Variant, Expected As Variant) As Variant - If IsError(Actual) Or IsError(Expected) Or Actual >= Expected Then + If VBA.IsError(Actual) Or VBA.IsError(Expected) Or Actual >= Expected Then IsLT = False Else IsLT = True @@ -157,8 +199,9 @@ End Function '' ' Check if the actual value is less than or equal to the expected value ' -' @param {Variant} Expected -' --------------------------------------------- ' +' @method ToBeLessThanOrEqualTo / ToBeLTE +' @param {Variant} Expected value +'' Public Sub ToBeLessThanOrEqualTo(Expected As Variant) Check IsLTE(Me.Actual, Expected), "to be less than or equal to", Expected:=Expected End Sub @@ -167,7 +210,7 @@ Public Sub ToBeLTE(Expected As Variant) End Sub Private Function IsLTE(Actual As Variant, Expected As Variant) As Variant - If IsError(Actual) Or IsError(Expected) Or Actual > Expected Then + If VBA.IsError(Actual) Or VBA.IsError(Expected) Or Actual > Expected Then IsLTE = False Else IsLTE = True @@ -177,8 +220,9 @@ End Function '' ' Check if the actual value is greater than the expected value ' -' @param {Variant} Expected -' --------------------------------------------- ' +' @method ToBeGreaterThan / ToBeGT +' @param {Variant} Expected value +'' Public Sub ToBeGreaterThan(Expected As Variant) Check IsGT(Me.Actual, Expected), "to be greater than", Expected:=Expected End Sub @@ -187,7 +231,7 @@ Public Sub ToBeGT(Expected As Variant) End Sub Private Function IsGT(Actual As Variant, Expected As Variant) As Variant - If IsError(Actual) Or IsError(Expected) Or Actual <= Expected Then + If VBA.IsError(Actual) Or VBA.IsError(Expected) Or Actual <= Expected Then IsGT = False Else IsGT = True @@ -197,8 +241,9 @@ End Function '' ' Check if the actual value is greater than or equal to the expected value ' +' @method ToBeGreaterThanOrEqualTo / ToBeGTE ' @param {Variant} Expected -' --------------------------------------------- ' +'' Public Sub ToBeGreaterThanOrEqualTo(Expected As Variant) Check IsGTE(Me.Actual, Expected), "to be greater than or equal to", Expected:=Expected End Sub @@ -207,7 +252,7 @@ Public Sub ToBeGTE(Expected As Variant) End Sub Private Function IsGTE(Actual As Variant, Expected As Variant) As Variant - If IsError(Actual) Or IsError(Expected) Or Actual < Expected Then + If VBA.IsError(Actual) Or VBA.IsError(Expected) Or Actual < Expected Then IsGTE = False Else IsGTE = True @@ -217,12 +262,21 @@ End Function '' ' Check if the actual value is close to the expected value ' -' @param {Variant} Expected +' @method ToBeCloseTo +' @param {Variant} Expected value ' @param {Integer} SignificantFigures (1-15) -' --------------------------------------------- ' +'' Public Sub ToBeCloseTo(Expected As Variant, SignificantFigures As Integer) Check IsCloseTo(Me.Actual, Expected, SignificantFigures), "to be close to", Expected:=Expected End Sub + +'' +' Check if the actual value is not close to the expected value +' +' @method ToNotBeCloseTo +' @param {Variant} Expected value +' @param {Integer} SignificantFigures (1-15 +'' Public Sub ToNotBeCloseTo(Expected As Variant, SignificantFigures As Integer) Check IsCloseTo(Me.Actual, Expected, SignificantFigures), "to be close to", Expected:=Expected, Inverse:=True End Sub @@ -233,7 +287,7 @@ Private Function IsCloseTo(Actual As Variant, Expected As Variant, SignificantFi If SignificantFigures < 1 Or SignificantFigures > 15 Then IsCloseTo = "ToBeCloseTo/ToNotBeClose to can only compare from 1 to 15 significant figures""" - ElseIf Not IsError(Actual) And Not IsError(Expected) Then + ElseIf Not VBA.IsError(Actual) And Not VBA.IsError(Expected) Then ' Convert values to scientific notation strings and then compare strings If Actual > 1 Then ActualAsString = VBA.Format$(Actual, VBA.Left$("0.00000000000000", SignificantFigures + 1) & "e+0") @@ -252,39 +306,27 @@ Private Function IsCloseTo(Actual As Variant, Expected As Variant, SignificantFi End Function '' -' Check if the actual value contains the expected value -' Deprecated: Check if the actual value contains the expected value +' Check if the actual value array contains the expected value ' -' @param {Variant} Expected -' @param {Boolean} [MatchCase=True] *deprecated -' --------------------------------------------- ' -Public Sub ToContain(Expected As Variant, Optional MatchCase As Boolean = True) - If VarType(Me.Actual) = vbString Then - Debug.Print "Excel-TDD: DEPRECATED ToContain has been changed to ToMatch in Excel-TDD v2.0.0" - If MatchCase Then - Check Matches(Me.Actual, Expected), "to match", Expected:=Expected - Else - Check Matches(VBA.UCase$(Me.Actual), VBA.UCase$(Expected)), "to match", Expected:=Expected - End If - Else - Check Contains(Me.Actual, Expected), "to contain", Expected:=Expected - End If +' @method ToContain +' @param {Variant} Expected value +'' +Public Sub ToContain(Expected As Variant) + Check Contains(Me.Actual, Expected), "to contain", Expected:=Expected End Sub -Public Sub ToNotContain(Expected As Variant, Optional MatchCase As Boolean = True) - If VarType(Me.Actual) = vbString Then - Debug.Print "Excel-TDD: DEPRECATED ToNotContain has been changed to ToMatch in Excel-TDD v2.0.0" - If MatchCase Then - Check Matches(Me.Actual, Expected), "to not match", Expected:=Expected, Inverse:=True - Else - Check Matches(VBA.UCase$(Me.Actual), VBA.UCase$(Expected)), "to not match", Expected:=Expected, Inverse:=True - End If - Else - Check Contains(Me.Actual, Expected), "to not contain", Expected:=Expected, Inverse:=True - End If + +'' +' Check if the actual value array does not contain the expected value +' +' @method ToNotContain +' @param {Variant} Expected value +'' +Public Sub ToNotContain(Expected As Variant) + Check Contains(Me.Actual, Expected), "to not contain", Expected:=Expected, Inverse:=True End Sub Private Function Contains(Actual As Variant, Expected As Variant) As Variant - If Not IsArray(Actual) Then + If Not IsArrayOrCollection(Actual) Then Contains = "Error: Actual needs to be an Array or Collection for ToContain/ToNotContain" Else Dim i As Integer @@ -307,20 +349,29 @@ Private Function Contains(Actual As Variant, Expected As Variant) As Variant End Function '' -' Check if the actual value matches the expected value +' Check if the actual value string has a match for the expected value substring ' (Only checks if the actual contains the expected string currently) ' -' @param {Variant} Expected -' --------------------------------------------- ' +' @method ToMatch +' @param {Variant} Expected value +'' Public Sub ToMatch(Expected As Variant) Check Matches(Me.Actual, Expected), "to match", Expected:=Expected End Sub + +'' +' Check if the actual value string does not have a match for the expected value substring +' (Only checks if the actual does not contain the expected string currently) +' +' @method ToNotMatch +' @param {Variant} Expected value +'' Public Sub ToNotMatch(Expected As Variant) Check Matches(Me.Actual, Expected), "to not match", Expected:=Expected, Inverse:=True End Sub Private Function Matches(Actual As Variant, Expected As Variant) As Variant - If InStr(Actual, Expected) > 0 Then + If VBA.InStr(Actual, Expected) > 0 Then Matches = True Else Matches = False @@ -349,10 +400,11 @@ End Function ' End If ' End Function ' +' @method RunMatcher ' @param {String} Name of function for matcher ' @param {String} Message ' @param {...} Arguments for custom matcher -' --------------------------------------------- ' +'' Public Sub RunMatcher(Name As String, Message As String, ParamArray Arguments()) Dim Expected As String Dim i As Integer @@ -380,20 +432,20 @@ Public Sub RunMatcher(Name As String, Message As String, ParamArray Arguments()) End If End Sub -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Internal Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' +' Private Methods +' ============================================= ' Private Sub Check(Result As Variant, Message As String, Optional Expected As Variant, Optional Inverse As Boolean = False) - If Not IsMissing(Expected) Then - If IsObject(Expected) Then + If Not VBA.IsMissing(Expected) Then + If VBA.IsObject(Expected) Then Set Me.Expected = Expected Else Me.Expected = Expected End If End If - If VarType(Result) = vbString Then + If VBA.VarType(Result) = VBA.vbString Then Fails CStr(Result) Else If Inverse Then @@ -409,55 +461,59 @@ Private Sub Check(Result As Variant, Message As String, Optional Expected As Var End Sub Private Sub Passes() - Me.Result = ExpectResult.Pass + Me.Passed = True End Sub Private Sub Fails(Message As String) - Me.Result = ExpectResult.Fail + Me.Passed = False Me.FailureMessage = Message End Sub Private Function CreateFailureMessage(Message As String, Optional Expected As Variant) As String CreateFailureMessage = "Expected " & GetStringForValue(Me.Actual) & " " & Message - If Not IsMissing(Expected) Then + If Not VBA.IsMissing(Expected) Then CreateFailureMessage = CreateFailureMessage & " " & GetStringForValue(Expected) End If End Function Private Function GetStringForValue(Value As Variant) As String - If IsObject(Value) Then + If VBA.IsMissing(Value) Then + GetStringForValue = "(Missing)" + Exit Function + End If + + Select Case VBA.VarType(Value) + Case VBA.vbObject If Value Is Nothing Then GetStringForValue = "(Nothing)" Else GetStringForValue = "(Object)" End If - ElseIf IsArray(Value) Then + Case VBA.vbArray To VBA.vbArray + VBA.vbByte GetStringForValue = "(Array)" - ElseIf IsEmpty(Value) Then + Case VBA.vbEmpty GetStringForValue = "(Empty)" - ElseIf IsNull(Value) Then + Case VBA.vbNull GetStringForValue = "(Null)" - ElseIf IsMissing(Value) Then - GetStringForValue = "(Missing)" - Else + Case VBA.vbString + GetStringForValue = """" & Value & """" + Case Else GetStringForValue = CStr(Value) - End If + End Select If GetStringForValue = "" Then GetStringForValue = "(Undefined)" End If End Function -Private Function IsArray(Value As Variant) As Boolean - If Not IsEmpty(Value) Then - If IsObject(Value) Then - If TypeOf Value Is Collection Then - IsArray = True - End If - ElseIf VarType(Value) = vbArray Or VarType(Value) = 8204 Then - ' VarType = 8204 seems to arise from Array(...) constructor - IsArray = True +Private Function IsArrayOrCollection(Value As Variant) As Boolean + Select Case VBA.VarType(Value) + Case VBA.vbArray To VBA.vbArray + VBA.vbByte + IsArrayOrCollection = True + Case VBA.vbObject + If TypeOf Value Is Collection Then + IsArrayOrCollection = True End If - End If + End Select End Function diff --git a/src/SpecSuite.cls b/src/SpecSuite.cls index fb580a1..2de8e85 100644 --- a/src/SpecSuite.cls +++ b/src/SpecSuite.cls @@ -8,105 +8,89 @@ Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = True '' -' SpecSuite v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD +' SpecSuite v2.0.0-alpha +' (c) Tim Hall - https://github.com/VBA-tools/Excel-TDD ' -' A collection of specs with the workbook that they act on +' A collection of specs and results ' -' @dependencies +' @class SpecSuite ' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' +' @license MIT (http://www.opensource.org/licenses/mit-license.php) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +Option Explicit -Private pSpecsCol As Collection - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Properties -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' --------------------------------------------- ' +' Types, Events, and Properties +' --------------------------------------------- ' -Public Description As String +Public Enum SpecResultType + Pass + Fail + Pending +End Enum -Public BeforeEachCallback As String -Public BeforeEachCallbackArgs As Variant +Public Event BeforeEach() +Public Event Result(Description As String, ResultType As SpecResultType, Expectations As VBA.Collection, Id As String) +Public Event AfterEach() -Public Property Get SpecsCol() As Collection - If pSpecsCol Is Nothing Then: Set pSpecsCol = New Collection - Set SpecsCol = pSpecsCol -End Property -Public Property Let SpecsCol(Value As Collection) - Set pSpecsCol = Value -End Property +'' +' (Optional) description of suite for display in runners +' +' @property Description +' @type String +'' +Public Description As String +'' +' @property Results +' @type Collection +'' +Public Results As VBA.Collection -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' ' Public Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +' ============================================= ' '' ' Create a new spec definition with description ' +' @method It ' @param {String} Description -' @param {String} [SpecId] Useful for identifying specific specs -' @returns {SpecDefinition} Initialized Spec Definition -' --------------------------------------------- ' - -Public Function It(Description As String, Optional SpecId As String = "") As SpecDefinition +' @param {String} [Id = ""] Useful for identifying specific specs +' @returns {SpecDefinition} +'' +Public Function It(Description As String, Optional Id As String = "") As SpecDefinition Dim Spec As New SpecDefinition - ' Call BeforeEach if defined - ExecuteBeforeEach + RaiseEvent BeforeEach - ' Initialize spec + ' Prepare Spec Spec.Description = Description - Spec.Id = SpecId - Me.SpecsCol.Add Spec + Spec.Id = Id + Set Spec.Suite = Me + Set It = Spec End Function '' -' Setup a callback to run before each spec +' Called at end of SpecDefinition with results ' -' @param {String} Callback -' @param {...} CallbackArgs any additional arguments to pass as array to callback each time -' -' Example: -' BeforeEach "Cleanup", 100, 200 -' -' ' Cleanup is called before each spec with Args = [100, 200] -' Sub Cleanup(Args As Variant) -' ThisWorkbook.Sheets("Main").Cells(1, 1) = Args(0) ' (100) -' ThisWorkbook.Sheets("Main").Cells(2, 1) = Args(1) ' (200) -' End Sub -' --------------------------------------------- ' - -Public Sub BeforeEach(Callback As String, ParamArray CallbackArgs() As Variant) - Me.BeforeEachCallback = Callback - Me.BeforeEachCallbackArgs = CallbackArgs +' @internal +' @method AddResult +' @param {SpecResultType} ResultType +' @param {Collection} Expectations +'' +Public Sub AddResult(Description As String, ResultType As SpecResultType, Expectations As VBA.Collection, Id As String) + Me.Results.Add Array(Description, ResultType, Expectations, Id) + + RaiseEvent Result(Description, ResultType, Expectations, Id) + RaiseEvent AfterEach End Sub +' ============================================= ' +' Private Functions +' ============================================= ' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Internal Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Sub ExecuteBeforeEach() - If Me.BeforeEachCallback <> "" Then - Dim HasArguments As Boolean - If VarType(Me.BeforeEachCallbackArgs) = vbObject Then - If Not Me.BeforeEachCallbackArgs Is Nothing Then - HasArguments = True - End If - ElseIf IsArray(Me.BeforeEachCallbackArgs) Then - If UBound(Me.BeforeEachCallbackArgs) >= 0 Then - HasArguments = True - End If - End If - - If HasArguments Then - Application.Run Me.BeforeEachCallback, Me.BeforeEachCallbackArgs - Else - Application.Run Me.BeforeEachCallback - End If - End If +Private Sub Class_Initialize() + Set Me.Results = New VBA.Collection End Sub From d40976cf153507075c54d35e8c6a26551a2950f6 Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Mon, 19 Dec 2016 10:10:18 -0500 Subject: [PATCH 3/5] Remove old examples --- examples/Excel-TDD - Example - Inline.xlsm | Bin 52627 -> 0 bytes examples/Excel-TDD - Example - Runner.xlsm | Bin 106222 -> 0 bytes .../Excel-TDD - Example - Test Workbook.xlsm | Bin 8867 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 examples/Excel-TDD - Example - Inline.xlsm delete mode 100644 examples/Excel-TDD - Example - Runner.xlsm delete mode 100644 examples/Excel-TDD - Example - Test Workbook.xlsm diff --git a/examples/Excel-TDD - Example - Inline.xlsm b/examples/Excel-TDD - Example - Inline.xlsm deleted file mode 100644 index 050f9ef4a0155b2b4196584a39ca69a4b50d3aa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52627 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 hqi%`V!g`_2WG|3SAZQqtNAw9W_{tOQv|`r5Op zyPwUH>h`HK69s*mMx5Q90DNe{NpTPttBH0p@ff7IRb23ZFpBdCb`&tH#D zvL)d9z7(BLM%!zO+_pW=2W&eps-x0k4VtR2&r1W3GjZSNxWgHQgJvFQnx2P=$$3V?pcd6hBq{-Nh3+9k$OOj;M@UDS&r2L^|1n{tXaL0y{T1h zj}ct5mOU5q{=6Mc!~2BYUTJ=d+uS3lFX_Pl%7YGAZ!X=x@o#F&pDt}o+33{NNd-n{ zS$63jl3cnq_SYJJtXt>Sk>I;?2O=(&e@Xj|nBqB?wLjAa58dN2>UEc^9E&bjU99@Z z*if{1$L@2R%Y5&udL3n-_-s+z7ac9_s>(@QBEFv%Oc1**#o`+48f(^r{jqQ8_mElE zH-*?8m6`LzzDy}7MbE!O5`zn_mVjb-K~Bowo!R~B0=M?NKDSo=kPsa_^bLP>;^Ing znfD&;wgrjX6V2N*njfmMwfZ$>KCOn`fnbM+h#&|2{nZkmIi8 zisCry?-v$|=N6J+jlOT;@rAKk@v%+1Xl>QPV4?P$?TjtJj&v=iPZo{kGnUZZAAYJ#RX-R@HKUf7G*1FMdsuTZJzdmBbjPpGzm$sV z0bT2BX7N;+Z$lLs%!f<5n|*`(?V8oaC8{BP*B3hV!V6{f%es2^FN=;0?EH^IZtr#Q z*07x?fkFF;;E}bzJvRIw7e8O=1zuhCH+SE9l3ILjy;?HNUsL{mWY31G;%akQdCBd2 zEB;YmQJhlJxUR1v`8aBczyD~(&Whr%REU~$6=~-xu7jQ5=Jx(!XcyIaI zLet)3H5b?JIu?wW*SG%B^|q+r9ka|ix9-_>djpXd4!-`KzIA=;E;%1rm-mm{<7@Md zzoXu}ZcXYP+gGIqFK>wT#(LZ0W4*!Dd15g2-=*q=;D%GHf9hS^U-Gv1le%Af-7(8P zyDe=rP`y9z(B0d0?lk|KhNSXXBk-_bnycQ?=fA3rwY;nTpV-T1g%|z4<1d1Tairyd zHux2Pz_6|S1rSOSEr&YK`L%0~H?KHOZLfRZ^Cf-Rlxj~!?eImhOpq$&j#!@jjH&FXZ@*^SlDa1}lJAQd z!9T|JE$LhG)(;M!ITv;M`D}gAG0W;W7nL-4F6wB?6Pj~TAN$?sq6VT~{9*BhZO@aZ zgT;p6(uT}?x4M&lH1{RJe>SN$s|dbvct&gY-2lag`K@8ilfvz)S8R!ERLfMGA=>}j zdXh(UIp$S;B3TV?!Yh9Mt-r)LS0-;Sxh7;+#kkKburGIJqoI~iOKtB@;d=&@PJ4AD zFW9ucADzh|^{?e5Cy)O2oq@#R@AO8FXmn@QCeTrx>5bnhO0nr%BZq(OzWN)T|Cjmw zZ&5RBHK;(umEwQ84!8SWQqA!Zmq+V4*m@~4*e%x1vPTFJg$BF%_qz8*^=sn0x95{B z1@^1}b8}A7Je{1eRNNrdo5W=6{46jP_F7`&;nrmVRA7rpvb5x5YqJ0D^SZxZcuzkt z_dWgF@97PO_w-lSy{pgsvwk=(_Wd94)8`0V;=cU~9HZ;0gS|kV@__&X)uI6}Q5ytp zhuw$jAOV;WZG(`-+wiDGo0p+l42=*LnUZ0_Tb=xlrk`SAa_5 zVX{xZrf5;1_WZ)`L$+4}(N#Nb9tkfZdaWsaZotr9b7A1I?-fZkCfv$xXJ8`_nazYE z?r%+~!}aTnNTVP-SrclC4E)URuC?i3O##KKt+G3ooC2Te!Sl&OkJtBPJsiG|7st-$G$zqkW$!jK_x|gl724c z(*D%XojkC_^i1r9yVo2~=)V6-!hYjbp}!U5Y-aJIX-sM5R#Q$I>d*?rrO}pV_v)e0`!hILmzP>*vag1DnXo zio+zvvC#%XOgnjrT>L(Hd(r1=pZL#X7ZZC_Aek=AR0k@Z#iYy!C&25jotD=O>EF!% znvr~&D%R2Rb@Ey?TD^qV-Q+0~8ofFVpj|ya64%@u_y-v#^@HN}Mc)QP*YoKq>l5;d zOuz-2T#=wO@}T#MKB+(Q(3Z*%>M!ccd^>edRP=ZCYa;XCc-XyM4R>m{?P~R}(B>@2 z5eBrgqO%6e{8Edh$-eb(v)1%!C3TN^qie4gMB|QKP5#>wvQ^R@cWSo_6(ewsI%zti zS`uegrN0urp+JbP+mYZVpTG^xLEUpP+hXP)->%CM)@+M;O6(A}#jI0piy>t1{V|W+ z^|G*Cefi)sYcC&^V!KMLeH$M?cMwfU?K_3G{$Ae?dateA+UpaaImPWnA2;vx?ES@& z%Ln~Wo_pkpM=#G4|Mig%%KIK^^)El*{>>{TXd$bmYc4Yg&T6D=+Ko4qeut z>pK6#s$DN``B#js2mEk=ECzB_F4>TJT9$T`~^DthaQ;{~t+i2ZkS>%_;IHE&e9#Mf00 z>AQMgLfQ^Pf7J4n)%j1ySgaqJVmu{PVqTRv_|B|t&#V8Q6j5*Vj}C2WIcc!p_J+9k zPGMctvXlnRf(X01UR(d()fBHb$87i4E?an2$c_tY^_B(BxaH{%*yR;_wYiEy|Hwvr7iA2(OIW9N6x6_=OQi~4O~F-nGw zCr0Wi6wNw!K3Oa2{OTjZ3cT!1nyW9dG-)5{oC_PrHX(Cg=@a+G<_L2vy{%+^PWte| zpQb#V2Kx)wtS6H_iy9UeFF8@M{Iesv;tX@C2c$-lA*!-S*A6x$Q zWyM2t`I;@9TPP0RtN!tk^)+m3G1xtx!5`rVMDts-gdZ0SoxcdebU%LOmZ3kN{_sye z$S5gYm9Nb%od1)RHSw_r=5(8i=GpNuAH6E_{N6oa$1Ih6g8&hQ@?btHNzIj`eMaLV%Q;KJU2#PY|8Z`BIgkuo2g*!vH)Ymz>DeY50u zCS_fU({Ejv_2JXoVyeoeJl(bBPwN}S1GSOPS++zxs6U&wG`)X*drfWXH+Pk|Mw*&^ zq|m9Bw6%u5$I4DFC`!wIG-Y`{NlFWLiM57r&AKY4shyE2`pU==P`~)3z}h68OKA9p zIZ1WxHm}rQ>=N7l;+3xb$Z}24OLcdvB7SE|>-n5xsIt~%>DH5_Uwn2>YVK=d)_F~I zq~8#HdbT$1PxtJOJg-xy4#w;gW1mkTE3YLSj=|mkdr2-*n7dGKPH0F!pbGxdP^lex zsK5EG%;4sIpSKzRsxD6-u1Q{6dzaBZx0eJfS8Uu&VdxooqUqx2M zpG>$~vt9V(tl+-NSID9{i95YJ?Qus+VrFIcMsF#2Rpl-sg&>XOUtQKn*19_q+Z`m? z@}YIs`>OQh*XF*H`PHI|sJ&0CyVie6{YZ{Ob2#eoF-!1?sD9mEt%s0D`@bw{?RTHA z(NOiTTO&rrx-~A1O5LjYKlZ)^KC1HE`(X9u=UPj? z|Nnj8lQ~&ju~Xu|2kVU~84uVaF_&$dV@rtxAvYqmuFj8pW#lI_ za$j#gKesH>Zj7i(yKj8=qr2Sk#TOnM`SPA!iTSn@6S51Q@Y=T3&RKd7K4+idqZsnt zemHNr^W@6n2u?oaX^t7ZPM_h`o==;kSC1Rg&^D^Tc<7qSDULZ!;n=2^8#8z7B+Nb; zYh=gXZ96$8%O*&)`DEX2z0udYw8Piw$|>%e!3XY1Ko0jz1@4{By!j zAaeE5@Z}dvqVa#9|5Z)F#!GQx%&LgIP+!xLS+4JoEee3<87Ou8A)f~61Ao<^t6Or{ z#|@1mJ6+e~75BZ>l~$6w8f#Q@(Y@bnDfHy%32{X@eB%J>x&&kg%t%eBW8uV^Uq8*L zh$KHZx4>9+d0^%D<`ud-TsM5Hpm0Z=AXToE}H>g*X|eCco!_sWy__HV372o}F&zcO=tS@mKgd_^d*bVZ$^m9`nda5EGpS9hH2 z-!_Q6{_ShBTul)n3J~%p!oEaFOzIk=EOW5G?z_Qj!*_SY`;s3XqQ_3SI77>JymKX{ z=l0vmN}4@Qi?LumxWxY-bq~(%eBxQ3elRPmqA>OC=Y}N3x6CLpwiONObnfuaS?(C) z%r^Wr#>K%|5RlnFDNsGeQMzhXpvrh9+p*uaUCVxQ=a|Zz{kE>8ys{Am3FlvFn;*%| zD>}5zS@uxUWr=~j4qb1^gBjXC93NdB-}#-g=FZVwcKbKyI6eCo63Pit4t90i& z4ArI;^~U>^MeB`#Z~cL^eaA2`CJy zkz8YP{(H-AEVOMMv0W!&*zdgkq-RZ1=<0d#1;&+5N73RgJHN|MJ3SdTTYKi%@~&!Q z`25qM)Bum4w|qd&GYJ6@6D~)SCwmgTJA3? z+&BD9eP7~(=l;QcLO*A#=Q+o2N5O8RDrbqUyRkOY=}R3RGkCl^zT+JKpebuBGW6@O ze=n)<{N})CP4(^L)-If5AEAGk^7NXII%AE~(>+@HdxMN+hZ8#rS3npmD{IrTG0EFI zY$-FbEeH=<@zlikj*P|DKtJbVo7-s&>ExHj^MJEDwQFqWHI?{AxwlM@DT({j))mGH z`x|!SXDgqJeaZg8B<)*htHF;P)R$}9vY#$ndZWG6yK7@YStMy~{`3bDR(Q1?k?Rv; z8|_#4goI0jy~cjgDQq&H9F!GzIKH!JlippT{abwdx`PQjTt3(L9dmD*dviR#>c(b& z=E}VPoTtr89;yw^T|4ZG#Mc}jbfxZf2CMcuAN@XDaV5sSnY3K{@nmKAGJy;xTwF02 zv_~-67>3=Ey0+k{&;_muQvqq9a5IcgGmS69i^efy92@pmtf#cYSp$ZDZ#$gSFcE4h z2%iQR%bLKU3YAa6UOa0p;X4(ahG)Bi$KiQM!I$89(t_`0yCMB@JZ34FuSH{orPt;y z{lcZqnyo6FtmY#M&IfGz%t zP)5_*i(eFXJzkEZ@hV&(muYn(-+(qxTY+EoC`r>-%9}_dAWA>bDEguV?!-%B%mvRS z+5(7!7vfot{O4$wXr&Neod0*t|A$EZ@-Z?C_!c>X+V(FNT``_%{jWnZ>lNEy*+mIS zahxV8`v%(rFnFLliOj+qn7VYP&0`vCFt z&)86fzkYMNaK;z5uPl)QQv zvxu5}2|r>U{AgkYh1DolC`B}uLI~tRn^a`^fi|6jWLmYI;wM7T z1yhZRB@mRG-OvEj47E)SD{5*D8jtCfB~JYmD7p$7+h)3VVlxz4*Z_gZL<+c}oR%1( zV(0`2YJx`|Y}P^^#?C~(h8814iTN9j(d|XvjSx8jqEP;g20sHZfYCzuz=GqN~jC_Bng!>1ZJSveX^xG9$-wb!_lqInEI^YH~i zk96UTQ}v6@{tm3D#Ud>O!atW{=FbGY8)J#(%hu{d`&+|VUKw6(!H?Bc`O)@uoLjzn zw9_Ia%=RhAle3g=E9EMwKl+m|5XjJ~gl&mnvlmk96v()%$N?YpcL{+EjXvlpkf90J zzi>gX(FZ*RGBo<2r$B~7_@JjiMp2#qiV(=yG}BGdNgnJ$x#O^CDgtFb!Lo`Q)Z#*=MPVY2ui5G=KBi zj(De3UbJ|rX;0fR$lzDN(!PECKXR=NwvO%R2ZQm#oQtYV%x@GFVa~>HYx@{tR7TsU z9PdZz63=+(W1CrTufn4+qL~i-o7l~>!57tQgXR1HT|iuS*`$Auo&Cy9V+CgW<+MK9 z^S;wkPQC}1o<$YbvSlr!|3}6h0(K(&RXp7j|BK3Jo!4^Byh|iDkUx+Ae|}=q;N0WI z& zlnl?ukBtgvDBy^K8Gdwtxcr(@bBJ-z#lx*&o^iRzGdv5Aas_i^v`WF#nZAP0XCb(X z_OTV2h#={^T-u?XC2_=hD;6&^eTJZYnD43qa9EeH!eN?QEbvYRry_ihg4wo50Gn;w z*{5vgS^q5+o)7$!3T7D~q$}!T;NelQ5AZAn6KAJ_-GJK_%(H&Pg7cPwiWp9S8jU>>DuxrsQUZMg_r+SauFODj=qH@1n_0&}xz*4@`9Zr|~fkGQo8hcu5Z z3TAkF-+Wu-czk(#V%U;oflg**mWlk{imaxZdS=7;Y1F{dO?H_Xakvj9(*fS1R;f`tcmjdxnIkc=pUKCNZ)+ImPH}tyn9quA?C^RS_tOi zV8D+`mn$2ZuC8q0c88+M2w4ri>1N30^h)Qyiw#k>BHPET-`~=P=wk2tj(pXAXR12` z9Wls&Lmdz9t9cAI%Xud0&_-!F^5?TwJ;QizPTwNxYiJ|v-0u97I8^>gBdH<}VOMEG z(VA>5nB`Jq>9ZT-xt{!L(}p+GcV`+M!aEro@sr# z-RW)nH1g`#NynTAuxU^%%n2D_y#!WDqJl6=7!-<}Vz|N}F1I@jF#F$pp4DGxt|W@x z)ZNt7B*x8*{&-h%0+NBF_&3zigeX5PUaltTsYhQ^OdK^nU^AjO=}MijQ8e&%>QQKa zUGQ4amY6uqLx4~uDq@!R>yR2g0U?2-fqlmDC2XZ&`68)mB-)Q;BgJe3uZ?Qbrd3BV ze4xFA?Yk(y1KU(fDMc06f^;*~ZfGCdJb3buZfIlG?=-s;$6UTMkaH$Rm?Rs?an5n| zF~(JveMUFq37a~C)D~UmFuuSs2Mfs$`^9y2-~wX7k&L8D!5=gNEHj(9*Sa&je}A!_ zj4$xM)khc7d?{3W{qVQb!Z_1<`?1_2$o z*i%$#o+k1I$<5N#;8vN;D#feHSL4Kt57J+@p|HrlVs026ed{ilWl?x=wal~@FHe3t zdwDX;GfGOIsFZ|8vQ>jwGw}qe5!^452*vU)IAA6N%;bN0CPA}02eKo~kt)F8fKf#| zn%`GUXRK#UCMU#HD1o+*ft8mN(i z7^#68DTt98sF8vgX@D9jiIHwlBkS}RK#W{hrEd~?+=Ld#^~0K0=t@7#-yDJAU5HFlJuEEb?t)Mc^Gf}&n2m;4ZpvEXJeq0S9kTz@ zxVvUrch^kw?uM}Mt__-4s+soP?bHvGdoWGe4QbebU6{5Pn=lREEwu?V#5C1n{7~R= zsXdsj-jN{{!@|mTdrP)v+H7}*FUZrU3dOL9G}+!#Y)jEhOYIS9s$Cx+ImZx&+9Oa5 z(@aC{wuuMgq+(bHG{a2Au%XZlgJPKX3dp(*4p)UCmEE#1RNUaJ<02E*+h!)+5TAXP zo|cW>j(5rrnwr~6tIlc5!mI|39v|GlU0P+*#=RN$J-9ig@5TLn-2a5T4flPx@5lWBZsxZQ&j)dD z$NdoQhjIT1_YT}UaX*6lQQVK==9GB?_g36b;%>*i3pdkw3eSTI=12FZxcA`xXWY-= z-jDldxc>$B&vEa?9l_m!dmrwf;69+@Ka1ycxDTn{@}v2`^S?J>DrCk~Yfo{?Va8?2 zDaRS7;R`A>GSk(R!;Eu7B~xl-x*%(L^CljHT=1%(3yn<8bf*B`pY*4onGO{+)1!i8 zSuLj=W}HvDRG>ztX1Y+&Y6b5I7aGbDewceJlG%&r=NrIl~ z4J+pe+9X?E%Ot6R=@Y&Y^a5K7*vv`;(rCZ)TnC~`bp*fi$dN@3vGp|2ON>P!TS6fNI_|f3zL%K?=94_jj9V1|Ju}l;(HS>>a%X`-8LY`&j>2)jgN|N|Kjxe%1&<}!b0?M# z^`(!UaYOp-ThkZ#PeJH3VYs*aqrne4Z%sT=arWU^!^Sl@jo*%Q$2^dIT}yUqY~z!* zj2tcJaEzz>cR3SdIv>01oW10oV|OLI--UZuQ`?-{wx{mYwmY?bic{ORZQDK7)V6Kg z&-_2flNVXZN?vCr+55MzUFB{6iqA;FF8ZC$%D0zInF=<-bz>9Y?-5_sCIc8N#N{Js z^;iAP9-?*LsuG7Je~L$H)j&S|NPcIz-64spD-QSYj8pJ@EJ2i|)#%Uk-IXzOh!K<4 zVbvN=UD)LMjL|rs;|?v2n$aR@%a;8|7vFWO2w9?UJIAi$Pab6b>stKGifUZGKbsW_ zy!usgHQMTEui`65wP${FC}Q>A%l6TQsxkMExIDX-B9v4upAkH4a56zpE4eXkaDonM zJkrEnZtGBqP3x`0jP=2ft=%)GH>*#nBT-ti!d0nRwR|0PO-4goZDG}}piCO^NKVtf z9_j8Cx)A{({$&RP_^+!un({BNN5!jK#dE2`(+-W4DrZ3CBbj+Ig56_n`ylm$g16<~ z;9V$iRfsDlx&UE5T&brr8aZpzJ;evDQDD_|i4!Pu_QNySjn^xIj1@SQC+?cdah09U z>U1L+Bma*jo(PxYuF2AkEdR>A%-7~n5brcla!3;s?FIx<|9u*W?t7Sy`rR63D>p^_ z=$LVZBeays(6;uvZE=R7dpW`9u74vj=i&1%dtF^ji2GVDvHIX?(o)G$KEw%I_>jir zle`ZoNqJROckp>pThCp$)i>X|-lxKirTXVhC^6sQXEy@Dt>1k7emnG6+sss79{gu$ zi~N3mxGap7<@Q)LmoPbg?zr+=ET?dxymlp=?qvHUCHoc=X+DoR9bAag ztsAX9CjU$VPqHqZ^n9&<###i7lx}$Zmo^$7xI@u7D%-Q~T^IMwc8;{{bU83l^@yC? zar3#}X>Y)6ekS$#uc%aZ^KpYt#i0HDwWcV-?>kiDR)$F;B#YW@xrp<09KEEuc+ypD zt|M3aqsG=_4sSj7$LA1gM*1;**<7QKWhT4JKgLq~TsifmRXQYTD(T5CI!TKXrP6FQ zh~^^Ejs$v%7AF)~t<+C`WqX+@A5Ypqh`F2Kutwu3Rd6vn4n_|X^%E>1guKi^JpczL zgnSOJ0^dPOlkRv6ACh-(S$gG`qYLyQK*O6&o$=d9Dsic@ZM_0kAA(~G#nMhm8Zk5Q zWeL6XcY2_nI@;vFAFz{fHY;F#L5mRu&#R&r6Kvm%k)Bk#(LtpDpe+04UgViNi;yx} z(w*w{Ll79i)qiD`kyA`0DSNP7358Uu-{=E09m!-7VP;uXt~!neXDwWSD%RaYB)(U= zf;THdu5|Z2ZFv@DygUp6R4h_Mi zSv=p{%dy`I$lR2@n--N99tt8A9_iO6?2^-7DImEDOe?;)4Y1bGW?Re8186Cf=}BFy z=bsfe46p1)N2?GJ$4PIK!D!wO)5*xp3pAOIh=z0J>Z*c<<-mQ7zp-7u&SK%F`hnhH zjFsMf&@zHXeccBTtR!qd(1ueN&#Ctal{|o2-PDqXEwJaNlT7u@oBHpVcVyGsRjE2f zOTGGn!k+PfD(u>_4bkfCIX?q+rn`^Pda5nMc+fm2VQ(PTD;)3Y9^Ke{(9j2oBV%EvpXRW1SL{Pjjb+>+$O2LXL z-uNGq7wS*=92(AJc%#hHb7OcjKX2-QWd@+>FmUVsCz~aZn^=nyrugdA%uFZ^zYB8+ zrh*cHiKGF}CKs`j{tA~58$6)aH^?%$RpyQ_u`bzCD!Gd=1YZMY=EaGGlDe-rVa4$j zv{8ZQl~o^gJ`~6ncVoeS_xcJp(J0;?Fv*%Gufi4P;9<8y?O0$AzYqzm4x-n^kgzz` zSrkNtg%8bT$F~WYFJd+tz9jf5_w@KZe2*TgL`Frt=1ot;4xDrxa$EWLOnZL*>p+4s zOJn37oA(2fI1MRfHizYul%R#%R^pAHuY``Eh9QZvWCn61Tp^f^kYpwwgwL>BNlu^L z3c)$TpoIv85>2DjLPcN#4PYP`&GM-McnxX53Lw>RMjIH@&9x{tNRB#Fxh;r?8Cv^F z9DXe8P_&VZ{q9F>%);2%(Jnmq0&@kQ=ch$V7Qt1jsZN+EtNA)7=*CNZa(jS-7!Zij zmm@7MPzqqNoTHXQE8eiL%j$Z$pi6R84aQ%|^r<(|pb`6TV9ghOq=tsppi$QsIUfPe zJc%qYF+9593rN_FOErK6-gO4;DXo5tw(Gc;zXMtqW7T54Q6lhiw}v zFLsKgJ71+CHvam>U6E^|yDNh2#x7h{k_JX^$;{JmrlG@OBj(K=6a(k4xgm1zJ??!s zt!Xeyy`D9d7{}h`4HvfvR`v%&CLe)jLX;sVoOyeDQ?BGv^?~9R_e_{Nn3cPxEivv* z@XrThb0)74#+V_mh7rNSTCpN@Fjt$3(d*>XFt3qvcD1eH8Mana+0LOKD&i#}#$M6n zL|9#ZJ7Gvl#5z1v&-MC?8n(Klnn`-P$J^ZLn@sKRIXx+?gy%l!?*kJiz-cGnX^NQ2u zXQQ^<13a>?2$fW=bE-t|aaSC(+wKvLH~Do~^tRhhy59dAGoYi1sYc28dCr&8ZjF%U zc#pJoQEQMVFA?;mMp(0cG$~e?e9RjsXx>(kD4;6dItQmx>>V2SIkEy6UI~?7nKw*m zdU55i>7a`;+zVOYf)4FdzS*yI0aFp7i*{@JA(vO+mOviVrBrv7?z)}(8jP2nPuj}^ z%%uv`FJch*J-ep#7v@}xa4@qDU4kkh2?;A6GnG)dU}rq%c7tH#P3ET~aL?^^8YqA@Q)}5A6N%j*=|BbaMPv6^|3rcxn z8$e8oAXYzR7^%sB6z5~hb_#;8JOQ}veT7OvwyzBpOx26l2bOW1;#7Cl6@dIaDJ9hz zi)wiS2pkkURinASVit=6OgXm9Og3OEZ&o<3hlPP=Myoc%LWrxe|Cx*(Y7HepY$fd& z#Vp|i|0 zsh;0h>q8EuiPK`Z5?WKYbG!6`_1-{khBk6qt?NfTC+IC39N)H4h9FM-tV%&&0XU~P zeuJ=!skIXh;efpLLd4$^A{)yKmT5#3*NaHdC1-uPYC)p))T^G5Rg)i+m6alc~cP0ywM>!=a5^>Jbi)e`4^^d zz9PYragbS`E$dCv5AD5+8FM&fT1M3(6e_4u-cm)hNBsETMZ_7z7G>FjnfU-gCy|C- z2Kq8~wm;8pxxmrjbO6sSZ};ezGxPBYrH8oleuPbzY*x$x=7H|+i-ZUFcA{X+>q!#^!m%%fgR6RmeNMcjj>nuybi zhAG7Y@IV}lt*Ae-gd&)kGFS;NL6nYS8z_ptIUX>HPQZd<;?c!Il~o+u-2(%>7qbCm zRSS5N4Kn`yo>wTiCj!O4Ve+rPVuBvYeS}8lxfvmazn}jedXuI6`1q2%`5sK5k7U33 zuC4i|D<3f*n|2N>F=9(wxbvr(GoV-qq|IaLZ+|B{3lC!$u(2#RG~UcUecg>NuK-i4^83x1^IL>lW9MW6LuE*?nwvlbl4nt15yyt{#q* zQJ^2sHhr+=|4yoW&hyvyM-AJ-=WV|OvOlP5pM|II++&W8I>T>?l&sRJuLzpHd*yG5 zT*KCVZ#p-cOc5O3$!{uE{TA=c+P-Rn5gc*T{crfTN}p>k9DLME%y9hhJ6_;4E9@zg_*#b6QUlqKWEAV0=IEHGROwJ-#GaOd9ET~GlHQ57n!n3#zP%4L ze^>-Lwx$q=Qy-UqFAQZF1qRus>kM|F+cYmoMvHQ7)%61C!Fy>lYCUsnw;Epqs#D&y zUbLdNW1j!jv#+)bzck$0ie;F+Dnr?er7)FptPx*Y6>k*Y9oM^IOyJfTK;tP$ViK*R zc#m6jKG9HZauVG*IuA*hzbIHmnhT(ufkY{(MP4 zrZ{5Q;@rD?^8$O*(RV9NgPW4R9x4Mty(oWQaM zdK;Srzs6FHh*G8;TlgOO+W9(k@(Q|YPkS|1nWax`dlNMznWS+}%+<_#Fcx*tUycEe zcrUCoH|&Y-G_Cc1AS9eP-fCLcK+wY<6OOd3)D`$R1>%32IS_KJ&#mR?_|d(_uU$0XF->dDj$R`8W0MEmWHxV|mh^KlXY;WSwOoOBSd3{R~`hMj!v_5o{ z_(J1A+%9n#tEQm)L^DUr! zF>IKDP;5Ywod3M-?#&&UA##F8prLY+U%~>k2sjxyLPuTD5GLyWfWbLA*~@AFaFhxl z7qzD*(iM@ToS+ZUN#i&3if}G8R!)zSiy1_O%e@>kO?;sjN)-pu_eKt&-N^n=uKeeW zh@xO>{0O)$8)L$Wg}cIVH0|DM=%Zq&)0D^PNrQt+0ncWwLEFQCkHsml_|X!Masqiz zi&_^t4wYtOL!2|=$#Ra86Orc>zAq0kVG8wPDNAJoyKMn`9G;LdchMq13uIJBh3&-g z5d#IJyQv4g7v~M(Zw}5}a$XIs| zfH^^4_Wq|OQvnoS6=@t4;l`Gpi-5h}B50CxYLny$HLt_Wk2&u}1)99wmd_I07a|t+ zQvG);Or#lesBhD}k)!k$)Im6Prl)}}x282L{$xyVLL1@0-NnZc9QhUGkbB3LEef}d z_)-S-PyY}^+NEOHJ&jX4LDkRO0D&DoggNjq-7(y#hHqP6)Dw3@1VsuOa}Se@^eXIW zjzk%zaY<*11wJNoSEYP(naIcg*Q2t_oLxvO_jIa*hIQ#Srp$EPOq{3BD4`rMYuEP= zE57{k>++Yu1Lc=0ywB_L4wLeW-IB)MgB4u}mo&jLj9K~3YOl_ZzGKgZ`2_m|=Q{y% zkf|?WeV?Qd)ug-{^wTB{Y~*7<;;BlFJ-tFl&=5Z>IsFnb^6q~}v#P<<2VHQvr%5^> zY%P%W4=Kr}SdjVV0M-WsEq|n~DXb7=+eiR}VU1+n4pus9opvVUdPddI+ev{g5hAk6pQ!CtT8TT3YK6xv3!B-7|xXbu(-Ggi$APi1^ zM_fBxGA+sMm(}lgwJ<*gIcIRH+0Q08bLF&d*9%<_f3^Svk^43cExS3%iBm52yAdU? zDy`ajYRH?L>H$|R39ayqL@gyc?r&5?3JAP4jM{wmm;Besn9u2&DTQm4@_ z-`ba2sC$td*FbM`bA6ZFwm~iH&g1Sni>P?qYi_!RIxqc`ruu=^hL<4^Jx9LMvs7$` zI`@|3wPKja&vv?wi+lWxPuC&4iZdJMG)6vsg9Rfd0$f082c6(UPq*$m`s*w6h$}-T z$4D2%dyBsN&u+^43nJg5Gkss<;M>f%jN=Q@z`%sc3%2OM;;)MN=3T@sDqdgf<<^|{ z4uSa_5FCZ-;FMcX7K7*I62|VM*$9$k$vuO^U(S<#9TTCcao+LNI1LXsxeJq;jDW%;qDeZi6zHYnM;_0D;& zrhKE#;b~MS+EGGQ{eY9$8_1w@w49+X^E`GBk+Upu1g+vENq(@gVJgJKUa8dCWpv2Y zJP$RhU2)ZIUBgHAJ_)LL*_LlG{ljJcr*$PN<{|NLQ!7Tpdg;ifu{+y)!|gc_xK_`3 z{l`3<^P_7*bs!#)U;Ul}-;LhQRVBM&Hcr5%oLlMs4SH>B{JB5P%+PK7(0EK3^D1g& zMPBKptmph(l)A?_^Yt;=k4+gxH^%Su9Kgu+-4Gl?sp=Ogxdbt&+T@T*mac5UqV^# zW@r2usD{Veb6a2DHy7OqcUuRVyRXJ3;|QY1ey~0?o!2hg{}p7#`trAZyo{Ck?sLxgnr6`n`SKT_`8vq5cEjueCu|?( zBlS16J|^(`=sZrcxBRkwg%&VRb=$32=2OWTc1iFMfRpidU1Y zu~}tV=hPs+2VoA_J?QDFy!=5})m}G|PZ}b2J8PX>{Kr5T51e``jpeDOjR{A1yV*!7 zQ6#@z$wN0C$g4&aT9z{u z8IU%+HhFd&`MbH1CUIe})D&~fCS+u-u;-_1&0*=9S;MFfkXTKMEsHUXCgbsulwl_? zx^vE(#sI@MVNJf$2tg0k)jU@}ZBiM>#@cC+1o@RK49^9ojRd9#* z*zgVT-yu5%_auJkO5zrOg;rQ?<~Mk*7kYGMjo z;jgRp)n6M!I_SO1{*~gzYa7MVoMdD-1Ml3bDZ()GE)APWp054p_Y>%1tg43N+pz~}2|w6WJcT#n^(X|LQ^Z?3-Li5)a}Q;d<68P|Sz zhd&cUnw0jLW%+78Whjg_pXzY9j%6y3^c8;AYnWK%?Rr=)SD11p%-V44_5DqqK>W7v z{dwei*7^QDF;G3k8)SJHEM7|lX5FXMQU^mCQ>o6Rl&|o~rxbCTYGb6dI%3B#O46g` zKmHLNZRpI=d$hDi(6qEIJI#9x0kmL`*DsrOS*fPrrbZx-h7IN1ZHfRR&Homi%y<44Q}rGZvUIXWvh`7MNPiYn@Hk=F zDU8#Rk+@~qNu5AuXMkTaL8S4`fkGw zx46Tfh)Cr1zgZa?5qxG4$NbYGUzhX1@VXg%6oUFIWarPBz>|u*?li&}`Wt2f45>A> zuur}Son{weH+x;IX^bvZXTc)R#3lzb4GF!wwyuq~D(U-O{YSn61^jYg@>4T{*$TD~ zQRO~$sR0rBm@I$p%b2-&1I8^Zcp1eF+9&rO275igGyV=TgzR%`D#LZZ)!L=8D{)iE z`CLd_7d@}fj1z0mhe!)-JhBJbjk#Ih#-uY(Gjtv~vS*FgWAu)HPBzC*8`TGEjA@~y z{mWA?8UAGs>X!PAGNonoAP!ph23xNXe)^ zt}`Bjl-8cJ+?iV1zlLS9w7a{G3v|HvvkgVGNENu~TR&p{E;@;0N4Ng6e}_2^7Am+I zOH$C^r`n7|8EUupvKMKqQ71E*5B5VeuAI7zvH=&1_KobW52P1bqJ`B4M>Aw0)xtW{ zL@1XX)~);Sz!K7il!YF2cMMJ*lP|isi0j4@BNx16#P@>U9f*t#_c-xe0^Lz@^+71| zwh9e4Tc1HWzvbdHH*bTqzrS!uQOr|`<}}{uDSgBIZrthm+w^*DzmT@!@lswyWbGFW z^8lp_c!Oxd6p}=uJTFN?+%IrpL=mdfU*s-Sr(yx{gFDcSd0~DC0eobYbU$@apd~Se zxc2j2#88Hz%%M{qlN?Wm4JH%9VaDb5#W=J&Uk3E1gnj8n;G1GTPizOuziAp`XKo zx9fSz>Aax7pr-^|(Exk)E#S-_S!w>DZhu{OV%6Ya=f(83h*(@WfuWs)HELszbWae) zJu!n4Tt`6^2Q;hH0-e?Mh}E_sZaaJii9`uym#?L=jZGHGujGTTN)~W-2&%D<;i9EM zJ1Adg{)y+W?{v-SOZkn(x8x4uZc4Kb?(RNCwC5fsk88-hRI5g)B$x+-Y&K7@&0n1RSFF~ei%(r zs{w6HhUvh#E`F=DAamwre)xrV$|yGeEC<@`r=oZ`b?=0Ke2ao1G*ivzjLaRz(6~+M zsALxV)cq~Nd9QKrzAhOL+-|s>iwOGgS=o$dc2Rq2p`L)~d9l+8x}A4~UcMb{FVb6? zYcqeNAwaM^2?~J$gG*PTE0I36q3<6{c;XLg{tS-NJ6Rm8;z@;FjWfCWQ(lds=|`Qr zqQnF-(X{OO#Q8<^Kf6oD7ub7=IszLL@*c<3w<9l}?Xx1NPAv!cL6KDhP;>7SQ^sYB z&e3X$Y1Dsmk#AZ_vv|rXc}4mHqF=%)jX61Ad*MTg2a`ms5MR0D5Oq-BU#LYhJ})N% zCbPe-vK6*!5p4*lmGf^lKTj8Ou9gk0U=l0l?74zvkzz&gr?=!&UY=}qFr?)sYx?;R zx6F803>3@$>yDx=qv z`lA`<8yH`U^|&_yQ1o+9`{;nOTMA_s>T5{${Ma8ASCd+lmvwsY=E?|kU?k+A{M5;k zfy_S5W7#!#VB}Va=*Q1_RE4V9X|uVwR`hR-)qPnGq61dQHj-R${SeR(%kZ!jo$Loh zGdw`b-$hZ31W2&msL?J*u$8P32bZ-fKRA*FC_Ls0NHg=ufXDbsPSFRz3ABz4S*k2r zTzWrPL6QIY&u3iNoQIqq7lrGk&qbPeoNKoN&6W}Rk#qKW(oYEvC{SzvyPs-FuRpt9g*7Ae46Ml(vgLCPMIRP;IF^F3`T%ThKeN>A`^ zAT5f@tzI>sY?v^k1oBCz7c<^4G9=?9@e@_}Vl$j7=Bmh?&6^P=3bbd^{f65Xv|7OS z@>jB8H5Mb5BUKnZJByA>vc!2A40X(YC=T6cX@MtlX;KyX50i@zNt_nwAU#9CB9at2 zYsgp>xW`cXgGhw{Ux93S z2DM6sw!o39iIa+c+KiGY>pJ5PLLN# zjSmGH6~=p0m-@#Co_-=s06}sBunA(mx*B1UiiH(pZuYaG4&CPU!WH0^Y*D-LPi*Nu zs53W<<~^U>t>V6}aPL$o1ac-TsvUVM-^-GcMgWy`Lk9zaFDrTkNxTsY2GRXaUi|#U z;knUb)&UyJ`?x#e_!mh+>TzgA0r11bOvkqlqSQWS^%Yn_W*+=NUV)ifYz*Tb1CCLV z3&9{O7dM!nNJ1hLJVKvy#~#^xVcP6QkQhlMq0@~EF0XQf^BS)Y-Q(dLZ?>21z{{f+9|zz~$- z_@m`oy{3zMz0ZgggRVd8o3`#l7B_9#vs#E$lS`pUHCnDe9~R*dzmEF@_ojtV)w?XK z`AnZ@Stjv5_TOnqvAzo*BGllm?J^nxw=jrbO}kGE(}L;Tw^ti#LS4&%DZUFX9_B=nlx62y}6-IuIk+NM{OXlX^&c&e7Iu< z$zUCj*IpLT-b$O+BcfgZh&zZ=tHuv8U$%v{K#j9WYTw@hLyqO}{NT|9O_w&_<&mY! zc+f4XjlX4TQKy(>-hIQ0{WPI0qSl3g2s2>)JGrn1^V*0cf4*wfU>}N-9^>h3Z~+2- zahzO+dx8KwBV!|A9HlE=P2e42J4KP)6<)t;P;E_JR~!u*{js@@_a*PiQA z?OZ3+KzZcd+{N}UuRaSIEdwhi%5dIlLm)EL65miEczgmtp*rvwBZI7qh#b)y`+~xI z2I2SyQxCCbZ1NNd~?~yM2 zq2J45zera4zT2T{=5!rRl&qRm4^sh!NIDA+x;RPMPm)8%F6 zuknD<1S;pU$DfKx8@+S_NT-o8$!?J}ht;=fV zc=d>|tUIv^c^y%TWn#d7M*WeDCK566Zv*7P)m;bq>RRXt9zLvq!u$2|nvU2`*!Rpr zdBa?e?N~n=+LwjECY-sk{jHV$x1S6n>MPG=J4*ehcvEI0=yjh1Du)3K;A@;Ci@F+w zQ0ZZcw&^iv;(ZWg+;SV?!~=tqKB1P1E5FZd{)P*OPt~OF_!BY)S{pqs8-_Xd4`0;` z-~L^j^xy~bUIVrGcBT|MaSh-@8pAe(X84S=PMu%3=+NVY{{sN zEf}<2%ewK&3duX%Ypiz$12~V0nB)QL_{q?wPiiwIn%n5Kd#7w&F_?xL0mwfZJES07 z`E}zyE#q5i-Q#1u*s5HdoK7_iQ@n;SAh@aOdewgO5_D4mlVLw7-hjg>reduDYQZwh zON7noAC~CMsT3aqD^CE^q9NisN-kU1X&m9{VrfA`kq&^aQ#-C$%?Kk zAvp`P$qtv&kE%vbBpu-$F>_8S3|KVz}~K^5e}yl zDGv{26m06=cSuB8V1bQTEc(R^xo=X_I`;f?1$L`9+~xZV4* zpFw_c$;fW7*#F23f)G8wuy(|ckrp$b{);l8a%p4EkfVDsRnoP#>af-+X=ry<0w>&} zGskuT`;7s3SO9`0uV3;6!J2Z8FIuXKBlnPumx z`5&ajm4PWgs*&&Sk86j%U@{4-j5@96ZdA&JTz3J@EGczmq`O`^ADdDwfbsJA>(oGn|FE^?_>OJYM@|c zZ=q{&C&yYsp`O>&ksRW_U##H$$!+kN`V%s-@X;)z_XyIa#vdj z{AB-oN(t=}@toMLWX!MSlS`&6ZZ^-Cc7J4p@4tZYl-or5qZ2C8mZ(` zgOb}#E*BwzHO_`&S6P+y$5$LMV}$8>uekta2iqe$X(*XG>uJkC}xB>VT);-U9+%GRyu6IY1$+Psfq zhaNgkgO8`@#TdA0d1G_A8-%Q)N|Fo~?>@p4-8UX5;84S;CathoYuH0HRt}GatApcp zJ8^!vT$ehO3j7+o75;JiHKHNRb%u9@gXrUA1bIuQjbQ!2l?!v}6=@qMZ!m+21QM_w zZ76K-hX|%8B#Gsdb2LZfJ?M!UH$Ks|1hNMxoO%1R2RY~kFj|EyI{pV!Np`2O(6X|) zEm!~-p7qyzOE;Rcc3r1Xx9iM8?Q~B!ZHj`csv-}s3j>}Du5B|XPg)+opvjSP>q};K zfZ|0iZt_Fi_caY;1z#xGkc+j8PwHrHIrpV@(SBzRvq^5|)>)BWyu^{-PXTsKKME?G z6Tm%Yn3weoZ+Y^_)Z~kK_E%YM@9Xi~3EJ=57~6+2eEvdGC^#7ZX|VDVdx{xvj}QQ< zE`n7}==yTW_|2a|QeUUg|5#huv)<5@p9TPwiwlLl|9Mx=YB9Y2`E?K75@FJllGsn#!qq zvT1~5v_07b+@PxuNaDzRay>#s^$1<8QFoOtzQ`CwJuHpsq7{Skf0p5E?f86JKvYOR7{h9Fux%K8ajW?jS zVhHfuoNsPNbzS&?h&12lDphK5e1?XX3PxM16e3`(SMI(d66`abTI5?bOtq(V$=;6k zofS$x9Fkox>u6-g1nCa4<18uRsEE$MMiIk=P{R)6zvW#=pXCZ)pP!rr9S82>GA7IP?XG8a0yaWFU{IGJ*r8*r zRK(^_+@Y*xS^Q4)d=bc4_LJpU9Qz1sWG{arka5qXD-uErG(LM~dCIwAhfU2orN@ix z;R#jJQ4_ayTF89XJ>PBdujbbI*Sc}VG;JGgx_Cu*Qgq+Z8{Kz)KhNM}r^t7V_x!nk zb~R{5d6H6DtSAfZJlb;h$PMzD(osNr65R+S&f-o?>sCu=Ti=uQ3aLAi=^PQdUQ@1n z(!D6pwhs}Aj9(bcUp08i6n|#D2o}X3&?DIK*DFI&OAaJ9!T^uJ{Q=t1iy)aEWo1^oH}G)Lo5^3wOfZOOn4PRB>K6g~+##LDdV+fE89T#lvevTFs36R0lGfPkMv z-U*N&z)|4C6P@N*ikN>}7Vmm)RHO?{@>)se#Z70ow`p#BPsM<5_#rd!#vxh0uoG!X zUN(lR(#PyyEge+50FOz*z^E4&qmyrZTmV^|X{3nYY8+kEh}W-uWZ+kc?VxuH?|~+j z?aNo*;!UbixUs_DB>@eSP8g)D#_+;B8{{D(iyse9YddzvE@b{YM)QsJkAmC}{y)#7 z&XU^}05j9w9HGz89NbGXWYi;~uKmjdrenD^&%T@8!TrzRJ%Jmg<-enq|6F~h-QGa6 z{w?|=9k+cyyjHr>lN=-DeX)Kfc@#I#WBBbsoAb-z#bVz|{^zN2c3v zi#@Nz2=6MaM#PL8ccK#&OR(p)mxA_LtF93yq}ya&oPT$Ci&%o!q#2&f5m2|g=bEpk zGj-e7-;g~Vdk=3!gS6(aVy}J2%l5K;`7>6ZLW`V0H8}vMIl_CP?6&sLxw4eMXT?Dr zwgkS5l8DaL3Rr*ssrB<&@+;4hU(ByNub$`frt7vwz*w7~7wL5F-q$={{Lih#2EE)z zmy4+=Zfz-m`}alLa&c?P z4(N>rqx8J%m7T@yp0B;tJ)opnj-bnHC%+%pL5BNvcJ_0hMhjm~hNJgWaA*o@%JVd+ zN?#>ZzT;h?__r71d!O)1_|Mo}+gN$#L*i9lBhmE)coH@@-$8F+;K4e}mE3yUsKMd2 zbVuD&^Il^61a>0bHtzZ??#qE?VseYmugofHzq5*l6oB5@NsY$Z=00~r`+lSji z3E{8J4PBkaeWwJ$_|hdE0Jw;BD~_j*2|(q7=En|w2YN`J=g`BmApA8~&3$J<@u&qU zQr-|F;b*SFRog)Ys2?0+N9%^YuD(Md35|nY$8Tm%SzqQ@(vN#FcMoX9YK)H<94+p{ zh8V~!FX!*h%ssfCIiB2~o-f{690ty!q+!w5E-?aMe`%UqX3>MsKU|(7Oi$;Zm)=2I z!vor+3`%?KA6!VK;`Txbrr9KzSoeC`dEXXz; zY@8r@c8gNQVrs6`jFNWil1;QJI>WWYFug0~WaG)VTnStVi&5ge|xe5lD*-Ize0YR?YLa&4o}1VLL?GfpGYpsI*x zdKMSwWj(UatWjQj4w>7}0qi-DvG=MjYDhk%Rt)$39#B>ae)ch<* z%rJxWO^aOfBWv_EZAwHA7_syv}(^JagIaee+Gb;ZE^2k>emqAh9D zmBYNla&I~1X#v%@oN}TK!@*~;Z-v2-p=tdJP$O;b&l3(-I(_9?^8XtICNClw-J}vA z<*H{ZehTjH;pk!I6pX;p5M^6Yx$veDp!o^j40k7G8h%#?_b&D+u$cb_GTDxLJzo4Q zeE!0f%sI}SyR)a1Bb1$wI(yVH^+LgdnV z_kNIwrAQwO(EwEqjFM&41l*NXpu$fNt1mBlxQf6JlKv;NAT8xraWytidl67ltsU@F z%qwedY23=9*^5iO+Vv@aWC{Brc54%yv&5hSUoK(nqIE-6#qpaW?iY0w?AhON=|?pu zicC(J6ZLY-s$@zpIjrFJoQJ5fkEc#wyEODq@|IV;t9e-g9VIOVn8d|94*6(rs!Er@k{#)-Ix&0)I?$hhV)JMpV%4Q=_Fj<>pNXfIo$c2 zVpqp>{k4t>rWNpSUU*?lG=59(3zs#OkF)Dt#SbkeR~fyoN;P^BNU@I)O2v-mW*e%l z9YqQ3jC>A#`UJJqNvr4tcyr;N_~~D71Y3tSg1m!!TGhGWDbr`DN2&gHV&*bI9ULvf zj-+=Ybo7PQ?DZItF{?5He&quN+H)I`PUI;!Z**jE;*TO={Bo*J7;?kckX?m8#Wjx~ zDQTPj4#KkQRDBc(Lm3-2fQzhiRqwchl0bB?ftzp?d;VslhXnWm7nfW%9Uml zyx76BJ`j711xYwbd_jqR{P1Q1g@kv|Hp;yhO2XlG6i~YoRcwFkwJ3RPQ^~w5O4~d zui~uVuBYnP#}ZswZ3y-}&9JqUVsCW4~@`O7KNnOoZ4G--TeaGo*fA#E4(=!k%G2reGP$1XH8X)&Z)o#5?^is z9E-zAtcs`t@`~QORV~4km(Y09UV!E;GC2iZIpi%0sY^T!((;#ttEKJ{9EE3TQNFfH z_PCOCCsAc5QJ}ROOXrjU0I1lVCbARczHq$P=MkpQ1`mEsl)r)zZ)}&k+4np8G*3BK`;azs!}~MPEGVYScXe)vK6(9oAf> zeZ!=cw&wj7D4Y{gpI}`=6-}f$YEp})Xh=<#X06_Ou=CxY3>v?2971aos`WJe3oFea z+I}&i3l0n!po;Cwd8sV6yKu-AYDMBohEceM?N3n`ML^^+851NkoPkv@l`Z}dv0g}t zXfxl+C&DEWgY?!~hT=^Ov1q0QS~R4nT_{imCc^Ih-H)c~8LstuRF9NTEpGU|;VjWw zmL!Wheb;fARe}6qlZ)*tWWh#8LS95-DlKTCsfcBCl?T>@H9_Tmn4G*+i{ZB=ZVQIalN>i2 z^|Bg8Koi@eZY(h`iSXx%lT^ri@ozr)k{wUgB7pGN1C)W7c*SXj4jqa{0WqW2nzhl~ z%y>Vw=|dqUcp5D1&la)Iw~G(;2Bo^(7SRPIGgQ26uIX8Mx+hBgQokF4k5dAK*E;iMXjL z2`MSr38~qc=5oyxHTC^u8G*eOX!_(-V8SXf9%DBeqM0g6Pm*Nlc(Y@PxEAb-W}>U3(> zHTthVMdUG@rIcC{nT4dLy=L0V5}B`ZveN(I$e~&`A)kyxmrk$Ky8tfjh z7g15|A#-Nh);qWBnc>ylWu|3;O<4Z!^G?>bHKwG#`4u=wnNgjtIT z%iq!|?en|$+noDG2pkLy?E4!6Oi=~`5(5kx4CddQ1dJi;EnVh6FfiSJ%cx*5|NXHy zQFO9*aAq>GcQR!J*xLLofc%d-5A5HT|KH6!K}lwS86$Wb>RWWwE3@R>C8Px+c{dQE zKVnZu>Z-*sF@=2Xayzp{=TgyoLg3ivc|)e*P+zSd8;8z1n+$D;8f?;<5x`8 zuaCC`s?rLPhu2SheD98QAMvo+pGt+xFbfhNkkFFE#k0n;!z;TQG75nx6kJndni%9afDp&@+vX%W zT;;dB#fSVzn@Y=0Aa}>JddzT(ZK2!J$jvLPkB*Swb7hFKd+VNGgsj6DBC|$jK@u&% zP%U})cRiosP?gTRjy-wUy6Exv&2@w1PPtVm@@%YXE&Pr#~H_tve#QgVMeJh_QNh^*VT_eKECcKvWwwF!ryYuT^ z9eEBm^)qT0ItZEnIz2OL>5ZhM_K+tX4pTE`+-{wcB6WxH>?WB_LC3c+pUb^cnpYAZQdy8%91BXz0p6$v zYz;L~{sL6)1GIn}#ens|+z?-snp3Q=2O`lmhR0Yp@BnQ#0V7>n?Gh+jZ}7qGEzU?yEh*LqQ%2ZKXPFe+qp?WpA^vUbK3NZO&LX@EB?Fu*{m Ojho>xFz|Ps0`UN^GtO}U diff --git a/examples/Excel-TDD - Example - Runner.xlsm b/examples/Excel-TDD - Example - Runner.xlsm deleted file mode 100644 index 0d936e366aef013bc345695c498fc8e6c9dd482a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106222 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%0AH?><^+L`-p(U!g1g6mm|mUO&8mrY*{- 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 Iuw-Wd0K2sbMF0Q* diff --git a/examples/Excel-TDD - Example - Test Workbook.xlsm b/examples/Excel-TDD - Example - Test Workbook.xlsm deleted file mode 100644 index a9dab3c6f74711c0d5d143337b7c34d2fa2b1954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8867 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 From e75cd74ce9c42de102a37fb7715c88232cc0e780 Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Mon, 19 Dec 2016 10:11:18 -0500 Subject: [PATCH 4/5] Refactor and add/rename specs --- specs/SpecSuiteSpecs.bas | 32 ------- specs/Specs_Fixture.cls | 36 ++++++++ ...tionSpecs.bas => Specs_SpecDefinition.bas} | 35 +++---- ...ionSpecs.bas => Specs_SpecExpectation.bas} | 35 ++++++- specs/Specs_SpecSuite.bas | 79 ++++++++++++++++ src/ImmediateReporter.cls | 59 ++++++++++-- src/SpecDefinition.cls | 45 +++++---- src/SpecSuite.cls | 92 ++++++++++++++++--- 8 files changed, 321 insertions(+), 92 deletions(-) delete mode 100644 specs/SpecSuiteSpecs.bas create mode 100644 specs/Specs_Fixture.cls rename specs/{SpecDefinitionSpecs.bas => Specs_SpecDefinition.bas} (70%) rename specs/{SpecExpectationSpecs.bas => Specs_SpecExpectation.bas} (84%) create mode 100644 specs/Specs_SpecSuite.bas diff --git a/specs/SpecSuiteSpecs.bas b/specs/SpecSuiteSpecs.bas deleted file mode 100644 index c922521..0000000 --- a/specs/SpecSuiteSpecs.bas +++ /dev/null @@ -1,32 +0,0 @@ -Attribute VB_Name = "SpecSuiteSpecs" -Dim NumBeforeCalls As Integer -Dim MostRecentArgs As Variant - -Public Function Specs() As SpecSuite - Set Specs = New SpecSuite - Specs.Description = "SpecSuite" - - Specs.BeforeEach "Before", "A", 3.14, True - NumBeforeCalls = 0 - - With Specs.It("should call BeforeEach with arguments") - .Expect(NumBeforeCalls).ToEqual 1 - .Expect(MostRecentArgs(0)).ToEqual "A" - .Expect(MostRecentArgs(1)).ToEqual 3.14 - .Expect(MostRecentArgs(2)).ToEqual True - End With - - With Specs.It("should add spec with description and id to spec collection", "Spec-Id") - .Expect(Specs.SpecsCol.Count).ToEqual 2 - .Expect(Specs.SpecsCol(1).Description).ToEqual "should call BeforeEach with arguments" - .Expect(Specs.SpecsCol(2).Description).ToEqual "should add spec with description and id to spec collection" - .Expect(Specs.SpecsCol(2).Id).ToEqual "Spec-Id" - End With - - InlineRunner.RunSuite Specs -End Function - -Public Sub Before(Args As Variant) - NumBeforeCalls = NumBeforeCalls + 1 - MostRecentArgs = Args -End Sub diff --git a/specs/Specs_Fixture.cls b/specs/Specs_Fixture.cls new file mode 100644 index 0000000..2f603e4 --- /dev/null +++ b/specs/Specs_Fixture.cls @@ -0,0 +1,36 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "Specs_Fixture" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Private WithEvents pSuite As SpecSuite +Attribute pSuite.VB_VarHelpID = -1 + +Public BeforeEachCallCount As Long +Public ResultCalls As Collection +Public AfterEachCallCount As Long + +Public Sub ListenTo(Suite As SpecSuite) + Set pSuite = Suite +End Sub + +Private Sub pSuite_BeforeEach() + BeforeEachCallCount = BeforeEachCallCount + 1 +End Sub + +Private Sub pSuite_Result(Spec As SpecDefinition) + Me.ResultCalls.Add Spec +End Sub + +Private Sub pSuite_AfterEach() + AfterEachCallCount = AfterEachCallCount + 1 +End Sub + +Private Sub Class_Initialize() + Set Me.ResultCalls = New Collection +End Sub + diff --git a/specs/SpecDefinitionSpecs.bas b/specs/Specs_SpecDefinition.bas similarity index 70% rename from specs/SpecDefinitionSpecs.bas rename to specs/Specs_SpecDefinition.bas index 6beec91..032938a 100644 --- a/specs/SpecDefinitionSpecs.bas +++ b/specs/Specs_SpecDefinition.bas @@ -1,12 +1,15 @@ -Attribute VB_Name = "SpecDefinitionSpecs" +Attribute VB_Name = "Specs_SpecDefinition" Public Function Specs() As SpecSuite Set Specs = New SpecSuite Specs.Description = "SpecDefinition" + Dim Reporter As New ImmediateReporter + Reporter.ListenTo Specs + Dim TestSuite As New SpecSuite Dim Definition As SpecDefinition Dim Expectation As SpecExpectation - + With Specs.It("should pass if all expectations pass") Set Definition = TestSuite.It("should pass") With Definition @@ -14,10 +17,10 @@ Public Function Specs() As SpecSuite .Expect(2).ToEqual 2 .Expect("pass").ToEqual "pass" End With - - .Expect(Definition.Result).ToEqual SpecResult.Pass + + .Expect(Definition.Result).ToEqual SpecResultType.Pass End With - + With Specs.It("should fail if any expectation fails") Set Definition = TestSuite.It("should fail") With Definition @@ -25,10 +28,10 @@ Public Function Specs() As SpecSuite .Expect(2).ToEqual 2 .Expect("pass").ToEqual "fail" End With - - .Expect(Definition.Result).ToEqual SpecResult.Fail + + .Expect(Definition.Result).ToEqual SpecResultType.Fail End With - + With Specs.It("should contain collection of failed expectations") Set Definition = TestSuite.It("should fail") With Definition @@ -37,20 +40,18 @@ Public Function Specs() As SpecSuite .Expect("pass").ToEqual "fail" .Expect(True).ToEqual False End With - - .Expect(Definition.Result).ToEqual SpecResult.Fail + + .Expect(Definition.Result).ToEqual SpecResultType.Fail .Expect(Definition.FailedExpectations(1).Actual).ToEqual 2 - .Expect(Definition.FailedExpectations(1).Result).ToEqual ExpectResult.Fail + .Expect(Definition.FailedExpectations(1).Passed).ToEqual False .Expect(Definition.FailedExpectations(2).Actual).ToEqual "pass" - .Expect(Definition.FailedExpectations(2).Result).ToEqual ExpectResult.Fail + .Expect(Definition.FailedExpectations(2).Passed).ToEqual False .Expect(Definition.FailedExpectations(3).Actual).ToEqual True - .Expect(Definition.FailedExpectations(3).Result).ToEqual ExpectResult.Fail + .Expect(Definition.FailedExpectations(3).Passed).ToEqual False End With - + With Specs.It("should be pending if there are no expectations") Set Definition = TestSuite.It("pending") - .Expect(Definition.Result).ToEqual SpecResult.Pending + .Expect(Definition.Result).ToEqual SpecResultType.Pending End With - - InlineRunner.RunSuite Specs End Function diff --git a/specs/SpecExpectationSpecs.bas b/specs/Specs_SpecExpectation.bas similarity index 84% rename from specs/SpecExpectationSpecs.bas rename to specs/Specs_SpecExpectation.bas index 1a62799..fa68896 100644 --- a/specs/SpecExpectationSpecs.bas +++ b/specs/Specs_SpecExpectation.bas @@ -1,8 +1,13 @@ -Attribute VB_Name = "SpecExpectationSpecs" +Attribute VB_Name = "Specs_SpecExpectation" Public Function Specs() As SpecSuite + Dim Expectation As SpecExpectation + Set Specs = New SpecSuite Specs.Description = "SpecExpectation" + Dim Reporter As New ImmediateReporter + Reporter.ListenTo Specs + With Specs.It("ToEqual/ToNotEqual") .Expect("A").ToEqual "A" .Expect(2).ToEqual 2 @@ -156,11 +161,31 @@ Public Function Specs() As SpecSuite End With With Specs.It("RunMatcher") - .Expect(100).RunMatcher "SpecExpectationSpecs.ToBeWithin", "to be within", 90, 110 - .Expect(Nothing).RunMatcher "SpecExpectationSpecs.ToBeNothing", "to be nothing" + .Expect(100).RunMatcher "Specs_SpecExpectation.ToBeWithin", "to be within", 90, 110 + .Expect(Nothing).RunMatcher "Specs_SpecExpectation.ToBeNothing", "to be nothing" End With - InlineRunner.RunSuite Specs + With Specs.It("should set Passed") + Set Expectation = New SpecExpectation + Expectation.Actual = 4 + Expectation.ToEqual 4 + + .Expect(Expectation.Passed).ToEqual True + + Expectation.ToEqual 3 + .Expect(Expectation.Passed).ToEqual False + End With + + With Specs.It("should set FailureMessage") + Set Expectation = New SpecExpectation + Expectation.Actual = 4 + + Expectation.ToEqual 4 + .Expect(Expectation.FailureMessage).ToEqual "" + + Expectation.ToEqual 3 + .Expect(Expectation.FailureMessage).ToEqual "Expected 4 to equal 3" + End With End Function 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 End Function Public Function ToBeNothing(Actual As Variant) As Variant - If IsObject(Actual) Then + If VBA.IsObject(Actual) Then If Actual Is Nothing Then ToBeNothing = True Else diff --git a/specs/Specs_SpecSuite.bas b/specs/Specs_SpecSuite.bas new file mode 100644 index 0000000..94dcd0c --- /dev/null +++ b/specs/Specs_SpecSuite.bas @@ -0,0 +1,79 @@ +Attribute VB_Name = "Specs_SpecSuite" +Public Function Specs() As SpecSuite + Dim Suite As SpecSuite + + Set Specs = New SpecSuite + Specs.Description = "SpecSuite" + + Dim Reporter As New ImmediateReporter + Reporter.ListenTo Specs + + Dim Fixture As New Specs_Fixture + Fixture.ListenTo Specs + + With Specs.It("should fire BeforeEach event", "id") + .Expect(Fixture.BeforeEachCallCount).ToEqual 1 + .Expect(1 + 1).ToEqual 2 + End With + + With Specs.It("should fire Result event") + .Expect(Fixture.ResultCalls(1).Description).ToEqual "should fire BeforeEach event" + .Expect(Fixture.ResultCalls(1).Result).ToEqual SpecResultType.Pass + .Expect(Fixture.ResultCalls(1).Expectations.Count).ToEqual 2 + .Expect(Fixture.ResultCalls(1).Id).ToEqual "id" + End With + + With Specs.It("should fire AfterEach event") + .Expect(Fixture.AfterEachCallCount).ToEqual 2 + End With + + With Specs.It("should store specs") + Set Suite = New SpecSuite + With Suite.It("(pass)", "(1)") + .Expect(4).ToEqual 4 + End With + With Suite.It("(fail)", "(2)") + .Expect(4).ToEqual 3 + End With + With Suite.It("(pending)", "(3)") + End With + + .Expect(Suite.Specs.Count).ToEqual 3 + .Expect(Suite.PassedSpecs.Count).ToEqual 1 + .Expect(Suite.FailedSpecs.Count).ToEqual 1 + .Expect(Suite.PendingSpecs.Count).ToEqual 1 + + .Expect(Suite.PassedSpecs(1).Description).ToEqual "(pass)" + .Expect(Suite.FailedSpecs(1).Description).ToEqual "(fail)" + .Expect(Suite.PendingSpecs(1).Description).ToEqual "(pending)" + End With + + With Specs.It("should have overall result") + Set Suite = New SpecSuite + + .Expect(Suite.Result).ToEqual SpecResultType.Pending + + With Suite.It("(pending)", "(1)") + End With + + .Expect(Suite.Result).ToEqual SpecResultType.Pending + + With Suite.It("(pass)", "(2)") + .Expect(4).ToEqual 4 + End With + + .Expect(Suite.Result).ToEqual SpecResultType.Pass + + With Suite.It("(fail)", "(3)") + .Expect(4).ToEqual 3 + End With + + .Expect(Suite.Result).ToEqual SpecResultType.Fail + + With Suite.It("(pass)", "(4)") + .Expect(4).ToEqual 4 + End With + + .Expect(Suite.Result).ToEqual SpecResultType.Fail + End With +End Function diff --git a/src/ImmediateReporter.cls b/src/ImmediateReporter.cls index d903ffe..7dbe62f 100644 --- a/src/ImmediateReporter.cls +++ b/src/ImmediateReporter.cls @@ -21,6 +21,10 @@ Private WithEvents pSpecs As SpecSuite Attribute pSpecs.VB_VarHelpID = -1 Private Finished As Boolean +' ============================================= ' +' Public Methods +' ============================================= ' + '' ' Listen to given SpecSuite ' @@ -32,7 +36,7 @@ Public Sub ListenTo(Specs As SpecSuite) Done End If - Debug.Print "= " & Now & " =" + Debug.Print "===" & IIf(Specs.Description <> "", " " & Specs.Description & " ===", "") Set pSpecs = Specs Finished = False End Sub @@ -44,26 +48,63 @@ End Sub '' Public Function Done() Finished = True - Debug.Print "= DONE = " & pSpecs.Results.Count & " =" + + Debug.Print "= " & Summary & " = " & Now & " =" & vbNewLine End Function +' ============================================= ' +' Private Functions +' ============================================= ' + Private Function ResultTypeToString(ResultType As SpecResultType) As String Select Case ResultType Case SpecResultType.Pass - ResultTypeToString = "PASS" + ResultTypeToString = "+" Case SpecResultType.Fail - ResultTypeToString = "FAIL" + ResultTypeToString = "X" Case SpecResultType.Pending - ResultTypeToString = "pending" + ResultTypeToString = "." End Select End Function +Private Function Summary() As String + Dim Total As Long + Dim Passed As Long + Dim Failed As Long + Dim Pending As Long + Total = pSpecs.Specs.Count + Passed = pSpecs.PassedSpecs.Count + Failed = pSpecs.FailedSpecs.Count + Pending = pSpecs.PendingSpecs.Count + + Dim SummaryMessage As String + If Failed > 0 Then + SummaryMessage = "FAIL (" & Failed & " of " & Total & " failed" + Else + SummaryMessage = "PASS (" & Passed & " of " & Total & " passed" + End If + If Pending > 0 Then + SummaryMessage = SummaryMessage & ", " & Pending & " pending)" + Else + SummaryMessage = SummaryMessage & ")" + End If + + Summary = SummaryMessage +End Function + +Private Sub pSpecs_Result(Spec As SpecDefinition) + Debug.Print ResultTypeToString(Spec.Result) & " " & Spec.Description & IIf(Spec.Id <> "", " [" & Spec.Id & "]", "") + + If Spec.Result = SpecResultType.Fail Then + Dim Expectation As SpecExpectation + For Each Expectation In Spec.FailedExpectations + Debug.Print " " & Expectation.FailureMessage + Next Expectation + End If +End Sub + Private Sub Class_Terminate() If Not Finished Then Done End If End Sub - -Private Sub pSpecs_Result(Description As String, ResultType As SpecResultType, Expectations As Collection, Id As String) - Debug.Print ResultTypeToString(ResultType) & " " & Description -End Sub diff --git a/src/SpecDefinition.cls b/src/SpecDefinition.cls index 6d9d657..f446508 100644 --- a/src/SpecDefinition.cls +++ b/src/SpecDefinition.cls @@ -29,6 +29,34 @@ Public Expectations As VBA.Collection Public Suite As SpecSuite +Public Property Get Result() As SpecResultType + If Me.Expectations.Count = 0 Then + Result = SpecResultType.Pending + Else + Result = SpecResultType.Pass + + Dim Expectation As SpecExpectation + For Each Expectation In Me.Expectations + If Not Expectation.Passed Then + Result = SpecResultType.Fail + Exit For + End If + Next Expectation + End If +End Property + +Public Property Get FailedExpectations() As Collection + Dim Filtered As New Collection + Dim Expectation As SpecExpectation + For Each Expectation In Me.Expectations + If Not Expectation.Passed Then + Filtered.Add Expectation + End If + Next Expectation + + Set FailedExpectations = Filtered +End Property + ' ============================================= ' ' Public Methods ' ============================================= ' @@ -62,21 +90,6 @@ Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() - Dim ResultType As SpecResultType - Dim Expectation As SpecExpectation - - If Me.Expectations.Count = 0 Then - ResultType = SpecResultType.Pending - Else - ResultType = SpecResultType.Pass - For Each Expectation In Me.Expectations - If Not Expectation.Passed Then - ResultType = SpecResultType.Fail - Exit For - End If - Next Expectation - End If - - Me.Suite.AddResult Me.Description, ResultType, Me.Expectations, Me.Id + Me.Suite.SpecDone Me End Sub diff --git a/src/SpecSuite.cls b/src/SpecSuite.cls index 2de8e85..b89387c 100644 --- a/src/SpecSuite.cls +++ b/src/SpecSuite.cls @@ -30,7 +30,7 @@ Public Enum SpecResultType End Enum Public Event BeforeEach() -Public Event Result(Description As String, ResultType As SpecResultType, Expectations As VBA.Collection, Id As String) +Public Event Result(Definition As SpecDefinition) Public Event AfterEach() '' @@ -42,10 +42,78 @@ Public Event AfterEach() Public Description As String '' -' @property Results -' @type Collection +' @property Specs +' @type Collection '' -Public Results As VBA.Collection +Public Specs As VBA.Collection + +'' +' @property Result +' @type SpecResultType +'' +Public Property Get Result() As SpecResultType + Result = SpecResultType.Pending + + Dim Spec As SpecDefinition + For Each Spec In Me.Specs + If Spec.Result = SpecResultType.Pass Then + Result = SpecResultType.Pass + ElseIf Spec.Result = SpecResultType.Fail Then + Result = SpecResultType.Fail + Exit For + End If + Next Spec +End Property + +'' +' @property PassedSpecs +' @type Collection +'' +Public Property Get PassedSpecs() As Collection + Dim Spec As SpecDefinition + Dim Filtered As New Collection + For Each Spec In Me.Specs + If Spec.Result = SpecResultType.Pass Then + Filtered.Add Spec + End If + Next Spec + + Set PassedSpecs = Filtered +End Property + +'' +' @property FailedSpecs +' @type Collection +'' +Public Property Get FailedSpecs() As Collection + Dim Spec As SpecDefinition + Dim Filtered As New Collection + For Each Spec In Me.Specs + If Spec.Result = SpecResultType.Fail Then + Filtered.Add Spec + End If + Next Spec + + Set FailedSpecs = Filtered +End Property + +'' +' @property PendingSpecs +' @type Collection +'' +Public Property Get PendingSpecs() As Collection + Dim Spec As SpecDefinition + Dim Filtered As New Collection + For Each Spec In Me.Specs + If Spec.Result = SpecResultType.Pending Then + Filtered.Add Spec + End If + Next Spec + + Set PendingSpecs = Filtered +End Property +'' +' ' ============================================= ' ' Public Methods @@ -73,17 +141,15 @@ Public Function It(Description As String, Optional Id As String = "") As SpecDef End Function '' -' Called at end of SpecDefinition with results +' Called at completion of SpecDefinition ' ' @internal -' @method AddResult -' @param {SpecResultType} ResultType -' @param {Collection} Expectations +' @method SpecDone +' @param {SpecDefinition} Spec '' -Public Sub AddResult(Description As String, ResultType As SpecResultType, Expectations As VBA.Collection, Id As String) - Me.Results.Add Array(Description, ResultType, Expectations, Id) - - RaiseEvent Result(Description, ResultType, Expectations, Id) +Public Sub SpecDone(Spec As SpecDefinition) + Me.Specs.Add Spec + RaiseEvent Result(Spec) RaiseEvent AfterEach End Sub @@ -92,5 +158,5 @@ End Sub ' ============================================= ' Private Sub Class_Initialize() - Set Me.Results = New VBA.Collection + Set Me.Specs = New VBA.Collection End Sub From 1696e87b2481c82cd4ae8de27d14560d558b82b5 Mon Sep 17 00:00:00 2001 From: Tim Hall Date: Mon, 19 Dec 2016 10:11:52 -0500 Subject: [PATCH 5/5] Add WorkbookReporter --- specs/Excel-TDD - Specs.xlsm | Bin 137495 -> 92193 bytes src/DisplayRunner.bas | 267 ----------------------------------- src/WorkbookReporter.cls | 222 +++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+), 267 deletions(-) delete mode 100644 src/DisplayRunner.bas create mode 100644 src/WorkbookReporter.cls diff --git a/specs/Excel-TDD - Specs.xlsm b/specs/Excel-TDD - Specs.xlsm index 82db7ceb537c16c1bdf63f57ff75ba1fdec8aba0..06ec36ffd79d9990369eb4557b4d82912c51e043 100644 GIT binary patch literal 92193 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

jBU$orF^$|vj@#E?7xuwZ|soe?3RB_x(@(mZK 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%0AKD&6= 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Ƣ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 diff --git a/src/DisplayRunner.bas b/src/DisplayRunner.bas deleted file mode 100644 index 0ccde63..0000000 --- a/src/DisplayRunner.bas +++ /dev/null @@ -1,267 +0,0 @@ -Attribute VB_Name = "DisplayRunner" -'' -' DisplayRunner v1.4.0 -' (c) Tim Hall - https://github.com/timhall/Excel-TDD -' -' Runner with sheet output -' -' @dependencies -' @author tim.hall.engr@gmail.com -' @license: MIT (http://www.opensource.org/licenses/mit-license.php) -' -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Const DefaultSheetName As String = "Spec Runner" -Private Const DefaultFilenameRangeName As String = "Filename" -Private Const DefaultOutputStartRow As Integer = 6 -Private Const DefaultIdCol As Integer = 1 -Private Const DefaultDescCol As Integer = 2 -Private Const DefaultResultCol As Integer = 3 - -Private pFilename As Range -Private pSheet As Worksheet - -Private pOutputStartRow As Integer -Private pIdCol As Integer -Private pDescCol As Integer -Private pResultCol As Integer - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Properties -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Public Property Get OutputStartRow() As Integer - If pOutputStartRow <= 0 Then - pOutputStartRow = DefaultOutputStartRow - End If - - OutputStartRow = pOutputStartRow -End Property -Public Property Let OutputStartRow(Value As Integer) - pOutputStartRow = Value -End Property - -Public Property Get IdCol() As Integer - If pIdCol <= 0 Then - pIdCol = DefaultIdCol - End If - - IdCol = pIdCol -End Property -Public Property Let IdCol(Value As Integer) - pIdCol = Value -End Property - -Public Property Get DescCol() As Integer - If pDescCol <= 0 Then - pDescCol = DefaultDescCol - End If - - DescCol = pDescCol -End Property -Public Property Let DescCol(Value As Integer) - pDescCol = Value -End Property - -Public Property Get ResultCol() As Integer - If pResultCol <= 0 Then - pResultCol = DefaultResultCol - End If - - ResultCol = pResultCol -End Property -Public Property Let ResultCol(Value As Integer) - pResultCol = Value -End Property - -Public Property Get Filename() As Range - If pFilename Is Nothing And Not Sheet Is Nothing Then - Set pFilename = Sheet.Range(DefaultFilenameRangeName) - End If - - Set Filename = pFilename -End Property -Public Property Set Filename(Value As Range) - Set pFilename = Value -End Property - -Public Property Get Sheet() As Worksheet - If pSheet Is Nothing Then - If SheetExists(DefaultSheetName) Then - Set pSheet = ThisWorkbook.Sheets(DefaultSheetName) - Else - Err.Raise vbObjectError + 1, "DisplayRunner", "Unable to find runner sheet" - End If - End If - Set Sheet = pSheet -End Property -Public Property Set Sheet(Value As Worksheet) - Set pSheet = Value -End Property - -Public Property Get WBPath() As String - WBPath = Filename.Value -End Property -Public Property Let WBPath(Value As String) - Filename.Value = Value -End Property - - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Methods -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -'' -' Run the given suite -' -' @param {SpecSuite} Specs -' @param {Boolean} [Append=False] Append results to existing -' --------------------------------------------- ' - -Public Sub RunSuite(Specs As SpecSuite, Optional Append As Boolean = False) - ' Simply add to empty collection and call RunSuites - Dim SuiteCol As New Collection - - SuiteCol.Add Specs - RunSuites SuiteCol, Append -End Sub - -'' -' Run the given collection of spec suites -' -' @param {Collection} of SpecSuite -' @param {Boolean} [Append=False] Append results to existing -' --------------------------------------------- ' - -Public Sub RunSuites(SuiteCol As Collection, Optional Append As Boolean = False) - Dim Suite As SpecSuite - Dim Spec As SpecDefinition - Dim Row As Integer - Dim Indentation As String - - ' 0. Disable screen updating - Dim PrevUpdating As Boolean - PrevUpdating = Application.ScreenUpdating - Application.ScreenUpdating = False - ' On Error GoTo Cleanup - - ' 1. Clear existing output - If Not Append Then - ClearOutput - End If - - ' 2. Loop through Suites and output specs - Row = NewOutputRow - For Each Suite In SuiteCol - If Not Suite Is Nothing Then - If Suite.Description <> "" Then - OutputSuiteDetails Suite, Row - Indentation = " " - Else - Indentation = "" - End If - - For Each Spec In Suite.SpecsCol - OutputSpec Spec, Row, Indentation - Next Spec - End If - Next Suite - -Cleanup: - - ' Finally, restore screen updating - Application.ScreenUpdating = PrevUpdating - -End Sub - -'' -' Browse for the workbook to run specs on -' --------------------------------------------- ' - -Public Sub BrowseForWB() - Dim BrowseWB As String - - BrowseWB = Application.GetOpenFilename( _ - FileFilter:="Excel Workbooks (*.xls; *.xlsx; *.xlsm), *.xls, *.xlsx, *.xlsm", _ - Title:="Select the Excel Workbook to Test", _ - MultiSelect:=False _ - ) - - If BrowseWB <> "" And BrowseWB <> "False" Then - WBPath = BrowseWB - End If -End Sub - - -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' -' Internal -' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' - -Private Sub OutputSpec(Spec As SpecDefinition, ByRef Row As Integer, Optional Indentation As String = "") - Sheet.Cells(Row, IdCol) = Spec.Id - Sheet.Cells(Row, DescCol) = Indentation & Spec.Description - Sheet.Cells(Row, ResultCol) = Spec.ResultName - Row = Row + 1 - - If Spec.FailedExpectations.Count > 0 Then - Dim Exp As SpecExpectation - For Each Exp In Spec.FailedExpectations - Sheet.Cells(Row, DescCol) = Indentation & "X " & Exp.FailureMessage - Row = Row + 1 - Next Exp - End If -End Sub - -Private Sub OutputSuiteDetails(Suite As SpecSuite, ByRef Row As Integer) - Dim HasFailure As Boolean - Dim Result As String - Result = "Pass" - - For Each Spec In Suite.SpecsCol - If Spec.Result = SpecResult.Fail Then - Result = "Fail" - Exit For - End If - Next Spec - - Sheet.Cells(Row, DescCol) = Suite.Description - Sheet.Cells(Row, ResultCol) = Result - Row = Row + 1 -End Sub - -Private Sub ClearOutput() - Dim EndRow As Integer - - Dim PrevUpdating As Boolean - PrevUpdating = Application.ScreenUpdating - Application.ScreenUpdating = False - - EndRow = NewOutputRow - If EndRow >= OutputStartRow Then - Sheet.Range(Cells(OutputStartRow, IdCol), Cells(EndRow, ResultCol)).ClearContents - End If - - Application.ScreenUpdating = PrevUpdating -End Sub - -Private Function NewOutputRow() As Integer - NewOutputRow = OutputStartRow - - Do While Sheet.Cells(NewOutputRow, DescCol) <> "" - NewOutputRow = NewOutputRow + 1 - Loop -End Function - -Private Function SheetExists(SheetName As String) As Boolean - Dim Sheet As Worksheet - - For Each Sheet In ThisWorkbook.Sheets - If Sheet.Name = SheetName Then - SheetExists = True - Exit Function - End If - Next Sheet -End Function - - - diff --git a/src/WorkbookReporter.cls b/src/WorkbookReporter.cls new file mode 100644 index 0000000..1f2b5fc --- /dev/null +++ b/src/WorkbookReporter.cls @@ -0,0 +1,222 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "WorkbookReporter" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +'' +' DisplayReporter v2.0.0-alpha +' (c) Tim Hall - https://github.com/VBA-tools/Excel-TDD +' +' Report results to Worksheet +' +' @class DisplayReporter +' @author tim.hall.engr@gmail.com +' @license MIT (http://www.opensource.org/licenses/mit-license.php) +' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' +Private Const ProgressWidth As Long = 128 +Private pSheet As Worksheet +Private pCount As Long +Private pTotal As Long +Private pSuites As Collection + +' ============================================= ' +' Public Methods +' ============================================= ' + +'' +' Connect the display runner to a Worksheet to output results +' +' The given Worksheet should have names for: +' - "Progress" (Shape with width) +' - "ProgressBorder" (Shape) +' - "Result" (Cell) - Cell to output overall result +' - "Output" (Cell) - First cell to output results +' +' @method ConnectTo +' @param {Worksheet} Sheet +'' +Public Sub ConnectTo(Sheet As Worksheet) + Set pSheet = Sheet +End Sub + +'' +' Call this at the beginning of a test run to reset the worksheet +' (pass overall number of test suites that will be run to display progress) +' +' @method Start +' @param {Long} [NumSuites = 0] +'' +Public Sub Start(Optional NumSuites As Long = 0) + pCount = 0 + pTotal = NumSuites + + ClearResults + ShowProgress + DisplayResult "Running" +End Sub + +'' +' Output the given suite +' +' @method Output +' @param {SpecSuite} Suite +'' +Public Sub Output(Suite As SpecSuite) + pCount = pCount + 1 + pSuites.Add Suite + + ShowProgress + DisplayResults +End Sub + +'' +' After outputing all suites, display overall result +' +' @method Done +'' +Public Sub Done() + Dim Failed As Boolean + Dim Suite As SpecSuite + For Each Suite In pSuites + If Suite.Result = SpecResultType.Fail Then + Failed = True + Exit For + End If + Next Suite + + DisplayResult IIf(Failed, "FAIL", "PASS") +End Sub + +' ============================================= ' +' Private Functions +' ============================================= ' + +Private Sub ShowProgress() + If pTotal <= 0 Then + HideProgress + Exit Sub + End If + + Dim Percent As Double + Percent = pCount / pTotal + + If Percent > 1 Then + Debug.Print "WARNING: DisplayRunner has output more suites than specified in Start" + Percent = 1 + End If + + pSheet.Shapes("Progress").Width = ProgressWidth * Percent + pSheet.Shapes("Progress").Visible = True + pSheet.Shapes("ProgressBorder").Visible = True +End Sub + +Private Sub HideProgress() + pSheet.Shapes("Progress").Visible = False + pSheet.Shapes("ProgressBorder").Visible = False +End Sub + +Private Sub DisplayResult(Value As String) + With pSheet.Range("Result") + .Font.Size = IIf(Value = "Running", 12, 14) + .Value = Value + End With +End Sub + +Private Sub ClearResults() + Dim StartRow As Long + Dim StartColumn As Long + StartRow = pSheet.Range("Output").Row + StartColumn = pSheet.Range("Output").Column + + Dim LastRow As Long + LastRow = StartRow + Do While pSheet.Cells(LastRow + 1, StartColumn).Value <> "" + LastRow = LastRow + 1 + Loop + + With pSheet.Range(pSheet.Cells(StartRow, StartColumn), pSheet.Cells(LastRow, StartColumn + 1)) + .Value = "" + .Font.Bold = False + .Borders(xlInsideHorizontal).LineStyle = xlNone + End With +End Sub + +Private Sub DisplayResults() + Dim Rows As New Collection + Dim Dividers As New Collection + Dim Headings As New Collection + + Dim Suite As SpecSuite + Dim Spec As SpecDefinition + Dim Expectation As SpecExpectation + For Each Suite In pSuites + If Rows.Count > 0 Then + Dividers.Add Rows.Count + End If + + If Suite.Description <> "" Then + Headings.Add Rows.Count + Rows.Add Array(Suite.Description, ResultTypeToString(Suite.Result)) + End If + + For Each Spec In Suite.Specs + Rows.Add Array(Spec.Description, ResultTypeToString(Spec.Result)) + + For Each Expectation In Spec.FailedExpectations + Rows.Add Array(" " & Expectation.FailureMessage, "") + Next Expectation + Next Spec + Next Suite + + Dim OutputValues() As String + Dim Row As Variant + Dim i As Long + ReDim OutputValues(Rows.Count - 1, 1) + i = 0 + For Each Row In Rows + OutputValues(i, 0) = Row(0) + OutputValues(i, 1) = Row(1) + i = i + 1 + Next Row + + Dim StartRow As Long + Dim StartColumn As Long + StartRow = pSheet.Range("Output").Row + StartColumn = pSheet.Range("Output").Column + + pSheet.Range(pSheet.Cells(StartRow, StartColumn), pSheet.Cells(StartRow + Rows.Count - 1, StartColumn + 1)).Value = OutputValues + + Dim Divider As Variant + For Each Divider In Dividers + With pSheet.Range(pSheet.Cells(StartRow + Divider, StartColumn), pSheet.Cells(StartRow + Divider, StartColumn + 1)).Borders(xlEdgeTop) + .LineStyle = xlContinuous + .ThemeColor = 1 + .TintAndShade = -0.249946592608417 + .Weight = xlThin + End With + Next Divider + + Dim Heading As Variant + For Each Heading In Headings + pSheet.Cells(StartRow + Heading, StartColumn).Font.Bold = True + Next Heading +End Sub + +Private Function ResultTypeToString(ResultType As SpecResultType) As String + Select Case ResultType + Case SpecResultType.Pass + ResultTypeToString = "Pass" + Case SpecResultType.Fail + ResultTypeToString = "Fail" + Case SpecResultType.Pending + ResultTypeToString = "Pending" + End Select +End Function + +Private Sub Class_Initialize() + Set pSuites = New Collection +End Sub