Skip to content

Commit 1604998

Browse files
issue-143: Renamed JSON class to GraphJSON to avoid framework collisions.
1 parent be1ce03 commit 1604998

23 files changed

+114
-107
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.2.2
2+
3+
* [issue-143](https://github.com/CosmicMind/Graph/issues/143): Renamed JSON class to GraphJSON to avoid framework collisions.
4+
15
## 2.2.1
26

37
* Updated for Swift 4.1.

Graph.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'Graph'
3-
s.version = '2.2.1'
3+
s.version = '2.2.2'
44
s.swift_version = '4.0'
55
s.license = 'BSD-3-Clause'
66
s.summary = 'Graph is a semantic database that is used to create data-driven applications.'

Graph.xcodeproj/project.pbxproj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
962EB9D01D9E9E6800DFA8C4 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */; };
11-
962EB9D11D9E9E6800DFA8C4 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */; };
10+
962EB9D01D9E9E6800DFA8C4 /* GraphJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */; };
11+
962EB9D11D9E9E6800DFA8C4 /* GraphJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */; };
1212
965BBDCF208B96CF00AC4ED5 /* ActionPropertyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965BBDC8208B96CF00AC4ED5 /* ActionPropertyTests.swift */; };
1313
965BBDD0208B96CF00AC4ED5 /* ActionPropertyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965BBDC8208B96CF00AC4ED5 /* ActionPropertyTests.swift */; };
1414
965BBDD1208B96CF00AC4ED5 /* ActionPropertyStressTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965BBDC9208B96CF00AC4ED5 /* ActionPropertyStressTests.swift */; };
@@ -61,8 +61,8 @@
6161
9686720E1D3BEA50000CD904 /* ManagedRelationshipGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9686720C1D3BEA50000CD904 /* ManagedRelationshipGroup.swift */; };
6262
968672101D3BEA8F000CD904 /* ManagedActionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9686720F1D3BEA8F000CD904 /* ManagedActionGroup.swift */; };
6363
968672111D3BEA8F000CD904 /* ManagedActionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9686720F1D3BEA8F000CD904 /* ManagedActionGroup.swift */; };
64-
968B3EA81DA89EC40099F8E5 /* JSON.swift in Headers */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */; settings = {ATTRIBUTES = (Public, ); }; };
65-
968B3EA91DA89ED40099F8E5 /* JSON.swift in Headers */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */; settings = {ATTRIBUTES = (Public, ); }; };
64+
968B3EA81DA89EC40099F8E5 /* GraphJSON.swift in Headers */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */; settings = {ATTRIBUTES = (Public, ); }; };
65+
968B3EA91DA89ED40099F8E5 /* GraphJSON.swift in Headers */ = {isa = PBXBuildFile; fileRef = 962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */; settings = {ATTRIBUTES = (Public, ); }; };
6666
96E3C3B41D3AB41F0086A024 /* Graph.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E3C3A91D3AB41F0086A024 /* Graph.framework */; };
6767
96E3C3C81D3AB4860086A024 /* Graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E3C3C61D3AB4860086A024 /* Graph.h */; settings = {ATTRIBUTES = (Public, ); }; };
6868
96E3C3DE1D3AB5280086A024 /* Graph.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E3C3D41D3AB5280086A024 /* Graph.framework */; };
@@ -198,7 +198,7 @@
198198
/* End PBXContainerItemProxy section */
199199

