Пример #1
0
        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)
            {
            }
        }
Пример #2
0
        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)
            {
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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
        }
Пример #5
0
        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");
            }
        }
Пример #6
0
        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());
        }