public void OnDataReceivedTest() { var processWrapper = new Mock <IProcessManager>(); var fakeProcess = new FakeProcessManager(processWrapper.Object); var writeDataList = new List <string>(); processWrapper.Setup(s => s.WriteData(It.IsAny <string>(), It.IsAny <object[]>())) .Callback <string, object[]>((s, a) => writeDataList.Add(s)); var injector = new Mock <ISimpleInjectorWrapper>(); var fileService = new Mock <IFileService>(); fileService.Setup(s => s.FileExists("bot.exe")).Returns(() => true); fileService.Setup(s => s.PathCombine(It.IsAny <string>(), "bot.exe")).Returns(() => "bot.exe"); injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object); var processFactory = new Mock <IProcessManagerFactory>(); processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())).Returns(() => fakeProcess); injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object); var confServ = new Mock <IConfigurationService>(); injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confServ.Object); var bot = new GnuGoBot(injector.Object, "bot.exe", "BotName"); Assert.NotNull(fakeProcess.DataReceived); bot.StartGame(false); bot.PlaceMove(Move.Parse("A1")); fakeProcess.DataReceived("resign"); Assert.Equal(2, writeDataList.Count); Assert.Equal("black A1", writeDataList.ElementAt(0)); Assert.Equal("genmove white", writeDataList.ElementAt(1)); }
public void PlaceMoveTest() { var writeDataList = new List <string>(); bool disposed = false; var injector = new Mock <ISimpleInjectorWrapper>(); var fileService = new Mock <IFileService>(); fileService.Setup(s => s.PathCombine(It.IsAny <string>(), "bot.exe")).Returns(() => "bot.exe"); fileService.Setup(s => s.FileExists("bot.exe")).Returns(() => true); injector.Setup(s => s.GetInstance <IFileService>()).Returns(() => fileService.Object); var processWrapper = new Mock <IProcessManager>(); processWrapper.Setup(s => s.WriteData(It.IsAny <string>(), It.IsAny <object[]>())) .Callback <string, object[]>((s, a) => writeDataList.Add(s)); processWrapper.Setup(s => s.Dispose()).Callback(() => disposed = true); var processFactory = new Mock <IProcessManagerFactory>(); processFactory.Setup(s => s.Create(It.IsAny <string>(), It.IsAny <string>())) .Returns(() => processWrapper.Object); injector.Setup(s => s.GetInstance <IProcessManagerFactory>()).Returns(() => processFactory.Object); var confServ = new Mock <IConfigurationService>(); injector.Setup(s => s.GetInstance <IConfigurationService>()).Returns(() => confServ.Object); var bot = new GnuGoBot(injector.Object, "bot.exe", "BotName"); try { bot.PlaceMove(null); Assert.True(false, "Should fail on previous statement"); } catch (Exception ex) { Assert.IsType(typeof(ArgumentNullException), ex); Assert.Equal("Value cannot be null.\r\nParameter name: move", ex.Message); } bot.Dispose(); Assert.Equal("quit", writeDataList.FirstOrDefault()); Assert.Equal(true, disposed); try { bot.PlaceMove(Move.SpecialMove(MoveType.Resign)); Assert.True(false, "Should fail on previous statement"); } catch (Exception ex) { Assert.IsType(typeof(ObjectDisposedException), ex); Assert.Equal("Cannot access a disposed object.\r\nObject name: 'proccess'.", ex.Message); } bot = new GnuGoBot(injector.Object, "bot.exe", "BotName"); try { bot.PlaceMove(Move.SpecialMove(MoveType.Resign)); Assert.True(false, "Should fail on previous statement"); } catch (Exception ex) { Assert.IsType(typeof(NotSupportedException), ex); Assert.Equal("Invoke StartGame before placing the move", ex.Message); } bot.StartGame(false); bot.PlaceMove(Move.SpecialMove(MoveType.Resign)); Assert.Equal("black Resign", writeDataList.ElementAt(1)); Assert.Equal("genmove white", writeDataList.ElementAt(2)); }