コード例 #1
0
        public void It_Should_ExitTheApplication_When_UserInputIsQ()
        {
            //Arrange
            var trackGenerator = new TrackGenerator(
                2,
                new List <SessionAllocator>
            {
                new SessionAllocator(
                    ConfigurationLoader.LoadSessionConfiguration("morningSession.json")),
                new SessionAllocator(
                    ConfigurationLoader.LoadSessionConfiguration("afternoonSession.json"))
            },
                new TalkDurationValidator());

            var pathValidator = new PathValidator();

            var talkValidator = new TalkValidator();

            var consoleDisplay = new ConsoleDisplayStub();

            var consoleCollector = new Mock <IInputCollector>();

            consoleCollector.SetupSequence(x => x.Collect())
            .Returns("q");

            var conferenceTrackManager = new ConferenceTrackManager(consoleDisplay, consoleCollector.Object, new TextFileInputProvider(pathValidator), new TextFileInputProcessor(talkValidator), trackGenerator);

            //Act
            conferenceTrackManager.ManageTracks();

            //Assert
            var expectedMessages = new List <string>
            {
                Constants.Welcome,
                Constants.FilePathPrompt
            };

            for (var i = 0; i < consoleDisplay.Messages.Count; i++)
            {
                Assert.Equal(expectedMessages[i], consoleDisplay.Messages[i]);
            }
            //Assert.True(consoleDisplay.Messages.SequenceEqual(expectedMessages));
        }
コード例 #2
0
        public void It_Should_DisplayErrorsAndTracks_WhenGivenInValidFilesThenAValidOne()
        {
            //Arrange
            var trackGenerator = new TrackGenerator(
                2,
                new List <SessionAllocator>
            {
                new SessionAllocator(
                    ConfigurationLoader.LoadSessionConfiguration("morningSession.json")),
                new SessionAllocator(
                    ConfigurationLoader.LoadSessionConfiguration("afternoonSession.json"))
            },
                new TalkDurationValidator());

            var pathValidator = new PathValidator();

            var talkValidator = new TalkValidator();

            var consoleDisplay = new ConsoleDisplayStub();

            var consoleCollector = new Mock <IInputCollector>();

            consoleCollector.SetupSequence(x => x.Collect())
            .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "In", "OriginalTestInput.txt"))
            .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "InvalidTestInput.txt"))
            .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "InvalidTalkDuration.txt"))
            .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "OriginalTestInput.txt"))
            .Returns("1");

            var conferenceTrackManager = new ConferenceTrackManager(consoleDisplay, consoleCollector.Object, new TextFileInputProvider(pathValidator), new TextFileInputProcessor(talkValidator), trackGenerator);

            //Act
            conferenceTrackManager.ManageTracks();

            //Assert
            var expectedMessages = new List <string>
            {
                Constants.Welcome,
                Constants.FilePathPrompt,
                $"Not a valid path or file: {Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "In", "OriginalTestInput.txt")}. \nOnly .txt files are valid",
                Constants.FilePathPrompt,
                "Not a valid talk: A World Without HackerNews. \nMust contain duration in minutes or be a lightning talk.",
                Constants.FilePathPrompt,
                "Invalid talk duration: 445min.\nThe duration of talks must be shorter then the session duration",
                Constants.FilePathPrompt,
                Constants.DisplayTypePrompt,
                "Track 1",
                "09:00 AM  Writing Fast Tests Against Enterprise Rails 60min",
                "10:00 AM  Communicating Over Distance 60min",
                "11:00 AM  Rails Magic 60min",
                "12:00 PM  Lunch",
                "01:00 PM  Ruby Errors from Mismatched Gem Versions 45min",
                "01:45 PM  Common Ruby Errors 45min",
                "02:30 PM  Accounting-Driven Development 45min",
                "03:15 PM  Pair Programming vs Noise 45min",
                "04:00 PM  Clojure Ate Scala (on my project) 45min",
                "05:00 PM  Networking Event",
                "Track 2",
                "09:00 AM  Ruby on Rails: Why We Should Move On 60min",
                "10:00 AM  Ruby on Rails Legacy App Maintenance 60min",
                "11:00 AM  Overdoing it in Python 45min",
                "11:45 AM  Rails for Python Developers lightning",
                "12:00 PM  Lunch",
                "01:00 PM  Lua for the Masses 30min",
                "01:30 PM  Woah 30min",
                "02:00 PM  Sit Down and Write 30min",
                "02:30 PM  Programming in the Boondocks of Seattle 30min",
                "03:00 PM  Ruby vs. Clojure for Back-End Development 30min",
                "03:30 PM  A World Without HackerNews 30min",
                "04:00 PM  User Interface CSS in Rails Apps 30min",
                "05:00 PM  Networking Event"
            };

            for (var i = 0; i < consoleDisplay.Messages.Count; i++)
            {
                Assert.Equal(expectedMessages[i], consoleDisplay.Messages[i]);
            }
            //Assert.True(consoleDisplay.Messages.SequenceEqual(expectedMessages));
        }
