コード例 #1
0
        public void ReflectionTest()
        {
            // we are using reflection to access a private method so we can test that reflection
            // is successfully pulling in the meta data
            //Class target = new Class();
            //GhostLineAPIServer server = new GhostLineAPIServer();
            //PrivateObject obj = new PrivateObject(target);

            // assembly won't get loaded unless something causes the CLR to load it
            ElkDogManager manager = new ElkDogManager();

            GhostLineAPIServer apiServer = new GhostLineAPIServer
            {
                ParentObj = manager,        // required if using properties
                Address   = "127.0.0.1",
                Port      = 19001
            };

            apiServer.Authenticator = delegate(HttpListenerRequest req)
            {
                if (String.IsNullOrEmpty(req.Headers["Authorization"]))
                {
                    return(false);
                }

                if (req.Headers["Authorization"].Equals("27bc5f2c-bed5-41c7-8a5d-aec966212146"))
                {
                    return(true);
                }
                return(false);
            };

            // Can't access PrivateObject from .NET Core ?? Boo !!
            // http://anthonygiretti.com/2018/08/26/how-to-unit-test-private-methods-in-net-core-applications-even-if-its-bad/

            Type       type   = typeof(GhostLineAPIServer);
            MethodInfo method = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
                                .Where(x => x.Name == "ReflectServableItems" && x.IsPrivate)
                                .First();

            //Act
            List <ServableItem> servableItems = (List <ServableItem>)method.Invoke(apiServer, null);

            Assert.IsTrue(servableItems.Count(si => si.PropertyName.Equals("TrainedElkDogs")) > 0);
            Assert.IsTrue(servableItems.Count(si => si.PropertyName.Equals("UntrainedElkDogs")) > 0);

            //var retVal = obj.Invoke("PrivateMethod");
        }
コード例 #2
0
        public void Manage()
        {
            Console.WriteLine("Staging Elk Dogs ....");
            var namesList = new List <String> {
                "Travis", "Nermal", "Benji", "Shiloh", "Rod", "Hickhack", "Sojo", "Riffy", "HodgePodge", "Milo", "Shannon", "Spinzin", "Furtile", "Miningine", "Sniffy", "Doorbell", "Ralco", "Jeb", "Nono", "Oscar", "Dingo", "Halepale", "Ralphie", "Pinkpod", "Flip"
            };

            Random rnd = new Random();

            UntrainedElkDogs = new List <ElkDog>();
            foreach (var index in Enumerable.Range(0, 3))
            {
                ElkDog elkDog = new ElkDog
                {
                    Name        = namesList.ElementAt(rnd.Next(0, namesList.Count)),
                    MarketValue = 300,
                    CanFly      = false,
                    Role        = ElkDog.ElkDogRole.None
                };
                UntrainedElkDogs.Add(elkDog);
            }

            TrainedElkDogs = new List <ElkDog>();
            foreach (var index in Enumerable.Range(0, 2))
            {
                ElkDog elkDog = new ElkDog
                {
                    Name        = namesList.ElementAt(rnd.Next(0, namesList.Count)),
                    MarketValue = 300,
                    CanFly      = false,
                    Role        = ElkDog.ElkDogRole.None
                };
                ElkDog.ElkDogRole role = ElkDog.ElkDogRole.GroundDelivery;
                switch (rnd.Next(0, 3))
                {
                case 0:
                    role          = ElkDog.ElkDogRole.AirDelivery;
                    elkDog.CanFly = true;
                    break;

                case 1:
                    role = ElkDog.ElkDogRole.SeaDelivery;
                    break;

                case 2:
                    role = ElkDog.ElkDogRole.HumanTransportation;
                    break;

                default:
                case 3:
                    role = ElkDog.ElkDogRole.GroundDelivery;
                    break;
                }
                TrainedElkDogs.Add(elkDog);
            }

            // Display inventory
            foreach (var elkDog in UntrainedElkDogs.Union(TrainedElkDogs))
            {
                Console.WriteLine($"Elkdog: {elkDog.Name}\t Id: {elkDog.Id}\t Role: {elkDog.Role.ToString()}");
            }

            // Kick the tires and light the fires
            GhostLineAPIServer apiServer = new GhostLineAPIServer
            {
                ParentObj = (object)this,
                Address   = "127.0.0.1",
                Port      = 19001
            };

            apiServer.Authenticator = delegate(HttpListenerRequest req)
            {
                if (String.IsNullOrEmpty(req.Headers["Authorization"]))
                {
                    return(false);
                }

                if (req.Headers["Authorization"].Equals("27bc5f2c-bed5-41c7-8a5d-aec966212146"))
                {
                    return(true);
                }
                return(false);
            };
            apiServer.After = delegate()
            {
                Console.WriteLine("Current: " + UntrainedElkDogs[0].Name + " can fly? " + UntrainedElkDogs[0].CanFly);
            };

            apiServer.SetupAndStartServer();

            Console.ReadLine();
        }