public void TestTask2FiredEvents() { var cities = new Cities(); cities.ReadCities(CitiesTestFile); var links = new Links(cities); // test available cities links.RouteRequested += (sender, e) => { Assert.AreEqual("Bern", e.FromCity.Name); Assert.AreEqual("Zürich", e.ToCity.Name); }; links.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); // test case insensitivity links.FindShortestRouteBetween("BeRN", "ZüRiCh", TransportMode.Rail); // test not existing cities links = new Links(cities); links.RouteRequested += (sender, e) => { Assert.Fail("Listeners should only be informed about valid requests."); }; try { links.FindShortestRouteBetween("doesNotExist", "either", TransportMode.Rail); Assert.Fail("Should throw KeyNotFoundException when called with invalid city names."); } catch (KeyNotFoundException) { } }
public void TestTask4FindRoutes() { var cities = new Cities(); cities.ReadCities(CitiesTestFile); var expectedLinks = new List <Link>(); expectedLinks.Add(new Link(new City("Zürich", "Switzerland", 7000, 1, 2), new City("Aarau", "Switzerland", 7000, 1, 2), 0)); expectedLinks.Add(new Link(new City("Aarau", "Switzerland", 7000, 1, 2), new City("Liestal", "Switzerland", 7000, 1, 2), 0)); expectedLinks.Add(new Link(new City("Liestal", "Switzerland", 7000, 1, 2), new City("Basel", "Switzerland", 7000, 1, 2), 0)); var links = new Links(cities); //eingelesene Städte nun in Links sichtbar. /* lab04 - 1.c): Ignorieren Sie beim Einlesen in Links.ReadRoutes Verbindungen * zwischen unbekannten Städten. * Bsp: Schaffhausen nicht in citiesTestDataLab4, aber in linksTestDataLab4. */ links.ReadLinks(LinksTestFile); Assert.AreEqual(28, cities.Count); // test available cities var route = links.FindShortestRouteBetween("Zürich", "Basel", TransportMode.Rail); Assert.IsNotNull(route); Assert.AreEqual(route.Count, expectedLinks.Count); for (var i = 0; i < route.Count; i++) { Assert.IsTrue( (expectedLinks[i].FromCity.Name == route[i].FromCity.Name && expectedLinks[i].ToCity.Name == route[i].ToCity.Name) || (expectedLinks[i].FromCity.Name == route[i].ToCity.Name && expectedLinks[i].ToCity.Name == route[i].FromCity.Name)); } // test some other route route = links.FindShortestRouteBetween("Zürich", "Milano", TransportMode.Rail); Assert.AreEqual(5, route.Count); // test when no routes can be found route = links.FindShortestRouteBetween("Zürich", "Le Havre", TransportMode.Rail); Assert.IsNull(route); try { route = links.FindShortestRouteBetween("doesNotExist", "either", TransportMode.Rail); Assert.Fail("Should throw a KeyNotFoundException"); } catch (KeyNotFoundException) { } }
public void TestTask2EventWithNoObserver() { var cities = new Cities(); cities.ReadCities(CitiesTestFile); var links = new Links(cities); // should run without exception links.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); }
public void TestRequestWatcher() { var reqWatch = new RouteRequestWatcher(); var cities = new Cities(); cities.ReadCities(CitiesTestFile); var links = new Links(cities); // capture console output in memory stream to verify correct console output MemoryStream ms = new MemoryStream(); using (StreamWriter sw = new StreamWriter(ms)) { TextWriter tmp = Console.Out; Console.SetOut(sw); /* classOfEvent.Eventname += subcriberobj.Eventhandler (resonds to the event) */ links.RouteRequested += reqWatch.LogRouteRequests; // FIRES EVENT 'RouteRequested' links.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); links.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); links.FindShortestRouteBetween("Basel", "Bern", TransportMode.Rail); // make sure content is written to output sw.Flush(); Assert.AreEqual(reqWatch.GetCityRequests(cities["Zürich"]), 2); Assert.AreEqual(reqWatch.GetCityRequests(cities["Bern"]), 1); Assert.AreEqual(reqWatch.GetCityRequests(cities["Basel"]), 0); Assert.AreEqual(reqWatch.GetCityRequests(cities["Lausanne"]), 0); // now check VerifyConsoleOut(ms); } // IMPORTANT: close stream after test, so that memorystream is kept open for the test }
public void TestFindLinksToCitiesEnRouteDoesNotCreateNewLinks() { // find the same route twice var route1 = links.FindShortestRouteBetween("Zürich", "Basel", TransportMode.Rail); var route2 = links.FindShortestRouteBetween("Zürich", "Basel", TransportMode.Rail); // same link amount has to be returned Assert.AreEqual(route1.Count, route2.Count); // same links have to be returned, its not allowed to create own links while converting for (var i = 0; i < route1.Count; i++) { Assert.IsTrue(ReferenceEquals(route1[i], route2[i]), "Same link object-instances have to in same order in route1 and route2"); } }
public void TestGetBiggestCityOnDay() { // make some request links4.RouteRequested += LogRouteRequests; testDate = new DateTime(2019, 1, 31); links4.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); links4.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); links4.FindShortestRouteBetween("Basel", "Bern", TransportMode.Rail); Assert.AreEqual(2, GetThreeBiggestCityOnDay(testDate).Count()); Assert.AreEqual("Zürich", (GetThreeBiggestCityOnDay(testDate).First().Name)); testDate = new DateTime(2019, 4, 28); links4.FindShortestRouteBetween("Bern", "Lyon", TransportMode.Rail); links4.FindShortestRouteBetween("Bern", "Zürich", TransportMode.Rail); links4.FindShortestRouteBetween("Basel", "Bern", TransportMode.Rail); links4.FindShortestRouteBetween("Bern", "Milano", TransportMode.Rail); var result = GetThreeBiggestCityOnDay(testDate).ToList(); Assert.AreEqual(3, result.Count()); Assert.AreEqual("Milano", (result[0].Name)); Assert.AreEqual("Lyon", (result[1].Name)); Assert.AreEqual("Zürich", (result[2].Name)); testDate = new DateTime(2015, 1, 31); Assert.AreEqual(0, GetThreeBiggestCityOnDay(testDate).Count()); }