public void CanSelectExistingAndNewGenres(params string[] genres) { var dummyGames = GetListOfDummyGames(); var selectedGames = dummyGames.Take(4).ToArray(); _launchboxDataManagerMock.GetAllGames() .Returns(dummyGames); // Creating a temporary thread to run the form. // Implementation based on: https://ourcodeworld.com/articles/read/890/how-to-solve-csharp-exception-current-thread-must-be-set-to-single-thread-apartment-sta-mode-before-ole-calls-can-be-made-ensure-that-your-main-function-has-stathreadattribute-marked-on-it Thread t = new Thread((ThreadStart)(() => { var sutForm = new FormGenreEditor(_launchboxDataManagerMock, selectedGames); foreach (var genre in genres) { sutForm.SelectGenres(genre); } sutForm.AddSelectedGenres(); })); // Run your code from a thread that joins the STA Thread t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); // Check that all our selected games now have all the genres we've selected foreach (var game in selectedGames) { var gameGenres = game.GenresString.Split(';'); Assert.Equal(genres.Length, gameGenres.Intersect(genres).Count()); } // Now check that these genres were not also applied to the other games. var otherGames = dummyGames.Except(selectedGames); foreach (var game in otherGames) { var gameGenres = game.GenresString.Split(';'); Assert.NotEqual(genres.Length, gameGenres.Intersect(genres).Count()); } }
public void CanRemoveGenres(params string[] genres) { var dummyGames = GetListOfDummyGames(); var selectedGames = dummyGames.Take(2).ToArray(); _launchboxDataManagerMock.GetAllGames() .Returns(dummyGames); // Creating a temporary thread to run the form. Thread t = new Thread((ThreadStart)(() => { var sutForm = new FormGenreEditor(_launchboxDataManagerMock, selectedGames); foreach (var genre in genres) { sutForm.SelectGenres(genre); } sutForm.RemoveSelectedGenres(); })); // Run your code from a thread that joins the STA Thread t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); // Check that none of our selected games have the genres that we've removed foreach (var game in selectedGames) { var gameGenres = game.GenresString.Split(';'); Assert.Empty(gameGenres.Intersect(genres)); } // Now check that these genres were not also applied to the other 2 games for which we have known values. var otherGames = dummyGames.Except(selectedGames); foreach (var game in selectedGames.Skip(2).Take(2)) { var gameGenres = game.GenresString.Split(';'); Assert.NotEmpty(gameGenres.Intersect(genres)); } }