200200
/* Begin PBXFileReference section */
201-
962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSON.swift; sourceTree = "<group>"; };
201+
962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphJSON.swift; sourceTree = "<group>"; };
202202
965BBDC8208B96CF00AC4ED5 /* ActionPropertyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ActionPropertyTests.swift; path = Tests/ActionPropertyTests.swift; sourceTree = SOURCE_ROOT; };
203203
965BBDC9208B96CF00AC4ED5 /* ActionPropertyStressTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ActionPropertyStressTests.swift; path = Tests/ActionPropertyStressTests.swift; sourceTree = SOURCE_ROOT; };
204204
965BBDCA208B96CF00AC4ED5 /* ActionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ActionTests.swift; path = Tests/ActionTests.swift; sourceTree = SOURCE_ROOT; };
@@ -299,7 +299,7 @@
299299
962EB9CE1D9E9E5600DFA8C4 /* JSON */ = {
300300
isa = PBXGroup;
301301
children = (
302-
962EB9CF1D9E9E6800DFA8C4 /* JSON.swift */,
302+
962EB9CF1D9E9E6800DFA8C4 /* GraphJSON.swift */,
303303
);
304304
name = JSON;
305305
sourceTree = "<group>";
@@ -518,7 +518,7 @@
518518
96F1DC5A1D64DDBC0025F925 /* ManagedActionProperty.swift in Headers */,
519519
96F1DC5B1D64DDBC0025F925 /* ManagedActionTag.swift in Headers */,
520520
96F1DC5C1D64DDBC0025F925 /* ManagedActionGroup.swift in Headers */,
521-
968B3EA81DA89EC40099F8E5 /* JSON.swift in Headers */,
521+
968B3EA81DA89EC40099F8E5 /* GraphJSON.swift in Headers */,
522522
);
523523
runOnlyForDeploymentPostprocessing = 0;
524524
};
@@ -556,7 +556,7 @@
556556
96F1DC781D64DDCF0025F925 /* ManagedActionProperty.swift in Headers */,
557557
96F1DC791D64DDCF0025F925 /* ManagedActionTag.swift in Headers */,
558558
96F1DC7A1D64DDCF0025F925 /* ManagedActionGroup.swift in Headers */,
559-
968B3EA91DA89ED40099F8E5 /* JSON.swift in Headers */,
559+
968B3EA91DA89ED40099F8E5 /* GraphJSON.swift in Headers */,
560560
);
561561
runOnlyForDeploymentPostprocessing = 0;
562562
};
@@ -736,7 +736,7 @@
736736
96E3C42C1D3AC6B60086A024 /* Entity.swift in Sources */,
737737
96E3C4361D3AC6F20086A024 /* ManagedObject.swift in Sources */,
738738
96E3C4441D3AC7E40086A024 /* ManagedRelationshipTag.swift in Sources */,
739-
962EB9D01D9E9E6800DFA8C4 /* JSON.swift in Sources */,
739+
962EB9D01D9E9E6800DFA8C4 /* GraphJSON.swift in Sources */,
740740
96E3C3F41D3AB8B00086A024 /* Model.swift in Sources */,
741741
968672101D3BEA8F000CD904 /* ManagedActionGroup.swift in Sources */,
742742
96E3C4451D3AC7E40086A024 /* ManagedRelationshipProperty.swift in Sources */,
@@ -803,7 +803,7 @@
803803
96E3C42D1D3AC6B70086A024 /* Entity.swift in Sources */,
804804
96E3C4391D3AC6F30086A024 /* ManagedObject.swift in Sources */,
805805
96E3C44C1D3AC7E50086A024 /* ManagedRelationshipTag.swift in Sources */,
806-
962EB9D11D9E9E6800DFA8C4 /* JSON.swift in Sources */,
806+
962EB9D11D9E9E6800DFA8C4 /* GraphJSON.swift in Sources */,
807807
96E3C3F51D3AB8B00086A024 /* Model.swift in Sources */,
808808
968672111D3BEA8F000CD904 /* ManagedActionGroup.swift in Sources */,
809809
96E3C44D1D3AC7E50086A024 /* ManagedRelationshipProperty.swift in Sources */,
Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@
3030

3131
import Foundation
3232

