/Src/xWorks/xWorksTests/DictionaryConfigurationUtilsTests.cs

https://github.com/sillsdev/FieldWorks · C# · 95 lines · 81 code · 6 blank · 8 comment · 1 complexity · c5a144e64891d8652153ab132b80a6e0 MD5 · raw file

  1. // Copyright (c) 2016 SIL International
  2. // This software is licensed under the LGPL, version 2.1 or later
  3. // (http://www.gnu.org/licenses/lgpl-2.1.html)
  4. using System.IO;
  5. using System.Linq;
  6. using System.Xml;
  7. using NUnit.Framework;
  8. using SIL.IO;
  9. using SIL.FieldWorks.Common.FwUtils;
  10. using SIL.LCModel;
  11. namespace SIL.FieldWorks.XWorks
  12. {
  13. [TestFixture]
  14. class DictionaryConfigurationUtilsTests : MemoryOnlyBackendProviderRestoredForEachTestTestBase
  15. {
  16. [TestFixtureSetUp]
  17. public new void FixtureSetup()
  18. {
  19. var testProjPath = Path.Combine(Path.GetTempPath(), "DictionaryConfigurationUtilsTestsProj");
  20. if(Directory.Exists(testProjPath))
  21. Directory.Delete(testProjPath, true);
  22. Directory.CreateDirectory(testProjPath);
  23. Cache.ProjectId.Path = testProjPath;
  24. }
  25. [Test]
  26. public void GatherBuiltInAndUserConfigurations_ReturnsShippedConfigurations()
  27. {
  28. var configObjectName = "Dictionary";
  29. // SUT
  30. var fileListFromResults = DictionaryConfigurationUtils.GatherBuiltInAndUserConfigurations(Cache, configObjectName).Values;
  31. var shippedFileList = Directory.EnumerateFiles(Path.Combine(FwDirectoryFinder.DefaultConfigurations, "Dictionary"),
  32. "*" + DictionaryConfigurationModel.FileExtension);
  33. CollectionAssert.AreEquivalent(fileListFromResults, shippedFileList);
  34. }
  35. [Test]
  36. public void GatherBuiltInAndUserConfigurations_ReturnsProjectAndShippedConfigs()
  37. {
  38. var configObjectName = "Dictionary";
  39. var projectDictionaryConfigs =
  40. Path.Combine(LcmFileHelper.GetConfigSettingsDir(Cache.ProjectId.ProjectFolder),
  41. "Dictionary");
  42. Directory.CreateDirectory(projectDictionaryConfigs);
  43. using (var tempConfigFile = TempFile.WithFilename(Path.Combine(projectDictionaryConfigs, "NotAShippingConfig" + DictionaryConfigurationModel.FileExtension)))
  44. {
  45. File.WriteAllText(tempConfigFile.Path,
  46. "<?xml version='1.0' encoding='utf-8'?><DictionaryConfiguration name='New User Config'/>");
  47. // SUT
  48. var fileListFromResults = DictionaryConfigurationUtils.GatherBuiltInAndUserConfigurations(Cache, configObjectName).Values;
  49. var shippedFileList = Directory.EnumerateFiles(Path.Combine(FwDirectoryFinder.DefaultConfigurations, "Dictionary"),
  50. "*" + DictionaryConfigurationModel.FileExtension);
  51. // all the shipped configs are in the return list
  52. CollectionAssert.IsSubsetOf(shippedFileList, fileListFromResults);
  53. // new user configuration is present in results
  54. CollectionAssert.Contains(fileListFromResults, tempConfigFile.Path);
  55. }
  56. }
  57. [Test]
  58. public void GatherBuiltInAndUserConfigurations_ProjectOverrideReplacesShipped()
  59. {
  60. var configObjectName = "Dictionary";
  61. var projectDictionaryConfigs =
  62. Path.Combine(LcmFileHelper.GetConfigSettingsDir(Cache.ProjectId.ProjectFolder),
  63. "Dictionary");
  64. Directory.CreateDirectory(projectDictionaryConfigs);
  65. using (var tempConfigFile = TempFile.WithFilename(Path.Combine(projectDictionaryConfigs, "Override" + DictionaryConfigurationModel.FileExtension)))
  66. {
  67. string firstShippedConfigName;
  68. var shippedFileList = Directory.EnumerateFiles(Path.Combine(FwDirectoryFinder.DefaultConfigurations, "Dictionary"),
  69. "*" + DictionaryConfigurationModel.FileExtension);
  70. var fileList = shippedFileList.ToArray();
  71. using (var stream = new FileStream(fileList.First(), FileMode.Open))
  72. {
  73. var doc = new XmlDocument();
  74. doc.Load(stream);
  75. var node = doc.SelectSingleNode("DictionaryConfiguration");
  76. firstShippedConfigName = node.Attributes["name"].Value;
  77. }
  78. File.WriteAllText(tempConfigFile.Path,
  79. "<?xml version='1.0' encoding='utf-8'?><DictionaryConfiguration name='" +
  80. firstShippedConfigName + "'/>");
  81. // SUT
  82. var fileListFromResults = DictionaryConfigurationUtils.GatherBuiltInAndUserConfigurations(Cache, configObjectName).Values;
  83. CollectionAssert.Contains(fileListFromResults, tempConfigFile.Path);
  84. Assert.AreEqual(fileListFromResults.Count, fileList.Count(),
  85. "Override was added instead of replacing a shipped config.");
  86. }
  87. }
  88. }
  89. }