From 7d8741ad10b8292760a80220288a0571a6c1edd1 Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Tue, 17 Oct 2023 19:27:55 +0300 Subject: [PATCH] Implement tests --- .../xcschemes/FloatingTextField.xcscheme | 103 +++++++++++++ Package.resolved | 23 +++ Package.swift | 26 ++-- .../FloatingTextFieldTests.swift | 8 -- .../FloatingTextFieldSnapshotTests.swift | 68 +++++++++ ...pactedPlaceholder_whenTextIsNotEmpty.1.png | Bin 0 -> 13184 bytes ...FloatingTextFieldShowsCustomizedView.1.png | Bin 0 -> 18578 bytes ...ShowsOnlyPlaceholder_whenTextIsEmpty.1.png | Bin 0 -> 7800 bytes ...hatFloatingTextFieldShowsSecureField.1.png | Bin 0 -> 8539 bytes .../UnitTests/FloatingTextFieldTests.swift | 135 ++++++++++++++++++ 10 files changed, 343 insertions(+), 20 deletions(-) create mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/FloatingTextField.xcscheme create mode 100644 Package.resolved delete mode 100644 Tests/FloatingTextFieldTests/FloatingTextFieldTests.swift create mode 100644 Tests/FloatingTextFieldTests/SnapshotTests/FloatingTextFieldSnapshotTests.swift create mode 100644 Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsCompactedPlaceholder_whenTextIsNotEmpty.1.png create mode 100644 Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsCustomizedView.1.png create mode 100644 Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsOnlyPlaceholder_whenTextIsEmpty.1.png create mode 100644 Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsSecureField.1.png create mode 100644 Tests/FloatingTextFieldTests/UnitTests/FloatingTextFieldTests.swift diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/FloatingTextField.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/FloatingTextField.xcscheme new file mode 100644 index 0000000..ed7189a --- /dev/null +++ b/.swiftpm/xcode/xcshareddata/xcschemes/FloatingTextField.xcscheme @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..d2dfc75 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,23 @@ +{ + "pins" : [ + { + "identity" : "swift-snapshot-testing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing", + "state" : { + "revision" : "bb0ea08db8e73324fe6c3727f755ca41a23ff2f4", + "version" : "1.14.2" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax.git", + "state" : { + "revision" : "74203046135342e4a4a627476dd6caf8b28fe11b", + "version" : "509.0.0" + } + } + ], + "version" : 2 +} diff --git a/Package.swift b/Package.swift index 434fcd4..5e617fd 100644 --- a/Package.swift +++ b/Package.swift @@ -5,24 +5,26 @@ import PackageDescription let package = Package( name: "FloatingTextField", + platforms: [ + .iOS(.v15), + ], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. - .library( - name: "FloatingTextField", - targets: ["FloatingTextField"]), + .library(name: "FloatingTextField", targets: ["FloatingTextField"]), ], dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + .package( + url: "https://github.com/pointfreeco/swift-snapshot-testing", + from: "1.12.0" + ), ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. - .target( - name: "FloatingTextField", - dependencies: []), + .target(name: "FloatingTextField", dependencies: []), .testTarget( name: "FloatingTextFieldTests", - dependencies: ["FloatingTextField"]), + dependencies: [ + "FloatingTextField", + .product(name: "SnapshotTesting", package: "swift-snapshot-testing"), + ] + ), ] ) diff --git a/Tests/FloatingTextFieldTests/FloatingTextFieldTests.swift b/Tests/FloatingTextFieldTests/FloatingTextFieldTests.swift deleted file mode 100644 index d7d7821..0000000 --- a/Tests/FloatingTextFieldTests/FloatingTextFieldTests.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// floating-text-field -// Copyright © 2023 Space Code. All rights reserved. -// - -import XCTest - -final class FloatingTextFieldTests: XCTestCase {} diff --git a/Tests/FloatingTextFieldTests/SnapshotTests/FloatingTextFieldSnapshotTests.swift b/Tests/FloatingTextFieldTests/SnapshotTests/FloatingTextFieldSnapshotTests.swift new file mode 100644 index 0000000..e712fb4 --- /dev/null +++ b/Tests/FloatingTextFieldTests/SnapshotTests/FloatingTextFieldSnapshotTests.swift @@ -0,0 +1,68 @@ +// +// floating-text-field +// Copyright © 2023 Space Code. All rights reserved. +// + +@testable import FloatingTextField +import SnapshotTesting +import SwiftUI +import XCTest + +// MARK: - FloatingTextFieldSnapshotTests + +final class FloatingTextFieldSnapshotTests: XCTestCase { + // MARK: Tests + + func test_thatFloatingTextFieldShowsOnlyPlaceholder_whenTextIsEmpty() { + assertSnapshots( + of: FloatingTextField(.constant(.empty), placeholder: .placeholder), + as: [.image(layout: .default, traits: .light)] + ) + } + + func test_thatFloatingTextFieldShowsCompactedPlaceholder_whenTextIsNotEmpty() { + assertSnapshots( + of: FloatingTextField(.constant(.text), placeholder: .placeholder), + as: [.image(layout: .default, traits: .light)] + ) + } + + func test_thatFloatingTextFieldShowsSecureField() { + assertSnapshots( + of: FloatingTextField(.constant(.text), placeholder: .placeholder) + .secureField(true), + as: [.image(layout: .default, traits: .light)] + ) + } + + func test_thatFloatingTextFieldShowsCustomizedView() { + assertSnapshots( + of: FloatingTextField(.constant(.text), placeholder: .placeholder) + .textFont(Font.system(size: 17.0)) + .borderWidth(2.0) + .borderColor(.black) + .focusedBorderColor(.black) + .titleColor(Color.black) + .placeholderFont(Font.system(size: 14.0)) + .placeholderColor(.gray) + .borderCornerRadius(12.0), + as: [.image(layout: .default, traits: .light)] + ) + } +} + +// MARK: - Constants + +private extension String { + static let empty = "" + static let text = "name@gmail.com" + static let placeholder = "Username" +} + +private extension SwiftUISnapshotLayout { + static let `default` = SwiftUISnapshotLayout.fixed(width: 375, height: 60) +} + +private extension UITraitCollection { + static let light = UITraitCollection(userInterfaceStyle: .light) +} diff --git a/Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsCompactedPlaceholder_whenTextIsNotEmpty.1.png b/Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsCompactedPlaceholder_whenTextIsNotEmpty.1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff805d7176aa6505710039d9c11fa1815e3bab2 GIT binary patch literal 13184 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
  • lOJ= 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 literal 0 HcmV?d00001 diff --git a/Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsOnlyPlaceholder_whenTextIsEmpty.1.png b/Tests/FloatingTextFieldTests/SnapshotTests/__Snapshots__/FloatingTextFieldSnapshotTests/test_thatFloatingTextFieldShowsOnlyPlaceholder_whenTextIsEmpty.1.png new file mode 100644 index 0000000000000000000000000000000000000000..beaf82972b925014366bedcf303c095b9a33b61a GIT binary patch literal 7800 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