From d3e4a5fc6c356cc24f7dc3d00e03cefe60db7f4e Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:21:43 -0500 Subject: [PATCH 1/8] Creates CalculatorImageButtonTests file --- .../project.pbxproj | 4 ++ .../CalculatorImageButtonTests.swift | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift diff --git a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj index 4f1ab10..a8b01cb 100644 --- a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj +++ b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ E24E84C0244276E8007AC7AE /* CalculatorResultDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24E84BF244276E8007AC7AE /* CalculatorResultDisplayView.swift */; }; E256231124427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E256231024427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift */; }; E256231324427BB400AA7CD0 /* CalculatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E256231224427BB400AA7CD0 /* CalculatorView.swift */; }; + E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */; }; E263ED6A244AA99D0001C89B /* String+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED69244AA99D0001C89B /* String+Digits.swift */; }; E263ED6C244ACE260001C89B /* Decimal+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED6B244ACE260001C89B /* Decimal+Digits.swift */; }; E2654C6C244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */; }; @@ -105,6 +106,7 @@ E24E84BF244276E8007AC7AE /* CalculatorResultDisplayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorResultDisplayView.swift; sourceTree = ""; }; E256231024427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorButtonViewLegacy.swift; sourceTree = ""; }; E256231224427BB400AA7CD0 /* CalculatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorView.swift; sourceTree = ""; }; + E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonTests.swift; sourceTree = ""; }; E263ED69244AA99D0001C89B /* String+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Digits.swift"; sourceTree = ""; }; E263ED6B244ACE260001C89B /* Decimal+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Digits.swift"; sourceTree = ""; }; E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorOperationValidatorProtocol.swift; sourceTree = ""; }; @@ -195,6 +197,7 @@ E215DE2C2B018CAE00670876 /* Mocks */, E215DE2D2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift */, E215DE302B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift */, + E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */, ); path = CalculatorReplicaSwiftUISnapshotTests; sourceTree = ""; @@ -621,6 +624,7 @@ files = ( E215DE312B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift in Sources */, E215DE2E2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift in Sources */, + E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */, E215DE2F2B018EBF00670876 /* CalculatorButtonProtocolMock.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift new file mode 100644 index 0000000..93b5b98 --- /dev/null +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift @@ -0,0 +1,38 @@ +// +// CalculatorImageButtonTests.swift +// CalculatorReplicaSwiftUISnapshotTests +// +// Created by Alonso on 10/01/24. +// Copyright © 2024 Alonso. All rights reserved. +// + +@testable import Calculator +import SnapshotTesting +import XCTest + +final class CalculatorImageButtonTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} From 41eb6cbd4eeb0e5cc8107ea8afd6c09983b85307 Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:25:35 -0500 Subject: [PATCH 2/8] Moves CalculatorButtonStyleProtocolMock to its own file --- .../project.pbxproj | 8 ++++++++ .../Mocks/CalculatorButtonProtocolMock.swift | 8 -------- .../CalculatorButtonStyleProtocolMock.swift | 18 ++++++++++++++++++ .../CalculatorImageButtonProtocolMock.swift | 14 ++++++++++++++ 4 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonStyleProtocolMock.swift create mode 100644 CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift diff --git a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj index a8b01cb..3128c08 100644 --- a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj +++ b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ E256231124427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E256231024427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift */; }; E256231324427BB400AA7CD0 /* CalculatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E256231224427BB400AA7CD0 /* CalculatorView.swift */; }; E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */; }; + E2608A542B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */; }; + E2608A562B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */; }; E263ED6A244AA99D0001C89B /* String+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED69244AA99D0001C89B /* String+Digits.swift */; }; E263ED6C244ACE260001C89B /* Decimal+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED6B244ACE260001C89B /* Decimal+Digits.swift */; }; E2654C6C244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */; }; @@ -107,6 +109,8 @@ E256231024427A3E00AA7CD0 /* CalculatorButtonViewLegacy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorButtonViewLegacy.swift; sourceTree = ""; }; E256231224427BB400AA7CD0 /* CalculatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorView.swift; sourceTree = ""; }; E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonTests.swift; sourceTree = ""; }; + E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonProtocolMock.swift; sourceTree = ""; }; + E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorButtonStyleProtocolMock.swift; sourceTree = ""; }; E263ED69244AA99D0001C89B /* String+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Digits.swift"; sourceTree = ""; }; E263ED6B244ACE260001C89B /* Decimal+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Digits.swift"; sourceTree = ""; }; E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorOperationValidatorProtocol.swift; sourceTree = ""; }; @@ -213,6 +217,8 @@ isa = PBXGroup; children = ( E215DDFE2B018B5B00670876 /* CalculatorButtonProtocolMock.swift */, + E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */, + E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */, ); path = Mocks; sourceTree = ""; @@ -625,6 +631,8 @@ E215DE312B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift in Sources */, E215DE2E2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift in Sources */, E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */, + E2608A562B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift in Sources */, + E2608A542B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift in Sources */, E215DE2F2B018EBF00670876 /* CalculatorButtonProtocolMock.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonProtocolMock.swift b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonProtocolMock.swift index 0ba9017..988bbcc 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonProtocolMock.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonProtocolMock.swift @@ -28,11 +28,3 @@ final class CalculatorButtonProtocolMock: CalculatorButtonProtocol { var shouldShowOnResultDisplay: Bool = true } - -final class CalculatorButtonStyleProtocolMock: CalculatorButtonStyleProtocol { - var gridSpace: Int = 0 - - var tintColor: Color = .primary - - var backgroundColor: Color = .accentColor -} diff --git a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonStyleProtocolMock.swift b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonStyleProtocolMock.swift new file mode 100644 index 0000000..52276e6 --- /dev/null +++ b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorButtonStyleProtocolMock.swift @@ -0,0 +1,18 @@ +// +// CalculatorButtonStyleProtocolMock.swift +// CalculatorReplicaSwiftUISnapshotTests +// +// Created by Alonso on 10/01/24. +// Copyright © 2024 Alonso. All rights reserved. +// + +import SwiftUI +@testable import Calculator + +final class CalculatorButtonStyleProtocolMock: CalculatorButtonStyleProtocol { + var gridSpace: Int = 0 + + var tintColor: Color = .primary + + var backgroundColor: Color = .accentColor +} diff --git a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift new file mode 100644 index 0000000..ef6dc15 --- /dev/null +++ b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift @@ -0,0 +1,14 @@ +// +// CalculatorImageButtonProtocolMock.swift +// CalculatorReplicaSwiftUISnapshotTests +// +// Created by Alonso on 10/01/24. +// Copyright © 2024 Alonso. All rights reserved. +// + +import SwiftUI +@testable import Calculator + +final class CalculatorImageButtonProtocolMock: CalculatorImageButtonProtocol { + +} From b5b9d0ff2ba570090b7cf998ea32626aaa75f04a Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:28:13 -0500 Subject: [PATCH 3/8] Implements CalculatorImageButtonTests --- .../CalculatorImageButtonTests.swift | 35 ++++++++++--------- .../CalculatorImageButtonProtocolMock.swift | 8 ++++- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift index 93b5b98..68d6cf4 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift @@ -12,27 +12,28 @@ import XCTest final class CalculatorImageButtonTests: XCTestCase { - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } + func testCalculatorImageButton() { + let imageButton = CalculatorImageButtonProtocolMock() + let style = CalculatorButtonStyleProtocolMock() + style.gridSpace = 1 - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } + imageButton.style = style + imageButton.imageName = "plus" - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - // Any test you write for XCTest can be annotated as throws and async. - // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. - // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + let view = CalculatorImageButton(button: imageButton) + assertSnapshot(of: view, as: .image, record: true) } - func testPerformanceExample() throws { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } + func testCalculatorImageButtonExpandedGridSpace() { + let imageButton = CalculatorImageButtonProtocolMock() + let style = CalculatorButtonStyleProtocolMock() + style.gridSpace = 2 + + imageButton.style = style + imageButton.imageName = "plus" + + let view = CalculatorImageButton(button: imageButton) + assertSnapshot(of: view, as: .image, record: true) } } diff --git a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift index ef6dc15..67e7929 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorImageButtonProtocolMock.swift @@ -10,5 +10,11 @@ import SwiftUI @testable import Calculator final class CalculatorImageButtonProtocolMock: CalculatorImageButtonProtocol { - + var identifier: String = "" + + var imageName: String = "" + + var accessibilityLabel: String = "" + + var style: CalculatorButtonStyleProtocol = CalculatorButtonStyleProtocolMock() } From ac7dc0d2bf7ac67fbd18f2e3082288489297163f Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:30:51 -0500 Subject: [PATCH 4/8] Records new snapshots for CalculatorImageButton --- .../CalculatorImageButtonTests.swift | 4 ++-- .../testCalculatorImageButton.1.png | Bin 0 -> 5886 bytes ...tCalculatorImageButtonExpandedGridSpace.1.png | Bin 0 -> 7953 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButton.1.png create mode 100644 CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButtonExpandedGridSpace.1.png diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift index 68d6cf4..b682ad0 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorImageButtonTests.swift @@ -21,7 +21,7 @@ final class CalculatorImageButtonTests: XCTestCase { imageButton.imageName = "plus" let view = CalculatorImageButton(button: imageButton) - assertSnapshot(of: view, as: .image, record: true) + assertSnapshot(of: view, as: .image) } func testCalculatorImageButtonExpandedGridSpace() { @@ -33,7 +33,7 @@ final class CalculatorImageButtonTests: XCTestCase { imageButton.imageName = "plus" let view = CalculatorImageButton(button: imageButton) - assertSnapshot(of: view, as: .image, record: true) + assertSnapshot(of: view, as: .image) } } diff --git a/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButton.1.png b/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButton.1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8931f59aaea1050df6c18b3c7b4eaeaeab7bd7 GIT binary patch literal 5886 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 Rhsd=xKnG?3#i-kc{~v_=I}QK< literal 0 HcmV?d00001 diff --git a/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButtonExpandedGridSpace.1.png b/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorImageButtonTests/testCalculatorImageButtonExpandedGridSpace.1.png new file mode 100644 index 0000000000000000000000000000000000000000..98e7effc1ad13a9dfd720e6192dfa76016a68dca GIT binary patch literal 7953 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 Ar2qf` literal 0 HcmV?d00001 From 63e7c7f77f431925238f63adcc7fe64672a101fb Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:32:18 -0500 Subject: [PATCH 5/8] Creates CalculatorTextButtonTests file --- .../project.pbxproj | 4 +++ .../CalculatorTextButtonTests.swift | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift diff --git a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj index 3128c08..8da9337 100644 --- a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj +++ b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */; }; E2608A542B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */; }; E2608A562B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */; }; + E2608A582B4E634000060A20 /* CalculatorTextButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A572B4E634000060A20 /* CalculatorTextButtonTests.swift */; }; E263ED6A244AA99D0001C89B /* String+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED69244AA99D0001C89B /* String+Digits.swift */; }; E263ED6C244ACE260001C89B /* Decimal+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED6B244ACE260001C89B /* Decimal+Digits.swift */; }; E2654C6C244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */; }; @@ -111,6 +112,7 @@ E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonTests.swift; sourceTree = ""; }; E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonProtocolMock.swift; sourceTree = ""; }; E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorButtonStyleProtocolMock.swift; sourceTree = ""; }; + E2608A572B4E634000060A20 /* CalculatorTextButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorTextButtonTests.swift; sourceTree = ""; }; E263ED69244AA99D0001C89B /* String+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Digits.swift"; sourceTree = ""; }; E263ED6B244ACE260001C89B /* Decimal+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Digits.swift"; sourceTree = ""; }; E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorOperationValidatorProtocol.swift; sourceTree = ""; }; @@ -202,6 +204,7 @@ E215DE2D2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift */, E215DE302B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift */, E2608A512B4E60CB00060A20 /* CalculatorImageButtonTests.swift */, + E2608A572B4E634000060A20 /* CalculatorTextButtonTests.swift */, ); path = CalculatorReplicaSwiftUISnapshotTests; sourceTree = ""; @@ -630,6 +633,7 @@ files = ( E215DE312B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift in Sources */, E215DE2E2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift in Sources */, + E2608A582B4E634000060A20 /* CalculatorTextButtonTests.swift in Sources */, E2608A522B4E60CB00060A20 /* CalculatorImageButtonTests.swift in Sources */, E2608A562B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift in Sources */, E2608A542B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift in Sources */, diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift new file mode 100644 index 0000000..5c3f52b --- /dev/null +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift @@ -0,0 +1,31 @@ +// +// CalculatorTextButtonTests.swift +// CalculatorReplicaSwiftUISnapshotTests +// +// Created by Alonso on 10/01/24. +// Copyright © 2024 Alonso. All rights reserved. +// + +@testable import Calculator +import SnapshotTesting +import XCTest + +final class CalculatorTextButtonTests: XCTestCase { + + func testCalculatorTextButton() { + let style = CalculatorButtonStyleProtocolMock() + style.gridSpace = 1 + + let view = CalculatorTextButtonLegacy(text: "1", style: style) + assertSnapshot(of: view, as: .image) + } + + func testCalculatorTextButtonExpandedGridSpace() { + let style = CalculatorButtonStyleProtocolMock() + style.gridSpace = 2 + + let view = CalculatorTextButtonLegacy(text: "1", style: style) + assertSnapshot(of: view, as: .image) + } + +} From feb8ad43c4f6a304649223169da610c9bfd0941f Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:35:46 -0500 Subject: [PATCH 6/8] Implements CalculatorTextButtonProtocolMock --- .../project.pbxproj | 4 ++++ .../CalculatorTextButtonProtocolMock.swift | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorTextButtonProtocolMock.swift diff --git a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj index 8da9337..428b76d 100644 --- a/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj +++ b/CalculatorReplicaSwiftUI.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ E2608A542B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */; }; E2608A562B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */; }; E2608A582B4E634000060A20 /* CalculatorTextButtonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A572B4E634000060A20 /* CalculatorTextButtonTests.swift */; }; + E2608A5A2B4E63B300060A20 /* CalculatorTextButtonProtocolMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2608A592B4E63B300060A20 /* CalculatorTextButtonProtocolMock.swift */; }; E263ED6A244AA99D0001C89B /* String+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED69244AA99D0001C89B /* String+Digits.swift */; }; E263ED6C244ACE260001C89B /* Decimal+Digits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E263ED6B244ACE260001C89B /* Decimal+Digits.swift */; }; E2654C6C244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */; }; @@ -113,6 +114,7 @@ E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorImageButtonProtocolMock.swift; sourceTree = ""; }; E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorButtonStyleProtocolMock.swift; sourceTree = ""; }; E2608A572B4E634000060A20 /* CalculatorTextButtonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorTextButtonTests.swift; sourceTree = ""; }; + E2608A592B4E63B300060A20 /* CalculatorTextButtonProtocolMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorTextButtonProtocolMock.swift; sourceTree = ""; }; E263ED69244AA99D0001C89B /* String+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Digits.swift"; sourceTree = ""; }; E263ED6B244ACE260001C89B /* Decimal+Digits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Digits.swift"; sourceTree = ""; }; E2654C6B244D5304005BA7EC /* CalculatorOperationValidatorProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorOperationValidatorProtocol.swift; sourceTree = ""; }; @@ -222,6 +224,7 @@ E215DDFE2B018B5B00670876 /* CalculatorButtonProtocolMock.swift */, E2608A532B4E619F00060A20 /* CalculatorImageButtonProtocolMock.swift */, E2608A552B4E61B800060A20 /* CalculatorButtonStyleProtocolMock.swift */, + E2608A592B4E63B300060A20 /* CalculatorTextButtonProtocolMock.swift */, ); path = Mocks; sourceTree = ""; @@ -631,6 +634,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E2608A5A2B4E63B300060A20 /* CalculatorTextButtonProtocolMock.swift in Sources */, E215DE312B019BBC00670876 /* CalculatorTextButtonLegacyTests.swift in Sources */, E215DE2E2B018DA100670876 /* CalculatorImageButtonLegacyTests.swift in Sources */, E2608A582B4E634000060A20 /* CalculatorTextButtonTests.swift in Sources */, diff --git a/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorTextButtonProtocolMock.swift b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorTextButtonProtocolMock.swift new file mode 100644 index 0000000..a479891 --- /dev/null +++ b/CalculatorReplicaSwiftUISnapshotTests/Mocks/CalculatorTextButtonProtocolMock.swift @@ -0,0 +1,20 @@ +// +// CalculatorTextButtonProtocolMock.swift +// CalculatorReplicaSwiftUISnapshotTests +// +// Created by Alonso on 10/01/24. +// Copyright © 2024 Alonso. All rights reserved. +// + +import SwiftUI +@testable import Calculator + +final class CalculatorTextButtonProtocolMock: CalculatorTextButtonProtocol { + var identifier: String = "" + + var text: String = "" + + var accessibilityLabel: String = "" + + var style: CalculatorButtonStyleProtocol = CalculatorButtonStyleProtocolMock() +} From 71898ce5ee1005add04909688da4b8aa631d4462 Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:47:22 -0500 Subject: [PATCH 7/8] Implements CalculatorTextButtonTests --- .../CalculatorTextButtonTests.swift | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift index 5c3f52b..eefb905 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift @@ -13,19 +13,27 @@ import XCTest final class CalculatorTextButtonTests: XCTestCase { func testCalculatorTextButton() { + let textButton = CalculatorTextButtonProtocolMock() let style = CalculatorButtonStyleProtocolMock() style.gridSpace = 1 - let view = CalculatorTextButtonLegacy(text: "1", style: style) - assertSnapshot(of: view, as: .image) + textButton.style = style + textButton.text = "1" + + let view = CalculatorTextButton(button: textButton) + assertSnapshot(of: view, as: .image, record: true) } func testCalculatorTextButtonExpandedGridSpace() { + let textButton = CalculatorTextButtonProtocolMock() let style = CalculatorButtonStyleProtocolMock() style.gridSpace = 2 - let view = CalculatorTextButtonLegacy(text: "1", style: style) - assertSnapshot(of: view, as: .image) + textButton.style = style + textButton.text = "1" + + let view = CalculatorTextButton(button: textButton) + assertSnapshot(of: view, as: .image, record: true) } } From b9823f89807716679be3f6f51b15b8153b6c9183 Mon Sep 17 00:00:00 2001 From: DeluxeAlonso Date: Wed, 10 Jan 2024 00:48:06 -0500 Subject: [PATCH 8/8] Records new snapshots for CalculatoTextButton --- .../CalculatorTextButtonTests.swift | 4 ++-- .../testCalculatorTextButton.1.png | Bin 0 -> 6038 bytes ...stCalculatorTextButtonExpandedGridSpace.1.png | Bin 0 -> 8060 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButton.1.png create mode 100644 CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButtonExpandedGridSpace.1.png diff --git a/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift index eefb905..ba7c992 100644 --- a/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift +++ b/CalculatorReplicaSwiftUISnapshotTests/CalculatorTextButtonTests.swift @@ -21,7 +21,7 @@ final class CalculatorTextButtonTests: XCTestCase { textButton.text = "1" let view = CalculatorTextButton(button: textButton) - assertSnapshot(of: view, as: .image, record: true) + assertSnapshot(of: view, as: .image) } func testCalculatorTextButtonExpandedGridSpace() { @@ -33,7 +33,7 @@ final class CalculatorTextButtonTests: XCTestCase { textButton.text = "1" let view = CalculatorTextButton(button: textButton) - assertSnapshot(of: view, as: .image, record: true) + assertSnapshot(of: view, as: .image) } } diff --git a/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButton.1.png b/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButton.1.png new file mode 100644 index 0000000000000000000000000000000000000000..a64cd64d7018e8244872c374652b3e34be706ba6 GIT binary patch literal 6038 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 VB literal 0 HcmV?d00001 diff --git a/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButtonExpandedGridSpace.1.png b/CalculatorReplicaSwiftUISnapshotTests/__Snapshots__/CalculatorTextButtonTests/testCalculatorTextButtonExpandedGridSpace.1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffe3b689fe753b81eef0573f3976fe1b75ddc2d GIT binary patch literal 8060 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