コード例 #3
0
        public void It_Should_SimulateDemoGame_When_Given_ValidInput()
        {
            var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json"));

            var staticCodeGenerate = new  CodeGenerator(new List <Peg> {
                Peg.Blue, Peg.Green, Peg.Orange, Peg.Red
            });

            var feedbackRandomizer = new NonRandomizer();

            var codeChecker = new CodeChecker(staticCodeGenerate, feedbackRandomizer);

            var game = new Game(config, codeChecker);

            var inputHappy = new List <string>
            {
                "blue, blue, green, green",
                "Red, blue, red, RED",
                "Blue, yellow, Green, red",
                "Blue, Green, PURPLE, Red",
                "blue, green, orange, red"
            };

            var consoleDisplayStub = new ConsoleDisplayStub();

            var gameEngine = new GameEngine(consoleDisplayStub, new ConsoleDemoInputCollector(inputHappy, consoleDisplayStub), new ConsoleInputProcessor(config), game);


            //Act
            gameEngine.PlayGame();

            //Assert
            var expectedMessages = new List <string>
            {
                ClientConstants.Welcome,
                ClientConstants.Border,
                ClientConstants.SecretCode,
                "Blue, Green, Orange, Red",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                inputHappy[0],
                ClientConstants.Feedback,
                "Black, White",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 7 + ClientConstants.PromptGuess,
                inputHappy[1],
                ClientConstants.Feedback,
                "Black, White",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 6 + ClientConstants.PromptGuess,
                inputHappy[2],
                ClientConstants.Feedback,
                "Black, Black, White",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 5 + ClientConstants.PromptGuess,
                inputHappy[3],
                ClientConstants.Feedback,
                "Black, Black, Black",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 4 + ClientConstants.PromptGuess,
                inputHappy[4],
                ClientConstants.Feedback,
                "Black, Black, Black, Black",
                ClientConstants.Border,
                ClientConstants.Winner
            };

            Assert.Equal(expectedMessages, consoleDisplayStub.Messages);
        }
コード例 #4
0
        public void It_Should_SimulateGamePlay_When_Given_InvalidInput()
        {
            var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json"));

            var staticCodeGenerator = new CodeGenerator(new List <Peg>
            {
                Peg.Blue,
                Peg.Green,
                Peg.Yellow,
                Peg.Green
            });
            var feedbackRandomizer = new NonRandomizer();

            var codeChecker = new CodeChecker(staticCodeGenerator, feedbackRandomizer);

            var game = new Game(config, codeChecker);

            var consoleDisplayStub = new ConsoleDisplayStub();

            var mockCollector = new Mock <ICollector>();

            mockCollector.SetupSequence(x => x.Collect())
            .Returns("Blue, green, reD, rainbow")
            .Returns("Blue, red, red, red, red")
            .Returns("Blue, blue")
            .Returns("")
            .Returns("hello")
            .Returns("blue, green, pink, red")
            .Returns("grey")
            .Returns("BLUE, green, YeLLoW, Green");

            var gameEngine = new GameEngine(
                consoleDisplayStub,
                mockCollector.Object,
                new ConsoleInputProcessor(config),
                game);

            //Act
            gameEngine.PlayGame();

            //Assert
            var expectedMessages = new List <string>
            {
                ClientConstants.Welcome,
                ClientConstants.Border,
                ClientConstants.SecretCode,
                "Blue, Green, Yellow, Green",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                "Error: rainbow is an invalid colour!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                $"Error: you must pass in {config[DataConstants.CodeLength]} colours!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                $"Error: you must pass in {config[DataConstants.CodeLength]} colours!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                $"Error: you must pass in {config[DataConstants.CodeLength]} colours!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                "Error: hello is an invalid colour!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                "Error: pink is an invalid colour!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                "Error: grey is an invalid colour!",
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                ClientConstants.Feedback,
                "Black, Black, Black, Black",
                ClientConstants.Border,
                ClientConstants.Winner
            };

            Assert.Equal(expectedMessages, consoleDisplayStub.Messages);
        }
コード例 #5
0
        public void It_Should_SimulateGamePlay_When_Given_ValidInput()
        {
            var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json"));

            var staticCodeGenerator = new CodeGenerator(new List <Peg>
            {
                Peg.Blue,
                Peg.Green,
                Peg.Yellow,
                Peg.Green
            });
            var feedbackRandomizer = new NonRandomizer();

            var codeChecker = new CodeChecker(staticCodeGenerator, feedbackRandomizer);

            var game = new Game(config, codeChecker);

            var consoleDisplayStub = new ConsoleDisplayStub();

            var mockCollector = new Mock <ICollector>();

            mockCollector.SetupSequence(x => x.Collect())
            .Returns("blue, red, green, red")
            .Returns("green, yellow, green, blue")
            .Returns("Red, RED, red. Red")
            .Returns("Blue, Green, Yellow, Green");

            var gameEngine = new GameEngine(
                consoleDisplayStub,
                mockCollector.Object,
                new ConsoleInputProcessor(config),
                game);

            //Act
            gameEngine.PlayGame();

            //Assert
            var expectedMessages = new List <string>
            {
                ClientConstants.Welcome,
                ClientConstants.Border,
                ClientConstants.SecretCode,
                "Blue, Green, Yellow, Green",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess,
                ClientConstants.Feedback,
                "Black, White",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 7 + ClientConstants.PromptGuess,
                ClientConstants.Feedback,
                "White, White, White, White",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 6 + ClientConstants.PromptGuess,
                ClientConstants.Feedback,
                "",
                ClientConstants.Border,
                ClientConstants.GuessesLeft + 5 + ClientConstants.PromptGuess,
                ClientConstants.Feedback,
                "Black, Black, Black, Black",
                ClientConstants.Border,
                ClientConstants.Winner
            };

            Assert.Equal(expectedMessages, consoleDisplayStub.Messages);
        }