Skip to content

Commit 18fd8e6

Browse files
committed
Add test cases for multiple maps.
1 parent d5b13f6 commit 18fd8e6

2 files changed

Lines changed: 209 additions & 5 deletions

File tree

tests/AzureMapsControl.Components.Tests/Map/Map.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,7 +1859,7 @@ public async Task Should_SetCanvasStylePropertiesAsync()
18591859

18601860
_jsRuntimeMock.Verify(runtime => runtime.InvokeVoidAsync(Constants.JsConstants.Methods.Core.SetCanvasStyleProperties.ToCoreNamespace(), id, It.Is<IEnumerable<KeyValuePair<string, string>>>(dictionary =>
18611861
dictionary.Single().Key == "cursor" && dictionary.Single().Value == "hand"))
1862-
, Times.Once);
1862+
, Times.Once);
18631863
_jsRuntimeMock.VerifyNoOtherCalls();
18641864
}
18651865

@@ -1888,7 +1888,7 @@ public async Task Should_SetOnlyDefinedCanvasProperties_Async()
18881888
await map.SetCanvasStylePropertiesAsync(properties);
18891889
_jsRuntimeMock.Verify(runtime => runtime.InvokeVoidAsync(Constants.JsConstants.Methods.Core.SetCanvasStyleProperties.ToCoreNamespace(), id, It.Is<IEnumerable<KeyValuePair<string, string>>>(dictionary =>
18901890
dictionary.Single().Key == "cursor" && dictionary.Single().Value == "hand"))
1891-
, Times.Once);
1891+
, Times.Once);
18921892
_jsRuntimeMock.VerifyNoOtherCalls();
18931893
}
18941894

@@ -1910,7 +1910,7 @@ public async Task Should_NotSetCanvasProperties_NoDefinedPropertiesCase_Async()
19101910

19111911
var properties = new Dictionary<string, string> {
19121912
{ "", "value" },
1913-
{ " ", "value" },
1913+
{ " ", "value" },
19141914
};
19151915
await map.SetCanvasStylePropertiesAsync(properties);
19161916
_jsRuntimeMock.VerifyNoOtherCalls();
@@ -1951,7 +1951,7 @@ public async Task Should_SetCanvasContainerStylePropertiesAsync()
19511951

19521952
_jsRuntimeMock.Verify(runtime => runtime.InvokeVoidAsync(Constants.JsConstants.Methods.Core.SetCanvasContainerStyleProperties.ToCoreNamespace(), "id", It.Is<IEnumerable<KeyValuePair<string, string>>>(dictionary =>
19531953
dictionary.Single().Key == "cursor" && dictionary.Single().Value == "hand"))
1954-
, Times.Once);
1954+
, Times.Once);
19551955
_jsRuntimeMock.VerifyNoOtherCalls();
19561956
}
19571957

