Skip to content

Commit

Permalink
start using codecov.io for code coverage reporting
Browse files Browse the repository at this point in the history
improve test coverage
  • Loading branch information
dennisweissmann committed Jul 8, 2017
1 parent 47e1d42 commit 49abe10
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 28 deletions.
4 changes: 4 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ opt_in_rules:
disabled_rules:
- file_length
- line_length
- function_body_length

identifier_name:
excluded:
- tv
6 changes: 5 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,16 @@ install:
- bundle install

script:
- set -o pipefail && xcodebuild -scheme DeviceKit -destination "$DESTINATION" test | xcpretty
- set -o pipefail && xcodebuild -scheme DeviceKit -destination "$DESTINATION" test
- bundle exec danger
- xcodebuild -project DeviceKit.xcodeproj -scheme DeviceKit -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 7" -configuration Debug ONLY_ACTIVE_ARCH=YES -enableCodeCoverage YES test

deploy:
deploy.skip_cleanup: true
provider: script
script: ./Scripts/push.sh
on:
tags: true

after_success:
- bash <(curl -s https://codecov.io/bash)
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
language = ""
shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES">
<Testables>
<TestableReference
skipped = "NO">
Expand Down Expand Up @@ -55,6 +57,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[![GitHub license](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://raw.githubusercontent.com/dennisweissmann/DeviceKit/master/LICENSE)
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/DeviceKit.svg)](https://cocoapods.org/pods/DeviceKit)
[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![codecov](https://codecov.io/gh/dennisweissmann/DeviceKit/branch/master/graph/badge.svg)](https://codecov.io/gh/dennisweissmann/DeviceKit)
[![Platform](https://img.shields.io/cocoapods/p/DeviceKit.svg?style=flat)](http://cocoadocs.org/docsets/DeviceKit)


Expand All @@ -12,7 +13,7 @@
| **Swift 3** |[![Build Status](https://travis-ci.org/dennisweissmann/DeviceKit.svg?branch=swift-3.0)](https://travis-ci.org/dennisweissmann/DeviceKit)| >= 1.0 |
| **Swift 2.3** |[![Build Status](https://travis-ci.org/dennisweissmann/DeviceKit.svg?branch=swift-2.3-unsupported)](https://travis-ci.org/dennisweissmann/DeviceKit)| < 1.0 |

`Device` is a value-type replacement of [`UIDevice`](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/).
`DeviceKit` is a value-type replacement of [`UIDevice`](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/).

## Features

Expand Down
4 changes: 2 additions & 2 deletions Source/Device.swift
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ public enum Device {
case "iPhone9,1", "iPhone9,3": return iPhone7
case "iPhone9,2", "iPhone9,4": return iPhone7Plus
case "iPhone8,4": return iPhoneSE
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return iPad2
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": return iPad2
case "iPad3,1", "iPad3,2", "iPad3,3": return iPad3
case "iPad3,4", "iPad3,5", "iPad3,6": return iPad4
case "iPad4,1", "iPad4,2", "iPad4,3": return iPadAir
Expand Down Expand Up @@ -481,7 +481,7 @@ public enum Device {
return UIDevice.current.name
}

/// The name of the operating system running on the device represented by the receiver (e.g. "iPhone OS" or "tvOS").
/// The name of the operating system running on the device represented by the receiver (e.g. "iOS" or "tvOS").
public var systemName: String {
return UIDevice.current.systemName
}
Expand Down
214 changes: 191 additions & 23 deletions Tests/Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,47 +11,215 @@ import XCTest

class DeviceKitTests: XCTestCase {

var device: Device!

override func setUp() {
super.setUp()
device = Device()
}

func testDeviceSimulator() {
XCTAssert(Device().isOneOf(Device.allSimulators))
XCTAssertTrue(device.isOneOf(Device.allSimulators))
}

func testDeviceDescription() {
XCTAssert(Device().description.hasPrefix("Simulator"))
XCTAssertTrue(device.description.hasPrefix("Simulator"))
XCTAssertTrue(device.description.contains("iPhone") || device.description.contains("iPad") || device.description.contains("iPod") || device.description.contains("TV"))
}

// MARK: - iOS
#if os(iOS)
func testIsSimulator() {
XCTAssert(Device().isSimulator)
}
func testIsSimulator() {
XCTAssertTrue(device.isSimulator)
}

func testBattery() {
XCTAssertTrue(Device.BatteryState.full > Device.BatteryState.charging(100))
XCTAssertTrue(Device.BatteryState.charging(75) != Device.BatteryState.unplugged(75))
XCTAssertTrue(Device.BatteryState.unplugged(2) > Device.BatteryState.charging(1))
}

func testMapFromIdentifier() {
XCTAssertEqual(Device.mapToDevice(identifier: "iPod5,1"), .iPodTouch5)
XCTAssertEqual(Device.mapToDevice(identifier: "iPod7,1"), .iPodTouch6)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone3,1"), .iPhone4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone3,2"), .iPhone4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone3,3"), .iPhone4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone4,1"), .iPhone4s)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone5,1"), .iPhone5)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone5,2"), .iPhone5)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone5,3"), .iPhone5c)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone5,4"), .iPhone5c)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone6,1"), .iPhone5s)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone6,2"), .iPhone5s)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone7,2"), .iPhone6)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone7,1"), .iPhone6Plus)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone8,1"), .iPhone6s)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone8,2"), .iPhone6sPlus)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone9,1"), .iPhone7)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone9,3"), .iPhone7)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone9,2"), .iPhone7Plus)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone9,4"), .iPhone7Plus)
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone8,4"), .iPhoneSE)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,1"), .iPad2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,2"), .iPad2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,3"), .iPad2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,4"), .iPad2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,1"), .iPad3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,2"), .iPad3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,3"), .iPad3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,4"), .iPad4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,5"), .iPad4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad3,6"), .iPad4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,1"), .iPadAir)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,2"), .iPadAir)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,3"), .iPadAir)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad5,3"), .iPadAir2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad5,4"), .iPadAir2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,11"), .iPad5)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,12"), .iPad5)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,5"), .iPadMini)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,6"), .iPadMini)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad2,7"), .iPadMini)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,4"), .iPadMini2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,5"), .iPadMini2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,6"), .iPadMini2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,7"), .iPadMini3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,8"), .iPadMini3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad4,9"), .iPadMini3)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad5,1"), .iPadMini4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad5,2"), .iPadMini4)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,3"), .iPadPro9Inch)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,4"), .iPadPro9Inch)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,7"), .iPadPro12Inch)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad6,8"), .iPadPro12Inch)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad7,1"), .iPadPro12Inch2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad7,2"), .iPadPro12Inch2)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad7,3"), .iPadPro10Inch)
XCTAssertEqual(Device.mapToDevice(identifier: "iPad7,4"), .iPadPro10Inch)
}

