|
1 | 1 | using Archipelago.MultiClient.Net.Converters; |
| 2 | +using Archipelago.MultiClient.Net.Enums; |
| 3 | +using Archipelago.MultiClient.Net.Models; |
2 | 4 | using Archipelago.MultiClient.Net.Packets; |
3 | 5 | using Newtonsoft.Json; |
4 | 6 | using NUnit.Framework; |
@@ -74,21 +76,79 @@ public void Should_handle_multiple_packets_in_same_message() |
74 | 76 | Assert.That(packets.OfType<LocationInfoPacket>().Count(), Is.EqualTo(1)); |
75 | 77 | } |
76 | 78 |
|
77 | | - [Test, Ignore("The lib currently not future compatible as it does not handle new types it does not know")] |
78 | | - public void Should_not_throw_on_unknown_message_part_type() |
| 79 | + [Test] |
| 80 | + public void Should_correctly_parse_unknown_enum_for_print_json() |
79 | 81 | { |
| 82 | + // message part type "region_id" |
| 83 | + // print json type "NewType" |
| 84 | + // hintstatus 9 |
80 | 85 | const string message = |
81 | | - @"[{""cmd"":""PrintJSON"",""data"":[{""text"":""[Hint]: ""},{""text"":""(some new type of element)"",""new_value"":1337,""type"":""other_type""}],""type"":""Hint"",""receiving"":1,""item"":{""item"":1337116,""location"":1337109,""player"":2,""flags"":1,""class"":""NetworkItem""},""found"":false}]"; |
| 86 | + @"[{""cmd"":""PrintJSON"",""data"":[{""text"":""[Hint]: ""},{""text"":""86"",""type"":""region_id""},{""text"":""'s ""},{""text"":""1337049"",""player"":2,""flags"":0,""type"":""item_id""},{""text"":"" is at ""},{""text"":""1337010"",""player"":2,""type"":""location_id""},{""text"":"" in ""},{""text"":""2"",""type"":""player_id""},{""text"":""'s World""},{""text"":"". ""},{""text"":""NEW FUTURE STATUS"",""hint_status"":9,""type"":""hint_status""}],""type"":""NewType"",""receiving"":2,""item"":{""item"":1337049,""location"":1337010,""player"":2,""flags"":0,""class"":""NetworkItem""},""found"":false}]"; |
82 | 87 |
|
83 | | - List<ArchipelagoPacketBase> packets = null; |
84 | | - Assert.DoesNotThrow(() => |
85 | | - { |
86 | | - packets = JsonConvert.DeserializeObject<List<ArchipelagoPacketBase>>(message, Converter); |
87 | | - }); |
| 88 | + var packets = JsonConvert.DeserializeObject<List<ArchipelagoPacketBase>>(message, Converter); |
| 89 | + |
| 90 | + Assert.That(packets, Is.Not.Null); |
| 91 | + Assert.That(packets.Count, Is.EqualTo(1)); |
| 92 | + |
| 93 | + var printJson = packets[0] as PrintJsonPacket; |
| 94 | + |
| 95 | + Assert.That(printJson, Is.Not.Null); |
| 96 | + Assert.That(printJson.MessageType, Is.Null); // "NewType" cannot be parsed |
| 97 | + |
| 98 | + Assert.That(printJson.Data[0].Type , Is.Null); |
| 99 | + Assert.That(printJson.Data[1].Type , Is.Null); //region_id cannot be parsed |
| 100 | + Assert.That(printJson.Data[2].Type , Is.Null); |
| 101 | + Assert.That(printJson.Data[3].Type , Is.EqualTo(JsonMessagePartType.ItemId)); |
| 102 | + Assert.That(printJson.Data[4].Type , Is.Null); |
| 103 | + Assert.That(printJson.Data[5].Type , Is.EqualTo(JsonMessagePartType.LocationId)); |
| 104 | + Assert.That(printJson.Data[6].Type , Is.Null); |
| 105 | + Assert.That(printJson.Data[7].Type , Is.EqualTo(JsonMessagePartType.PlayerId)); |
| 106 | + Assert.That(printJson.Data[8].Type , Is.Null); |
| 107 | + Assert.That(printJson.Data[9].Type , Is.Null); |
| 108 | + Assert.That(printJson.Data[10].HintStatus, Is.EqualTo((HintStatus)9)); // 9 is not a valid hint status |
| 109 | + } |
| 110 | + |
| 111 | + [Test] |
| 112 | + public void Should_correctly_parse_unknown_connection_refused() |
| 113 | + { |
| 114 | + // errors "NewErrorType" |
| 115 | + const string message = @"[{""cmd"":""ConnectionRefused"",""errors"":[""InvalidSlot"", ""NewErrorType""]}]"; |
| 116 | + |
| 117 | + var packets = JsonConvert.DeserializeObject<List<ArchipelagoPacketBase>>(message, Converter); |
88 | 118 |
|
89 | 119 | Assert.That(packets, Is.Not.Null); |
90 | 120 | Assert.That(packets.Count, Is.EqualTo(1)); |
91 | | - Assert.That(packets.OfType<HintPrintJsonPacket>().Count(), Is.EqualTo(1)); |
| 121 | + |
| 122 | + var connectionRefusedPacket = packets[0] as ConnectionRefusedPacket; |
| 123 | + |
| 124 | + Assert.That(connectionRefusedPacket, Is.Not.Null); |
| 125 | + |
| 126 | + Assert.That(connectionRefusedPacket.Errors.Length, Is.EqualTo(2)); |
| 127 | + |
| 128 | + Assert.That(connectionRefusedPacket.Errors[0], Is.EqualTo(ConnectionRefusedError.InvalidSlot)); |
| 129 | + Assert.That(connectionRefusedPacket.Errors[1], Is.EqualTo(ConnectionRefusedError.UnknownError)); |
| 130 | + } |
| 131 | + |
| 132 | + [Test] |
| 133 | + public void Should_correctly_parse_unknown_data_storage_opperations() |
| 134 | + { |
| 135 | + // opperation type "something_specail" |
| 136 | + const string message = @"[{""cmd"":""SetReply"",""key"":""GiftBox;0;2"",""default"":{},""operations"":[{""operation"":""default"",""value"":null},{""operation"":""something_specail"",""value"":null},{""operation"":""left_shift"",""value"":1}],""want_reply"":false,""original_value"":{},""slot"":2,""value"":{}}]"; |
| 137 | + |
| 138 | + var packets = JsonConvert.DeserializeObject<List<ArchipelagoPacketBase>>(message, Converter); |
| 139 | + |
| 140 | + Assert.That(packets, Is.Not.Null); |
| 141 | + Assert.That(packets.Count, Is.EqualTo(1)); |
| 142 | + |
| 143 | + var connectionRefusedPacket = packets[0] as SetReplyPacket; |
| 144 | + |
| 145 | + Assert.That(connectionRefusedPacket, Is.Not.Null); |
| 146 | + |
| 147 | + Assert.That(connectionRefusedPacket.Operations.Length, Is.EqualTo(3)); |
| 148 | + |
| 149 | + Assert.That(connectionRefusedPacket.Operations[0].OperationType, Is.EqualTo(OperationType.Default)); |
| 150 | + Assert.That(connectionRefusedPacket.Operations[1].OperationType, Is.EqualTo(OperationType.Unknown)); |
| 151 | + Assert.That(connectionRefusedPacket.Operations[2].OperationType, Is.EqualTo(OperationType.LeftShift)); |
92 | 152 | } |
93 | 153 | } |
94 | 154 | } |
0 commit comments