33-
open class JSON: Equatable, CustomStringConvertible {
33+
open class GraphJSON: Equatable, CustomStringConvertible {
3434
/// A desiption of the object, used when printing.
3535
open var description: String {
36-
return JSON.stringify(object: object) ?? "{}"
36+
return GraphJSON.stringify(object: object) ?? "{}"
3737
}
3838

3939
/// A reference to the core object.
@@ -76,30 +76,30 @@ open class JSON: Equatable, CustomStringConvertible {
7676

7777
/// A Data representation of the object.
7878
open var asNSData: Data? {
79-
return JSON.serialize(object: object)
79+
return GraphJSON.serialize(object: object)
8080
}
8181

8282
/**
8383
Parses a given Data object.
8484
- Parameter _ data: A Data object.
8585
- Parameter options: JSONSerialization.ReadingOptions.
86-
- Returns: A JSON object on success, nil otherwise.
86+
- Returns: A GraphJSON object on success, nil otherwise.
8787
*/
88-
open class func parse(_ data: Data, options: JSONSerialization.ReadingOptions = .allowFragments) -> JSON? {
88+
open class func parse(_ data: Data, options: JSONSerialization.ReadingOptions = .allowFragments) -> GraphJSON? {
8989
guard let object = try? JSONSerialization.jsonObject(with: data, options: options) else {
9090
return nil
9191
}
9292

93-
return JSON(object)
93+
return GraphJSON(object)
9494
}
9595

9696
/**
9797
Parses a given String object.
9898
- Parameter _ string: A Data object.
9999
- Parameter options: JSONSerialization.ReadingOptions.
100-
- Returns: A JSON object on success, nil otherwise.
100+
- Returns: A GraphJSON object on success, nil otherwise.
101101
*/
102-
open class func parse(_ string: String, options: JSONSerialization.ReadingOptions = .allowFragments) -> JSON? {
102+
open class func parse(_ string: String, options: JSONSerialization.ReadingOptions = .allowFragments) -> GraphJSON? {
103103
guard let data = string.data(using: String.Encoding.utf8) else {
104104
return nil
105105
}
@@ -122,20 +122,23 @@ open class JSON: Equatable, CustomStringConvertible {
122122
- Returns: A String object if successful, nil otherwise.
123123
*/
124124
open class func stringify(object: Any) -> String? {
125-
if let o = object as? JSON {
125+
if let o = object as? GraphJSON {
126126
return stringify(object: o.object)
127-
} else if let data = JSON.serialize(object: object) {
127+
128+
} else if let data = GraphJSON.serialize(object: object) {
128129
if let o = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as String? {
129130
return o
130131
}
131132
}
133+
132134
return nil
133135
}
134136

135137
/// An initializer that accepts a given Any object.
136138
public required init(_ object: Any) {
137-
if let o = object as? JSON {
139+
if let o = object as? GraphJSON {
138140
self.object = o.object
141+
139142
} else {
140143
self.object = object
141144
}
@@ -144,22 +147,22 @@ open class JSON: Equatable, CustomStringConvertible {
144147
/**
145148
A subscript operator for Array style access.
146149
- Parameter index: An Int.
147-
- Returns: A JSON object if successful, nil otherwise.
150+
- Returns: A GraphJSON object if successful, nil otherwise.
148151
*/
149-
open subscript(index: Int) -> JSON? {
152+
open subscript(index: Int) -> GraphJSON? {
150153
guard let item = asArray else {
151154
return nil
152155
}
153156

154-
return JSON(item[index])
157+
return GraphJSON(item[index])
155158
}
156159

157160
/**
158161
A subscript operator for Dictionary style access.
159162
- Parameter key: A String.
160-
- Returns: A JSON object if successful, nil otherwise.
163+
- Returns: A GraphJSON object if successful, nil otherwise.
161164
*/
162-
open subscript(key: String) -> JSON? {
165+
open subscript(key: String) -> GraphJSON? {
163166
guard let item = asDictionary else {
164167
return nil
165168
}
@@ -168,10 +171,10 @@ open class JSON: Equatable, CustomStringConvertible {
168171
return nil
169172
}
170173

171-
return JSON(item[key]!)
174+
return GraphJSON(item[key]!)
172175
}
173176
}
174177

175-
public func ==(lhs: JSON, rhs: JSON) -> Bool {
176-
return JSON.stringify(object: lhs.object) == JSON.stringify(object: rhs.object)
178+
public func ==(lhs: GraphJSON, rhs: GraphJSON) -> Bool {
179+
return GraphJSON.stringify(object: lhs.object) == GraphJSON.stringify(object: rhs.object)
177180
}

Sources/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2.2.1</string>
18+
<string>2.2.2</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>

Tests/ActionGroupTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ class ActionGroupTests: XCTestCase, WatchActionDelegate {
144144

145145
func watch(graph: Graph, action: Action, addedTo group: String, source: GraphSource) {
146146
XCTAssertTrue("T" == action.type)
147-
XCTAssertTrue(0 < action.id.characters.count)
147+
XCTAssertTrue(0 < action.id.count)
148148
XCTAssertEqual("G1", group)
149149
XCTAssertTrue(action.member(of: group))
150150
XCTAssertEqual(1, action.groups.count)
@@ -155,7 +155,7 @@ class ActionGroupTests: XCTestCase, WatchActionDelegate {
155155

156156
func watch(graph: Graph, action: Action, removedFrom group: String, source: GraphSource) {
157157
XCTAssertTrue("T" == action.type)
158-
XCTAssertTrue(0 < action.id.characters.count)
158+
XCTAssertTrue(0 < action.id.count)
159159
XCTAssertEqual("G2", group)
160160
XCTAssertFalse(action.member(of: group))
161161

Tests/ActionPropertyStressTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,37 +140,37 @@ class ActionPropertyStressTests: XCTestCase, WatchActionDelegate {
140140

141141
func watch(graph: Graph, inserted action: Action, source: GraphSource) {
142142
XCTAssertTrue("T" == action.type)
143-
XCTAssertTrue(0 < action.id.characters.count)
143+
XCTAssertTrue(0 < action.id.count)
144144
XCTAssertEqual(0, action.properties.count)
145145

146146
actionInsertExpectation?.fulfill()
147147
}
148148

149149
func watch(graph: Graph, deleted action: Action, source: GraphSource) {
150150
XCTAssertTrue("T" == action.type)
151-
XCTAssertTrue(0 < action.id.characters.count)
151+
XCTAssertTrue(0 < action.id.count)
152152
XCTAssertEqual(0, action.properties.count)
153153

154154
actionDeleteExpectation?.fulfill()
155155
}
156156

157157
func watch(graph: Graph, action: Action, added property: String, with value: Any, source: GraphSource) {
158158
XCTAssertTrue("T" == action.type)
159-
XCTAssertTrue(0 < action.id.characters.count)
159+
XCTAssertTrue(0 < action.id.count)
160160

161161
propertyInsertExpception?.fulfill()
162162
}
163163

164164
func watch(graph: Graph, action: Action, updated property: String, with value: Any, source: GraphSource) {
165165
XCTAssertTrue("T" == action.type)
166-
XCTAssertTrue(0 < action.id.characters.count)
166+
XCTAssertTrue(0 < action.id.count)
167167

168168
propertyUpdateExpception?.fulfill()
169169
}
170170

171171
func watch(graph: Graph, action: Action, removed property: String, with value: Any, source: GraphSource) {
172172
XCTAssertTrue("T" == action.type)
173-
XCTAssertTrue(0 < action.id.characters.count)
173+
XCTAssertTrue(0 < action.id.count)
174174

175175
propertyDeleteExpception?.fulfill()
176176
}

Tests/ActionPropertyTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class ActionPropertyTests: XCTestCase, WatchActionDelegate {
140140

141141
func watch(graph: Graph, action: Action, added property: String, with value: Any, source: GraphSource) {
142142
XCTAssertTrue("T" == action.type)
143-
XCTAssertTrue(0 < action.id.characters.count)
143+
XCTAssertTrue(0 < action.id.count)
144144

145145
XCTAssertEqual("P1", property)
146146
XCTAssertEqual("V1", value as? String)
@@ -151,7 +151,7 @@ class ActionPropertyTests: XCTestCase, WatchActionDelegate {
151151

152152
func watch(graph: Graph, action: Action, updated property: String, with value: Any, source: GraphSource) {
153153
XCTAssertTrue("T" == action.type)
154-
XCTAssertTrue(0 < action.id.characters.count)
154+
XCTAssertTrue(0 < action.id.count)
155155

156156
XCTAssertEqual("P1", property)
157157
XCTAssertEqual("V2", value as? String)
@@ -162,7 +162,7 @@ class ActionPropertyTests: XCTestCase, WatchActionDelegate {
162162

163163
func watch(graph: Graph, action: Action, removed property: String, with value: Any, source: GraphSource) {
164164
XCTAssertTrue("T" == action.type)
165-
XCTAssertTrue(0 < action.id.characters.count)
165+
XCTAssertTrue(0 < action.id.count)
166166

167167
XCTAssertEqual("P1", property)
168168
XCTAssertEqual("V1", value as? String)

Tests/ActionTagTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class ActionTagTests: XCTestCase, WatchActionDelegate {
145145

146146
func watch(graph: Graph, action: Action, added tag: String, source: GraphSource) {
147147
XCTAssertTrue("T" == action.type)
148-
XCTAssertTrue(0 < action.id.characters.count)
148+
XCTAssertTrue(0 < action.id.count)
149149
XCTAssertEqual("G1", tag)
150150
XCTAssertTrue(action.has(tags: tag))
151151
XCTAssertEqual(1, action.tags.count)
@@ -156,7 +156,7 @@ class ActionTagTests: XCTestCase, WatchActionDelegate {
156156

157157
func watch(graph: Graph, action: Action, removed tag: String, source: GraphSource) {
158158
XCTAssertTrue("T" == action.type)
159-
XCTAssertTrue(0 < action.id.characters.count)
159+
XCTAssertTrue(0 < action.id.count)
160160
XCTAssertEqual("G2", tag)
161161
XCTAssertFalse(action.has(tags: tag))
162162

Tests/ActionTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
273273

274274
func watch(graph: Graph, inserted action: Action, source: GraphSource) {
275275
XCTAssertTrue("T" == action.type)
276-
XCTAssertTrue(0 < action.id.characters.count)
276+
XCTAssertTrue(0 < action.id.count)
277277
XCTAssertEqual("V", action["P"] as? String)
278278
XCTAssertTrue(action.has(tags: "G"))
279279

@@ -282,7 +282,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
282282

283283
func watch(graph: Graph, deleted action: Action, source: GraphSource) {
284284
XCTAssertTrue("T" == action.type)
285-
XCTAssertTrue(0 < action.id.characters.count)
285+
XCTAssertTrue(0 < action.id.count)
286286
XCTAssertNil(action["P"])
287287
XCTAssertFalse(action.has(tags: "G"))
288288
XCTAssertEqual(2, action.subjects.count)
@@ -297,7 +297,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
297297

298298
func watch(graph: Graph, action: Action, added tag: String, source: GraphSource) {
299299
XCTAssertTrue("T" == action.type)
300-
XCTAssertTrue(0 < action.id.characters.count)
300+
XCTAssertTrue(0 < action.id.count)
301301
XCTAssertEqual("G", tag)
302302
XCTAssertTrue(action.has(tags: tag))
303303

@@ -306,7 +306,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
306306

307307
func watch(graph: Graph, action: Action, removed tag: String, source: GraphSource) {
308308
XCTAssertTrue("T" == action.type)
309-
XCTAssertTrue(0 < action.id.characters.count)
309+
XCTAssertTrue(0 < action.id.count)
310310
XCTAssertEqual("G", tag)
311311
XCTAssertFalse(action.has(tags: tag))
312312

@@ -315,7 +315,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
315315

316316
func watch(graph: Graph, action: Action, added property: String, with value: Any, source: GraphSource) {
317317
XCTAssertTrue("T" == action.type)
318-
XCTAssertTrue(0 < action.id.characters.count)
318+
XCTAssertTrue(0 < action.id.count)
319319
XCTAssertEqual("P", property)
320320
XCTAssertEqual("V", value as? String)
321321
XCTAssertEqual(value as? String, action[property] as? String)
@@ -325,7 +325,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
325325

326326
func watch(graph: Graph, action: Action, updated property: String, with value: Any, source: GraphSource) {
327327
XCTAssertTrue("T" == action.type)
328-
XCTAssertTrue(0 < action.id.characters.count)
328+
XCTAssertTrue(0 < action.id.count)
329329
XCTAssertEqual("P", property)
330330
XCTAssertEqual("V", value as? String)
331331
XCTAssertEqual(value as? String, action[property] as? String)
@@ -335,7 +335,7 @@ class ActionTests: XCTestCase, WatchActionDelegate {
335335

336336
func watch(graph: Graph, action: Action, removed property: String, with value: Any, source: GraphSource) {
337337
XCTAssertTrue("T" == action.type)
338-
XCTAssertTrue(0 < action.id.characters.count)
338+
XCTAssertTrue(0 < action.id.count)
339339
XCTAssertEqual("P", property)
340340
XCTAssertEqual("V", value as? String)
341341
XCTAssertNil(action["P"])

0 commit comments

Comments
 (0)