Skip to content
This repository has been archived by the owner on Feb 8, 2021. It is now read-only.

Initial Linux support #249

Merged
merged 1 commit into from
Jan 16, 2017
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .swift-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.0
3.0.1
8 changes: 4 additions & 4 deletions Gloss.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
9F055DC91DCBC24000EB78C1 /* DecoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC01DCBC24000EB78C1 /* DecoderTests.swift */; };
9F055DCA1DCBC24000EB78C1 /* EncoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC11DCBC24000EB78C1 /* EncoderTests.swift */; };
9F055DCB1DCBC24000EB78C1 /* FlowObjectCreationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC21DCBC24000EB78C1 /* FlowObjectCreationTests.swift */; };
9F055DCC1DCBC24000EB78C1 /* FlowObjectToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC31DCBC24000EB78C1 /* FlowObjectToJSON.swift */; };
9F055DCC1DCBC24000EB78C1 /* ObjectToJSONFlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC31DCBC24000EB78C1 /* ObjectToJSONFlowTests.swift */; };
9F055DCD1DCBC24000EB78C1 /* GlossTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC41DCBC24000EB78C1 /* GlossTests.swift */; };
9F055DCE1DCBC24000EB78C1 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9F055DC51DCBC24000EB78C1 /* Info.plist */; };
9F055DCF1DCBC24000EB78C1 /* KeyPathTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F055DC61DCBC24000EB78C1 /* KeyPathTests.swift */; };
Expand Down Expand Up @@ -79,7 +79,7 @@
9F055DC01DCBC24000EB78C1 /* DecoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DecoderTests.swift; path = Tests/GlossTests/DecoderTests.swift; sourceTree = SOURCE_ROOT; };
9F055DC11DCBC24000EB78C1 /* EncoderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EncoderTests.swift; path = Tests/GlossTests/EncoderTests.swift; sourceTree = SOURCE_ROOT; };
9F055DC21DCBC24000EB78C1 /* FlowObjectCreationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FlowObjectCreationTests.swift; path = Tests/GlossTests/FlowObjectCreationTests.swift; sourceTree = SOURCE_ROOT; };
9F055DC31DCBC24000EB78C1 /* FlowObjectToJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FlowObjectToJSON.swift; path = Tests/GlossTests/FlowObjectToJSON.swift; sourceTree = SOURCE_ROOT; };
9F055DC31DCBC24000EB78C1 /* ObjectToJSONFlowTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ObjectToJSONFlowTests.swift; path = Tests/GlossTests/ObjectToJSONFlowTests.swift; sourceTree = SOURCE_ROOT; };
9F055DC41DCBC24000EB78C1 /* GlossTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GlossTests.swift; path = Tests/GlossTests/GlossTests.swift; sourceTree = SOURCE_ROOT; };
9F055DC51DCBC24000EB78C1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Tests/GlossTests/Info.plist; sourceTree = SOURCE_ROOT; };
9F055DC61DCBC24000EB78C1 /* KeyPathTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = KeyPathTests.swift; path = Tests/GlossTests/KeyPathTests.swift; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -149,7 +149,7 @@
9F055DC01DCBC24000EB78C1 /* DecoderTests.swift */,
9F055DC11DCBC24000EB78C1 /* EncoderTests.swift */,
9F055DC21DCBC24000EB78C1 /* FlowObjectCreationTests.swift */,
9F055DC31DCBC24000EB78C1 /* FlowObjectToJSON.swift */,
9F055DC31DCBC24000EB78C1 /* ObjectToJSONFlowTests.swift */,
9F055DC41DCBC24000EB78C1 /* GlossTests.swift */,
9F055DC51DCBC24000EB78C1 /* Info.plist */,
9F055DC61DCBC24000EB78C1 /* KeyPathTests.swift */,
Expand Down Expand Up @@ -453,7 +453,7 @@
9F055DCD1DCBC24000EB78C1 /* GlossTests.swift in Sources */,
9F055DCB1DCBC24000EB78C1 /* FlowObjectCreationTests.swift in Sources */,
9F055DDE1DCBC25000EB78C1 /* TestKeyPathModelCustomDelimiter.swift in Sources */,
9F055DCC1DCBC24000EB78C1 /* FlowObjectToJSON.swift in Sources */,
9F055DCC1DCBC24000EB78C1 /* ObjectToJSONFlowTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,8 @@ and

#### On Using Gloss Operators

_Remark: Int32, UInt32, Int64 and UInt64 types, and Int32, UInt32, Int64 and UInt64 arrays can't be used on Linux platform. Use Int, UInt and according arrays. - @rbukovansky_

##### The Decode Operator: `<~~`

The `<~~` operator is simply syntactic sugar for a set of `Decoder.decode` functions:
Expand Down
1 change: 1 addition & 0 deletions Sources/Decoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,4 @@ public struct Decoder {
}

}

120 changes: 100 additions & 20 deletions Tests/GlossTests/DecoderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,58 @@ import Gloss
import XCTest

class DecoderTests: XCTestCase {

static var allTests : [(String, (DecoderTests) -> () throws -> Void)] {
return [
("testInitializingFailableObjectsWithBadDataCanFail", testInitializingFailableObjectsWithBadDataCanFail),
("testInitializingFailableObjectsWithValidDataCanSucceed", testInitializingFailableObjectsWithValidDataCanSucceed),
("testInvalidValue", testInvalidValue),
("testDecodeBoolArray", testDecodeBoolArray),
("testDecodeBoolArrayReturnsNilIfJSONInvalid", testDecodeBoolArrayReturnsNilIfJSONInvalid),
("testDecodeInt", testDecodeInt),
("testDecodeIntArray", testDecodeIntArray),
("testDecodeIntArrayReturnsNilIfJSONInvalid", testDecodeIntArrayReturnsNilIfJSONInvalid),
("testDecodeFloat", testDecodeFloat),
("testDecodeFloatArray", testDecodeFloatArray),
("testDecodeFloatArrayReturnsNilIfJSONInvalid", testDecodeFloatArrayReturnsNilIfJSONInvalid),
("testDecodeDouble", testDecodeDouble),
("testDecodeDoubleArray", testDecodeDoubleArray),
("testDecodeDoubleArrayReturnsNilIfJSONInvalid", testDecodeDoubleArrayReturnsNilIfJSONInvalid),
("testDecodeDictionary", testDecodeDictionary),
("testDecodeDictionaryWithArray", testDecodeDictionaryWithArray),
("testDecodeString", testDecodeString),
("testDecodeStringArray", testDecodeStringArray),
("testDecodeStringArrayReturnsNilIfJSONInvalid", testDecodeStringArrayReturnsNilIfJSONInvalid),
("testDecodeNestedModel", testDecodeNestedModel),
("testDecodeEnumValue", testDecodeEnumValue),
("testDecodeEnumArray", testDecodeEnumArray),
("testDecodeEnumArrayReturnsNilIfJSONInvalid", testDecodeEnumArrayReturnsNilIfJSONInvalid),
("testDecodeDate", testDecodeDate),
("testDecodeDateArray", testDecodeDateArray),
("testDecodeDateArrayReturnsNilIfJSONInvalid", testDecodeDateArrayReturnsNilIfJSONInvalid),
("testDecodeDateISO8601", testDecodeDateISO8601),
("testDecodeDateISO8601Array", testDecodeDateISO8601Array),
("testDecodeDateISO8601ArrayArrayReturnsNilIfJSONInvalid", testDecodeDateISO8601ArrayArrayReturnsNilIfJSONInvalid),
("testDecodeInt32", testDecodeInt32),
("testDecodeInt32Array", testDecodeInt32Array),
("testDecodeInt32ArrayReturnsNilIfJSONInvalid", testDecodeInt32ArrayReturnsNilIfJSONInvalid),
("testDecodeUInt32", testDecodeUInt32),
("testDecodeUInt32Array", testDecodeUInt32Array),
("testDecodeUInt32ArrayReturnsNilIfJSONInvalid", testDecodeUInt32ArrayReturnsNilIfJSONInvalid),
("testDecodeInt64", testDecodeInt64),
("testDecodeInt64Array", testDecodeInt64Array),
("testDecodeInt64ArrayReturnsNilIfJSONInvalid", testDecodeInt64ArrayReturnsNilIfJSONInvalid),
("testDecodeUInt64", testDecodeUInt64),
("testDecodeUInt64Array", testDecodeUInt64Array),
("testDecodeUInt64ArrayReturnsNilIfJSONInvalid", testDecodeUInt64ArrayReturnsNilIfJSONInvalid),
("testDecodeURL", testDecodeURL),
("testDecodeURLArray", testDecodeURLArray),
("testDecodeURLArrayReturnsNilIfJSONInvalid", testDecodeURLArrayReturnsNilIfJSONInvalid),
("testDecodeUUID", testDecodeUUID),
("testDecodeUUIDArray", testDecodeUUIDArray),
("testDecodeUUIDArrayReturnsNilIfJSONInvalid", testDecodeUUIDArrayReturnsNilIfJSONInvalid)
]
}

var testJSON: JSON? = [:]
var testFailableModelJSONValid: JSON? = [:]
Expand Down Expand Up @@ -85,13 +137,13 @@ class DecoderTests: XCTestCase {
func testInitializingFailableObjectsWithBadDataCanFail() {
let result = TestFailableModel(json: testFailableModelJSONInvalid!)

XCTAssertTrue(result == nil, "Expected initialization with bad data to fail, instead got \(result)")
XCTAssertTrue(result == nil, "Expected initialization with bad data to fail, instead got \(String(describing: result))")
}

func testInitializingFailableObjectsWithValidDataCanSucceed() {
let result = TestFailableModel(json: testFailableModelJSONValid!)

XCTAssertTrue(result != nil, "Expected initialization with valid data to succeed, instead got \(result)")
XCTAssertTrue(result != nil, "Expected initialization with valid data to succeed, instead got \(String(describing: result))")
}

func testInvalidValue() {
Expand Down Expand Up @@ -277,7 +329,7 @@ class DecoderTests: XCTestCase {

func testDecodeDate() {
let result: Date? = Decoder.decode(dateForKey: "date", dateFormatter: TestModel.dateFormatter)(testJSON!)

let year: Int = Calendar.current.dateComponents([.year], from: result!).year!
let month: Int = Calendar.current.dateComponents([.month], from: result!).month!
let day: Int = Calendar.current.dateComponents([.day], from: result!).day!
Expand All @@ -292,7 +344,11 @@ class DecoderTests: XCTestCase {
XCTAssertTrue((hour == 20), "Decode Date should return correct value")
XCTAssertTrue((minute == 51), "Decode Date should return correct value")
XCTAssertTrue((second == 46), "Decode Date should return correct value")
XCTAssertTrue((nanosecond/1000000 == 599), "Decode Date should return correct value")
#if !os(Linux)
XCTAssertTrue((nanosecond/1000000 == 599), "Decode Date should return correct value")
#else
XCTAssertTrue((nanosecond == 16843009), "Decode Date should return correct value")
#endif
}

func testDecodeDateArray() {
Expand Down Expand Up @@ -322,15 +378,23 @@ class DecoderTests: XCTestCase {
XCTAssertTrue((hour1 == 20), "Decode Date array should return correct value")
XCTAssertTrue((minute1 == 51), "Decode Date array should return correct value")
XCTAssertTrue((second1 == 46), "Decode Date array should return correct value")
XCTAssertTrue((nanosecond1/1000000 == 599), "Decode Date array should return correct value")
#if !os(Linux)
XCTAssertTrue((nanosecond1/1000000 == 599), "Decode Date should return correct value")
#else
XCTAssertTrue((nanosecond1 == 16843009), "Decode Date should return correct value")
#endif

XCTAssertTrue((year2 == 2015), "Decode Date array should return correct value")
XCTAssertTrue((month2 == 8), "Decode Date array should return correct value")
XCTAssertTrue((day2 == 16), "Decode Date array should return correct value")
XCTAssertTrue((hour2 == 20), "Decode Date array should return correct value")
XCTAssertTrue((minute2 == 51), "Decode Date array should return correct value")
XCTAssertTrue((second2 == 46), "Decode Date array should return correct value")
XCTAssertTrue((nanosecond2/1000000 == 599), "Decode Date array should return correct value")
#if !os(Linux)
XCTAssertTrue((nanosecond2/1000000 == 599), "Decode Date should return correct value")
#else
XCTAssertTrue((nanosecond2 == 16843009), "Decode Date should return correct value")
#endif
}

func testDecodeDateArrayReturnsNilIfJSONInvalid() {
Expand Down Expand Up @@ -367,14 +431,18 @@ class DecoderTests: XCTestCase {

func testDecodeInt32() {
let result: Int32? = Decoder.decode(int32ForKey: "int32")(testJSON!)


#if !os(Linux)
XCTAssertTrue((result == 100000000), "Decode Int32 should return correct value")
#endif
}

func testDecodeInt32Array() {
let result: [Int32]? = Decoder.decode(int32ArrayForKey: "int32Array")(testJSON!)


#if !os(Linux)
XCTAssertTrue((result! == [100000000, -2147483648, 2147483647]), "Decode Int32 array should return correct value")
#endif
}

func testDecodeInt32ArrayReturnsNilIfJSONInvalid() {
Expand All @@ -384,17 +452,21 @@ class DecoderTests: XCTestCase {
XCTAssertNil(result, "Decode Int32 array should return nil if JSON is invalid")
}

func testDecodeUInt32() {
func testDecodeUInt32() {
let result: UInt32? = Decoder.decode(uint32ForKey: "uInt32")(testJSON!)

XCTAssertTrue((result == 4294967295), "Decode UInt32 should return correct value")
}
#if !os(Linux)
XCTAssertTrue((result == 4294967295), "Decode UInt32 should return correct value")
#endif
}

func testDecodeUInt32Array() {
func testDecodeUInt32Array() {
let result: [UInt32]? = Decoder.decode(uint32ArrayForKey: "uInt32Array")(testJSON!)

XCTAssertTrue((result! == [100000000, 2147483648, 4294967295]), "Decode UInt32 array should return correct value")
}
#if !os(Linux)
XCTAssertTrue((result! == [100000000, 2147483648, 4294967295]), "Decode UInt32 array should return correct value")
#endif
}

func testDecodeUInt32ArrayReturnsNilIfJSONInvalid() {
let invalidJSON = [ "array" : ["1", "2", "3"] ]
Expand All @@ -406,13 +478,17 @@ class DecoderTests: XCTestCase {
func testDecodeInt64() {
let result: Int64? = Decoder.decode(int64ForKey: "int64")(testJSON!)

#if !os(Linux)
XCTAssertTrue((result == 300000000), "Decode Int64 should return correct value")
#endif
}

func testDecodeInt64Array() {
let result: [Int64]? = Decoder.decode(int64ArrayForKey: "int64Array")(testJSON!)

#if !os(Linux)
XCTAssertTrue((result! == [300000000, -9223372036854775808, 9223372036854775807]), "Decode Int64 array should return correct value")
#endif
}

func testDecodeInt64ArrayReturnsNilIfJSONInvalid() {
Expand All @@ -422,17 +498,21 @@ class DecoderTests: XCTestCase {
XCTAssertNil(result, "Decode Int64 array should return nil if JSON is invalid")
}

func testDecodeUInt64() {
func testDecodeUInt64() {
let result: UInt64? = Decoder.decode(uint64ForKey: "uInt64")(testJSON!)

XCTAssertTrue((result == 18446744073709551615), "Decode UInt64 should return correct value")
}
#if !os(Linux)
XCTAssertTrue((result == 18446744073709551615), "Decode UInt64 should return correct value")
#endif
}

func testDecodeUInt64Array() {
func testDecodeUInt64Array() {
let result: [UInt64]? = Decoder.decode(uint64ArrayForKey: "uInt64Array")(testJSON!)

XCTAssertTrue((result! == [300000000, 9223372036854775808, 18446744073709551615]), "Decode UInt64 array should return correct value")
}
#if !os(Linux)
XCTAssertTrue((result! == [300000000, 9223372036854775808, 18446744073709551615]), "Decode UInt64 array should return correct value")
#endif
}

func testDecodeUInt64ArrayReturnsNilIfJSONInvalid() {
let invalidJSON = [ "array" : ["1", "2", "3"] ]
Expand Down
48 changes: 48 additions & 0 deletions Tests/GlossTests/EncoderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,54 @@ import Gloss
import XCTest

class EncoderTests: XCTestCase {

static var allTests : [(String, (EncoderTests) -> () throws -> Void)] {
return [
("testInvalidValue", testInvalidValue),
("testEncodeBool", testEncodeBool),
("testEncodeBoolArray", testEncodeBoolArray),
("testEncodeBoolLArrayReturnsNilIfModelInvalid", testEncodeBoolLArrayReturnsNilIfModelInvalid),
("testEncodeInt", testEncodeInt),
("testEncodeIntArray", testEncodeIntArray),
("testEncodeIntLArrayReturnsNilIfModelInvalid", testEncodeIntLArrayReturnsNilIfModelInvalid),
("testEncodeFloat", testEncodeFloat),
("testEncodeFloatArray", testEncodeFloatArray),
("testEncodeFloatLArrayReturnsNilIfModelInvalid", testEncodeFloatLArrayReturnsNilIfModelInvalid),
("testEncodeDouble", testEncodeDouble),
("testEncodeDoubleArray", testEncodeDoubleArray),
("testEncodeDoubleLArrayReturnsNilIfModelInvalid", testEncodeDoubleLArrayReturnsNilIfModelInvalid),
("testEncodeEncodableDictionary", testEncodeEncodableDictionary),
("testEncodeEncodableDictionaryWithArray", testEncodeEncodableDictionaryWithArray),
("testEncodeString", testEncodeString),
("testEncodeStringArray", testEncodeStringArray),
("testEncodeStringLArrayReturnsNilIfModelInvalid", testEncodeStringLArrayReturnsNilIfModelInvalid),
("testEncodeNestedModel", testEncodeNestedModel),
("testEncodeNestedModelArray", testEncodeNestedModelArray),
("testEncodeEnumValue", testEncodeEnumValue),
("testEncodeEnumArray", testEncodeEnumArray),
("testEncodeEnumArrayReturnsNilIfModelInvalid", testEncodeEnumArrayReturnsNilIfModelInvalid),
("testEncodeDate", testEncodeDate),
("testEncodeDateArray", testEncodeDateArray),
("testEncodeDateArrayReturnsNilIfModelInvalid", testEncodeDateArrayReturnsNilIfModelInvalid),
("testEncodeDateISO8601", testEncodeDateISO8601),
("testEncodeDateISO8601Array", testEncodeDateISO8601Array),
("testEncodeDateISO8601ArrayReturnsNilIfModelInvalid", testEncodeDateISO8601ArrayReturnsNilIfModelInvalid),
("testEncodeInt32", testEncodeInt32),
("testEncodeInt32Array", testEncodeInt32Array),
("testEncodeUInt32", testEncodeUInt32),
("testEncodeUInt32Array", testEncodeUInt32Array),
("testEncodeInt64", testEncodeInt64),
("testEncodeInt64Array", testEncodeInt64Array),
("testEncodeUInt64", testEncodeUInt64),
("testEncodeUInt64Array", testEncodeUInt64Array),
("testEncodeURL", testEncodeURL),
("testEncodeURLArray", testEncodeURLArray),
("testEncodeURLArrayReturnsNilIfModelInvalid", testEncodeURLArrayReturnsNilIfModelInvalid),
("testEncodeUUID", testEncodeUUID),
("testEncodeUUIDArray", testEncodeUUIDArray),
("testEncodeUUIDArrayReturnsNilIfModelInvalid", testEncodeUUIDArrayReturnsNilIfModelInvalid)
]
}

var testNestedModel1: TestNestedModel? = nil
var testNestedModel2: TestNestedModel? = nil
Expand Down