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));
}
}
}
}