public void SetAlias() { const string aliasName = "custom alias"; var path = Combine(Files.GetExecutingPath(), "Resources", "TestRes.resx"); var rs = new ResXResourceSet(path, null); rs.SetObject("enum", TestEnum.X); var asmName = typeof(TestEnum).Assembly.FullName; rs.SetAliasValue(aliasName, asmName); // save with preset alias StringBuilder sb = new StringBuilder(); rs.Save(new StringWriter(sb)); var rsReloaded = new ResXResourceSet(new StringReader(sb.ToString()), Path.GetDirectoryName(path)); Assert.AreEqual(asmName, rsReloaded.GetAliasValue(aliasName)); // remove alias: auto generate, alias is friendly name again rsReloaded.RemoveAliasValue(aliasName); sb = new StringBuilder(); rsReloaded.Save(new StringWriter(sb)); rsReloaded = new ResXResourceSet(new StringReader(sb.ToString()), Path.GetDirectoryName(path)); Assert.IsNull(rsReloaded.GetAliasValue(aliasName)); Assert.AreEqual(asmName, rsReloaded.GetAliasValue(typeof(TestEnum).Assembly.GetName().Name)); }
public void Save(TextWriter textWriter, bool compatibleFormat = false, bool forceEmbeddedResources = false, string newBasePath = null) { ResXResourceSet resx = resxResourceSet; if (resx == null) { Throw.ObjectDisposedException(); } resx.Save(textWriter, compatibleFormat, forceEmbeddedResources, newBasePath); }
public void NonSerializableObject() { var rs = new ResXResourceSet(); rs.SetObject("x", new NonSerializableClass { Prop = 1 }); var sb = new StringBuilder(); rs.Save(new StringWriter(sb), true); var rsCheck = new ResXResourceSet(new StringReader(sb.ToString())); Assert.AreEqual(rs.GetObject("x"), rsCheck.GetObject("x")); sb = new StringBuilder(); rs.Save(new StringWriter(sb), false); rsCheck = new ResXResourceSet(new StringReader(sb.ToString())); Assert.AreEqual(rs.GetObject("x"), rsCheck.GetObject("x")); }
public void SetRemoveObject() { var path = Combine(Files.GetExecutingPath(), "Resources", "TestResourceResX.resx"); var rs = new ResXResourceSet(path, null); // replace Assert.IsTrue(rs.GetObject("TestString") is string); rs.SetObject("TestString", 1); Assert.AreEqual(1, rs.GetObject("TestString")); // add new Assert.IsNull(rs.GetObject("NotExist")); rs.SetObject("NotExist", 2); Assert.IsNotNull(rs.GetObject("NotExist")); // delete rs.RemoveObject("TestString"); Assert.IsNull(rs.GetObject("TestString")); Assert.IsFalse(rs.GetEnumerator().GetKeysEnumerator().Any(e => e == "TestString")); // nullifying rs.SetObject("NotExist", null); Assert.IsNull(rs.GetObject("TestString")); Assert.IsTrue(rs.GetEnumerator().GetKeysEnumerator().Any(e => e == "NotExist")); // save and reload StringBuilder sb = new StringBuilder(); #if NETCOREAPP2_0 || NETCOREAPP3_0 RemoveUnsupportedItems(rs); #endif rs.Save(new StringWriter(sb)); var rsReloaded = new ResXResourceSet(new StringReader(sb.ToString()), Path.GetDirectoryName(path)); AssertItemsEqual(rs, rsReloaded); }
public void Save() { var path = Path.GetTempPath(); var rs = new ResXResourceSet(basePath: path) { SafeMode = true }; var newFile = Path.GetTempFileName(); rs.SetObject("fileref", new ResXFileRef(newFile, typeof(string))); var filerefRef = ((ResXDataNode)rs.GetObject("fileref")).FileRef; Assert.IsTrue(Path.IsPathRooted(filerefRef.FileName)); var sb = new StringBuilder(); rs.Save(new StringWriter(sb)); // path does not change in original resource set after saving Assert.IsTrue(Path.IsPathRooted(filerefRef.FileName)); // if BasePath was specified, the path turns relative on saving var rsReloaded = new ResXResourceSet(new StringReader(sb.ToString()), path) { SafeMode = true }; var filerefCheck = ((ResXDataNode)rsReloaded.GetObject("fileref")).FileRef; Assert.IsFalse(Path.IsPathRooted(filerefCheck.FileName)); // fileref paths are adjusted if BasePath is changed, even the original relative paths sb = new StringBuilder(); string newPath = Path.Combine(path, "subdir"); rsReloaded.Save(new StringWriter(sb), newBasePath: newPath); rsReloaded = new ResXResourceSet(new StringReader(sb.ToString())) { SafeMode = true }; var filerefCheck2 = ((ResXDataNode)rsReloaded.GetObject("fileref")).FileRef; Assert.AreNotEqual(filerefCheck.FileName, filerefCheck2.FileName); // on forced embedding the fileRefs are gone sb = new StringBuilder(); rs.Save(new StringWriter(sb), forceEmbeddedResources: true); rsReloaded = new ResXResourceSet(new StringReader(sb.ToString())) { SafeMode = true }; Assert.IsNull(((ResXDataNode)rsReloaded.GetObject("fileref")).FileRef); // creating without basePath... rs = new ResXResourceSet { SafeMode = true }; rs.SetObject("filerefFull", new ResXFileRef(newFile, typeof(string))); rs.SetObject("filerefRelative", new ResXFileRef(Path.GetFileName(newFile), typeof(string))); // neither original, nor new basePath: all paths remain as it is sb = new StringBuilder(); rs.Save(new StringWriter(sb)); rsReloaded = new ResXResourceSet(new StringReader(sb.ToString())) { SafeMode = true }; Assert.AreEqual(((ResXDataNode)rs.GetObject("filerefFull")).FileRef.FileName, ((ResXDataNode)rsReloaded.GetObject("filerefFull")).FileRef.FileName); Assert.AreEqual(((ResXDataNode)rs.GetObject("filerefRelative")).FileRef.FileName, ((ResXDataNode)rsReloaded.GetObject("filerefRelative")).FileRef.FileName); // no original basePath just a new one: the relative paths are not changed, full paths become relative sb = new StringBuilder(); rs.Save(new StringWriter(sb), newBasePath: path); rsReloaded = new ResXResourceSet(new StringReader(sb.ToString())) { SafeMode = true }; Assert.AreNotEqual(((ResXDataNode)rs.GetObject("filerefFull")).FileRef.FileName, ((ResXDataNode)rsReloaded.GetObject("filerefFull")).FileRef.FileName); Assert.IsFalse(Path.IsPathRooted(((ResXDataNode)rsReloaded.GetObject("filerefFull")).FileRef.FileName)); Assert.AreEqual(((ResXDataNode)rs.GetObject("filerefRelative")).FileRef.FileName, ((ResXDataNode)rsReloaded.GetObject("filerefRelative")).FileRef.FileName); File.Delete(newFile); }