@@ -27,4 +27,52 @@ final class FlagTests: XCTestCase {
2727 }
2828 XCTAssertEqual ( args, [ " --verbose " ] )
2929 }
30+
31+ private struct FlagContainer : Equatable , Codable {
32+ @Flag var flag : Bool
33+ }
34+
35+ private struct BoolContainer : Equatable , Codable {
36+ var flag : Bool
37+ }
38+
39+ func testFlagEncode( ) throws {
40+ let encoder = JSONEncoder ( )
41+
42+ let flagFalse = Flag ( " key " , enabled: false )
43+ XCTAssertEqual ( try encoder. encode ( flagFalse) , try encoder. encode ( false ) )
44+
45+ let flagTrue = Flag ( " key " , enabled: true )
46+ XCTAssertEqual ( try encoder. encode ( flagTrue) , try encoder. encode ( true ) )
47+
48+ let containerFalse = FlagContainer ( flag: false )
49+ XCTAssertEqual ( try encoder. encode ( containerFalse) , try encoder. encode ( BoolContainer ( flag: false ) ) )
50+
51+ let containerTrue = FlagContainer ( flag: true )
52+ XCTAssertEqual ( try encoder. encode ( containerTrue) , try encoder. encode ( BoolContainer ( flag: true ) ) )
53+ }
54+
55+ func testFlagDecode( ) throws {
56+ let decoder = JSONDecoder ( )
57+
58+ let encodedTrue = try XCTUnwrap ( " true " . data ( using: . utf8) )
59+ let encodedFalse = try XCTUnwrap ( " false " . data ( using: . utf8) )
60+
61+ let encodedContainerTrue = try XCTUnwrap ( """
62+ {
63+ " flag " : true
64+ }
65+ """ . data ( using: . utf8) )
66+ let encodedContainerFalse = try XCTUnwrap ( """
67+ {
68+ " flag " : false
69+ }
70+ """ . data ( using: . utf8) )
71+
72+ XCTAssertEqual ( try decoder. decode ( Flag . self, from: encodedTrue) , Flag ( wrappedValue: true ) )
73+ XCTAssertEqual ( try decoder. decode ( Flag . self, from: encodedFalse) , Flag ( wrappedValue: false ) )
74+
75+ XCTAssertEqual ( try decoder. decode ( FlagContainer . self, from: encodedContainerTrue) , FlagContainer ( flag: true ) )
76+ XCTAssertEqual ( try decoder. decode ( FlagContainer . self, from: encodedContainerFalse) , FlagContainer ( flag: false ) )
77+ }
3078}
0 commit comments