コード例 #1
0
ファイル: XamlgTests.cs プロジェクト: zBrianW/Xamarin.Forms
        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());
        }
コード例 #2
0
            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());
            }
コード例 #3
0
ファイル: XamlgTests.cs プロジェクト: zBrianW/Xamarin.Forms
        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());
        }
コード例 #4
0
ファイル: XamlgTests.cs プロジェクト: fortefour/xamarin-forms
        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);
        }
コード例 #5
0
ファイル: XamlgTests.cs プロジェクト: fortefour/xamarin-forms
        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);
        }
コード例 #6
0
ファイル: XamlgTests.cs プロジェクト: fortefour/xamarin-forms
        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);
        }
コード例 #7
0
		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));
		}
コード例 #8
0
ファイル: XamlgTests.cs プロジェクト: zBrianW/Xamarin.Forms
        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);
        }
コード例 #9
0
ファイル: XamlgTests.cs プロジェクト: fortefour/xamarin-forms
        //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));
            }
        }
コード例 #10
0
ファイル: XamlgTests.cs プロジェクト: fortefour/xamarin-forms
        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);
        }
コード例 #11
0
ファイル: XamlgTests.cs プロジェクト: zBrianW/Xamarin.Forms
        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);
        }