Skip to content

Commit 82e007c

Browse files
author
Chris
authored
Merge pull request #6 from crelies/dev
Dev
2 parents aca24f0 + 4c4d437 commit 82e007c

File tree

7 files changed

+196
-9
lines changed

7 files changed

+196
-9
lines changed

.travis.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
language: swift
2+
osx_image: xcode11.3
3+
script:
4+
- swift package generate-xcodeproj
5+
- xcodebuild clean test -destination 'name=iPhone 8' -scheme AdvancedList-Package -enableCodeCoverage YES -derivedDataPath .build/derivedData -quiet
6+
after_success:
7+
# upload test coverage data
8+
- bash <(curl -s https://codecov.io/bash) -J '^AdvancedList$' -D .build/derivedData

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# AdvancedList
22

3-
[![Swift5](https://img.shields.io/badge/swift5-compatible-green.svg?longCache=true&style=flat-square)](https://developer.apple.com/swift)
3+
[![Swift 5](https://img.shields.io/badge/swift-5-green.svg?longCache=true&style=flat-square)](https://developer.apple.com/swift)
44
[![Platforms](https://img.shields.io/badge/platform-iOS%20%7C%20macOS%20%7C%20tvOS-lightgrey.svg?longCache=true&style=flat-square)](https://www.apple.com)
5-
[![Current Version](https://img.shields.io/github/v/tag/crelies/AdvancedList?longCache=true&style=flat-square)](https://github.com/crelies/AdvancedList)
5+
[![Current version](https://img.shields.io/github/v/tag/crelies/AdvancedList?longCache=true&style=flat-square)](https://github.com/crelies/AdvancedList)
6+
[![Build status](https://travis-ci.com/crelies/AdvancedList.svg?token=THnaziKxRFFz1nKcsPgz&branch=dev)](https://travis-ci.com/crelies/AdvancedList)
7+
[![Code coverage](https://codecov.io/gh/crelies/AdvancedList/branch/dev/graph/badge.svg?token=DhJyoUKNPM)](https://codecov.io/gh/crelies/AdvancedList)
68
[![License](https://img.shields.io/badge/license-MIT-lightgrey.svg?longCache=true&style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
79

810
This package provides a wrapper view around the **SwiftUI** `List view` which adds **pagination** (through my [ListPagination package](https://github.com/crelies/ListPagination)) and an **empty**, **error** and **loading state** including a corresponding view.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//
2+
// AdvancedListPaginationStateTests.swift
3+
// AdvancedListTests
4+
//
5+
// Created by Christian Elies on 21.02.20.
6+
//
7+
8+
@testable import AdvancedList
9+
import XCTest
10+
11+
final class AdvancedListPaginationStateTests: XCTestCase {
12+
func testEqualObjects() {
13+
let object1: AdvancedListPaginationState = .idle
14+
let object2: AdvancedListPaginationState = .idle
15+
XCTAssertEqual(object1, object2)
16+
}
17+
18+
func testUnequalObjects() {
19+
let object1: AdvancedListPaginationState = .loading
20+
let object2: AdvancedListPaginationState = .idle
21+
XCTAssertNotEqual(object1, object2)
22+
}
23+
24+
func testEqualError() {
25+
let error = NSError(domain: "MockDomain", code: 0, userInfo: nil)
26+
let object1: AdvancedListPaginationState = .error(error)
27+
let object2: AdvancedListPaginationState = .error(error)
28+
XCTAssertEqual(object1, object2)
29+
}
30+
31+
func testUnequalError() {
32+
let error1 = NSError(domain: "MockDomain", code: 0, userInfo: nil)
33+
let error2 = NSError(domain: "MockDomain2", code: 1, userInfo: nil)
34+
let object1: AdvancedListPaginationState = .error(error1)
35+
let object2: AdvancedListPaginationState = .error(error2)
36+
XCTAssertNotEqual(object1, object2)
37+
}
38+
39+
static var allTests = [
40+
("testEqualObjects", testEqualObjects),
41+
("testUnequalObjects", testUnequalObjects),
42+
("testEqualError", testEqualError),
43+
("testUnequalError", testUnequalError)
44+
]
45+
}
Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,90 @@
1-
import XCTest
1+
//
2+
// AdvancedListTests.swift
3+
// AdvancedListTests
4+
//
5+
// Created by Christian Elies on 21.02.20.
6+
//
7+
28
@testable import AdvancedList
9+
import SwiftUI
10+
import XCTest
311

412
final class AdvancedListTests: XCTestCase {
5-
func testExample() {
6-
// This is an example of a functional test case.
7-
// Use XCTAssert and related functions to verify your tests produce the correct
8-
// results.
9-
XCTAssertEqual(AdvancedList().text, "Hello, World!")
13+
@State private var listState: ListState = .items
14+
15+
private let emptyStateView = Text("Empty")
16+
private let errorStateView = Text("Error")
17+
private let loadingStateView = Text("Loading ...")
18+
19+
override func setUp() {
20+
listState = .items
21+
}
22+
23+
func testEmptyStateView() {
24+
let items: [String] = []
25+
26+
let view = AdvancedList(items, content: { item in Text(item) },
27+
listState: $listState,
28+
emptyStateView: { self.emptyStateView },
29+
errorStateView: { _ in self.errorStateView },
30+
loadingStateView: { self.loadingStateView },
31+
pagination: .noPagination)
32+
33+
let body = view.body as? AnyView
34+
XCTAssertNotNil(body)
35+
}
36+
37+
func testNotEmptyStateView() {
38+
let items: [String] = ["MockItem1", "MockItem2"]
39+
40+
let view = AdvancedList(items, content: { item in Text(item) },
41+
listState: $listState,
42+
emptyStateView: { self.emptyStateView },
43+
errorStateView: { _ in self.errorStateView },
44+
loadingStateView: { self.loadingStateView },
45+
pagination: .noPagination)
46+
47+
let body = view.body as? AnyView
48+
XCTAssertNotNil(body)
49+
}
50+
51+
func testLoadingStateView() {
52+
listState = .loading
53+
54+
let items: [String] = []
55+
56+
let view = AdvancedList(items, content: { item in Text(item) },
57+
listState: $listState,
58+
emptyStateView: { self.emptyStateView },
59+
errorStateView: { _ in self.errorStateView },
60+
loadingStateView: { self.loadingStateView },
61+
pagination: .noPagination)
62+
63+
let body = view.body as? AnyView
64+
XCTAssertNotNil(body)
65+
}
66+
67+
func testErrorStateView() {
68+
let error = NSError(domain: "MockDomain", code: 1, userInfo: nil)
69+
listState = .error(error)
70+
71+
let items: [String] = []
72+
73+
let view = AdvancedList(items, content: { item in Text(item) },
74+
listState: $listState,
75+
emptyStateView: { self.emptyStateView },
76+
errorStateView: { _ in self.errorStateView },
77+
loadingStateView: { self.loadingStateView },
78+
pagination: .noPagination)
79+
80+
let body = view.body as? AnyView
81+
XCTAssertNotNil(body)
1082
}
1183

1284
static var allTests = [
13-
("testExample", testExample),
85+
("testEmptyStateView", testEmptyStateView),
86+
("testNotEmptyStateView", testNotEmptyStateView),
87+
("testLoadingStateView", testLoadingStateView),
88+
("testErrorStateView", testErrorStateView)
1489
]
1590
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//
2+
// String+Identifiable.swift
3+
// AdvancedListTests
4+
//
5+
// Created by Christian Elies on 21.02.20.
6+
//
7+
8+
extension String: Identifiable {
9+
public var id: String { self }
10+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//
2+
// ListStateTests.swift
3+
// AdvancedListTests
4+
//
5+
// Created by Christian Elies on 21.02.20.
6+
//
7+
8+
@testable import AdvancedList
9+
import XCTest
10+
11+
final class ListStateTests: XCTestCase {
12+
func testEqualObjects() {
13+
let object1: ListState = .items
14+
let object2: ListState = .items
15+
XCTAssertEqual(object1, object2)
16+
}
17+
18+
func testUnequalObjects() {
19+
let object1: ListState = .items
20+
let object2: ListState = .loading
21+
XCTAssertNotEqual(object1, object2)
22+
}
23+
24+
func testEqualError() {
25+
let error = NSError(domain: "MockDomain", code: 0, userInfo: nil)
26+
let object1: ListState = .error(error)
27+
let object2: ListState = .error(error)
28+
XCTAssertEqual(object1, object2)
29+
}
30+
31+
func testUnequalError() {
32+
let error1 = NSError(domain: "MockDomain", code: 0, userInfo: nil)
33+
let error2 = NSError(domain: "MockDomain2", code: 1, userInfo: nil)
34+
let object1: ListState = .error(error1)
35+
let object2: ListState = .error(error2)
36+
XCTAssertNotEqual(object1, object2)
37+
}
38+
39+
static var allTests = [
40+
("testEqualObjects", testEqualObjects),
41+
("testUnequalObjects", testUnequalObjects),
42+
("testEqualError", testEqualError),
43+
("testUnequalError", testUnequalError)
44+
]
45+
}

Tests/AdvancedListTests/XCTestManifests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import XCTest
33
#if !canImport(ObjectiveC)
44
public func allTests() -> [XCTestCaseEntry] {
55
return [
6+
testCase(AdvancedListPaginationStateTests.allTests),
67
testCase(AdvancedListTests.allTests),
8+
testCase(ListStateTests.allTests)
79
]
810
}
911
#endif

0 commit comments

Comments
 (0)