@@ -1980,7 +1980,7 @@ public async Task Should_SetOnlyDefinedCanvasContainerProperties_Async()
19801980
await map.SetCanvasContainerStylePropertiesAsync(properties);
19811981
_jsRuntimeMock.Verify(runtime => runtime.InvokeVoidAsync(Constants.JsConstants.Methods.Core.SetCanvasContainerStyleProperties.ToCoreNamespace(), id, It.Is<IEnumerable<KeyValuePair<string, string>>>(dictionary =>
19821982
dictionary.Single().Key == "cursor" && dictionary.Single().Value == "hand"))
1983-
, Times.Once);
1983+
, Times.Once);
19841984
_jsRuntimeMock.VerifyNoOtherCalls();
19851985
}
19861986

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
namespace AzureMapsControl.Components.Tests.Map
2+
{
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
using AzureMapsControl.Components.Map;
7+
8+
using Xunit;
9+
10+
public class MapServiceMultipleMapsTests
11+
{
12+
[Fact]
13+
public async Task Should_AddMultipleMaps_Async()
14+
{
15+
var map1 = new Map("map1");
16+
var map2 = new Map("map2");
17+
var map3 = new Map("map3");
18+
var service = new MapService(null);
19+
20+
await service.AddMapAsync(map1);
21+
await service.AddMapAsync(map2);
22+
await service.AddMapAsync(map3);
23+
24+
Assert.Equal(3, service.Maps.Count);
25+
Assert.Equal(map1, service.GetMap("map1"));
26+
Assert.Equal(map2, service.GetMap("map2"));
27+
Assert.Equal(map3, service.GetMap("map3"));
28+
Assert.Equal(map3, service.Map); // Latest added map
29+
}
30+
31+
[Fact]
32+
public async Task Should_HandleAddingMapWithSameId_Async()
33+
{
34+
var map1 = new Map("map-id");
35+
var map2 = new Map("map-id"); // Same ID
36+
var service = new MapService(null);
37+
38+
await service.AddMapAsync(map1);
39+
await service.AddMapAsync(map2);
40+
41+
Assert.Single(service.Maps);
42+
Assert.Equal(map2, service.GetMap("map-id")); // Should replace first map
43+
Assert.Equal(map2, service.Map);
44+
}
45+
46+
[Fact]
47+
public async Task Should_RemoveMap_Async()
48+
{
49+
var map1 = new Map("map1");
50+
var map2 = new Map("map2");
51+
var service = new MapService(null);
52+
53+
await service.AddMapAsync(map1);
54+
await service.AddMapAsync(map2);
55+
await service.RemoveMapAsync("map1");
56+
57+
Assert.Single(service.Maps);
58+
Assert.Null(service.GetMap("map1"));
59+
Assert.Equal(map2, service.GetMap("map2"));
60+
}
61+
62+
[Fact]
63+
public async Task Should_RemoveLatestMap_AndUpdateLatestMapPointer_Async()
64+
{
65+
var map1 = new Map("map1");
66+
var map2 = new Map("map2");
67+
var service = new MapService(null);
68+
69+
await service.AddMapAsync(map1);
70+
await service.AddMapAsync(map2);
71+
72+
Assert.Equal(map2, service.Map); // map2 is latest
73+
74+
await service.RemoveMapAsync("map2");
75+
76+
Assert.Single(service.Maps);
77+
Assert.Null(service.GetMap("map2"));
78+
// After removing latest, service.Map should fall back to remaining map
79+
Assert.Equal(map1, service.Map);
80+
}
81+
82+
[Fact]
83+
public async Task Should_RemoveNonExistentMap_WithoutError_Async()
84+
{
85+
var map1 = new Map("map1");
86+
var service = new MapService(null);
87+
88+
await service.AddMapAsync(map1);
89+
await service.RemoveMapAsync("non-existent-id");
90+
91+
Assert.Single(service.Maps);
92+
Assert.Equal(map1, service.GetMap("map1"));
93+
}
94+
95+
[Fact]
96+
public async Task Should_HandleRemoveAllMaps_Async()
97+
{
98+
var map1 = new Map("map1");
99+
var map2 = new Map("map2");
100+
var service = new MapService(null);
101+
102+
await service.AddMapAsync(map1);
103+
await service.AddMapAsync(map2);
104+
await service.RemoveMapAsync("map1");
105+
await service.RemoveMapAsync("map2");
106+
107+
Assert.Empty(service.Maps);
108+
Assert.Null(service.Map);
109+
}
110+
111+
[Fact]
112+
public async Task Should_AddMapAfterRemoval_Async()
113+
{
114+
var map1 = new Map("map1");
115+
var map2 = new Map("map2");
116+
var map3 = new Map("map1"); // Same ID as removed map
117+
var service = new MapService(null);
118+
119+
await service.AddMapAsync(map1);
120+
await service.AddMapAsync(map2);
121+
await service.RemoveMapAsync("map1");
122+
await service.AddMapAsync(map3);
123+
124+
Assert.Equal(2, service.Maps.Count);
125+
Assert.Equal(map3, service.GetMap("map1"));
126+
Assert.Equal(map2, service.GetMap("map2"));
127+
Assert.Equal(map3, service.Map); // Latest added
128+
}
129+
130+
[Fact]
131+
public async Task Should_HandleConcurrentAdditions_Async()
132+
{
133+
var service = new MapService(null);
134+
var maps = Enumerable.Range(1, 10).Select(i => new Map($"map{i}")).ToList();
135+
136+
var tasks = maps.Select(map => service.AddMapAsync(map));
137+
await Task.WhenAll(tasks.Select(t => t.AsTask()));
138+
139+
Assert.Equal(10, service.Maps.Count);
140+
foreach (var map in maps)
141+
{
142+
Assert.Equal(map, service.GetMap(map.Id));
143+
}
144+
}
145+
146+
[Fact]
147+
public async Task Should_TriggerOnMapReadyForEachMap_Async()
148+
{
149+
var map1 = new Map("map1");
150+
var map2 = new Map("map2");
151+
var service = new MapService(null);
152+
153+
var readyMaps = new System.Collections.Generic.List<string>();
154+
155+
service.OnMapReadyAsync += async (map) => {
156+
readyMaps.Add(map.Id);
157+
await ValueTask.CompletedTask;
158+
};
159+
160+
await service.AddMapAsync(map1);
161+
await service.AddMapAsync(map2);
162+
163+
Assert.Equal(2, readyMaps.Count);
164+
Assert.Contains("map1", readyMaps);
165+
Assert.Contains("map2", readyMaps);
166+
}
167+
168+
[Fact]
169+
public void Should_ReturnNull_WhenNoMapsExist()
170+
{
171+
var service = new MapService(null);
172+
173+
Assert.Null(service.Map);
174+
Assert.Empty(service.Maps);
175+
}
176+
177+
[Fact]
178+
public async Task Should_ReturnNull_ForNonExistentMapId()
179+
{
180+
var service = new MapService(null);
181+
await service.AddMapAsync(new Map("map1"));
182+
183+
var result = service.GetMap("non-existent-id");
184+
185+
Assert.Null(result);
186+
}
187+
188+
[Fact]
189+
public async Task Should_HandleRapidAddRemoveSequence_Async()
190+
{
191+
var service = new MapService(null);
192+
193+
for (int i = 0; i < 5; i++)
194+
{
195+
var map = new Map($"map{i}");
196+
await service.AddMapAsync(map);
197+
await service.RemoveMapAsync($"map{i}");
198+
}
199+
200+
Assert.Empty(service.Maps);
201+
Assert.Null(service.Map);
202+
}
203+
}
204+
}

0 commit comments

Comments
 (0)