Fix tests

This commit is contained in:
Pedro Piñera 2018-07-26 14:12:35 -04:00
parent 57a47ae559
commit 87e19af3ab
6 changed files with 36 additions and 40 deletions

View File

@ -3,7 +3,9 @@ import Foundation
func dumpIfNeeded<E: Encodable>(_ entity: E) {
if CommandLine.argc > 0 {
if CommandLine.arguments.contains("--dump") {
let data = try! JSONEncoder().encode(entity)
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let data = try! encoder.encode(entity)
let string = String(data: data, encoding: .utf8)!
print(string)
}

View File

@ -18,5 +18,4 @@ public class Headers: Codable {
self.private = `private`
self.project = project
}
}

View File

@ -3,12 +3,11 @@ import Foundation
// MARK: - TargetDependency
public enum TargetDependency: Codable {
case target(name: String)
case project(target: String, path: String)
case framework(path: String)
case library(path: String, publicHeaders: String, swiftModuleMap: String?)
public var typeName: String {
switch self {
case .target:
@ -21,17 +20,15 @@ public enum TargetDependency: Codable {
return "library"
}
}
}
// MARK: - TargetDependency (Coding)
extension TargetDependency {
public enum CodingError: Error {
case unknownType(String)
}
public enum CodingKeys: String, CodingKey {
case type
case name
@ -40,55 +37,54 @@ extension TargetDependency {
case publicHeaders
case swiftModuleMap
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let type = try container.decode(String.self, forKey: .type)
switch type {
case "target":
self = .target(name: try container.decode(String.self, forKey: .name))
case "project":
self = .project(
target: try container.decode(String.self, forKey: .target),
path: try container.decode(String.self, forKey: .path)
)
case "framework":
self = .framework(path: try container.decode(String.self, forKey: .path))
case "library":
self = .library(
path: try container.decode(String.self, forKey: .path),
publicHeaders: try container.decode(String.self, forKey: .publicHeaders),
swiftModuleMap: try container.decodeIfPresent(String.self, forKey: .swiftModuleMap)
)
default:
throw CodingError.unknownType(type)
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.typeName, forKey: .type)
try container.encode(typeName, forKey: .type)
switch self {
case .target(name: let name):
case let .target(name: name):
try container.encode(name, forKey: .name)
case .project(target: let target, path: let path):
case let .project(target: target, path: path):
try container.encode(target, forKey: .target)
try container.encode(path, forKey: .path)
case .framework(path: let path):
case let .framework(path: path):
try container.encode(path, forKey: .path)
case .library(path: let path, publicHeaders: let publicHeaders, swiftModuleMap: let swiftModuleMap):
case let .library(path: path, publicHeaders: publicHeaders, swiftModuleMap: swiftModuleMap):
try container.encode(path, forKey: .path)
try container.encode(publicHeaders, forKey: .publicHeaders)
try container.encodeIfPresent(swiftModuleMap, forKey: .swiftModuleMap)
}
}
}

View File

@ -3,12 +3,11 @@ import Foundation
// MARK: - Workspace
public class Workspace: Codable {
enum CodingKeys: String, CodingKey {
case name
case projects = "project"
}
public let name: String
public let projects: [String]
public init(name: String,

View File

@ -5,19 +5,19 @@ import XCTest
final class ProductTests: XCTestCase {
func test_toJSON() {
assertCodableEqualToJson([Product.app], "[\"app\"]")
assertCodableEqualToJson([Product.staticLibrary],"[\"staticLibrary\"]")
assertCodableEqualToJson([Product.dynamicLibrary],"[\"dynamicLibrary\"]")
assertCodableEqualToJson([Product.framework],"[\"framework\"]")
assertCodableEqualToJson([Product.unitTests],"[\"unitTests\"]")
assertCodableEqualToJson([Product.uiTests],"[\"uiTests\"]")
assertCodableEqualToJson([Product.appExtension],"[\"appExtension\"]")
assertCodableEqualToJson([Product.watchApp],"[\"watchApp\"]")
assertCodableEqualToJson([Product.watch2App],"[\"watch2App\"]")
assertCodableEqualToJson([Product.watchExtension],"[\"watchExtension\"]")
assertCodableEqualToJson([Product.watch2Extension],"[\"watch2Extension\"]")
assertCodableEqualToJson([Product.tvExtension],"[\"tvExtension\"]")
assertCodableEqualToJson([Product.messagesApplication],"[\"messagesApplication\"]")
assertCodableEqualToJson([Product.messagesExtension],"[\"messagesExtension\"]")
assertCodableEqualToJson([Product.stickerPack],"[\"stickerPack\"]")
assertCodableEqualToJson([Product.staticLibrary], "[\"staticLibrary\"]")
assertCodableEqualToJson([Product.dynamicLibrary], "[\"dynamicLibrary\"]")
assertCodableEqualToJson([Product.framework], "[\"framework\"]")
assertCodableEqualToJson([Product.unitTests], "[\"unitTests\"]")
assertCodableEqualToJson([Product.uiTests], "[\"uiTests\"]")
assertCodableEqualToJson([Product.appExtension], "[\"appExtension\"]")
assertCodableEqualToJson([Product.watchApp], "[\"watchApp\"]")
assertCodableEqualToJson([Product.watch2App], "[\"watch2App\"]")
assertCodableEqualToJson([Product.watchExtension], "[\"watchExtension\"]")
assertCodableEqualToJson([Product.watch2Extension], "[\"watch2Extension\"]")
assertCodableEqualToJson([Product.tvExtension], "[\"tvExtension\"]")
assertCodableEqualToJson([Product.messagesApplication], "[\"messagesApplication\"]")
assertCodableEqualToJson([Product.messagesExtension], "[\"messagesExtension\"]")
assertCodableEqualToJson([Product.stickerPack], "[\"stickerPack\"]")
}
}

View File

@ -9,6 +9,6 @@ func assertCodableEqualToJson<C: Codable>(_ subject: C, _ json: String) {
encoder.keyEncodingStrategy = .convertToSnakeCase
let jsonData = try! encoder.encode(decoded)
let subjectData = try! encoder.encode(subject)
XCTAssert(jsonData == subjectData, "JSON does not match the encoded \(String(describing: subject))")
}