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 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 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); }
public void GenerateNodeInfo() { // in safe mode NodeInfo will be generated from value on GetString var rs = new ResXResourceSet { SafeMode = true }; // native types (in non-compatible mode) rs.SetObject("string", "string"); rs.SetObject("DateTime", DateTime.Now); rs.SetObject("DateTimeOffset", DateTimeOffset.Now); rs.SetObject("double", -0d); rs.SetObject("float", -0f); rs.SetObject("decimal", -0.0m); rs.SetObject("char", 'a'); rs.SetObject("byte", (byte)1); rs.SetObject("sbyte", (sbyte)1); rs.SetObject("short", (short)1); rs.SetObject("ushort", (ushort)1); rs.SetObject("int", 1); rs.SetObject("uint", 1u); rs.SetObject("long", 1L); rs.SetObject("ulong", 1ul); rs.SetObject("bool", true); rs.SetObject("DBNull", DBNull.Value); rs.SetObject("Type", GetType()); rs.SetObject("IntPtr", IntPtr.Zero); rs.SetObject("UIntPtr", UIntPtr.Zero); // special handlings rs.SetObject("byte[]", new byte[] { 1, 2, 3 }); rs.SetObject("CultureInfo", CultureInfo.CurrentCulture); rs.SetObject("null", null); // by type converter rs.SetObject("TypeConverter/string", Point.Empty); #if !NETCOREAPP2_0 rs.SetObject("TypeConverter/byte[]", SystemIcons.Application.ToBitmap()); #endif // binary serialization rs.SetObject("serialized", new Collection <byte> { 1, 2, 3 }); // getting the elements as string in safe mode will create the NodeInfos in non-compatible mode foreach (DictionaryEntry item in rs) { Console.WriteLine("Key: {0}; Value: {1}", item.Key, rs.GetString(item.Key.ToString())); } }