PageRenderTime 50ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/UnitTests/GitCommands.Tests/Settings/AppSettingsTests.cs

https://github.com/gitextensions/gitextensions
C# | 430 lines | 382 code | 41 blank | 7 comment | 13 complexity | a77f3614176d61493e5e24efdb198867 MD5 | raw file
Possible License(s): GPL-3.0
  1. using System;
  2. using System.CodeDom.Compiler;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Reflection;
  7. using FluentAssertions;
  8. using GitCommands;
  9. using GitCommands.Settings;
  10. using GitUIPluginInterfaces;
  11. using NUnit.Framework;
  12. namespace GitCommandsTests.Settings
  13. {
  14. [TestFixture]
  15. internal sealed class AppSettingsTests
  16. {
  17. private const string SettingsFileContent = @"<?xml version=""1.0"" encoding=""utf-8""?><dictionary />";
  18. [TestCase(null, "https://git-extensions-documentation.readthedocs.org/en/main/")]
  19. [TestCase("", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  20. [TestCase("\t", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  21. [TestCase("master", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  22. [TestCase("feature/test/mystuff", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  23. [TestCase("releases", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  24. [TestCase("releases/4.5", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  25. [TestCase("release", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  26. [TestCase("release/a", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  27. [TestCase("release/5", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  28. [TestCase("release/a4.5", "https://git-extensions-documentation.readthedocs.org/en/main/")]
  29. [TestCase("release/4.5", "https://git-extensions-documentation.readthedocs.org/en/release-4.5/")]
  30. [TestCase("release/40.501", "https://git-extensions-documentation.readthedocs.org/en/release-40.501/")]
  31. public void SetDocumentationBaseUrl_should_currectly_append_verison(string currentGitBranch, string expected)
  32. {
  33. AppSettings.GetTestAccessor().ResetDocumentationBaseUrl();
  34. AppSettings.SetDocumentationBaseUrl(currentGitBranch);
  35. AppSettings.DocumentationBaseUrl.Should().Be(expected);
  36. }
  37. [Test]
  38. [TestCaseSource(nameof(TestCases))]
  39. public void Should_return_default_value(PropertyInfo property, object value, object defaultValue, bool isSetting)
  40. {
  41. // Arrange
  42. object root = null;
  43. if (isSetting)
  44. {
  45. root = property.GetValue(null);
  46. property = property.PropertyType
  47. .GetProperty(nameof(ISetting<string>.Value));
  48. }
  49. using TempFileCollection tempFiles = new();
  50. string filePath = tempFiles.AddExtension(".settings");
  51. tempFiles.AddFile(filePath + ".backup", keepFile: false);
  52. File.WriteAllText(filePath, SettingsFileContent);
  53. using GitExtSettingsCache cache = GitExtSettingsCache.Create(filePath);
  54. RepoDistSettings container = new(null, cache, SettingLevel.Unknown);
  55. object storedValue = null;
  56. // Act
  57. AppSettings.UsingContainer(container, () =>
  58. {
  59. storedValue = property.GetValue(root);
  60. });
  61. // Assert
  62. Assert.That(storedValue, Is.EqualTo(defaultValue));
  63. }
  64. [Test]
  65. [TestCaseSource(nameof(TestCases))]
  66. public void Should_save_value(PropertyInfo property, object value, object defaultValue, bool isSetting)
  67. {
  68. // Arrange
  69. object root = null;
  70. if (isSetting)
  71. {
  72. root = property.GetValue(null);
  73. property = property.PropertyType
  74. .GetProperty(nameof(ISetting<string>.Value));
  75. }
  76. using TempFileCollection tempFiles = new();
  77. string filePath = tempFiles.AddExtension(".settings");
  78. tempFiles.AddFile(filePath + ".backup", keepFile: false);
  79. File.WriteAllText(filePath, SettingsFileContent);
  80. using GitExtSettingsCache cache = GitExtSettingsCache.Create(filePath);
  81. RepoDistSettings container = new(null, cache, SettingLevel.Unknown);
  82. object storedValue = null;
  83. // Act
  84. AppSettings.UsingContainer(container, () =>
  85. {
  86. property.SetValue(root, value);
  87. storedValue = property.GetValue(root);
  88. });
  89. // Assert
  90. if (Type.GetTypeCode(property.PropertyType) == TypeCode.String)
  91. {
  92. if (isSetting)
  93. {
  94. Assert.That(storedValue, Is.EqualTo(value ?? string.Empty));
  95. }
  96. else
  97. {
  98. Assert.That(storedValue, Is.EqualTo(value ?? defaultValue));
  99. }
  100. }
  101. else if (Type.GetTypeCode(property.PropertyType) == TypeCode.DateTime)
  102. {
  103. // We keep only the date
  104. Assert.That(storedValue, Is.EqualTo(((DateTime)value).Date));
  105. }
  106. else
  107. {
  108. Assert.That(storedValue, Is.EqualTo(value));
  109. }
  110. }
  111. #region Test Cases
  112. private static IEnumerable<object[]> TestCases()
  113. {
  114. foreach (var value in Values())
  115. {
  116. foreach ((PropertyInfo property, object defaultValue, bool isNullable, bool isSetting) in PropertyInfos())
  117. {
  118. if (value is null && isNullable)
  119. {
  120. yield return new object[] { property, value, defaultValue, isSetting };
  121. }
  122. if (value is not null)
  123. {
  124. var valueType = Nullable.GetUnderlyingType(value.GetType()) ?? value.GetType();
  125. var propertyType = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
  126. if (valueType == propertyType)
  127. {
  128. yield return new object[] { property, value, defaultValue, isSetting };
  129. }
  130. }
  131. }
  132. }
  133. static IEnumerable<(PropertyInfo property, object defaultValue, bool isNullable, bool isSetting)> PropertyInfos()
  134. {
  135. var properties = typeof(AppSettings).GetProperties()
  136. .ToDictionary(x => x.Name, x => x);
  137. yield return (properties[nameof(AppSettings.TelemetryEnabled)], null, true, false);
  138. yield return (properties[nameof(AppSettings.AutoNormaliseBranchName)], true, false, false);
  139. yield return (properties[nameof(AppSettings.RememberAmendCommitState)], true, false, false);
  140. yield return (properties[nameof(AppSettings.StashKeepIndex)], false, false, false);
  141. yield return (properties[nameof(AppSettings.DontConfirmStashDrop)], false, false, false);
  142. yield return (properties[nameof(AppSettings.ApplyPatchIgnoreWhitespace)], false, false, false);
  143. yield return (properties[nameof(AppSettings.ApplyPatchSignOff)], true, false, false);
  144. yield return (properties[nameof(AppSettings.UseHistogramDiffAlgorithm)], false, false, false);
  145. yield return (properties[nameof(AppSettings.ShowErrorsWhenStagingFiles)], true, false, false);
  146. yield return (properties[nameof(AppSettings.EnsureCommitMessageSecondLineEmpty)], true, false, false);
  147. yield return (properties[nameof(AppSettings.LastCommitMessage)], string.Empty, true, false);
  148. yield return (properties[nameof(AppSettings.CommitDialogNumberOfPreviousMessages)], 6, false, false);
  149. yield return (properties[nameof(AppSettings.CommitDialogShowOnlyMyMessages)], false, false, false);
  150. yield return (properties[nameof(AppSettings.ShowCommitAndPush)], true, false, false);
  151. yield return (properties[nameof(AppSettings.ShowResetWorkTreeChanges)], true, false, false);
  152. yield return (properties[nameof(AppSettings.ShowResetAllChanges)], true, false, false);
  153. yield return (properties[nameof(AppSettings.ShowConEmuTab)], true, false, true);
  154. yield return (properties[nameof(AppSettings.ConEmuStyle)], "<Solarized Light>", true, true);
  155. yield return (properties[nameof(AppSettings.ConEmuTerminal)], "bash", true, true);
  156. yield return (properties[nameof(AppSettings.ShowGpgInformation)], true, false, true);
  157. yield return (properties[nameof(AppSettings.ShowSplitViewLayout)], true, false, false);
  158. yield return (properties[nameof(AppSettings.ProvideAutocompletion)], true, false, false);
  159. yield return (properties[nameof(AppSettings.TruncatePathMethod)], TruncatePathMethod.None, false, false);
  160. yield return (properties[nameof(AppSettings.ShowGitStatusInBrowseToolbar)], true, false, false);
  161. yield return (properties[nameof(AppSettings.ShowGitStatusForArtificialCommits)], true, false, false);
  162. yield return (properties[nameof(AppSettings.SortByAuthorDate)], false, false, false);
  163. yield return (properties[nameof(AppSettings.CommitInfoShowContainedInBranchesLocal)], true, false, false);
  164. yield return (properties[nameof(AppSettings.CheckForUncommittedChangesInCheckoutBranch)], true, false, false);
  165. yield return (properties[nameof(AppSettings.AlwaysShowCheckoutBranchDlg)], false, false, false);
  166. yield return (properties[nameof(AppSettings.CommitAndPushForcedWhenAmend)], false, false, false);
  167. yield return (properties[nameof(AppSettings.CommitInfoShowContainedInBranchesRemote)], false, false, false);
  168. yield return (properties[nameof(AppSettings.CommitInfoShowContainedInBranchesRemoteIfNoLocal)], false, false, false);
  169. yield return (properties[nameof(AppSettings.CommitInfoShowContainedInTags)], true, false, false);
  170. yield return (properties[nameof(AppSettings.CommitInfoShowTagThisCommitDerivesFrom)], true, false, false);
  171. yield return (properties[nameof(AppSettings.AvatarImageCacheDays)], 5, false, false);
  172. yield return (properties[nameof(AppSettings.ShowAuthorAvatarInCommitInfo)], true, false, false);
  173. yield return (properties[nameof(AppSettings.AvatarProvider)], AvatarProvider.Default, false, false);
  174. yield return (properties[nameof(AppSettings.Translation)], string.Empty, true, false);
  175. yield return (properties[nameof(AppSettings.UserProfileHomeDir)], false, false, false);
  176. yield return (properties[nameof(AppSettings.CustomHomeDir)], string.Empty, true, false);
  177. yield return (properties[nameof(AppSettings.EnableAutoScale)], true, false, false);
  178. yield return (properties[nameof(AppSettings.CloseCommitDialogAfterCommit)], true, false, false);
  179. yield return (properties[nameof(AppSettings.CloseCommitDialogAfterLastCommit)], true, false, false);
  180. yield return (properties[nameof(AppSettings.RefreshArtificialCommitOnApplicationActivated)], false, false, false);
  181. yield return (properties[nameof(AppSettings.StageInSuperprojectAfterCommit)], true, false, false);
  182. yield return (properties[nameof(AppSettings.FollowRenamesInFileHistory)], true, false, false);
  183. yield return (properties[nameof(AppSettings.FollowRenamesInFileHistoryExactOnly)], false, false, false);
  184. yield return (properties[nameof(AppSettings.FullHistoryInFileHistory)], false, false, false);
  185. yield return (properties[nameof(AppSettings.SimplifyMergesInFileHistory)], true, false, false);
  186. yield return (properties[nameof(AppSettings.LoadFileHistoryOnShow)], true, false, false);
  187. yield return (properties[nameof(AppSettings.LoadBlameOnShow)], true, false, false);
  188. yield return (properties[nameof(AppSettings.DetectCopyInFileOnBlame)], true, false, false);
  189. yield return (properties[nameof(AppSettings.DetectCopyInAllOnBlame)], false, false, false);
  190. yield return (properties[nameof(AppSettings.IgnoreWhitespaceOnBlame)], true, false, false);
  191. yield return (properties[nameof(AppSettings.OpenSubmoduleDiffInSeparateWindow)], false, false, false);
  192. yield return (properties[nameof(AppSettings.RevisionGraphShowArtificialCommits)], true, false, false);
  193. yield return (properties[nameof(AppSettings.RevisionGraphDrawAlternateBackColor)], true, false, false);
  194. yield return (properties[nameof(AppSettings.RevisionGraphDrawNonRelativesGray)], true, false, false);
  195. yield return (properties[nameof(AppSettings.RevisionGraphDrawNonRelativesTextGray)], false, false, false);
  196. yield return (properties[nameof(AppSettings.DefaultPullAction)], AppSettings.PullAction.Merge, false, false);
  197. yield return (properties[nameof(AppSettings.FormPullAction)], AppSettings.PullAction.Merge, false, false);
  198. yield return (properties[nameof(AppSettings.SmtpServer)], "smtp.gmail.com", true, false);
  199. yield return (properties[nameof(AppSettings.SmtpPort)], 465, false, false);
  200. yield return (properties[nameof(AppSettings.SmtpUseSsl)], true, false, false);
  201. yield return (properties[nameof(AppSettings.AutoStash)], false, false, false);
  202. yield return (properties[nameof(AppSettings.RebaseAutoStash)], false, false, false);
  203. yield return (properties[nameof(AppSettings.CheckoutBranchAction)], LocalChangesAction.DontChange, false, false);
  204. yield return (properties[nameof(AppSettings.UseDefaultCheckoutBranchAction)], false, false, false);
  205. yield return (properties[nameof(AppSettings.DontShowHelpImages)], false, false, false);
  206. yield return (properties[nameof(AppSettings.AlwaysShowAdvOpt)], false, false, false);
  207. yield return (properties[nameof(AppSettings.DontConfirmAmend)], false, false, false);
  208. yield return (properties[nameof(AppSettings.DontConfirmCommitIfNoBranch)], false, false, false);
  209. yield return (properties[nameof(AppSettings.AutoPopStashAfterPull)], null, true, false);
  210. yield return (properties[nameof(AppSettings.AutoPopStashAfterCheckoutBranch)], null, true, false);
  211. yield return (properties[nameof(AppSettings.AutoPullOnPushRejectedAction)], null, true, false);
  212. yield return (properties[nameof(AppSettings.DontConfirmPushNewBranch)], false, false, false);
  213. yield return (properties[nameof(AppSettings.DontConfirmAddTrackingRef)], false, false, false);
  214. yield return (properties[nameof(AppSettings.DontConfirmCommitAfterConflictsResolved)], false, false, false);
  215. yield return (properties[nameof(AppSettings.DontConfirmSecondAbortConfirmation)], false, false, false);
  216. yield return (properties[nameof(AppSettings.DontConfirmRebase)], false, false, false);
  217. yield return (properties[nameof(AppSettings.DontConfirmResolveConflicts)], false, false, false);
  218. yield return (properties[nameof(AppSettings.DontConfirmUndoLastCommit)], false, false, false);
  219. yield return (properties[nameof(AppSettings.DontConfirmFetchAndPruneAll)], false, false, false);
  220. yield return (properties[nameof(AppSettings.DontConfirmSwitchWorktree)], false, false, false);
  221. yield return (properties[nameof(AppSettings.IncludeUntrackedFilesInAutoStash)], false, false, false);
  222. yield return (properties[nameof(AppSettings.IncludeUntrackedFilesInManualStash)], false, false, false);
  223. yield return (properties[nameof(AppSettings.ShowRemoteBranches)], true, false, false);
  224. yield return (properties[nameof(AppSettings.ShowReflogReferences)], false, false, false);
  225. yield return (properties[nameof(AppSettings.ShowSuperprojectTags)], false, false, false);
  226. yield return (properties[nameof(AppSettings.ShowSuperprojectBranches)], true, false, false);
  227. yield return (properties[nameof(AppSettings.ShowSuperprojectRemoteBranches)], false, false, false);
  228. yield return (properties[nameof(AppSettings.UpdateSubmodulesOnCheckout)], null, true, false);
  229. yield return (properties[nameof(AppSettings.DontConfirmUpdateSubmodulesOnCheckout)], null, true, false);
  230. yield return (properties[nameof(AppSettings.ShowGitCommandLine)], false, false, false);
  231. yield return (properties[nameof(AppSettings.ShowStashCount)], false, false, false);
  232. yield return (properties[nameof(AppSettings.ShowAheadBehindData)], true, false, false);
  233. yield return (properties[nameof(AppSettings.ShowSubmoduleStatus)], false, false, false);
  234. yield return (properties[nameof(AppSettings.RelativeDate)], true, false, false);
  235. yield return (properties[nameof(AppSettings.UseFastChecks)], false, false, false);
  236. yield return (properties[nameof(AppSettings.ShowGitNotes)], false, false, false);
  237. yield return (properties[nameof(AppSettings.ShowAnnotatedTagsMessages)], true, false, false);
  238. yield return (properties[nameof(AppSettings.ShowMergeCommits)], true, false, false);
  239. yield return (properties[nameof(AppSettings.ShowTags)], true, false, false);
  240. yield return (properties[nameof(AppSettings.ShowRevisionGridGraphColumn)], true, false, false);
  241. yield return (properties[nameof(AppSettings.ShowAuthorAvatarColumn)], true, false, false);
  242. yield return (properties[nameof(AppSettings.ShowAuthorNameColumn)], true, false, false);
  243. yield return (properties[nameof(AppSettings.ShowDateColumn)], true, false, false);
  244. yield return (properties[nameof(AppSettings.ShowObjectIdColumn)], true, false, false);
  245. yield return (properties[nameof(AppSettings.ShowBuildStatusIconColumn)], true, false, false);
  246. yield return (properties[nameof(AppSettings.ShowBuildStatusTextColumn)], false, false, false);
  247. yield return (properties[nameof(AppSettings.ShowAuthorDate)], true, false, false);
  248. yield return (properties[nameof(AppSettings.CloseProcessDialog)], false, false, false);
  249. yield return (properties[nameof(AppSettings.ShowCurrentBranchOnly)], false, false, false);
  250. yield return (properties[nameof(AppSettings.ShowSimplifyByDecoration)], false, false, false);
  251. yield return (properties[nameof(AppSettings.BranchFilterEnabled)], false, false, false);
  252. yield return (properties[nameof(AppSettings.ShowFirstParent)], false, false, false);
  253. yield return (properties[nameof(AppSettings.CommitDialogSelectionFilter)], false, false, false);
  254. yield return (properties[nameof(AppSettings.DefaultCloneDestinationPath)], string.Empty, true, false);
  255. yield return (properties[nameof(AppSettings.RevisionGridQuickSearchTimeout)], 4000, false, false);
  256. yield return (properties[nameof(AppSettings.MaxRevisionGraphCommits)], 100000, false, false);
  257. yield return (properties[nameof(AppSettings.ShowDiffForAllParents)], true, false, false);
  258. yield return (properties[nameof(AppSettings.DiffVerticalRulerPosition)], 0, false, false);
  259. yield return (properties[nameof(AppSettings.RecentWorkingDir)], null, true, false);
  260. yield return (properties[nameof(AppSettings.StartWithRecentWorkingDir)], false, false, false);
  261. yield return (properties[nameof(AppSettings.AutoStartPageant)], true, false, false);
  262. yield return (properties[nameof(AppSettings.MarkIllFormedLinesInCommitMsg)], true, false, false);
  263. yield return (properties[nameof(AppSettings.UseSystemVisualStyle)], true, false, false);
  264. yield return (properties[nameof(AppSettings.MulticolorBranches)], true, false, false);
  265. yield return (properties[nameof(AppSettings.HighlightAuthoredRevisions)], true, false, false);
  266. yield return (properties[nameof(AppSettings.LastFormatPatchDir)], string.Empty, true, false);
  267. yield return (properties[nameof(AppSettings.IgnoreWhitespaceKind)], IgnoreWhitespaceKind.None, false, false);
  268. yield return (properties[nameof(AppSettings.RememberIgnoreWhiteSpacePreference)], true, false, false);
  269. yield return (properties[nameof(AppSettings.RememberShowNonPrintingCharsPreference)], false, false, false);
  270. yield return (properties[nameof(AppSettings.RememberShowEntireFilePreference)], false, false, false);
  271. yield return (properties[nameof(AppSettings.RememberNumberOfContextLines)], false, false, false);
  272. yield return (properties[nameof(AppSettings.RememberShowSyntaxHighlightingInDiff)], true, false, false);
  273. yield return (properties[nameof(AppSettings.ShowRepoCurrentBranch)], true, false, false);
  274. yield return (properties[nameof(AppSettings.OwnScripts)], string.Empty, true, false);
  275. yield return (properties[nameof(AppSettings.RecursiveSubmodules)], 1, false, false);
  276. yield return (properties[nameof(AppSettings.ShorteningRecentRepoPathStrategy)], ShorteningRecentRepoPathStrategy.None, false, false);
  277. yield return (properties[nameof(AppSettings.MaxMostRecentRepositories)], 0, false, false);
  278. yield return (properties[nameof(AppSettings.RecentRepositoriesHistorySize)], 30, false, false);
  279. yield return (properties[nameof(AppSettings.RecentReposComboMinWidth)], 0, false, false);
  280. yield return (properties[nameof(AppSettings.SerializedHotkeys)], null, true, false);
  281. yield return (properties[nameof(AppSettings.SortMostRecentRepos)], false, false, false);
  282. yield return (properties[nameof(AppSettings.SortLessRecentRepos)], false, false, false);
  283. yield return (properties[nameof(AppSettings.DontCommitMerge)], false, false, false);
  284. yield return (properties[nameof(AppSettings.CommitValidationMaxCntCharsFirstLine)], 0, false, false);
  285. yield return (properties[nameof(AppSettings.CommitValidationMaxCntCharsPerLine)], 0, false, false);
  286. yield return (properties[nameof(AppSettings.CommitValidationSecondLineMustBeEmpty)], false, false, false);
  287. yield return (properties[nameof(AppSettings.CommitValidationIndentAfterFirstLine)], true, false, false);
  288. yield return (properties[nameof(AppSettings.CommitValidationAutoWrap)], true, false, false);
  289. yield return (properties[nameof(AppSettings.CommitValidationRegEx)], string.Empty, true, false);
  290. yield return (properties[nameof(AppSettings.CommitTemplates)], string.Empty, true, false);
  291. yield return (properties[nameof(AppSettings.CreateLocalBranchForRemote)], false, false, false);
  292. yield return (properties[nameof(AppSettings.UseFormCommitMessage)], true, false, false);
  293. yield return (properties[nameof(AppSettings.CommitAutomaticallyAfterCherryPick)], false, false, false);
  294. yield return (properties[nameof(AppSettings.AddCommitReferenceToCherryPick)], false, false, false);
  295. yield return (properties[nameof(AppSettings.LastUpdateCheck)], default(DateTime), false, false);
  296. yield return (properties[nameof(AppSettings.CheckForUpdates)], true, false, false);
  297. yield return (properties[nameof(AppSettings.CheckForReleaseCandidates)], false, false, false);
  298. yield return (properties[nameof(AppSettings.OmitUninterestingDiff)], false, false, false);
  299. yield return (properties[nameof(AppSettings.UseConsoleEmulatorForCommands)], true, false, false);
  300. yield return (properties[nameof(AppSettings.RefsSortBy)], GitRefsSortBy.Default, false, false);
  301. yield return (properties[nameof(AppSettings.RefsSortOrder)], GitRefsSortOrder.Descending, false, false);
  302. yield return (properties[nameof(AppSettings.DiffListSorting)], DiffListSortType.FilePath, false, false);
  303. yield return (properties[nameof(AppSettings.RepoObjectsTreeShowBranches)], true, false, false);
  304. yield return (properties[nameof(AppSettings.RepoObjectsTreeShowRemotes)], true, false, false);
  305. yield return (properties[nameof(AppSettings.RepoObjectsTreeShowTags)], false, false, false);
  306. yield return (properties[nameof(AppSettings.RepoObjectsTreeShowSubmodules)], true, false, false);
  307. yield return (properties[nameof(AppSettings.RepoObjectsTreeBranchesIndex)], 0, false, false);
  308. yield return (properties[nameof(AppSettings.RepoObjectsTreeRemotesIndex)], 1, false, false);
  309. yield return (properties[nameof(AppSettings.RepoObjectsTreeTagsIndex)], 2, false, false);
  310. yield return (properties[nameof(AppSettings.RepoObjectsTreeSubmodulesIndex)], 3, false, false);
  311. yield return (properties[nameof(AppSettings.BlameDisplayAuthorFirst)], false, false, false);
  312. yield return (properties[nameof(AppSettings.BlameShowAuthor)], true, false, false);
  313. yield return (properties[nameof(AppSettings.BlameShowAuthorDate)], true, false, false);
  314. yield return (properties[nameof(AppSettings.BlameShowAuthorTime)], true, false, false);
  315. yield return (properties[nameof(AppSettings.BlameShowLineNumbers)], false, false, false);
  316. yield return (properties[nameof(AppSettings.BlameShowOriginalFilePath)], true, false, false);
  317. yield return (properties[nameof(AppSettings.BlameShowAuthorAvatar)], true, false, false);
  318. yield return (properties[nameof(AppSettings.AutomaticContinuousScroll)], false, false, false);
  319. yield return (properties[nameof(AppSettings.AutomaticContinuousScrollDelay)], 600, false, false);
  320. }
  321. static IEnumerable<object> Values()
  322. {
  323. yield return null;
  324. yield return string.Empty;
  325. yield return " ";
  326. yield return "0";
  327. yield return false;
  328. yield return true;
  329. yield return char.MinValue;
  330. yield return char.MaxValue;
  331. yield return ' ';
  332. yield return '0';
  333. yield return byte.MinValue;
  334. yield return byte.MaxValue;
  335. yield return int.MinValue;
  336. yield return int.MaxValue;
  337. yield return 0;
  338. yield return 1;
  339. yield return -1;
  340. yield return float.MinValue;
  341. yield return float.MaxValue;
  342. yield return float.Epsilon;
  343. yield return float.PositiveInfinity;
  344. yield return float.NegativeInfinity;
  345. yield return float.NaN;
  346. yield return 0f;
  347. yield return 1f;
  348. yield return -1f;
  349. yield return double.MinValue;
  350. yield return double.MaxValue;
  351. yield return double.Epsilon;
  352. yield return double.PositiveInfinity;
  353. yield return double.NegativeInfinity;
  354. yield return double.NaN;
  355. yield return 0d;
  356. yield return 1d;
  357. yield return -1d;
  358. yield return decimal.MinValue;
  359. yield return decimal.MaxValue;
  360. yield return decimal.Zero;
  361. yield return decimal.One;
  362. yield return decimal.MinusOne;
  363. yield return DateTime.MinValue;
  364. yield return DateTime.MaxValue;
  365. yield return DateTime.Today;
  366. var enumTypes = new Type[]
  367. {
  368. typeof(TruncatePathMethod),
  369. typeof(AvatarProvider),
  370. typeof(AppSettings.PullAction),
  371. typeof(LocalChangesAction),
  372. typeof(IgnoreWhitespaceKind),
  373. typeof(ShorteningRecentRepoPathStrategy),
  374. typeof(GitRefsSortBy),
  375. typeof(GitRefsSortOrder),
  376. typeof(DiffListSortType)
  377. };
  378. foreach (var enumType in enumTypes)
  379. {
  380. foreach (var enumValue in Enum.GetValues(enumType))
  381. {
  382. yield return enumValue;
  383. }
  384. }
  385. }
  386. }
  387. #endregion Test Cases
  388. }
  389. }