diff options
author | Mike Norman <mike.norman@xamarin.com> | 2017-07-14 19:41:23 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2017-07-17 18:18:06 +0300 |
commit | b347c0bd1b2fcd28aa89ca2cf54e2cafac4708b2 (patch) | |
tree | 6077153a67f3c59a3c548f3fca19768226f48db6 /tools | |
parent | d938cee866a7e94c02ce71fd3352e67f24b8da59 (diff) |
Fixed bug in comparereport command. Added unit tests.
Diffstat (limited to 'tools')
5 files changed, 146 insertions, 48 deletions
diff --git a/tools/DocStat/DocStat.Tests/EcmaXmlHelperTests.cs b/tools/DocStat/DocStat.Tests/EcmaXmlHelperTests.cs index 5e27cd53..9acb2c73 100644 --- a/tools/DocStat/DocStat.Tests/EcmaXmlHelperTests.cs +++ b/tools/DocStat/DocStat.Tests/EcmaXmlHelperTests.cs @@ -10,40 +10,61 @@ using DocStat; namespace DocStat.Tests { - [TestFixture] - public class EcmaXmlHelperTests - { - [Test] - public void NewElementsYieldsAddedElements() - { - XDocument xmlNew = XDocument.Load("TestData/currentxml/t1.xml"); - XDocument xmlOld = XDocument.Load("TestData/oldxml/t1.xml"); + [TestFixture] + public class EcmaXmlHelperTests + { + [Test] + public void NewElementsYieldsAddedElements() + { + XDocument xmlNew = XDocument.Load("TestData/currentxml/t1.xml"); + XDocument xmlOld = XDocument.Load("TestData/oldxml/t1.xml"); - IEnumerable<XElement> newMembers = EcmaXmlHelper.NewMembers(xmlNew, xmlOld); + IEnumerable<XElement> newMembers = EcmaXmlHelper.NewMembers(xmlNew, xmlOld); - XElement e1 = - xmlNew.Element("Type").Element("Members").Elements() - .FirstOrDefault((XElement arg) => arg.Attribute("MemberName").Value == "WeakDelegate"); + XElement e1 = + xmlNew.Element("Type").Element("Members").Elements() + .FirstOrDefault((XElement arg) => arg.Attribute("MemberName").Value == "WeakDelegate"); XElement e2 = xmlNew.Element("Type").Element("Members").Elements() .FirstOrDefault((XElement arg) => arg.Attribute("MemberName").Value == "WeakDataSource"); - Assert.AreEqual(2, newMembers.Count()); - Assert.True(newMembers.Contains(e1)); - Assert.True(newMembers.Contains(e2)); - } + Assert.AreEqual(2, newMembers.Count()); + Assert.True(newMembers.Contains(e1)); + Assert.True(newMembers.Contains(e2)); + } + + [Test] + public void MembersReturnsMembers() + { + XDocument xmlOld = XDocument.Load("TestData/oldxml/t1.xml"); + IEnumerable<XElement> members = EcmaXmlHelper.Members(xmlOld); + Assert.AreEqual(13, members.Count()); + + members = EcmaXmlHelper.Members(XDocument.Load("TestData/currentxml/t1.xml")); + + Assert.AreEqual(15, members.Count()); + } [Test] - public void MembersReturnsMembers() + public void MembersHandlesEmptyMembersList() { - XDocument xmlOld = XDocument.Load("TestData/oldxml/t1.xml"); - IEnumerable<XElement> members = EcmaXmlHelper.Members(xmlOld); - Assert.AreEqual(13, members.Count()); + XDocument x = XDocument.Load("TestData/currentxml/AVAssetImageGeneratorCompletionHandler.xml"); + - members = EcmaXmlHelper.Members(XDocument.Load("TestData/currentxml/t1.xml")); + IEnumerable<XElement> elements = EcmaXmlHelper.Members(x); + Assert.IsEmpty(elements); - Assert.AreEqual(15, members.Count()); } - } + + + [Test] + public void NewMembersHandlesEmptyMemberList() + { + XDocument o = XDocument.Load("TestData/oldxml/AVAssetImageGeneratorCompletionHandler.xml"); + XDocument n = XDocument.Load("TestData/currentxml/AVAssetImageGeneratorCompletionHandler.xml"); + + Assert.IsEmpty(EcmaXmlHelper.NewMembers(n, o)); + } + } } diff --git a/tools/DocStat/DocStat.Tests/TestData/currentxml/AVAssetImageGeneratorCompletionHandler.xml b/tools/DocStat/DocStat.Tests/TestData/currentxml/AVAssetImageGeneratorCompletionHandler.xml new file mode 100644 index 00000000..a743e8a2 --- /dev/null +++ b/tools/DocStat/DocStat.Tests/TestData/currentxml/AVAssetImageGeneratorCompletionHandler.xml @@ -0,0 +1,34 @@ +<Type Name="AVAssetImageGeneratorCompletionHandler" FullName="MonoTouch.AVFoundation.AVAssetImageGeneratorCompletionHandler"> + <TypeSignature Language="C#" Value="public delegate void AVAssetImageGeneratorCompletionHandler(CMTime requestedTime, IntPtr imageRef, CMTime actualTime, AVAssetImageGeneratorResult result, NSError error);" /> + <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed AVAssetImageGeneratorCompletionHandler extends System.MulticastDelegate" /> + <AssemblyInfo apistyle="classic"> + <AssemblyName>monotouch</AssemblyName> + <AssemblyVersion>0.0.0.0</AssemblyVersion> + </AssemblyInfo> + <AssemblyInfo apistyle="unified"> + <AssemblyName>Xamarin.iOS</AssemblyName> + <AssemblyVersion>0.0.0.0</AssemblyVersion> + </AssemblyInfo> + <Base> + <BaseTypeName>System.Delegate</BaseTypeName> + </Base> + <Parameters> + <Parameter Name="requestedTime" Type="MonoTouch.CoreMedia.CMTime" /> + <Parameter Name="imageRef" Type="System.IntPtr" /> + <Parameter Name="actualTime" Type="MonoTouch.CoreMedia.CMTime" /> + <Parameter Name="result" Type="MonoTouch.AVFoundation.AVAssetImageGeneratorResult" /> + <Parameter Name="error" Type="MonoTouch.Foundation.NSError" /> + </Parameters> + <ReturnValue> + <ReturnType>System.Void</ReturnType> + </ReturnValue> + <Docs> + <param name="requestedTime">To be added.</param> + <param name="imageRef">To be added.</param> + <param name="actualTime">To be added.</param> + <param name="result">To be added.</param> + <param name="error">To be added.</param> + <summary>A delegate that defines the handler for <see cref="M:MonoTouch.AVFoundation.AVAssetImageGenerator.GenerateCGImagesAsynchronously" />.</summary> + <remarks>To be added.</remarks> + </Docs> +</Type> diff --git a/tools/DocStat/DocStat.Tests/TestData/oldxml/AVAssetImageGeneratorCompletionHandler.xml b/tools/DocStat/DocStat.Tests/TestData/oldxml/AVAssetImageGeneratorCompletionHandler.xml new file mode 100644 index 00000000..a743e8a2 --- /dev/null +++ b/tools/DocStat/DocStat.Tests/TestData/oldxml/AVAssetImageGeneratorCompletionHandler.xml @@ -0,0 +1,34 @@ +<Type Name="AVAssetImageGeneratorCompletionHandler" FullName="MonoTouch.AVFoundation.AVAssetImageGeneratorCompletionHandler"> + <TypeSignature Language="C#" Value="public delegate void AVAssetImageGeneratorCompletionHandler(CMTime requestedTime, IntPtr imageRef, CMTime actualTime, AVAssetImageGeneratorResult result, NSError error);" /> + <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed AVAssetImageGeneratorCompletionHandler extends System.MulticastDelegate" /> + <AssemblyInfo apistyle="classic"> + <AssemblyName>monotouch</AssemblyName> + <AssemblyVersion>0.0.0.0</AssemblyVersion> + </AssemblyInfo> + <AssemblyInfo apistyle="unified"> + <AssemblyName>Xamarin.iOS</AssemblyName> + <AssemblyVersion>0.0.0.0</AssemblyVersion> + </AssemblyInfo> + <Base> + <BaseTypeName>System.Delegate</BaseTypeName> + </Base> + <Parameters> + <Parameter Name="requestedTime" Type="MonoTouch.CoreMedia.CMTime" /> + <Parameter Name="imageRef" Type="System.IntPtr" /> + <Parameter Name="actualTime" Type="MonoTouch.CoreMedia.CMTime" /> + <Parameter Name="result" Type="MonoTouch.AVFoundation.AVAssetImageGeneratorResult" /> + <Parameter Name="error" Type="MonoTouch.Foundation.NSError" /> + </Parameters> + <ReturnValue> + <ReturnType>System.Void</ReturnType> + </ReturnValue> + <Docs> + <param name="requestedTime">To be added.</param> + <param name="imageRef">To be added.</param> + <param name="actualTime">To be added.</param> + <param name="result">To be added.</param> + <param name="error">To be added.</param> + <summary>A delegate that defines the handler for <see cref="M:MonoTouch.AVFoundation.AVAssetImageGenerator.GenerateCGImagesAsynchronously" />.</summary> + <remarks>To be added.</remarks> + </Docs> +</Type> diff --git a/tools/DocStat/DocStat/EcmaXmlHelper.cs b/tools/DocStat/DocStat/EcmaXmlHelper.cs index 8176b0ad..a6cd6a3e 100644 --- a/tools/DocStat/DocStat/EcmaXmlHelper.cs +++ b/tools/DocStat/DocStat/EcmaXmlHelper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -186,24 +186,34 @@ namespace DocStat public static IEnumerable<XElement> Members(XDocument ecmaXmlDoc) { - foreach (var m in ecmaXmlDoc.Element("Type").Element("Members").Elements()) - yield return m; + var members = ecmaXmlDoc.Element("Type").Element("Members"); + if (null != members) + { + foreach (var m in members.Elements("Member")) + yield return m; + } + yield break; } public static IEnumerable<XElement> NewMembers(XDocument newXml, XDocument oldXml) { - if (null == oldXml) + + if (null == Members(newXml)) + { yield break; } + if (null == oldXml) { + foreach (var e in Members(newXml)) yield return e; } else { - foreach (var e in Members(newXml)) - { - if (null == GetSelectorFor(e)(oldXml)) - yield return e; - } + foreach (var e in Members(newXml)) + { + if (null == GetSelectorFor(e)(oldXml)) + yield return e; + } + } } } diff --git a/tools/DocStat/DocStat/comparereport.cs b/tools/DocStat/DocStat/comparereport.cs index 8cbcafc2..60cd06ea 100644 --- a/tools/DocStat/DocStat/comparereport.cs +++ b/tools/DocStat/DocStat/comparereport.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -51,16 +51,6 @@ namespace DocStat throw new ArgumentException(bareReportDir + " does not exist."); IEnumerable<string> updated = CommandUtils.GetFileList(processlist, omitlist, updatedDir, pattern); - HashSet<string> filesToUseAsReference = new HashSet<string>(CommandUtils.GetFileList("", "", oldFilesDir, "")); - - updated = - updated.Where((f) => - filesToUseAsReference.Contains(EcmaXmlHelper.GetParallelFilePathFor(f, - oldFilesDir, - updatedDir))); - - - StreamWriter reportStream = new StreamWriter(reportFile); reportStream.WriteLine(@"""File Name"",""Type"",""Member"""); @@ -72,13 +62,20 @@ namespace DocStat Action<XElement> WriteSubsequent = (XElement e) => { - reportStream.WriteLine(threeColumnFormatString, "", "", e.Attribute("name").Value); + reportStream.WriteLine(threeColumnFormatString, "", "", e.Attribute("MemberName").Value); }; - foreach (string updatedXMLFile in updated) { - XDocument updatedXDoc = XDocument.Load(updatedXMLFile); + XDocument updatedXDoc = XDocument.Load(updatedXMLFile); + + Action<string> WriteFileLine = (string fname) => + { + reportStream.WriteLine(twoColumnFormatString, + fname, + updatedXDoc.Element("Type").Attribute("FullName").Value); + Write = WriteSubsequent; + }; Write = (XElement e) => { @@ -88,10 +85,12 @@ namespace DocStat WriteSubsequent(e); Write = WriteSubsequent; }; - + string oldXMLFile = EcmaXmlHelper.GetParallelFilePathFor(updatedXMLFile, oldFilesDir, updatedDir); XDocument oldXDoc = File.Exists(oldXMLFile) ? XDocument.Load(oldXMLFile) : null; - + if (null == oldXDoc) + WriteFileLine(updatedXMLFile); + foreach (XElement e in EcmaXmlHelper.NewMembers(updatedXDoc, oldXDoc)) { Write(e); |