PageRenderTime 42ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/IntegrationTests/UI.IntegrationTests/CommandsDialogs/FormBrowse.LeftPanelTests.Submodules.cs

https://github.com/gitextensions/gitextensions
C# | 146 lines | 109 code | 25 blank | 12 comment | 1 complexity | 556253bf5e34d6572098f09f5ce8b9fc MD5 | raw file
Possible License(s): GPL-3.0
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using System.Windows.Forms;
  6. using CommonTestUtils;
  7. using CommonTestUtils.MEF;
  8. using FluentAssertions;
  9. using GitCommands;
  10. using GitCommands.Submodules;
  11. using GitUI;
  12. using GitUI.CommandsDialogs;
  13. using GitUIPluginInterfaces;
  14. using Microsoft.VisualStudio.Composition;
  15. using NUnit.Framework;
  16. namespace GitExtensions.UITests.CommandsDialogs
  17. {
  18. [Apartment(ApartmentState.STA)]
  19. [NonParallelizable]
  20. public class FormBrowse_LeftPanel_SubmodulesTests
  21. {
  22. // Created once for each test
  23. private TestComposition _composition;
  24. private GitUICommands _commands;
  25. // Track the original setting value
  26. private bool _originalShowAuthorAvatarColumn;
  27. private bool _showAvailableDiffTools;
  28. private GitModuleTestHelper _repo1;
  29. private GitModuleTestHelper _repo2;
  30. private GitModuleTestHelper _repo3;
  31. // Note that _repo2Module and _repo3Module point to the submodules under _repo1Module,
  32. // not _repo2.Module and _repo3.Module respectively. In general, the tests should here
  33. // should interact with these modules, not with _repo2 and _repo3.
  34. private GitModule _repo1Module;
  35. private GitModule _repo2Module;
  36. private GitModule _repo3Module;
  37. private ISubmoduleStatusProvider _provider;
  38. [OneTimeSetUp]
  39. public void SetUpFixture()
  40. {
  41. // Remember the current settings...
  42. _originalShowAuthorAvatarColumn = AppSettings.ShowAuthorAvatarColumn;
  43. _showAvailableDiffTools = AppSettings.ShowAvailableDiffTools;
  44. // Stop loading custom diff tools
  45. AppSettings.ShowAvailableDiffTools = false;
  46. // We don't want avatars during tests, otherwise we will be attempting to download them from gravatar....
  47. AppSettings.ShowAuthorAvatarColumn = false;
  48. _composition = TestComposition.Empty
  49. .AddParts(typeof(MockWindowsJumpListManager))
  50. .AddParts(typeof(MockRepositoryDescriptionProvider))
  51. .AddParts(typeof(MockAppTitleGenerator));
  52. }
  53. [OneTimeTearDown]
  54. public void OneTimeTearDown()
  55. {
  56. AppSettings.ShowAuthorAvatarColumn = _originalShowAuthorAvatarColumn;
  57. AppSettings.ShowAvailableDiffTools = _showAvailableDiffTools;
  58. }
  59. [SetUp]
  60. public void SetUp()
  61. {
  62. _repo1 = new GitModuleTestHelper("repo1");
  63. _repo2 = new GitModuleTestHelper("repo2");
  64. _repo3 = new GitModuleTestHelper("repo3");
  65. _repo2.AddSubmodule(_repo3, "repo3");
  66. _repo1.AddSubmodule(_repo2, "repo2");
  67. var submodules = _repo1.GetSubmodulesRecursive();
  68. _repo1Module = _repo1.Module;
  69. _repo2Module = submodules.ElementAt(0);
  70. _repo3Module = submodules.ElementAt(1);
  71. // Use the singleton provider, which is also used by the left panel, so we can synchronize on updates
  72. _provider = SubmoduleStatusProvider.Default;
  73. _commands = new GitUICommands(_repo1Module);
  74. ExportProvider mefExportProvider = _composition.ExportProviderFactory.CreateExportProvider();
  75. ManagedExtensibility.SetTestExportProvider(mefExportProvider);
  76. }
  77. [TearDown]
  78. public void TearDown()
  79. {
  80. // _provider is a singleton and must not be disposed
  81. _repo1.Dispose();
  82. _repo2.Dispose();
  83. _repo3.Dispose();
  84. }
  85. [Test]
  86. public void RepoObjectTree_should_show_all_submodules()
  87. {
  88. RunFormTest(
  89. async form =>
  90. {
  91. // act
  92. await SubmoduleTestHelpers.UpdateSubmoduleStructureAndWaitForResultAsync(_provider, _repo1Module);
  93. // assert
  94. var submodulesNode = GetSubmoduleNode(form);
  95. submodulesNode.Nodes.Count.Should().Be(1);
  96. var repo1Node = submodulesNode.Nodes[0];
  97. repo1Node.Name.Should().StartWith("repo1");
  98. repo1Node.Nodes.Count.Should().Be(1);
  99. var repo2Node = repo1Node.Nodes[0];
  100. repo2Node.Name.Should().StartWith("repo2");
  101. repo2Node.Nodes.Count.Should().Be(1);
  102. var repo3Node = repo2Node.Nodes[0];
  103. repo3Node.Name.Should().StartWith("repo3");
  104. repo3Node.Nodes.Count.Should().Be(0);
  105. });
  106. }
  107. private TreeNode GetSubmoduleNode(FormBrowse form)
  108. {
  109. var treeView = form.GetTestAccessor().RepoObjectsTree.GetTestAccessor().TreeView;
  110. var remotesNode = treeView.Nodes.OfType<TreeNode>().FirstOrDefault(n => n.Text == TranslatedStrings.Submodules);
  111. remotesNode.Should().NotBeNull();
  112. return remotesNode;
  113. }
  114. private void RunFormTest(Func<FormBrowse, Task> testDriverAsync)
  115. {
  116. UITest.RunForm(
  117. showForm: () => _commands.StartBrowseDialog(owner: null).Should().BeTrue(),
  118. testDriverAsync);
  119. }
  120. }
  121. }