mirror of
https://github.com/joncardasis/ChromaColorPicker.git
synced 2024-09-11 06:35:41 +03:00
Added tests
This commit is contained in:
parent
105f76bc0e
commit
9f06fb522f
@ -26,6 +26,10 @@
|
||||
FCCA42A5226022A800BE2FF9 /* ColorWheelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCA42A4226022A800BE2FF9 /* ColorWheelView.swift */; };
|
||||
FCCA42A7226023F000BE2FF9 /* ChromaColorHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCA42A6226023F000BE2FF9 /* ChromaColorHandle.swift */; };
|
||||
FCCA42AA2260329900BE2FF9 /* UIView+DropShadow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCCA42A92260329900BE2FF9 /* UIView+DropShadow.swift */; };
|
||||
FCE07BFE227B4A8100920217 /* UIColor+BrightnessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE07BFD227B4A8100920217 /* UIColor+BrightnessTests.swift */; };
|
||||
FCE07C01227B4C8B00920217 /* UIColor+TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE07C00227B4C8B00920217 /* UIColor+TestHelpers.swift */; };
|
||||
FCE07C04227B4DB900920217 /* UIView+DropShadowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE07C03227B4DB900920217 /* UIView+DropShadowTests.swift */; };
|
||||
FCE07C06227B525000920217 /* ChromaControlStylableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE07C05227B525000920217 /* ChromaControlStylableTests.swift */; };
|
||||
FCEA4E272235AAA200C0A1B6 /* ChromaColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCEA4E262235AAA200C0A1B6 /* ChromaColorPicker.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
@ -89,6 +93,10 @@
|
||||
FCCA42A6226023F000BE2FF9 /* ChromaColorHandle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromaColorHandle.swift; sourceTree = "<group>"; };
|
||||
FCCA42A92260329900BE2FF9 /* UIView+DropShadow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+DropShadow.swift"; sourceTree = "<group>"; };
|
||||
FCCA42AB226038A400BE2FF9 /* ColorWheelViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorWheelViewTests.swift; sourceTree = "<group>"; };
|
||||
FCE07BFD227B4A8100920217 /* UIColor+BrightnessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+BrightnessTests.swift"; sourceTree = "<group>"; };
|
||||
FCE07C00227B4C8B00920217 /* UIColor+TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+TestHelpers.swift"; sourceTree = "<group>"; };
|
||||
FCE07C03227B4DB900920217 /* UIView+DropShadowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+DropShadowTests.swift"; sourceTree = "<group>"; };
|
||||
FCE07C05227B525000920217 /* ChromaControlStylableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromaControlStylableTests.swift; sourceTree = "<group>"; };
|
||||
FCEA4E262235AAA200C0A1B6 /* ChromaColorPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromaColorPicker.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@ -171,9 +179,12 @@
|
||||
FC1BD8BE2207D7B700817AF3 /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FCE07BFF227B4C7A00920217 /* TestHelpers */,
|
||||
FCE07C02227B4D9500920217 /* Helpers */,
|
||||
FCCA42AD226038BD00BE2FF9 /* Extensions */,
|
||||
FC1BD8BF2207D7B700817AF3 /* ChromaColorPickerTests.swift */,
|
||||
FCCA42AB226038A400BE2FF9 /* ColorWheelViewTests.swift */,
|
||||
FCE07C05227B525000920217 /* ChromaControlStylableTests.swift */,
|
||||
FC1BD8C12207D7B700817AF3 /* Info.plist */,
|
||||
);
|
||||
path = Tests;
|
||||
@ -205,8 +216,8 @@
|
||||
FCCA42A82260325F00BE2FF9 /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FCCA42A92260329900BE2FF9 /* UIView+DropShadow.swift */,
|
||||
FC4387DC226972EB00F739F1 /* UIColor+Brightness.swift */,
|
||||
FCCA42A92260329900BE2FF9 /* UIView+DropShadow.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@ -214,10 +225,27 @@
|
||||
FCCA42AD226038BD00BE2FF9 /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FCE07BFD227B4A8100920217 /* UIColor+BrightnessTests.swift */,
|
||||
FCE07C03227B4DB900920217 /* UIView+DropShadowTests.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FCE07BFF227B4C7A00920217 /* TestHelpers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FCE07C00227B4C8B00920217 /* UIColor+TestHelpers.swift */,
|
||||
);
|
||||
path = TestHelpers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FCE07C02227B4D9500920217 /* Helpers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = Helpers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
@ -319,6 +347,7 @@
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
@ -391,8 +420,12 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
FCE07C06227B525000920217 /* ChromaControlStylableTests.swift in Sources */,
|
||||
FC1BD8C02207D7B700817AF3 /* ChromaColorPickerTests.swift in Sources */,
|
||||
FCE07BFE227B4A8100920217 /* UIColor+BrightnessTests.swift in Sources */,
|
||||
FC4387C422603AE900F739F1 /* ColorWheelViewTests.swift in Sources */,
|
||||
FCE07C01227B4C8B00920217 /* UIColor+TestHelpers.swift in Sources */,
|
||||
FCE07C04227B4DB900920217 /* UIView+DropShadowTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -11,7 +11,7 @@ import UIKit
|
||||
internal extension UIColor {
|
||||
|
||||
/// Returns a color with the specified brightness component.
|
||||
internal func withBrightness(_ value: CGFloat) -> UIColor {
|
||||
func withBrightness(_ value: CGFloat) -> UIColor {
|
||||
var hue: CGFloat = 0
|
||||
var saturation: CGFloat = 0
|
||||
var alpha: CGFloat = 0
|
||||
@ -22,7 +22,7 @@ internal extension UIColor {
|
||||
}
|
||||
|
||||
/// The value of the brightness component.
|
||||
internal var brightness: CGFloat {
|
||||
var brightness: CGFloat {
|
||||
var brightness: CGFloat = 0
|
||||
getHue(nil, saturation: nil, brightness: &brightness, alpha: nil)
|
||||
return brightness
|
||||
|
@ -17,13 +17,13 @@ internal struct ShadowProperties {
|
||||
|
||||
internal extension UIView {
|
||||
|
||||
internal var dropShadowProperties: ShadowProperties? {
|
||||
var dropShadowProperties: ShadowProperties? {
|
||||
guard let shadowColor = layer.shadowColor else { return nil }
|
||||
return ShadowProperties(color: shadowColor, opacity: layer.shadowOpacity, offset: layer.shadowOffset, radius: layer.shadowRadius)
|
||||
}
|
||||
|
||||
internal func applyDropShadow(color: UIColor, opacity: Float, offset: CGSize, radius: CGFloat) {
|
||||
self.clipsToBounds = false
|
||||
func applyDropShadow(color: UIColor, opacity: Float, offset: CGSize, radius: CGFloat) {
|
||||
clipsToBounds = false
|
||||
layer.masksToBounds = false
|
||||
layer.shadowColor = color.cgColor
|
||||
layer.shadowOpacity = opacity
|
||||
@ -34,11 +34,11 @@ internal extension UIView {
|
||||
layer.rasterizationScale = UIScreen.main.scale
|
||||
}
|
||||
|
||||
internal func applyDropShadow(_ properties: ShadowProperties) {
|
||||
func applyDropShadow(_ properties: ShadowProperties) {
|
||||
applyDropShadow(color: UIColor(cgColor: properties.color), opacity: properties.opacity, offset: properties.offset, radius: properties.radius)
|
||||
}
|
||||
|
||||
internal func removeDropShadow() {
|
||||
func removeDropShadow() {
|
||||
layer.shadowColor = nil
|
||||
layer.shadowOpacity = 0
|
||||
}
|
||||
|
66
Tests/ChromaControlStylableTests.swift
Normal file
66
Tests/ChromaControlStylableTests.swift
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
// ChromaControlStylableTests.swift
|
||||
// ChromaColorPickerTests
|
||||
//
|
||||
// Created by Jon Cardasis on 5/2/19.
|
||||
// Copyright © 2019 Jonathan Cardasis. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import ChromaColorPicker
|
||||
|
||||
class ChromaControlStyableTests: XCTestCase {
|
||||
|
||||
func testUIViewShadowPropertiesShouldReturnBlackColor() {
|
||||
// Given
|
||||
let view = TestView()
|
||||
|
||||
// When
|
||||
let shadowProps = view.shadowProperties(forHeight: 120)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(shadowProps.color, UIColor.black.cgColor)
|
||||
}
|
||||
|
||||
func testUIViewShadowPropertiesOpacity() {
|
||||
// Given
|
||||
let view = TestView()
|
||||
|
||||
// When
|
||||
let shadowProps = view.shadowProperties(forHeight: 120)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(shadowProps.opacity, 0.35)
|
||||
}
|
||||
|
||||
func testUIViewShadowPropertiesRadius() {
|
||||
// Given
|
||||
let view = TestView()
|
||||
|
||||
// When
|
||||
let shadowProps = view.shadowProperties(forHeight: 120)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(shadowProps.radius, 4)
|
||||
}
|
||||
|
||||
func testUIViewShadowPropertiesOffsetHeightShouldBeOnePercentOfProvidedHeight() {
|
||||
// Given
|
||||
let view = TestView()
|
||||
|
||||
// When
|
||||
let shadowProps = view.shadowProperties(forHeight: 1200)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(shadowProps.offset.width, 0)
|
||||
XCTAssertEqual(shadowProps.offset.height, 12)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class TestView: UIView, ChromaControlStylable {
|
||||
var borderWidth: CGFloat = 2.0
|
||||
var borderColor: UIColor = UIColor.green
|
||||
var showsShadow: Bool = true
|
||||
func updateShadowIfNeeded() {}
|
||||
}
|
@ -155,15 +155,4 @@ class ColorWheelViewTests: XCTestCase {
|
||||
XCTAssertEqual(actualColorValues.green, expectedColorValues.green, accuracy: 0.005)
|
||||
XCTAssertEqual(actualColorValues.blue, expectedColorValues.blue, accuracy: 0.005)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private extension UIColor {
|
||||
var rgbValues: (red: CGFloat, green: CGFloat, blue: CGFloat) {
|
||||
var red: CGFloat = 0
|
||||
var green: CGFloat = 0
|
||||
var blue: CGFloat = 0
|
||||
getRed(&red, green: &green, blue: &blue, alpha: nil)
|
||||
return (red, green, blue)
|
||||
}
|
||||
}
|
||||
|
56
Tests/Extensions/UIColor+BrightnessTests.swift
Normal file
56
Tests/Extensions/UIColor+BrightnessTests.swift
Normal file
@ -0,0 +1,56 @@
|
||||
//
|
||||
// UIColor+BrightnessTests.swift
|
||||
// ChromaColorPickerTests
|
||||
//
|
||||
// Created by Jon Cardasis on 5/2/19.
|
||||
// Copyright © 2019 Jonathan Cardasis. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import ChromaColorPicker
|
||||
|
||||
class UIColor_BrightnessTests: XCTestCase {
|
||||
|
||||
func testWithBrightnessReturnsNewInstanceWithNewBrightness() {
|
||||
// Given
|
||||
let color: UIColor = UIColor(hue: 25, saturation: 0.65, brightness: 0, alpha: 0.73)
|
||||
let newBrightness: CGFloat = 1.0
|
||||
|
||||
// When
|
||||
let newColor = color.withBrightness(newBrightness)
|
||||
|
||||
// Then
|
||||
let expectedValues = color.hsbaValues
|
||||
let actualValues = newColor.hsbaValues
|
||||
|
||||
XCTAssertNotEqual(color, newColor)
|
||||
XCTAssertEqual(expectedValues.hue, actualValues.hue)
|
||||
XCTAssertEqual(expectedValues.saturation, actualValues.saturation)
|
||||
XCTAssertEqual(actualValues.brightness, newBrightness)
|
||||
XCTAssertEqual(expectedValues.alpha, actualValues.alpha)
|
||||
}
|
||||
|
||||
func testBrightnessReturnsZeroForBlack() {
|
||||
// Given
|
||||
let color: UIColor = .black
|
||||
|
||||
// When, Then
|
||||
XCTAssertEqual(color.brightness, 0)
|
||||
}
|
||||
|
||||
func testBrightnessReturnsOneForWhite() {
|
||||
// Given
|
||||
let color: UIColor = .white
|
||||
|
||||
// When, Then
|
||||
XCTAssertEqual(color.brightness, 1)
|
||||
}
|
||||
|
||||
func testBrightnessReturnsCustomColorBrightness() {
|
||||
// Given
|
||||
let color: UIColor = UIColor(hue: 25, saturation: 1, brightness: 0.36, alpha: 1)
|
||||
|
||||
// When, Then
|
||||
XCTAssertEqual(color.brightness, 0.36)
|
||||
}
|
||||
}
|
111
Tests/Extensions/UIView+DropShadowTests.swift
Normal file
111
Tests/Extensions/UIView+DropShadowTests.swift
Normal file
@ -0,0 +1,111 @@
|
||||
//
|
||||
// UIView+DropShadowTests.swift
|
||||
// ChromaColorPickerTests
|
||||
//
|
||||
// Created by Jon Cardasis on 5/2/19.
|
||||
// Copyright © 2019 Jonathan Cardasis. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import ChromaColorPicker
|
||||
|
||||
class UIView_DropShadowTests: XCTestCase {
|
||||
|
||||
var subject: UIView!
|
||||
|
||||
override func setUp() {
|
||||
subject = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
|
||||
}
|
||||
|
||||
func testApplyingDropShadowUpdatesLayerProperties() {
|
||||
// Given
|
||||
let color: UIColor = .blue
|
||||
let opacity: Float = 0.35
|
||||
let offset: CGSize = CGSize(width: 12, height: 10)
|
||||
let radius: CGFloat = 4.0
|
||||
|
||||
// When
|
||||
subject.applyDropShadow(color: color, opacity: opacity, offset: offset, radius: radius)
|
||||
|
||||
// Then
|
||||
XCTAssertFalse(subject.layer.masksToBounds)
|
||||
XCTAssertEqual(subject.layer.shadowColor, color.cgColor)
|
||||
XCTAssertEqual(subject.layer.shadowOpacity, opacity)
|
||||
XCTAssertEqual(subject.layer.shadowOffset, offset)
|
||||
XCTAssertEqual(subject.layer.shadowRadius, radius)
|
||||
}
|
||||
|
||||
func testConvenienceMethodApplyDropShadowUpdatesTheSameLayerProperties() {
|
||||
// Given
|
||||
let color: UIColor = .blue
|
||||
let opacity: Float = 0.35
|
||||
let offset: CGSize = CGSize(width: 12, height: 10)
|
||||
let radius: CGFloat = 4.0
|
||||
|
||||
let shadowProps = ShadowProperties(color: color.cgColor, opacity: opacity, offset: offset, radius: radius)
|
||||
|
||||
// When
|
||||
subject.applyDropShadow(shadowProps)
|
||||
|
||||
// Then
|
||||
XCTAssertFalse(subject.layer.masksToBounds)
|
||||
XCTAssertEqual(subject.layer.shadowColor, color.cgColor)
|
||||
XCTAssertEqual(subject.layer.shadowOpacity, opacity)
|
||||
XCTAssertEqual(subject.layer.shadowOffset, offset)
|
||||
XCTAssertEqual(subject.layer.shadowRadius, radius)
|
||||
}
|
||||
|
||||
func testViewShouldNotClipToBoundsWhenDropShadowApplied() {
|
||||
// Given, When
|
||||
subject.applyDropShadow(defaultShadowProperties)
|
||||
|
||||
// Then
|
||||
XCTAssertFalse(subject.clipsToBounds)
|
||||
}
|
||||
|
||||
func testApplyingDropShadowShouldRasterizeLayer() {
|
||||
// Given, When
|
||||
subject.applyDropShadow(defaultShadowProperties)
|
||||
|
||||
// Then
|
||||
XCTAssertTrue(subject.layer.shouldRasterize)
|
||||
XCTAssertEqual(subject.layer.rasterizationScale, UIScreen.main.scale)
|
||||
}
|
||||
|
||||
func testDropShadowPropertiesReturnsCurrentShadowProps() {
|
||||
// Given, When
|
||||
subject.applyDropShadow(defaultShadowProperties)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(subject.dropShadowProperties!.color, defaultShadowProperties.color)
|
||||
XCTAssertEqual(subject.dropShadowProperties!.opacity, defaultShadowProperties.opacity)
|
||||
XCTAssertEqual(subject.dropShadowProperties!.offset, defaultShadowProperties.offset)
|
||||
XCTAssertEqual(subject.dropShadowProperties!.radius, defaultShadowProperties.radius)
|
||||
}
|
||||
|
||||
func testDropShadowPropertiesReturnsNilWhenNoShadowColor() {
|
||||
// Given, When
|
||||
subject.applyDropShadow(defaultShadowProperties)
|
||||
subject.layer.shadowColor = nil
|
||||
|
||||
// Then
|
||||
XCTAssertNil(subject.dropShadowProperties)
|
||||
}
|
||||
|
||||
func testRemoveDropShadowRemovesVisualShadowProperties() {
|
||||
// Given
|
||||
subject.applyDropShadow(defaultShadowProperties)
|
||||
|
||||
// When
|
||||
subject.removeDropShadow()
|
||||
|
||||
// Then
|
||||
XCTAssertNil(subject.layer.shadowColor)
|
||||
XCTAssertEqual(subject.layer.shadowOpacity, 0)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private var defaultShadowProperties: ShadowProperties {
|
||||
return ShadowProperties(color: UIColor.black.cgColor, opacity: 0.5, offset: CGSize(width: 2, height: 4), radius: 4)
|
||||
}
|
30
Tests/TestHelpers/UIColor+TestHelpers.swift
Normal file
30
Tests/TestHelpers/UIColor+TestHelpers.swift
Normal file
@ -0,0 +1,30 @@
|
||||
//
|
||||
// UIColor+TestHelpers.swift
|
||||
// ChromaColorPickerTests
|
||||
//
|
||||
// Created by Jon Cardasis on 5/2/19.
|
||||
// Copyright © 2019 Jonathan Cardasis. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension UIColor {
|
||||
|
||||
var rgbValues: (red: CGFloat, green: CGFloat, blue: CGFloat) {
|
||||
var red: CGFloat = 0
|
||||
var green: CGFloat = 0
|
||||
var blue: CGFloat = 0
|
||||
getRed(&red, green: &green, blue: &blue, alpha: nil)
|
||||
return (red, green, blue)
|
||||
}
|
||||
|
||||
var hsbaValues: (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat) {
|
||||
var h: CGFloat = 0
|
||||
var s: CGFloat = 0
|
||||
var b: CGFloat = 0
|
||||
var a: CGFloat = 0
|
||||
getHue(&h, saturation: &s, brightness: &b, alpha: &a)
|
||||
return (h,s,b,a)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user