diff --git a/CHANGELOG.md b/CHANGELOG.md index eb04556..1e45460 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ --- +## [1.1.2](https://github.com/kakaopensource/KakaJSON/releases/tag/1.1.2) (2019-12-23) +- Supporting convert from [String: [[String: Any]]] to [String: [Model]] +- Supporting 'enum array', 'enum dict' +- Closed issues + - [嵌套解析出错](https://github.com/kakaopensource/KakaJSON/issues/39) + ## [1.1.1](https://github.com/kakaopensource/KakaJSON/releases/tag/1.1.1) (2019-11-04) - Adjust Lock - Closed issues diff --git a/KakaJSON.podspec b/KakaJSON.podspec index f497a84..9c7295f 100644 --- a/KakaJSON.podspec +++ b/KakaJSON.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "KakaJSON" - s.version = "1.1.1" + s.version = "1.1.2" s.summary = "Fast conversion between JSON and model in Swift" s.homepage = "https://github.com/kakaopensource/KakaJSON" s.license = { :type => "MIT" } diff --git a/KakaJSON.xcodeproj/project.pbxproj b/KakaJSON.xcodeproj/project.pbxproj index 66cbfac..c1c2473 100644 --- a/KakaJSON.xcodeproj/project.pbxproj +++ b/KakaJSON.xcodeproj/project.pbxproj @@ -21,6 +21,8 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2D6B733823C4DDE40021DF3A /* Bugs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4BC67323C4A29B00A2C4D6 /* Bugs.swift */; }; + 2D79463E23B0D10B00B9B538 /* OCModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D79463D23B0D10B00B9B538 /* OCModel.m */; }; 627B5E462320EC490046E23D /* Metadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 627B5E0F2320EC480046E23D /* Metadata.swift */; }; 627B5E472320EC490046E23D /* Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = 627B5E102320EC480046E23D /* Property.swift */; }; 627B5E482320EC490046E23D /* FieldList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 627B5E132320EC480046E23D /* FieldList.swift */; }; @@ -106,6 +108,10 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 2D4BC67323C4A29B00A2C4D6 /* Bugs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bugs.swift; sourceTree = ""; }; + 2D79463B23B0D10A00B9B538 /* KakaJSONTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KakaJSONTests-Bridging-Header.h"; sourceTree = ""; }; + 2D79463C23B0D10B00B9B538 /* OCModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OCModel.h; sourceTree = ""; }; + 2D79463D23B0D10B00B9B538 /* OCModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OCModel.m; sourceTree = ""; }; 627B5E0F2320EC480046E23D /* Metadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Metadata.swift; sourceTree = ""; }; 627B5E102320EC480046E23D /* Property.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Property.swift; sourceTree = ""; }; 627B5E112320EC480046E23D /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; @@ -172,7 +178,7 @@ 627B5E972320F08F0046E23D /* KakaJSON.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = KakaJSON.podspec; sourceTree = ""; }; 627B5E992320F2710046E23D /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; 627B5E9A2320F2D40046E23D /* DevGuideline.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DevGuideline.md; sourceTree = ""; }; - "KakaJSON::KakaJSON::Product" /* KakaJSON.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = KakaJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + "KakaJSON::KakaJSON::Product" /* KakaJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = KakaJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; "KakaJSON::KakaJSONTests::Product" /* KakaJSONTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; path = KakaJSONTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; OBJ_13 /* XCTestManifests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTestManifests.swift; sourceTree = ""; }; OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; @@ -197,6 +203,16 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2D79463723B0D0C600B9B538 /* OC */ = { + isa = PBXGroup; + children = ( + 2D79463C23B0D10B00B9B538 /* OCModel.h */, + 2D79463D23B0D10B00B9B538 /* OCModel.m */, + 2D79463B23B0D10A00B9B538 /* KakaJSONTests-Bridging-Header.h */, + ); + path = OC; + sourceTree = ""; + }; 627B5E0E2320EC480046E23D /* Metadata */ = { isa = PBXGroup; children = ( @@ -315,6 +331,7 @@ children = ( 627B5E7D2320EC760046E23D /* Coding.swift */, 627B5E7E2320EC760046E23D /* Global.swift */, + 2D4BC67323C4A29B00A2C4D6 /* Bugs.swift */, ); path = Other; sourceTree = ""; @@ -362,6 +379,7 @@ OBJ_11 /* KakaJSONTests */ = { isa = PBXGroup; children = ( + 2D79463723B0D0C600B9B538 /* OC */, 627B5E7F2320EC760046E23D /* JSON_To_Model */, 627B5E762320EC760046E23D /* Model_To_JSON */, 627B5E7C2320EC760046E23D /* Other */, @@ -469,6 +487,14 @@ attributes = { LastSwiftMigration = 9999; LastUpgradeCheck = 9999; + TargetAttributes = { + "KakaJSON::KakaJSON" = { + LastSwiftMigration = 1030; + }; + "KakaJSON::KakaJSONTests" = { + LastSwiftMigration = 1030; + }; + }; }; buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "KakaJSON" */; compatibilityVersion = "Xcode 3.2"; @@ -559,6 +585,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 0; files = ( + 2D6B733823C4DDE40021DF3A /* Bugs.swift in Sources */, 627B5E902320EC760046E23D /* JTM_06_CustomValue.swift in Sources */, 627B5E922320EC760046E23D /* JTM_07_DynamicModel.swift in Sources */, 627B5E8D2320EC760046E23D /* Global.swift in Sources */, @@ -566,6 +593,7 @@ 627B5E8B2320EC760046E23D /* MTJ_03_ModelArray.swift in Sources */, 627B5E932320EC760046E23D /* JTM_04_ModelArray.swift in Sources */, 627B5E8A2320EC760046E23D /* MTJ_01_Basic.swift in Sources */, + 2D79463E23B0D10B00B9B538 /* OCModel.m in Sources */, 627B5E912320EC760046E23D /* JTM_05_KeyMapping.swift in Sources */, 627B5E8C2320EC760046E23D /* Coding.swift in Sources */, 627B5E882320EC760046E23D /* MTJ_05_CustomValue.swift in Sources */, @@ -596,6 +624,8 @@ OBJ_19 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -614,6 +644,7 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGET_NAME = KakaJSON; TVOS_DEPLOYMENT_TARGET = 9.0; @@ -624,6 +655,8 @@ OBJ_20 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; + DEFINES_MODULE = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -725,6 +758,8 @@ OTHER_LDFLAGS = "$(inherited)"; OTHER_SWIFT_FLAGS = "$(inherited)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_OBJC_BRIDGING_HEADER = "Tests/KakaJSONTests/OC/KakaJSONTests-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGET_NAME = KakaJSONTests; TVOS_DEPLOYMENT_TARGET = 9.0; @@ -751,6 +786,7 @@ OTHER_LDFLAGS = "$(inherited)"; OTHER_SWIFT_FLAGS = "$(inherited)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_OBJC_BRIDGING_HEADER = "Tests/KakaJSONTests/OC/KakaJSONTests-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGET_NAME = KakaJSONTests; TVOS_DEPLOYMENT_TARGET = 9.0; diff --git a/README.md b/README.md index df5833a..853ff8a 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,12 @@ ### CocoaPods ```ruby -pod 'KakaJSON', '~> 1.1.1' +pod 'KakaJSON', '~> 1.1.2' ``` ### Carthage ```ruby -github "kakaopensource/KakaJSON" ~> 1.1.1 +github "kakaopensource/KakaJSON" ~> 1.1.2 ``` ### Swift Package Manager @@ -54,6 +54,7 @@ Or you can login Xcode with your GitHub account. just search **KakaJSON**. - [Recursive](#recursive) - [Generic](#generic) - [Model Array](#model-array) + - [Model Array In Dictionary](#model-array-in-dictionary) - [Convert](#convert) - [Listen](#listen) - [JSON To Model_02_Data Type](#json-to-model_02_data-type) @@ -71,6 +72,9 @@ Or you can login Xcode with your GitHub account. just search **KakaJSON**. - [Data](#data) - [Date](#date) - [Enum](#enum) + - [Enum In Array](#enum-in-array) + - [Enum In Dictionary](#enum-in-dictionary) + - [Enum Array In Dictionary](#enum-array-in-dictionary) - [Array](#array) - [Set](#set) - [Dictionary](#dictionary) @@ -635,6 +639,58 @@ let cars7 = jsonString.kj.modelArray(type: type) as? [Car] let cars8 = modelArray(from: jsonString, type: type) as? [Car] ``` +### Model Array In Dictionary +```swift +struct Book: Convertible { + var name: String = "" + var price: Double = 0.0 +} + +struct Person: Convertible { + var name: String = "" + var books: [String: [Book?]?]? +} + +let name = "Jack" +let mobileBooks = [ + (name: "iOS", price: 10.5), + (name: "Android", price: 8.5) +] +let serverBooks = [ + (name: "Java", price: 20.5), + (name: "Go", price: 18.5) +] + +let json: [String: Any] = [ + "name": name, + "books": [ + "mobile": [ + ["name": mobileBooks[0].name, "price": mobileBooks[0].price], + ["name": mobileBooks[1].name, "price": mobileBooks[1].price] + ], + "server": [ + ["name": serverBooks[0].name, "price": serverBooks[0].price], + ["name": serverBooks[1].name, "price": serverBooks[1].price] + ] + ] +] + +let person = json.kj.model(Person.self) +XCTAssert(person.name == name) +let books0 = person.books?["mobile"] +XCTAssert(books0??.count == mobileBooks.count) +for i in 0.. StringValue? { diff --git a/Sources/KakaJSON/Extension/Array+KJ.swift b/Sources/KakaJSON/Extension/Array+KJ.swift index 1a2b333..0587ea1 100644 --- a/Sources/KakaJSON/Extension/Array+KJ.swift +++ b/Sources/KakaJSON/Extension/Array+KJ.swift @@ -14,6 +14,20 @@ extension Set: KJCompatible {} extension NSSet: KJCompatible {} public extension KJ where Base: ExpressibleByArrayLiteral & Sequence { + /// JSONObjectArray -> EnumArray + func enumArray(_ type: M.Type) -> [M] { + return enumArray(type: type) as! [M] + } + + /// JSONObjectArray -> EnumArray + func enumArray(type: ConvertibleEnum.Type) -> [ConvertibleEnum] { + guard let _ = Metadata.type(type) as? EnumType else { return [] } + return base.compactMap { + let vv = Values.value($0, type.kj_valueType) + return type.kj_convert(from: vv as Any) + } + } + /// JSONObjectArray -> ModelArray func modelArray(_ type: M.Type) -> [M] { return modelArray(type: type) as! [M] diff --git a/Sources/KakaJSON/Metadata/Type/ModelType.swift b/Sources/KakaJSON/Metadata/Type/ModelType.swift index e07064c..6c49d92 100644 --- a/Sources/KakaJSON/Metadata/Type/ModelType.swift +++ b/Sources/KakaJSON/Metadata/Type/ModelType.swift @@ -22,8 +22,20 @@ public class ModelType: BaseType { defer { modelKeysLock.signal() } if let key = modelKeys[propertyName] { return key } - let resultKey = createdKey() - modelKeys[propertyName] = resultKey + var resultKey = createdKey() + if let stringKey = resultKey as? String { + if stringKey != propertyName { + resultKey = [stringKey, propertyName] + } + } else if var arrayKey = resultKey as? [String] { + if arrayKey.count == 0 { + resultKey = propertyName + } else if arrayKey.last != propertyName { + arrayKey.append(propertyName) + resultKey = arrayKey + } + } + modelKeys[propertyName] = resultKey; return resultKey } diff --git a/Tests/KakaJSONTests/JSON_To_Model/JTM_01_Basic.swift b/Tests/KakaJSONTests/JSON_To_Model/JTM_01_Basic.swift index 93454b7..d8eca51 100644 --- a/Tests/KakaJSONTests/JSON_To_Model/JTM_01_Basic.swift +++ b/Tests/KakaJSONTests/JSON_To_Model/JTM_01_Basic.swift @@ -285,6 +285,31 @@ class JTM_01_Basic: XCTestCase { XCTAssert(student.score == score) } + func testOCModel() { + // Not support model extends pure oc model + final class Person: OCModel, Convertible { + var name: String = "" + var age: Int = 0 + } + + /* + let name = "Jack" + let age = 20 + let no = 1 + let json: [String: Any] = [ + "no": no, + "name": name, + "age": age + ] + + + let person = json.kj.model(Person.self) + XCTAssert(person.name == name) + XCTAssert(person.age == age) + XCTAssert(person.no == no) + */ + } + static var allTests = [ "testGeneric": testGeneric, "testAny": testAny, @@ -296,6 +321,7 @@ class JTM_01_Basic: XCTestCase { "testNSObjectClass": testNSObjectClass, "testConvert": testConvert, "testCallback1": testCallback1, - "testCallback2": testCallback2 + "testCallback2": testCallback2, + "testOCModel": testOCModel ] } diff --git a/Tests/KakaJSONTests/JSON_To_Model/JTM_02_DataType.swift b/Tests/KakaJSONTests/JSON_To_Model/JTM_02_DataType.swift index 6314785..08149a5 100644 --- a/Tests/KakaJSONTests/JSON_To_Model/JTM_02_DataType.swift +++ b/Tests/KakaJSONTests/JSON_To_Model/JTM_02_DataType.swift @@ -234,7 +234,7 @@ class JTM_02_DataType: XCTestCase { XCTAssert(student.name4 == longDecimalString as NSString) XCTAssert(student.name5 == "6.66") XCTAssert(student.name6 == "false") - XCTAssert(student.name7 == "file:///users/mj/desktop") + XCTAssert(student.name7.starts(with: "file:///users/mj/desktop")) XCTAssert(student.name8 == "http://www.520suanfa.com") XCTAssert(student.name9 == timeIntevalString) } @@ -531,6 +531,80 @@ class JTM_02_DataType: XCTestCase { XCTAssert(student.grade4 == .perfect) } + func testEnumArray() { + enum Grade: String, ConvertibleEnum { + case perfect = "A" + case great = "B" + case good = "C" + case bad = "D" + } + + struct Student: Convertible { + var name: String? + var grades: [Grade]? + } + + let json: [String: Any] = [ + "name": "Jack", + "grades": ["D", "B"] + ] + + let stu = json.kj.model(Student.self) + XCTAssert(stu.name == "Jack") + XCTAssert(stu.grades?[0] == .bad) + XCTAssert(stu.grades?[1] == .great) + } + + func testEnumArrayInDict() { + enum Grade: String, ConvertibleEnum { + case perfect = "A" + case great = "B" + case good = "C" + case bad = "D" + } + + struct Student: Convertible { + var name: String? + var grades: [String: [Grade?]]? + } + + let json: [String: Any] = [ + "name": "Jack", + "grades": ["2019": ["A", "B"], "2020": ["C", "D"]] + ] + + let stu = json.kj.model(Student.self) + XCTAssert(stu.name == "Jack") + XCTAssert(stu.grades?["2019"]?[0] == .perfect) + XCTAssert(stu.grades?["2019"]?[1] == .great) + XCTAssert(stu.grades?["2020"]?[0] == .good) + XCTAssert(stu.grades?["2020"]?[1] == .bad) + } + + func testEnumDict() { + enum Grade: String, ConvertibleEnum { + case perfect = "A" + case great = "B" + case good = "C" + case bad = "D" + } + + struct Student: Convertible { + var name: String? + var grades: [String: Grade]? + } + + let json: [String: Any] = [ + "name": "Jack", + "grades": ["2019": "D", "2020": "B"] + ] + + let stu = json.kj.model(Student.self) + XCTAssert(stu.name == "Jack") + XCTAssert(stu.grades?["2019"] == .bad) + XCTAssert(stu.grades?["2020"] == .great) + } + // MARK: - Array Type func testArray() { struct Person: Convertible { @@ -638,6 +712,9 @@ class JTM_02_DataType: XCTestCase { "testDate": testDate, "testEnum1": testEnum1, "testEnum2": testEnum2, + "testEnumArray": testEnumArray, + "testEnumDict": testEnumDict, + "testEnumArrayInDict": testEnumArrayInDict, "testArray": testArray, "testSet": testSet, "testDictionary": testDictionary diff --git a/Tests/KakaJSONTests/JSON_To_Model/JTM_03_NestedModel.swift b/Tests/KakaJSONTests/JSON_To_Model/JTM_03_NestedModel.swift index 4a23cfc..af0101d 100644 --- a/Tests/KakaJSONTests/JSON_To_Model/JTM_03_NestedModel.swift +++ b/Tests/KakaJSONTests/JSON_To_Model/JTM_03_NestedModel.swift @@ -274,12 +274,64 @@ class JTM_03_NestedModel: XCTestCase { XCTAssert(book?.price == bookPrice) } + func testModelArrayInDictionary() { + struct Book: Convertible { + var name: String = "" + var price: Double = 0.0 + } + + struct Person: Convertible { + var name: String = "" + var books: [String: [Book?]?]? + } + + let name = "Jack" + let mobileBooks = [ + (name: "iOS", price: 10.5), + (name: "Android", price: 8.5) + ] + let serverBooks = [ + (name: "Java", price: 20.5), + (name: "Go", price: 18.5) + ] + + let json: [String: Any] = [ + "name": name, + "books": [ + "mobile": [ + ["name": mobileBooks[0].name, "price": mobileBooks[0].price], + ["name": mobileBooks[1].name, "price": mobileBooks[1].price] + ], + "server": [ + ["name": serverBooks[0].name, "price": serverBooks[0].price], + ["name": serverBooks[1].name, "price": serverBooks[1].price] + ] + ] + ] + + let person = json.kj.model(Person.self) + XCTAssert(person.name == name) + let books0 = person.books?["mobile"] + XCTAssert(books0??.count == mobileBooks.count) + for i in 0.. + +NS_ASSUME_NONNULL_BEGIN + +@interface OCModel : NSObject +@property (nonatomic, assign) int no; +@end + +NS_ASSUME_NONNULL_END diff --git a/Tests/KakaJSONTests/OC/OCModel.m b/Tests/KakaJSONTests/OC/OCModel.m new file mode 100644 index 0000000..11ecbaa --- /dev/null +++ b/Tests/KakaJSONTests/OC/OCModel.m @@ -0,0 +1,12 @@ +// +// OCModel.m +// KakaJSONTests +// +// Created by MJ Lee on 2019/12/23. +// + +#import "OCModel.h" + +@implementation OCModel + +@end diff --git a/Tests/KakaJSONTests/Other/Bugs.swift b/Tests/KakaJSONTests/Other/Bugs.swift new file mode 100644 index 0000000..a96d9c9 --- /dev/null +++ b/Tests/KakaJSONTests/Other/Bugs.swift @@ -0,0 +1,76 @@ +// +// Bugs.swift +// KakaJSON +// +// Created by MJ Lee on 2020/1/7. +// + +import XCTest +@testable import KakaJSON + +class TestBugs: XCTestCase { + // https://github.com/kakaopensource/KakaJSON/issues/39 + func testIssue39() { + struct ChatRoomModel: Convertible { + var lastMessage: String = "" + var lastMessageTime: NSNumber = 0 + var pkid: NSNumber = 0 + var unreadNoticeCount: NSNumber = 0 + } + struct WorkShopsModel: Convertible { + var chatRoom: ChatRoomModel? + var imgUrl: String = "" + var isMine: NSNumber = false + var pkid: NSNumber = 0 + var unsignined: NSNumber? + var status: NSNumber = 0 + var title: String = "" + var regCount: Int? + var tbString: String? + var teString: String? + } + + let json: [String: Any] = [ + "chatRoom": [ + "last_message": "666", + "last_message_time": 1567578912000, + "pkid": 2, + "unread_notice_count": 10 + ], + "img_url": "xx.jpg", + "is_mine": true, + "pkid": 3, + "reg_count": 1, + "status": 1, + "tbString": "2019-01-30", + "teString": "2019-09-28", + "title": "777", + "unsignined": true + ] + + ConvertibleConfig.setModelKey { (property) in + return property.name.kj.underlineCased() + // return [property.name.kj.underlineCased()] + } + + let workShops = json.kj.model(WorkShopsModel.self) + XCTAssert(workShops.chatRoom?.lastMessage == "666") + XCTAssert(workShops.chatRoom?.pkid == 2) + XCTAssert(workShops.chatRoom?.unreadNoticeCount == 10) + XCTAssert(workShops.chatRoom?.lastMessageTime == 1567578912000) + XCTAssert(workShops.imgUrl == "xx.jpg") + XCTAssert(workShops.isMine == true) + XCTAssert(workShops.pkid == 3) + XCTAssert(workShops.regCount == 1) + XCTAssert(workShops.status == 1) + XCTAssert(workShops.tbString == "2019-01-30") + XCTAssert(workShops.teString == "2019-09-28") + XCTAssert(workShops.title == "777") + XCTAssert(workShops.unsignined == true) + } + + static var allTests = [ + "testIssue39": testIssue39 + ] +} + diff --git a/Tests/KakaJSONTests/Other/Global.swift b/Tests/KakaJSONTests/Other/Global.swift index 52fdccb..f3395ec 100644 --- a/Tests/KakaJSONTests/Other/Global.swift +++ b/Tests/KakaJSONTests/Other/Global.swift @@ -9,7 +9,7 @@ import XCTest @testable import KakaJSON -class Global: XCTestCase { +class TestGlobal: XCTestCase { struct Cat: Convertible { var age: Int = 0 var name: String = "" diff --git a/Tests/KakaJSONTests/XCTestManifests.swift b/Tests/KakaJSONTests/XCTestManifests.swift index f9add23..0255921 100644 --- a/Tests/KakaJSONTests/XCTestManifests.swift +++ b/Tests/KakaJSONTests/XCTestManifests.swift @@ -16,7 +16,8 @@ public func allTests() -> [XCTestCaseEntry] { testCase(MTJ_04_KeyMapping.allTests), testCase(MTJ_05_CustomValue.allTests), testCase(TestCoding.allTests), - testCase(Global.allTests) + testCase(TestGlobal.allTests), + testCase(TestBugs.allTests) ] } #endif