diff options
author | Marius Ungureanu <marius.ungureanu@xamarin.com> | 2020-02-27 20:39:50 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-27 20:39:50 +0300 |
commit | d1eb43e66b470fa6afc8823a26dbdef815f4fd2a (patch) | |
tree | 860a55f767d0206c499b21af566efb11263d34fb | |
parent | d830c2cc53cba9c2b315f57d9696e1b81d22fed8 (diff) | |
parent | bfd44078ecbb7dbf7a88bf3c48cce1023c1f9dfa (diff) |
Merge pull request #153 from mono/loc-scanner-fixes
Fix serialization of addin localizer
-rw-r--r-- | Mono.Addins/Mono.Addins.Database/AddinScanner.cs | 4 | ||||
-rw-r--r-- | Mono.Addins/Mono.Addins.Description/ExtensionNodeDescription.cs | 48 | ||||
-rw-r--r-- | Test/UnitTests/TestAddinDescription.cs | 12 |
3 files changed, 37 insertions, 27 deletions
diff --git a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs index 6defcbb..dcc5f9e 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs @@ -660,7 +660,7 @@ namespace Mono.Addins.Database AddinLocalizerGettextAttribute locat = (AddinLocalizerGettextAttribute) reflector.GetCustomAttribute (asm, typeof(AddinLocalizerGettextAttribute), false); if (locat != null) { - ExtensionNodeDescription node = new ExtensionNodeDescription (); + ExtensionNodeDescription node = new ExtensionNodeDescription ("Localizer"); node.SetAttribute ("type", "Gettext"); if (!string.IsNullOrEmpty (locat.Catalog)) node.SetAttribute ("catalog", locat.Catalog); @@ -671,7 +671,7 @@ namespace Mono.Addins.Database var customLocat = (AddinLocalizerAttribute) reflector.GetCustomAttribute (asm, typeof(AddinLocalizerAttribute), false); if (customLocat != null) { - var node = new ExtensionNodeDescription (); + var node = new ExtensionNodeDescription ("Localizer"); node.SetAttribute ("type", customLocat.TypeName); config.Localizer = node; } diff --git a/Mono.Addins/Mono.Addins.Description/ExtensionNodeDescription.cs b/Mono.Addins/Mono.Addins.Description/ExtensionNodeDescription.cs index 7274c58..3435635 100644 --- a/Mono.Addins/Mono.Addins.Description/ExtensionNodeDescription.cs +++ b/Mono.Addins/Mono.Addins.Description/ExtensionNodeDescription.cs @@ -196,15 +196,14 @@ namespace Mono.Addins.Description internal override void SaveXml (XmlElement parent) { - if (Element == null) { - Element = parent.OwnerDocument.CreateElement (nodeName); - parent.AppendChild (Element); - if (attributes != null) { - for (int n=0; n<attributes.Length; n+=2) - Element.SetAttribute (attributes[n], attributes[n+1]); - } - ChildNodes.SaveXml (Element); + CreateElement (parent, nodeName); + + if (attributes != null) { + for (int n = 0; n < attributes.Length; n += 2) + Element.SetAttribute (attributes [n], attributes [n + 1]); } + + ChildNodes.SaveXml (Element); } /// <summary> @@ -304,15 +303,14 @@ namespace Mono.Addins.Description /// </value> public NodeAttribute[] Attributes { get { - if (Element != null) - SaveXmlAttributes (); - if (attributes == null) + string [] result = SaveXmlAttributes (); + if (result == null || result.Length == 0) return new NodeAttribute [0]; - NodeAttribute[] ats = new NodeAttribute [attributes.Length / 2]; + NodeAttribute[] ats = new NodeAttribute [result.Length / 2]; for (int n=0; n<ats.Length; n++) { NodeAttribute at = new NodeAttribute (); - at.name = attributes [n*2]; - at.value = attributes [n*2 + 1]; + at.name = result [n*2]; + at.value = result [n*2 + 1]; ats [n] = at; } return ats; @@ -344,23 +342,25 @@ namespace Mono.Addins.Description get { return ChildNodes; } } - void SaveXmlAttributes () + string[] SaveXmlAttributes () { - attributes = new string [Element.Attributes.Count * 2]; - for (int n=0; n<attributes.Length; n+=2) { - XmlAttribute at = Element.Attributes [n/2]; - attributes [n] = at.LocalName; - attributes [n+1] = at.Value; + if (Element != null) { + var result = new string [Element.Attributes.Count * 2]; + for (int n = 0; n < result.Length; n += 2) { + XmlAttribute at = Element.Attributes [n / 2]; + result [n] = at.LocalName; + result [n + 1] = at.Value; + } + return result; } + + return attributes; } internal override void Write (BinaryXmlWriter writer) { - if (Element != null) - SaveXmlAttributes (); - writer.WriteValue ("nodeName", nodeName); - writer.WriteValue ("attributes", attributes); + writer.WriteValue ("attributes", SaveXmlAttributes ()); writer.WriteValue ("ChildNodes", ChildNodes); } diff --git a/Test/UnitTests/TestAddinDescription.cs b/Test/UnitTests/TestAddinDescription.cs index 4da2fa9..02a0bc4 100644 --- a/Test/UnitTests/TestAddinDescription.cs +++ b/Test/UnitTests/TestAddinDescription.cs @@ -124,7 +124,17 @@ namespace UnitTests System.Threading.Thread.CurrentThread.CurrentCulture = oldc; } - + + [TestCase ("SimpleApp.SystemInfoExtension", "StringResource", "")] + public void LocalizerProperties (string addinId, string expectedType, string expectedAssembly) + { + Addin ad = AddinManager.Registry.GetAddin (addinId); + ExtensionNodeDescription localizer = ad.Description.Localizer; + + Assert.AreEqual (expectedType, localizer.GetAttribute ("type")); + Assert.AreEqual (expectedAssembly, localizer.GetAttribute ("assembly")); + } + AddinDescription DescFromResource (string res) { using (Stream s = GetType().Assembly.GetManifestResourceStream (res)) { |