Пример #1
0
        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);
        }
Пример #2
0
        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"));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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()));
            }
        }