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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.NotNull (rootType); Assert.NotNull (rootNs); Assert.NotNull (baseType); Assert.NotNull (codeMemberFields); Assert.AreEqual ("CustomView", rootType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests", rootNs); Assert.AreEqual ("Xamarin.Forms.View", baseType.BaseType); Assert.AreEqual (1, codeMemberFields.Count()); Assert.AreEqual ("label0", codeMemberFields.First().Name); Assert.AreEqual ("Xamarin.Forms.Label", codeMemberFields.First().Type.BaseType); } [Test] public void LoadXaml2009 () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.NotNull (rootType); Assert.NotNull (rootNs); Assert.NotNull (baseType); Assert.NotNull (codeMemberFields); Assert.AreEqual ("CustomView", rootType); Assert.AreEqual ("Xamarin.Forms.Xaml.UnitTests", rootNs); Assert.AreEqual ("Xamarin.Forms.View", baseType.BaseType); Assert.AreEqual (1, codeMemberFields.Count()); Assert.AreEqual ("label0", codeMemberFields.First().Name); Assert.AreEqual ("Xamarin.Forms.Label", codeMemberFields.First().Type.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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.AreEqual (1, codeMemberFields.Count()); Assert.AreEqual ("listView", codeMemberFields.First ().Name); Assert.AreEqual ("CustomListViewSample.CustomListView", codeMemberFields.First ().Type.BaseType); } [Test] public void xNameInDataTemplates () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.Contains ("included", codeMemberFields.Select(cmf => cmf.Name).ToList()); Assert.False (codeMemberFields.Select(cmf => cmf.Name).Contains ("notincluded")); Assert.AreEqual (1, codeMemberFields.Count()); } [Test] public void xNameInStyles () { var xaml = @" "; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.False (codeMemberFields.Select(cmf => cmf.Name).Contains ("notincluded")); Assert.AreEqual (0, codeMemberFields.Count()); } [Test] public void xTypeArgumentsOnRootElement () { var xaml = @""; var reader = new StringReader (xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); 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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); 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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); 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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); 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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); 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; IEnumerable codeMemberFields; XamlGTask.ParseXaml (reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.IsTrue (baseType.Options.HasFlag (CodeTypeReferenceOptions.GlobalReference)); Assert.IsTrue (codeMemberFields.Select(cmf => cmf.Type).First ().Options.HasFlag (CodeTypeReferenceOptions.GlobalReference)); } } [Test] public void FieldModifier() { var xaml = @" "; using (var reader = new StringReader(xaml)) { string rootType, rootNs; CodeTypeReference baseType; IEnumerable codeMemberFields; XamlGTask.ParseXaml(reader, out rootType, out rootNs, out baseType, out codeMemberFields); Assert.That(codeMemberFields.First(cmf => cmf.Name == "privateLabel").Attributes, Is.EqualTo(MemberAttributes.Private)); Assert.That(codeMemberFields.First(cmf => cmf.Name == "internalLabel").Attributes, Is.EqualTo(MemberAttributes.Assembly)); Assert.That(codeMemberFields.First(cmf => cmf.Name == "publicLabel").Attributes, Is.EqualTo(MemberAttributes.Public)); } } } }