public void xNameInStyles() { var xaml = @"<StackLayout xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" > <StackLayout.Resources> <ResourceDictionary> <Style TargetType=""Label"" > <Setter Property=""Text""> <Setter.Value> <Label x:Name=""notincluded"" /> </Setter.Value> </Setter> </Style> </ResourceDictionary> </StackLayout.Resources> </StackLayout>" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable <CodeMemberField> 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()); }
public void TestXamlGenerator() { string xamlInputFile = CreateXamlInputFile(); var item = new TaskItem(xamlInputFile); item.SetMetadata("TargetPath", xamlInputFile); string testAssemblyBinPath = #if DEBUG "Debug"; #else "Release"; #endif var generator = new XamlGTask() { BuildEngine = new DummyBuildEngine(), AssemblyName = "test", Language = "C#", XamlFiles = new[] { item }, OutputPath = Path.GetDirectoryName(xamlInputFile), References = Path.GetFullPath( Path.Combine( Directory.GetCurrentDirectory(), $@"..\..\..\Xamarin.Forms.Xaml.UnitTests.XmlnsDefinitionAttribute\bin\{testAssemblyBinPath}\netstandard2.0\Xamarin.Forms.Xaml.UnitTests.XmlnsDefinitionAttribute.dll")) }; Assert.IsTrue(generator.Execute()); }
public void xNameInDataTemplates() { var xaml = @"<StackLayout xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" > <ListView> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Label x:Name=""notincluded""/> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> <Label x:Name=""included""/> </StackLayout>" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable <CodeMemberField> 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()); }
public void LoadXaml2009() { var xaml = @"<View xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""Xamarin.Forms.Xaml.UnitTests.CustomView"" > <Label x:Name=""label0""/> </View>" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary <string, CodeTypeReference> 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); }
public void xNameInStyles() { var xaml = @"<StackLayout xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" > <StackLayout.Resources> <ResourceDictionary> <Style TargetType=""Label"" > <Setter Property=""Text""> <Setter.Value> <Label x:Name=""notincluded"" /> </Setter.Value> </Setter> </Style> </ResourceDictionary> </StackLayout.Resources> </StackLayout>" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary <string, CodeTypeReference> namesAndTypes; XamlGTask.ParseXaml(reader, out rootType, out rootNs, out baseType, out namesAndTypes); Assert.False(namesAndTypes.Keys.Contains("notincluded")); Assert.AreEqual(0, namesAndTypes.Count); }
public void xNameInDataTemplates() { var xaml = @"<StackLayout xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" > <ListView> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Label x:Name=""notincluded""/> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> <Label x:Name=""included""/> </StackLayout>" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary <string, CodeTypeReference> 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); }
public void XamlFileShouldNotBeLockedAfterFileIsGenerated () { string xamlInputFile = CreateXamlInputFile (); string xamlOutputFile = Path.ChangeExtension (xamlInputFile, ".xaml.g.cs"); var generator = new XamlGTask (); generator.BuildEngine = new DummyBuildEngine (); generator.AssemblyName = "Test"; generator.Source = xamlInputFile; generator.OutputFile = xamlOutputFile; generator.Language = "C#"; generator.Execute(); File.Delete (xamlOutputFile); Assert.DoesNotThrow (() => File.Delete (xamlInputFile)); }
public void xTypeArgumentsOnRootElement() { var xaml = @"<Foo xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" x:TypeArguments=""x:String"" />" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable <CodeMemberField> 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); }
//https://bugzilla.xamarin.com/show_bug.cgi?id=33256 public void AlwaysUseGlobalReference() { var xaml = @" <ContentPage xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" > <Label x:Name=""label0""/> </ContentPage>" ; using (var reader = new StringReader(xaml)) { string rootType, rootNs; CodeTypeReference baseType; IDictionary <string, CodeTypeReference> 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)); } }
public void MulipleXTypeArgumentsOnRootElementWithWhitespace() { var xaml = @"<Foo xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" x:TypeArguments=""x:String, x:Int32"" />" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IDictionary <string, CodeTypeReference> 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); }
public void MulipleXTypeArgumentsMulitpleNamespacesOnRootElementWithWhitespace() { var xaml = @"<Foo xmlns=""http://xamarin.com/schemas/2014/forms"" xmlns:x=""http://schemas.microsoft.com/winfx/2009/xaml"" x:Class=""FooBar"" x:TypeArguments=""nsone:IDummyInterface, nstwo:IDummyInterfaceTwo"" xmlns:nsone=""clr-namespace:Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.Interfaces"" xmlns:nstwo=""clr-namespace:Xamarin.Forms.Xaml.UnitTests.Bugzilla24258.InterfacesTwo"" />" ; var reader = new StringReader(xaml); string rootType, rootNs; CodeTypeReference baseType; IEnumerable <CodeMemberField> 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); }