func testScreenRatio() {
XCTAssertTrue(Device.iPodTouch5.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPodTouch6.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone4.screenRatio == (width: 2, height: 3))
XCTAssertTrue(Device.iPhone4s.screenRatio == (width: 2, height: 3))
XCTAssertTrue(Device.iPhone5.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone5c.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone5s.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone6.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone6Plus.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone6s.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone6sPlus.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone7.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhone7Plus.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPhoneSE.screenRatio == (width: 9, height: 16))
XCTAssertTrue(Device.iPad2.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPad3.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPad4.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadAir.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadAir2.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPad5.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadMini.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadMini2.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadMini3.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadMini4.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadPro9Inch.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadPro12Inch.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadPro12Inch2.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.iPadPro10Inch.screenRatio == (width: 3, height: 4))
XCTAssertTrue(Device.simulator(device).screenRatio == device.screenRatio)
XCTAssertTrue(Device.unknown("Not a device.").screenRatio == (width: -1, height: -1))
}

func testDiagonal() {
XCTAssertEqual(Device.iPhone4.diagonal, 3.5)
XCTAssertEqual(Device.iPhone4s.diagonal, 3.5)

func testOperator1() {
XCTAssert(Device.BatteryState.full > Device.BatteryState.charging(100))
}
XCTAssertEqual(Device.iPodTouch5.diagonal, 4)
XCTAssertEqual(Device.iPodTouch6.diagonal, 4)
XCTAssertEqual(Device.iPhone5.diagonal, 4)
XCTAssertEqual(Device.iPhone5c.diagonal, 4)
XCTAssertEqual(Device.iPhone5s.diagonal, 4)
XCTAssertEqual(Device.iPhoneSE.diagonal, 4)

func testOperator2() {
XCTAssert(Device.BatteryState.charging(75) != Device.BatteryState.unplugged(75))
}
XCTAssertEqual(Device.iPhone6.diagonal, 4.7)
XCTAssertEqual(Device.iPhone6s.diagonal, 4.7)
XCTAssertEqual(Device.iPhone7.diagonal, 4.7)

func testOperator3() {
XCTAssert(Device.BatteryState.unplugged(2) > Device.BatteryState.charging(1))
}
XCTAssertEqual(Device.iPhone6Plus.diagonal, 5.5)
XCTAssertEqual(Device.iPhone6sPlus.diagonal, 5.5)
XCTAssertEqual(Device.iPhone7Plus.diagonal, 5.5)

func testDescriptionFromIdentifier() {
XCTAssert(Device.mapToDevice(identifier: "iPhone3,1").description == "iPhone 4")
}
XCTAssertEqual(Device.iPad2.diagonal, 9.7)
XCTAssertEqual(Device.iPad3.diagonal, 9.7)
XCTAssertEqual(Device.iPad4.diagonal, 9.7)
XCTAssertEqual(Device.iPadAir.diagonal, 9.7)
XCTAssertEqual(Device.iPadAir2.diagonal, 9.7)
XCTAssertEqual(Device.iPad5.diagonal, 9.7)

XCTAssertEqual(Device.iPadMini.diagonal, 7.9)
XCTAssertEqual(Device.iPadMini2.diagonal, 7.9)
XCTAssertEqual(Device.iPadMini3.diagonal, 7.9)
XCTAssertEqual(Device.iPadMini4.diagonal, 7.9)

XCTAssertEqual(Device.iPadPro9Inch.diagonal, 9.7)
XCTAssertEqual(Device.iPadPro12Inch.diagonal, 12.9)
XCTAssertEqual(Device.iPadPro12Inch2.diagonal, 12.9)
XCTAssertEqual(Device.iPadPro10Inch.diagonal, 10.5)

XCTAssertEqual(Device.simulator(.iPadPro10Inch).diagonal, 10.5)
XCTAssertEqual(Device.unknown("Not a device.").diagonal, -1)
}

