コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
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"));
        }
コード例 #4
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);
        }
コード例 #5
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);
        }