Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
language: swift
osx_image: xcode11.3
script:
- swift package generate-xcodeproj
- xcodebuild clean test -destination 'name=iPhone 8' -scheme AdvancedList-Package -enableCodeCoverage YES -derivedDataPath .build/derivedData -quiet
after_success:
# upload test coverage data
- bash <(curl -s https://codecov.io/bash) -J '^AdvancedList$' -D .build/derivedData
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# AdvancedList

[![Swift5](https://img.shields.io/badge/swift5-compatible-green.svg?longCache=true&style=flat-square)](https://developer.apple.com/swift)
[![Swift 5](https://img.shields.io/badge/swift-5-green.svg?longCache=true&style=flat-square)](https://developer.apple.com/swift)
[![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)
[![Current Version](https://img.shields.io/github/v/tag/crelies/AdvancedList?longCache=true&style=flat-square)](https://github.com/crelies/AdvancedList)
[![Current version](https://img.shields.io/github/v/tag/crelies/AdvancedList?longCache=true&style=flat-square)](https://github.com/crelies/AdvancedList)
[![Build status](https://travis-ci.com/crelies/AdvancedList.svg?token=THnaziKxRFFz1nKcsPgz&branch=dev)](https://travis-ci.com/crelies/AdvancedList)
[![Code coverage](https://codecov.io/gh/crelies/AdvancedList/branch/dev/graph/badge.svg?token=DhJyoUKNPM)](https://codecov.io/gh/crelies/AdvancedList)
[![License](https://img.shields.io/badge/license-MIT-lightgrey.svg?longCache=true&style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)

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.
Expand Down
45 changes: 45 additions & 0 deletions Tests/AdvancedListTests/AdvancedListPaginationStateTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// AdvancedListPaginationStateTests.swift
// AdvancedListTests
//
// Created by Christian Elies on 21.02.20.
//

@testable import AdvancedList
import XCTest

final class AdvancedListPaginationStateTests: XCTestCase {
func testEqualObjects() {
let object1: AdvancedListPaginationState = .idle
let object2: AdvancedListPaginationState = .idle
XCTAssertEqual(object1, object2)
}

func testUnequalObjects() {
let object1: AdvancedListPaginationState = .loading
let object2: AdvancedListPaginationState = .idle
XCTAssertNotEqual(object1, object2)
}

func testEqualError() {
let error = NSError(domain: "MockDomain", code: 0, userInfo: nil)
let object1: AdvancedListPaginationState = .error(error)
let object2: AdvancedListPaginationState = .error(error)
XCTAssertEqual(object1, object2)
}

func testUnequalError() {
let error1 = NSError(domain: "MockDomain", code: 0, userInfo: nil)
let error2 = NSError(domain: "MockDomain2", code: 1, userInfo: nil)
let object1: AdvancedListPaginationState = .error(error1)
let object2: AdvancedListPaginationState = .error(error2)
XCTAssertNotEqual(object1, object2)
}

static var allTests = [
("testEqualObjects", testEqualObjects),
("testUnequalObjects", testUnequalObjects),
("testEqualError", testEqualError),
("testUnequalError", testUnequalError)
]
}
89 changes: 82 additions & 7 deletions Tests/AdvancedListTests/AdvancedListTests.swift
Original file line number Diff line number Diff line change
@@ -1,15 +1,90 @@
import XCTest
//
// AdvancedListTests.swift
// AdvancedListTests
//
// Created by Christian Elies on 21.02.20.
//

@testable import AdvancedList
import SwiftUI
import XCTest

final class AdvancedListTests: XCTestCase {
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct
// results.
XCTAssertEqual(AdvancedList().text, "Hello, World!")
@State private var listState: ListState = .items

private let emptyStateView = Text("Empty")
private let errorStateView = Text("Error")
private let loadingStateView = Text("Loading ...")

override func setUp() {
listState = .items
}

func testEmptyStateView() {
let items: [String] = []

let view = AdvancedList(items, content: { item in Text(item) },
listState: $listState,
emptyStateView: { self.emptyStateView },
errorStateView: { _ in self.errorStateView },
loadingStateView: { self.loadingStateView },
pagination: .noPagination)

let body = view.body as? AnyView
XCTAssertNotNil(body)
}

func testNotEmptyStateView() {
let items: [String] = ["MockItem1", "MockItem2"]

let view = AdvancedList(items, content: { item in Text(item) },
listState: $listState,
emptyStateView: { self.emptyStateView },
errorStateView: { _ in self.errorStateView },
loadingStateView: { self.loadingStateView },
pagination: .noPagination)

let body = view.body as? AnyView
XCTAssertNotNil(body)
}

func testLoadingStateView() {
listState = .loading

let items: [String] = []

let view = AdvancedList(items, content: { item in Text(item) },
listState: $listState,
emptyStateView: { self.emptyStateView },
errorStateView: { _ in self.errorStateView },
loadingStateView: { self.loadingStateView },
pagination: .noPagination)

let body = view.body as? AnyView
XCTAssertNotNil(body)
}

func testErrorStateView() {
let error = NSError(domain: "MockDomain", code: 1, userInfo: nil)
listState = .error(error)

let items: [String] = []

let view = AdvancedList(items, content: { item in Text(item) },
listState: $listState,
emptyStateView: { self.emptyStateView },
errorStateView: { _ in self.errorStateView },
loadingStateView: { self.loadingStateView },
pagination: .noPagination)

let body = view.body as? AnyView
XCTAssertNotNil(body)
}

static var allTests = [
("testExample", testExample),
("testEmptyStateView", testEmptyStateView),
("testNotEmptyStateView", testNotEmptyStateView),
("testLoadingStateView", testLoadingStateView),
("testErrorStateView", testErrorStateView)
]
}
10 changes: 10 additions & 0 deletions Tests/AdvancedListTests/Extensions/String+Identifiable.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//
// String+Identifiable.swift
// AdvancedListTests
//
// Created by Christian Elies on 21.02.20.
//

extension String: Identifiable {
public var id: String { self }
}
45 changes: 45 additions & 0 deletions Tests/AdvancedListTests/ListStateTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// ListStateTests.swift
// AdvancedListTests
//
// Created by Christian Elies on 21.02.20.
//

@testable import AdvancedList
import XCTest

final class ListStateTests: XCTestCase {
func testEqualObjects() {
let object1: ListState = .items
let object2: ListState = .items
XCTAssertEqual(object1, object2)
}

func testUnequalObjects() {
let object1: ListState = .items
let object2: ListState = .loading
XCTAssertNotEqual(object1, object2)
}

func testEqualError() {
let error = NSError(domain: "MockDomain", code: 0, userInfo: nil)
let object1: ListState = .error(error)
let object2: ListState = .error(error)
XCTAssertEqual(object1, object2)
}

func testUnequalError() {
let error1 = NSError(domain: "MockDomain", code: 0, userInfo: nil)
let error2 = NSError(domain: "MockDomain2", code: 1, userInfo: nil)
let object1: ListState = .error(error1)
let object2: ListState = .error(error2)
XCTAssertNotEqual(object1, object2)
}

static var allTests = [
("testEqualObjects", testEqualObjects),
("testUnequalObjects", testUnequalObjects),
("testEqualError", testEqualError),
("testUnequalError", testUnequalError)
]
}
2 changes: 2 additions & 0 deletions Tests/AdvancedListTests/XCTestManifests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ import XCTest
#if !canImport(ObjectiveC)
public func allTests() -> [XCTestCaseEntry] {
return [
testCase(AdvancedListPaginationStateTests.allTests),
testCase(AdvancedListTests.allTests),
testCase(ListStateTests.allTests)
]
}
#endif