func testDescription() {
XCTAssertEqual(Device.iPodTouch5.description, "iPod Touch 5")
XCTAssertEqual(Device.iPodTouch6.description, "iPod Touch 6")
XCTAssertEqual(Device.iPhone4.description, "iPhone 4")
XCTAssertEqual(Device.iPhone4s.description, "iPhone 4s")
XCTAssertEqual(Device.iPhone5.description, "iPhone 5")
XCTAssertEqual(Device.iPhone5c.description, "iPhone 5c")
XCTAssertEqual(Device.iPhone5s.description, "iPhone 5s")
XCTAssertEqual(Device.iPhone6.description, "iPhone 6")
XCTAssertEqual(Device.iPhone6Plus.description, "iPhone 6 Plus")
XCTAssertEqual(Device.iPhone6s.description, "iPhone 6s")
XCTAssertEqual(Device.iPhone6sPlus.description, "iPhone 6s Plus")
XCTAssertEqual(Device.iPhone7.description, "iPhone 7")
XCTAssertEqual(Device.iPhone7Plus.description, "iPhone 7 Plus")
XCTAssertEqual(Device.iPhoneSE.description, "iPhone SE")
XCTAssertEqual(Device.iPad2.description, "iPad 2")
XCTAssertEqual(Device.iPad3.description, "iPad 3")
XCTAssertEqual(Device.iPad4.description, "iPad 4")
XCTAssertEqual(Device.iPadAir.description, "iPad Air")
XCTAssertEqual(Device.iPadAir2.description, "iPad Air 2")
XCTAssertEqual(Device.iPad5.description, "iPad 5")
XCTAssertEqual(Device.iPadMini.description, "iPad Mini")
XCTAssertEqual(Device.iPadMini2.description, "iPad Mini 2")
XCTAssertEqual(Device.iPadMini3.description, "iPad Mini 3")
XCTAssertEqual(Device.iPadMini4.description, "iPad Mini 4")
XCTAssertEqual(Device.iPadPro9Inch.description, "iPad Pro (9.7-inch)")
XCTAssertEqual(Device.iPadPro12Inch.description, "iPad Pro (12.9-inch)")
XCTAssertEqual(Device.iPadPro12Inch2.description, "iPad Pro (12.9-inch) 2")
XCTAssertEqual(Device.iPadPro10Inch.description, "iPad Pro (10.5-inch)")
XCTAssertEqual(Device.simulator(Device.iPadPro10Inch).description, "Simulator (\(Device.iPadPro10Inch.description))")
XCTAssertEqual(Device.unknown("Not a device.").description, "Not a device.")
}

func testIsPad() {
Device.allPads.forEach { XCTAssertTrue($0.isPad) }
}

#endif

// MARK: - tvOS
#if os(tvOS)
func testIsSimulator() {
XCTAssert(Device().isOneOf(Device.allSimulatorTVs))
}
func testIsSimulator() {
XCTAssert(Device().isOneOf(Device.allSimulatorTVs))
}

func testDescriptionFromIdentifier() {
XCTAssert(Device.mapToDevice(identifier: "AppleTV5,3").description == "Apple TV 4")
}
func testDescriptionFromIdentifier() {
XCTAssert(Device.mapToDevice(identifier: "AppleTV5,3").description, "Apple TV 4")
}
#endif

}

0 comments on commit 49abe10

Please sign in to comment.