using System; using NUnit.Framework; using System.IO; using System.CodeDom; using Xamarin.Forms.Build.Tasks; using System.Collections.Generic; using System.Linq; using Xamarin.Forms.Core.UnitTests; namespace Xamarin.Forms.Xaml.UnitTests { [TestFixture] public class XamlgTests : BaseTestFixture { [Test] public void LoadXaml2006 () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.NotNull (rootType); Assert.NotNull (rootNs); Assert.NotNull (baseType); Assert.NotNull (namesAndTypes); Assert.AreEqual ("CustomView", rootType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests", rootNs); Assert.AreEqual ("Xamarin.Forms.View", baseType.BaseType); Assert.AreEqual (1, namesAndTypes.Count); Assert.AreEqual ("label0", namesAndTypes.First().Key); Assert.AreEqual ("Xamarin.Forms.Label", namesAndTypes.First().Value.BaseType); } [Test] public void LoadXaml2009 () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.NotNull (rootType); Assert.NotNull (rootNs); Assert.NotNull (baseType); Assert.NotNull (namesAndTypes); Assert.AreEqual ("CustomView", rootType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests", rootNs); Assert.AreEqual ("Xamarin.Forms.View", baseType.BaseType); Assert.AreEqual (1, namesAndTypes.Count); Assert.AreEqual ("label0", namesAndTypes.First().Key); Assert.AreEqual ("Xamarin.Forms.Label", namesAndTypes.First().Value.BaseType); } [Test] //https://github.com/xamarin/Duplo/issues/1207#issuecomment-47159917 public void xNameInCustomTypes () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual (1, namesAndTypes.Count); Assert.AreEqual ("listView", namesAndTypes.First ().Key); Assert.AreEqual ("CustomListViewSample.CustomListView", namesAndTypes.First ().Value.BaseType); } [Test] public void xNameInDataTemplates () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.Contains ("included", namesAndTypes.Keys.ToList()); Assert.False (namesAndTypes.Keys.Contains ("notincluded")); Assert.AreEqual (1, namesAndTypes.Count); } [Test] public void xNameInStyles () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.False (namesAndTypes.Keys.Contains ("notincluded")); Assert.AreEqual (0, namesAndTypes.Count); } [Test] public void xTypeArgumentsOnRootElement () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual ("FooBar", rootType); Assert.AreEqual ("Xamarin.Forms.Foo`1", baseType.BaseType); Assert.AreEqual (1, baseType.TypeArguments.Count); Assert.AreEqual ("System.String", baseType.TypeArguments [0].BaseType); } [Test] public void MulipleXTypeArgumentsOnRootElement () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual ("FooBar", rootType); Assert.AreEqual ("Xamarin.Forms.Foo`2", baseType.BaseType); Assert.AreEqual (2, baseType.TypeArguments.Count); Assert.AreEqual ("System.String", baseType.TypeArguments [0].BaseType); Assert.AreEqual ("System.Int32", baseType.TypeArguments [1].BaseType); } [Test] public void MulipleXTypeArgumentsOnRootElementWithWhitespace () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual ("FooBar", rootType); Assert.AreEqual ("Xamarin.Forms.Foo`2", baseType.BaseType); Assert.AreEqual (2, baseType.TypeArguments.Count); Assert.AreEqual ("System.String", baseType.TypeArguments [0].BaseType); Assert.AreEqual ("System.Int32", baseType.TypeArguments [1].BaseType); } [Test] public void MulipleXTypeArgumentsMulitpleNamespacesOnRootElement () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual ("FooBar", rootType); Assert.AreEqual ("Xamarin.Forms.Foo`2", baseType.BaseType); Assert.AreEqual (2, baseType.TypeArguments.Count); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.Interfaces.IDummyInterface", baseType.TypeArguments [0].BaseType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.InterfacesTwo.IDummyInterfaceTwo", baseType.TypeArguments [1].BaseType); } [Test] public void MulipleXTypeArgumentsMulitpleNamespacesOnRootElementWithWhitespace () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.AreEqual ("FooBar", rootType); Assert.AreEqual ("Xamarin.Forms.Foo`2", baseType.BaseType); Assert.AreEqual (2, baseType.TypeArguments.Count); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.Interfaces.IDummyInterface", baseType.TypeArguments [0].BaseType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.InterfacesTwo.IDummyInterfaceTwo", baseType.TypeArguments [1].BaseType); } [Test] //https://bugzilla.xamarin.com/show_bug.cgi?id=33256 public void AlwaysUseGlobalReference () { var xaml = @" "; using (var reader = new StringReader (xaml)) { string rootType, rootNs; CodeTypeReference baseType; IDictionary namesAndTypes; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.IsTrue (baseType.Options.HasFlag (CodeTypeReferenceOptions.GlobalReference)); Assert.IsTrue (namesAndTypes.Values.First ().Options.HasFlag (CodeTypeReferenceOptions.GlobalReference)); } } } }