Пример #1
0
        private static void ProjectBuilder()
        {
            var project = new ProjectBuilder()
                          .WithName("Sıfır Atık")
                          .WithStartDate(new DateTime(2018, 10, 1))
                          .WithDueDate(new DateTime(2019, 2, 1))
                          .WithSourceCount(5)
                          .WithBudget(4000000)
                          .Build();

            var builder = new ProjectBuilder();

            Console.Write("Proje Adı.................: ");
            builder.WithName(Console.ReadLine());

            Console.Write("Kaynak Sayısı.............: ");
            builder.WithSourceCount(int.Parse(Console.ReadLine()));

            Console.Write("Başlangıç Tarihi..........: ");
            builder.WithStartDate(DateTime.Parse(Console.ReadLine()));

            Console.Write("Bitiş Tarihi..............: ");
            builder.WithDueDate(DateTime.Parse(Console.ReadLine()));

            Console.Write("Bütçesi...................: ");
            builder.WithBudget(decimal.Parse(Console.ReadLine()));

            var p = builder.Build();
        }
        // content project

        private async void CompileProject(object sender, EventArgs e)
        {
            // disable the UI
            mainInterfacePanel.Enabled = false;
            // start the logging...
            logWindow.Clear();
            LogMessage("Starting build...", true);
            statusProgressBar.Visible = true;

            if (xnaContentProject.ContentItems.Count > 0)
            {
                // do the work
                try
                {
                    bool success = await Task.Run(() => projectBuilder.Build(xnaContentProject));

                    LogMessage(success ? "Build completed successfully." : "Build failed.", true);
                }
                catch (Exception ex)
                {
                    LogMessage("Build failed.", true);
                    LogMessage(ex.ToString(), false);
                }
            }
            else
            {
                LogMessage("Nothing to build.", true);
            }

            // finish up
            mainInterfacePanel.Enabled = true;
            statusProgressBar.Visible  = false;
        }
Пример #3
0
        public static void Build(string projectFile, string[] extraClasspaths, bool noTrace)
        {
            Project        project = Project.Load(projectFile);
            ProjectBuilder builder = new ProjectBuilder(project);

            builder.Build(extraClasspaths, noTrace);
        }
Пример #4
0
        public void BeforeAll()
        {
            _projectFilePath  = @"C:\myproject\myproject.csproj";
            _projectDirectory = @"C:\myproject";
            _projectName      = "What I am called";

            _dependencies = Builder <NuGetPackageDependency> .CreateListOfSize(2).Build();

            _expectedPackageFilePath = @"C:\myproject\packages.config";

            var fileSystem = new Mock <IFileSystem>();

            fileSystem.Setup(fs => fs.GetDirectory(_projectFilePath)).Returns(_projectDirectory);

            var packageBuilder = new Mock <IBuilder <ICollection <NuGetPackageDependency>, string> >();

            packageBuilder.Setup(b => b.Build(_expectedPackageFilePath)).Returns(_dependencies);

            var builder = new ProjectBuilder(fileSystem.Object, packageBuilder.Object);
            var request = new BuildProjectRequest()
                          .WithProjectFilePath(_projectFilePath)
                          .WithName(_projectName);

            _project = builder.Build(request);
        }
Пример #5
0
        public void BeforeDeploymentTests()
        {
            if (!HasDevices)
            {
                Assert.Ignore("Skipping Test. No devices available.");
            }
            string debuggable = RunAdbCommand("shell getprop ro.debuggable");

            if (debuggable != "1")
            {
                Assert.Ignore("TimeZone tests need to use `su root` and this device does not support that feature. Try using an emulator.");
            }

            proj = new XamarinFormsAndroidApplicationProject();
            proj.SetProperty(KnownProperties.AndroidSupportedAbis, "armeabi-v7a;x86");
            var mainPage = proj.Sources.First(x => x.Include() == "MainPage.xaml.cs");
            var source   = mainPage.TextContent().Replace("InitializeComponent ();", @"InitializeComponent ();
			Console.WriteLine ($""TimeZoneInfo={TimeZoneInfo.Local.DisplayName}"");
");

            mainPage.TextContent = () => source;
            builder = CreateApkBuilder(Path.Combine("temp", "DeploymentTests"));
            string apiLevel;

            proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion(out apiLevel);
            proj.PackageName            = "Xamarin.TimeZoneTest";
            proj.AndroidManifest        = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""Xamarin.TimeZoneTest"">
	<uses-sdk android:minSdkVersion=""24"" android:targetSdkVersion=""{apiLevel}"" />
	<application android:label=""${{PROJECT_NAME}}"">
	</application >
</manifest> ";
            Assert.IsTrue(builder.Build(proj), "Build should have succeeded.");
            Assert.IsTrue(builder.Install(proj), "Install should have succeeded.");
        }
Пример #6
0
        public void OneTimeSetUp()
        {
            var path = Path.Combine("temp", TestName);

            lib = new XamarinAndroidLibraryProject {
                ProjectName     = "Localization",
                IsRelease       = true,
                OtherBuildItems =
                {
                    new BuildItem("EmbeddedResource", "Foo.resx")
                    {
                        TextContent = () => ResxWithContents("<data name=\"CancelButton\"><value>Cancel</value></data>")
                    },
                    new BuildItem("EmbeddedResource", "Foo.es.resx")
                    {
                        TextContent = () => ResxWithContents("<data name=\"CancelButton\"><value>Cancelar</value></data>")
                    }
                }
            };

            var bytes = new byte [1024];

            app = new XamarinFormsMapsApplicationProject {
                IsRelease = true,
            };
            app.OtherBuildItems.Add(new AndroidItem.AndroidAsset("foo.bar")
            {
                BinaryContent = () => bytes,
            });
            app.OtherBuildItems.Add(new AndroidItem.AndroidAsset("foo.wav")
            {
                BinaryContent = () => bytes,
            });
            app.OtherBuildItems.Add(new BuildItem("None", "buildConfig.json")
            {
                TextContent = () => BuildConfig,
            });
            app.SetProperty("AndroidStoreUncompressedFileExtensions", ".bar");
            app.References.Add(new BuildItem.ProjectReference($"..\\{lib.ProjectName}\\{lib.ProjectName}.csproj", lib.ProjectName, lib.ProjectGuid));

            //NOTE: this is here to enable adb shell run-as
            app.AndroidManifest = app.AndroidManifest.Replace("<application ", "<application android:debuggable=\"true\" ");
            app.SetProperty(app.ReleaseProperties, "AndroidPackageFormat", "aab");
            var abis = new string [] { "armeabi-v7a", "arm64-v8a", "x86" };

            app.SetProperty(KnownProperties.AndroidSupportedAbis, string.Join(";", abis));
            app.SetProperty("AndroidBundleConfigurationFile", "buildConfig.json");

            libBuilder = CreateDllBuilder(Path.Combine(path, lib.ProjectName), cleanupOnDispose: true);
            Assert.IsTrue(libBuilder.Build(lib), "Library build should have succeeded.");
            appBuilder = CreateApkBuilder(Path.Combine(path, app.ProjectName), cleanupOnDispose: true);
            Assert.IsTrue(appBuilder.Build(app), "App build should have succeeded.");

            var projectDir = Path.Combine(Root, appBuilder.ProjectDirectory);

            intermediate = Path.Combine(projectDir, app.IntermediateOutputPath);
            bin          = Path.Combine(projectDir, app.OutputPath);
        }
Пример #7
0
        public override int Execute([NotNull] CommandContext context, [NotNull] Settings settings)
        {
            var projectsToAnalyze = PathUtility.GetProjectPaths(settings.ProjectOrSolutionPath, out var entry);

            // Remove all projects that we want to skip.
            projectsToAnalyze.RemoveAll(p =>
            {
                var projectName = Path.GetFileNameWithoutExtension(p);
                return(settings.Skip?.Contains(projectName, StringComparer.OrdinalIgnoreCase) ?? false);
            });

            var targetFramework = settings.TargetFramework;
            var analyzerResults = new List <ProjectAnalyzerResult>();
            var projectCache    = new HashSet <Project>(new ProjectComparer());

            _console.WriteLine();

            return(_console.Status().Start($"Analyzing...", ctx =>
            {
                ctx.Refresh();

                _console.MarkupLine($"Analyzing [yellow]{Path.GetFileName(entry)}[/]");

                foreach (var projectToAnalyze in projectsToAnalyze)
                {
                    // Perform a design time build of the project.
                    var buildResult = _builder.Build(
                        projectToAnalyze,
                        targetFramework,
                        settings.Skip,
                        projectCache);

                    // Update the cache of built projects.
                    projectCache.Add(buildResult.Project);
                    foreach (var item in buildResult.Dependencies)
                    {
                        projectCache.Add(item);
                    }

                    // Analyze the project.
                    var analyzeResult = _analyzer.Analyze(buildResult.Project);
                    if (settings.Exclude?.Length > 0)
                    {
                        // Filter packages that should be excluded.
                        analyzeResult = analyzeResult.Filter(settings.Exclude);
                    }

                    analyzerResults.Add(analyzeResult);
                }

                // Write the rport to the console
                _reporter.WriteToConsole(analyzerResults);

                // Return the correct exit code.
                return GetExitCode(settings, analyzerResults);
            }));
        }
Пример #8
0
        /// <summary>
        /// Build from command line
        /// </summary>
        /// <param name="projectFile"></param>
        /// <param name="options"></param>
        public static void Build(string projectFile, FDBuildOptions options)
        {
            Project project = ProjectLoader.Load(projectFile);

            project.TraceEnabled = !options.NoTrace;
            options.Language     = project.Language.ToUpper();
            ProjectBuilder builder = ProjectBuilder.Create(project, options.IpcName, options.CompilerPath);

            builder.Build(options.ExtraClasspaths, options.NoTrace, options.NoPreBuild, options.NoPostBuild);
        }
Пример #9
0
        public override int Execute(CommandContext context, Settings settings)
        {
            var projectsToAnalyze = PathUtility.GetProjectPaths(settings.ProjectOrSolutionPath, out var entry);

            // Remove all projects that we want to skip.
            projectsToAnalyze.RemoveAll(p =>
            {
                var projectName = Path.GetFileNameWithoutExtension(p);
                return(settings.Skip?.Contains(projectName, StringComparer.OrdinalIgnoreCase) ?? false);
            });

            _console.WriteLine();
            _console.Write("Processing ");
            _console.ForegroundColor = ConsoleColor.Yellow;
            _console.Write(Path.GetFileName(entry));
            _console.ResetColor();
            _console.WriteLine("...");

            var targetFramework = settings.TargetFramework;

            var analyzerResults = new List <ProjectAnalyzerResult>();
            var projectCache    = new HashSet <Project>(new ProjectComparer());

            foreach (var projectToAnalyze in projectsToAnalyze)
            {
                // Perform a design time build of the project.
                var buildResult = _builder.Build(
                    projectToAnalyze,
                    targetFramework,
                    settings.Skip,
                    projectCache);

                // Update the cache of built projects.
                projectCache.Add(buildResult.Project);
                foreach (var item in buildResult.Dependencies)
                {
                    projectCache.Add(item);
                }

                // Analyze the project.
                var analyzeResult = _analyzer.Analyze(buildResult.Project);

                if (settings.Exclude?.Length > 0)
                {
                    // Filter packages that should be excluded.
                    analyzeResult = analyzeResult.Filter(settings.Exclude);
                }

                analyzerResults.Add(analyzeResult);
            }

            _reporter.WriteToConsole(analyzerResults);

            return(GetExitCode(settings, analyzerResults));
        }
Пример #10
0
        void BuildLibraryWithResources(string path)
        {
            var library = new XamarinAndroidLibraryProject()
            {
                ProjectName = "Library",
            };

            var libraryStrings = library.AndroidResources.FirstOrDefault(r => r.Include() == @"Resources\values\Strings.xml");

            library.AndroidResources.Clear();
            library.AndroidResources.Add(libraryStrings);
            library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "animator", "slide_in_bottom.xml"))
            {
                TextContent = () => Animator
            });
            library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "font", "arial.ttf"))
            {
                TextContent = () => ""
            });
            library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "values", "strings2.xml"))
            {
                TextContent = () => StringsXml2
            });
            library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "values", "dimen.xml"))
            {
                TextContent = () => Dimen
            });

            using (var stream = typeof(XamarinAndroidCommonProject).Assembly.GetManifestResourceStream("Xamarin.ProjectTools.Resources.Base.Icon.png")) {
                var icon_binary_mdpi = new byte [stream.Length];
                stream.Read(icon_binary_mdpi, 0, (int)stream.Length);
                library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "drawable", "ic_menu_preferences.png"))
                {
                    BinaryContent = () => icon_binary_mdpi
                });
                library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "mipmap-hdpi", "icon.png"))
                {
                    BinaryContent = () => icon_binary_mdpi
                });
            }

            library.AndroidResources.Add(new AndroidItem.AndroidResource(Path.Combine("Resources", "menu", "options.xml"))
            {
                TextContent = () => Menu
            });

            using (ProjectBuilder builder = CreateDllBuilder(Path.Combine(Root, path))) {
                Assert.IsTrue(builder.Build(library), "Build should have succeeded");
            }
        }
Пример #11
0
        public void BeforeDeploymentTests()
        {
            AssertHasDevices();

            string debuggable = RunAdbCommand("shell getprop ro.debuggable");

            if (debuggable != "1")
            {
                Assert.Ignore("TimeZone tests need to use `su root` and this device does not support that feature. Try using an emulator.");
            }
            // Disable auto timezone
            RunAdbCommand("shell settings put global auto_time_zone 0");

            proj = new XamarinFormsAndroidApplicationProject();
            proj.SetAndroidSupportedAbis("armeabi-v7a", "x86");
            var mainPage = proj.Sources.First(x => x.Include() == "MainPage.xaml.cs");
            var source   = mainPage.TextContent().Replace("InitializeComponent ();", @"InitializeComponent ();
			Console.WriteLine ($""TimeZoneInfoNative={Java.Util.TimeZone.Default.ID}"");
			Console.WriteLine ($""TimeZoneInfo={TimeZoneInfo.Local.DisplayName}"");
");

            source = source.Replace("Console.WriteLine (\"Button was Clicked!\");", @"Console.WriteLine (""Button was Clicked!"");
			Console.WriteLine ($""TimeZoneInfoClick={TimeZoneInfo.Local.DisplayName}"");
");
            mainPage.TextContent = () => source;
            builder = CreateApkBuilder(Path.Combine("temp", "DeploymentTests"));
            string apiLevel;

            proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion(out apiLevel);

            // TODO: We aren't sure how to support preview bindings in .NET6 yet.
            if (Builder.UseDotNet && apiLevel == "31")
            {
                apiLevel = "30";
                proj.TargetFrameworkVersion = "v11.0";
            }

            proj.PackageName     = "Xamarin.TimeZoneTest";
            proj.AndroidManifest = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""Xamarin.TimeZoneTest"">
	<uses-sdk android:minSdkVersion=""24"" android:targetSdkVersion=""{apiLevel}"" />
	<application android:label=""${{PROJECT_NAME}}"">
	</application >
</manifest> ";
            Assert.IsTrue(builder.Build(proj), "Build should have succeeded.");
            Assert.IsTrue(builder.Install(proj), "Install should have succeeded.");
        }
Пример #12
0
        public void OneTimeSetUp()
        {
            project = new XamarinAndroidApplicationProject {
                IsRelease = true,
            };
            //NOTE: this is here to enable adb shell run-as
            project.AndroidManifest = project.AndroidManifest.Replace("<application ", "<application android:debuggable=\"true\" ");
            project.SetProperty(project.ReleaseProperties, "AndroidPackageFormat", "aab");

            builder = CreateApkBuilder(Path.Combine("temp", TestName));
            Assert.IsTrue(builder.Build(project), "Build should have succeeded.");

            var projectDir = Path.Combine(Root, builder.ProjectDirectory);

            intermediate = Path.Combine(projectDir, project.IntermediateOutputPath);
            bin          = Path.Combine(projectDir, project.OutputPath);
        }
Пример #13
0
        public Optional <ProjectBuild> TryBuild(BuildProject args, Log logger)
        {
            try
            {
                var project = _simulatorBuilder.CreateSimulatorProject(args);

                var libraryBuilder = new LibraryBuilder(new Disk(logger), BuildTargets.Package)
                {
                    Express = true
                };
                var projectBuilder = new ProjectBuilder(logger, new LocalSimulatorTarget(), project.Options);

                if (project.IsVerboseBuild)
                {
                    logger.Level = Uno.Logging.LogLevel.Verbose;
                }

                if (project.BuildLibraries)
                {
                    libraryBuilder.Build();
                }

                var buildResult = projectBuilder.Build(project.Project);

                if (buildResult.ErrorCount != 0)
                {
                    return(Optional.None());
                }

                var b = new LocalBuild(buildResult, AbsoluteFilePath.Parse(args.ProjectPath));
                return(new ProjectBuild(b.Path.NativePath, b.SaveSimulatorMetadata(_fileSystem).NativePath, b.GetTypeInformation()));
            }
            catch (ThreadAbortException)
            {
            }
            catch (SourceException e)
            {
                logger.Error(e.Source, null, e.Message);
            }
            catch (Exception e)
            {
                logger.Error(e.Message);
            }
            return(Optional.None());
        }
Пример #14
0
        public override int Execute(CommandContext context, Settings settings)
        {
            settings.ProjectPath = PathUtility.GetProjectPath(settings.ProjectPath);

            // Analyze the project.
            var project = _builder.Build(settings.ProjectPath, settings.TargetFramework);
            var result  = _analyzer.Analyze(project);

            if (settings.Ignore?.Length > 0)
            {
                // Filter packages that should be excluded.
                result = result.Filter(settings.Ignore);
            }

            _reporter.WriteToConsole(result);

            return(GetExitCode(settings, result));
        }
Пример #15
0
        public void AllServiceAttributeProperties([Values("legacy", "manifestmerger.jar")] string manifestMerger)
        {
            string expectedOutput = manifestMerger == "legacy" ?
                                    "android:directBootAware=\"true\" android:enabled=\"true\" android:exported=\"true\" android:foregroundServiceType=\"connectedDevice\" android:icon=\"@drawable/icon\" android:isolatedProcess=\"true\" android:label=\"TestActivity\" android:name=\"com.contoso.TestActivity\" android:permission=\"com.contoso.permission.TEST_ACTIVITY\" android:process=\"com.contoso.process.testactivity_process\" android:roundIcon=\"@drawable/icon\"" :
                                    "android:name=\"com.contoso.TestActivity\" android:directBootAware=\"true\" android:enabled=\"true\" android:exported=\"true\" android:foregroundServiceType=\"connectedDevice\" android:icon=\"@drawable/icon\" android:isolatedProcess=\"true\" android:label=\"TestActivity\" android:permission=\"com.contoso.permission.TEST_ACTIVITY\" android:process=\"com.contoso.process.testactivity_process\" android:roundIcon=\"@drawable/icon\"";

            var proj = new XamarinAndroidApplicationProject {
                ManifestMerger = manifestMerger
            };

            proj.Sources.Add(new BuildItem.Source("TestActivity.cs")
            {
                TextContent = () => @"using Android.App;
 using Android.Content.PM;
 using Android.Views;
 [Service (
    DirectBootAware            = true,
    Enabled                    = true,
    Exported                   = true,
	ForegroundServiceType      = ForegroundService.TypeConnectedDevice,
    Icon                       = ""@drawable/icon"",
    IsolatedProcess            = true,
    Label                      = ""TestActivity"",
    Name                       = ""com.contoso.TestActivity"",
    Permission                 = ""com.contoso.permission.TEST_ACTIVITY"",
    Process                    = ""com.contoso.process.testactivity_process"",
    RoundIcon                  = ""@drawable/icon"")]
 class TestService : Service { public override Android.OS.IBinder OnBind (Android.Content.Intent intent) { return null; } }"
            });

            using (ProjectBuilder builder = CreateDllBuilder(Path.Combine("temp", TestName))) {
                Assert.IsTrue(builder.Build(proj), "Build should have succeeded");

                string manifest = builder.Output.GetIntermediaryAsText(Path.Combine("android", "AndroidManifest.xml"));
                var    doc      = XDocument.Parse(manifest);
                var    ns       = XNamespace.Get("http://schemas.android.com/apk/res/android");
                IEnumerable <XElement> activities = doc.Element("manifest")?.Element("application")?.Elements("service");
                XElement e = activities.FirstOrDefault(x => x.Attribute(ns.GetName("label"))?.Value == "TestActivity");
                Assert.IsNotNull(e, "Manifest should contain an activity labeled TestActivity");
                Assert.AreEqual(expectedOutput, string.Join(" ", e.Attributes()));
            }
        }
Пример #16
0
        public void OneTimeSetUp()
        {
            project = new XamarinFormsMapsApplicationProject {
                IsRelease = true,
            };
            //NOTE: this is here to enable adb shell run-as
            project.AndroidManifest = project.AndroidManifest.Replace("<application ", "<application android:debuggable=\"true\" ");
            project.SetProperty(project.ReleaseProperties, "AndroidPackageFormat", "aab");
            var abis = new string [] { "armeabi-v7a", "arm64-v8a", "x86" };

            project.SetProperty(KnownProperties.AndroidSupportedAbis, string.Join(";", abis));

            builder = CreateApkBuilder(Path.Combine("temp", TestName), cleanupOnDispose: true);
            Assert.IsTrue(builder.Build(project), "Build should have succeeded.");

            var projectDir = Path.Combine(Root, builder.ProjectDirectory);

            intermediate = Path.Combine(projectDir, project.IntermediateOutputPath);
            bin          = Path.Combine(projectDir, project.OutputPath);
        }
Пример #17
0
        private static void Build()
        {
            var project = Project.LoadFile(_projectFilePath, true);

            _builder                = new ProjectBuilder(project);
            _builder.TaskStarted   += OnTaskStarted;
            _builder.TaskCompleted += OnTaskCompleted;

            _builder.Build();

            switch (_builder.Status)
            {
            case BuildStatus.Completed:
                if (!_shell && !_quiet)
                {
                    Console.WriteLine("Build completed successfully");
                }
                break;

            case BuildStatus.Aborted:
                if (!_shell && !_quiet)
                {
                    Console.WriteLine("Build aborted");
                }
                break;

            case BuildStatus.Failed:
            {
                if (!_shell)
                {
                    PrintException(_builder.Exception);
                }

                Environment.Exit(-1);
            }
            break;

            default:
                throw new NotImplementedException();
            }
        }
        public void BeforeAll()
        {
            _projectFilePath = @"C:\myproject\myproject.csproj";
            _projectDirectory = @"C:\myproject";
            _projectName = "What I am called";

            _dependencies = Builder<NuGetPackageDependency>.CreateListOfSize(2).Build();
            _expectedPackageFilePath = @"C:\myproject\packages.config";

            var fileSystem = new Mock<IFileSystem>();
            fileSystem.Setup(fs => fs.GetDirectory(_projectFilePath)).Returns(_projectDirectory);

            var packageBuilder = new Mock<IBuilder<ICollection<NuGetPackageDependency>, string>>();
            packageBuilder.Setup(b => b.Build(_expectedPackageFilePath)).Returns(_dependencies);

            var builder = new ProjectBuilder(fileSystem.Object, packageBuilder.Object);
            var request = new BuildProjectRequest()
                .WithProjectFilePath(_projectFilePath)
                .WithName(_projectName);

            _project = builder.Build(request);
        }
Пример #19
0
        public void BeforeDeploymentTests()
        {
            proj = new XamarinFormsAndroidApplicationProject();
            proj.SetProperty(KnownProperties.AndroidSupportedAbis, "armeabi-v7a;x86");
            var mainPage = proj.Sources.First(x => x.Include() == "MainPage.xaml.cs");
            var source   = mainPage.TextContent().Replace("InitializeComponent ();", @"InitializeComponent ();
			Console.WriteLine ($""TimeZoneInfo={TimeZoneInfo.Local.DisplayName}"");
");

            mainPage.TextContent = () => source;
            builder = CreateApkBuilder(Path.Combine("temp", "DeploymentTests"));
            string apiLevel;

            proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion(out apiLevel);
            proj.AndroidManifest        = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""UnnamedProject.UnnamedProject"">
	<uses-sdk android:minSdkVersion=""24"" android:targetSdkVersion=""{apiLevel}"" />
	<application android:label=""${{PROJECT_NAME}}"">
	</application >
</manifest> ";
            Assert.IsTrue(builder.Build(proj), "Build should have succeeded.");
            Assert.IsTrue(builder.Install(proj), "Install should have succeeded.");
        }
Пример #20
0
        public async Task ValidateShouldSucceedWhenAssetValueNoneIsSpecifiedInConfig(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup()
                                 .WithPackageReference("Package", "1.0");

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                data.IncludeAssets = new[] { "none" }
            }
            ;
            else if (property == AssetsProperty.Exclude)
            {
                data.ExcludeAssets = new[] { "none" }
            }
            ;
            else if (property == AssetsProperty.Private)
            {
                data.PrivateAssets = new[] { "none" }
            }
            ;

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.False(actual.IsError);
        }
Пример #21
0
        public Result Process(Options options, IList <XamarinAndroidBindingProject> projects)
        {
            var result = new Result();

            if (options.SolutionDirectory == null)
            {
                throw new ArgumentException("Project generation target directory is not set in the project creator options.");
            }
            if (!Directory.Exists(options.SolutionDirectory))
            {
                throw new ArgumentException(string.Format("Project generation target directory '{0}' specified in the project creator options does not exist.", options.SolutionDirectory));
            }

            foreach (var p in projects)
            {
                var builder = new ProjectBuilder(Path.Combine(options.SolutionDirectory, p.ProjectName));
                // We'd like to investigate the outcomes, so leave them there.
                builder.CleanupOnDispose = false;
                builder.Verbosity        = Microsoft.Build.Framework.LoggerVerbosity.Diagnostic;
                builder.Build(p);
                builder.Dispose();
            }
            return(result);
        }
Пример #22
0
        static void Main(string[] args)
        {
            var builder = new ProjectBuilder();

            builder.RegisterFileType(new CSVFileProvider());

            if (Directory.Exists("Foo"))
            {
                Directory.Delete("Foo", true);
            }
            if (File.Exists("Fundus.csv"))
            {
                File.Delete("Fundus.csv");
            }

            File.WriteAllText(".\\Project.xml", "<Project></Project>");
            var project = builder.Build(".\\Project.xml", true);
            var foo     = project.CreateSubFolder("Foo");
            var fundus  = project.CreateFile("Fundus.csv", "hats");
            var ffun    = foo.CreateFile("InnerFoo.csv", "Hat");

            foreach (var folder in project.Subfolders())
            {
                Console.WriteLine(folder);
            }

            foreach (var file in project.Files())
            {
                Console.WriteLine(file);
            }

            foreach (var file in foo.Files())
            {
                Console.WriteLine(file);
            }
        }
Пример #23
0
        public async Task ValidateShouldFailWhenAssetsInProjectDoesNotContainAllValues(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup();

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, "build");
                data.IncludeAssets = new[] { "compile", "build" };
            }
            else if (property == AssetsProperty.Exclude)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, "build");
                data.ExcludeAssets = new[] { "compile", "build" };
            }
            else if (property == AssetsProperty.Private)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, null, "build");
                data.PrivateAssets = new[] { "compile", "build" };
            }

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.True(actual.IsError);
        }
Пример #24
0
        public async Task ValidateShouldSucceedWhenSingleAssetMatches(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup();

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, "build");
                data.IncludeAssets = new[] { "build" };
            }
            else if (property == AssetsProperty.Exclude)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, "build");
                data.ExcludeAssets = new[] { "build" };
            }
            else if (property == AssetsProperty.Private)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, null, "build");
                data.PrivateAssets = new[] { "build" };
            }

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.False(actual.IsError);
        }
Пример #25
0
        public void AllActivityAttributeProperties()
        {
            const string expectedOutput = "android:allowEmbedded=\"true\" android:allowTaskReparenting=\"true\" android:alwaysRetainTaskState=\"true\" android:autoRemoveFromRecents=\"true\" android:banner=\"@drawable/icon\" android:clearTaskOnLaunch=\"true\" android:colorMode=\"hdr\" android:configChanges=\"mcc\" android:description=\"@string/app_name\" android:directBootAware=\"true\" android:documentLaunchMode=\"never\" android:enabled=\"true\" android:enableVrMode=\"foo\" android:excludeFromRecents=\"true\" android:exported=\"true\" android:finishOnCloseSystemDialogs=\"true\" android:finishOnTaskLaunch=\"true\" android:hardwareAccelerated=\"true\" android:icon=\"@drawable/icon\" android:immersive=\"true\" android:label=\"TestActivity\" android:launchMode=\"singleTop\" android:lockTaskMode=\"normal\" android:logo=\"@drawable/icon\" android:maxAspectRatio=\"1.2\" android:maxRecents=\"1\" android:multiprocess=\"true\" android:name=\"com.contoso.TestActivity\" android:noHistory=\"true\" android:parentActivityName=\"md52d9cf6333b8e95e8683a477bc589eda5.MainActivity\" android:permission=\"com.contoso.permission.TEST_ACTIVITY\" android:persistableMode=\"persistNever\" android:process=\"com.contoso.process.testactivity_process\" android:recreateOnConfigChanges=\"mcc\" android:relinquishTaskIdentity=\"true\" android:resizeableActivity=\"true\" android:resumeWhilePausing=\"true\" android:rotationAnimation=\"crossfade\" android:roundIcon=\"@drawable/icon\" android:screenOrientation=\"portrait\" android:showForAllUsers=\"true\" android:showOnLockScreen=\"true\" android:showWhenLocked=\"true\" android:singleUser=\"true\" android:stateNotNeeded=\"true\" android:supportsPictureInPicture=\"true\" android:taskAffinity=\"com.contoso\" android:theme=\"@android:style/Theme.Light\" android:turnScreenOn=\"true\" android:uiOptions=\"splitActionBarWhenNarrow\" android:visibleToInstantApps=\"true\" android:windowSoftInputMode=\"stateUnchanged|adjustUnspecified\"";

            var proj = new XamarinAndroidApplicationProject();

            proj.Sources.Add(new BuildItem.Source("TestActivity.cs")
            {
                TextContent = () => @"using Android.App;
using Android.Content.PM;
using Android.Views;
[Activity (
	AllowEmbedded              = true,
	AllowTaskReparenting       = true,
	AlwaysRetainTaskState      = true,
	AutoRemoveFromRecents      = true,
	Banner                     = ""@drawable/icon"",
	ClearTaskOnLaunch          = true,
	ColorMode                  = ""hdr"",
	ConfigurationChanges       = ConfigChanges.Mcc,
	Description                = ""@string/app_name"",
	DirectBootAware            = true,
	DocumentLaunchMode         = DocumentLaunchMode.Never,
	Enabled                    = true,
	EnableVrMode               = ""foo"",
	ExcludeFromRecents         = true,
	Exported                   = true,
	FinishOnCloseSystemDialogs = true,
	FinishOnTaskLaunch         = true,
	HardwareAccelerated        = true,
	Icon                       = ""@drawable/icon"",
	Immersive                  = true,
	Label                      = ""TestActivity"",
	LaunchMode                 = LaunchMode.SingleTop,
	LockTaskMode               = ""normal"",
	Logo                       = ""@drawable/icon"",
	MaxAspectRatio             = 1.2F,
	MaxRecents                 = 1,
	MultiProcess               = true,
	Name                       = ""com.contoso.TestActivity"",
	NoHistory                  = true,
	ParentActivity             = typeof (UnnamedProject.MainActivity),
	Permission                 = ""com.contoso.permission.TEST_ACTIVITY"",
	PersistableMode            = ActivityPersistableMode.Never,
	Process                    = ""com.contoso.process.testactivity_process"",
	RecreateOnConfigChanges    = ConfigChanges.Mcc,
	RelinquishTaskIdentity     = true,
	ResizeableActivity         = true,
	ResumeWhilePausing         = true,
	RotationAnimation          = WindowRotationAnimation.Crossfade,
	RoundIcon                  = ""@drawable/icon"",
	ScreenOrientation          = ScreenOrientation.Portrait,
	ShowForAllUsers            = true,
	ShowOnLockScreen           = true,
	ShowWhenLocked             = true,
	SingleUser                 = true,
	StateNotNeeded             = true,
	SupportsPictureInPicture   = true,
	TaskAffinity               = ""com.contoso"",
	Theme                      = ""@android:style/Theme.Light"",
	TurnScreenOn               = true,
	UiOptions                  = UiOptions.SplitActionBarWhenNarrow,
	VisibleToInstantApps       = true,
	WindowSoftInputMode        = Android.Views.SoftInput.StateUnchanged)]
class TestActivity : Activity { }"
            });

            using (ProjectBuilder builder = CreateDllBuilder(Path.Combine("temp", TestName))) {
                Assert.IsTrue(builder.Build(proj), "Build should have succeeded");

                string manifest = builder.Output.GetIntermediaryAsText(Path.Combine("android", "AndroidManifest.xml"));
                var    doc      = XDocument.Parse(manifest);
                var    ns       = XNamespace.Get("http://schemas.android.com/apk/res/android");
                IEnumerable <XElement> activities = doc.Element("manifest")?.Element("application")?.Elements("activity");
                XElement e = activities.FirstOrDefault(x => x.Attribute(ns.GetName("label"))?.Value == "TestActivity");
                Assert.IsNotNull(e, "Manifest should contain an activity labeled TestActivity");
                Assert.AreEqual(expectedOutput, string.Join(" ", e.Attributes()));
            }
        }
 public static void Build(string projectFile, string[] extraClasspaths, bool noTrace)
 {
     Project project = Project.Load(projectFile);
     ProjectBuilder builder = new ProjectBuilder(project);
     builder.Build(extraClasspaths, noTrace);
 }
Пример #27
0
        public List <Test> RunTests()
        {
            var project = Path.GetFileNameWithoutExtension(_unoProj);

            _logger.ProjectStarting(project, _options.Target.ToString());
            List <Test> tests = new List <Test>();

            try
            {
                _testRun = new TestRun(_logger);

                var  cts         = new CancellationTokenSource();
                bool runFinished = false;
                try
                {
                    var log             = Log.Default;
                    var target          = _options.Target;
                    var proj            = Project.Load(_unoProj);
                    var outputDirectory = _options.OutputDirectory ?? Path.GetFullPath(Path.Combine(proj.BuildDirectory, "Test", target.Identifier));

                    var options = new BuildOptions {
                        Test            = true,
                        Force           = true,
                        TestFilter      = _options.Filter,
                        OutputDirectory = outputDirectory,
                        WarningLevel    = 1,
                        Library         = _options.Library,
                        PackageTarget   = Build.Targets.BuildTargets.Package
                    };

                    options.Defines.AddRange(_options.Defines);
                    options.Undefines.AddRange(_options.Undefines);

                    var builder = new ProjectBuilder(log, target, options);
                    var result  = builder.Build(proj);
                    if (result.ErrorCount != 0)
                    {
                        throw new Exception("Build failed.");
                    }
                    if (_options.OnlyBuild)
                    {
                        return(tests);
                    }

                    // We don't need a window when running tests.
                    Environment.SetEnvironmentVariable("UNO_WINDOW_HIDDEN", "1");

                    var targetLog = new Log(new DebugLogTestFilter(Console.Out, _testRun), Console.Error);

                    Task runTask = null;
                    try
                    {
                        runTask = Task.Run(() => result.RunAsync(targetLog, cts.Token), cts.Token);
                        _testRun.Start();

                        tests       = _testRun.WaitUntilFinished();
                        runFinished = runTask.Wait(100);
                    }
                    finally
                    {
                        if ((target is AndroidBuild || target is iOSBuild) &&
                            !_options.NoUninstall &&
                            runTask != null)
                        {
                            // Wait a little more for app to quit, after that we don't care
                            runTask.Wait(500);
                            Task.Run(() => target.Run(Shell.Default, result.File, "uninstall", cts.Token)).Wait();
                        }
                    }
                }
                finally
                {
                    _logger.ProjectEnded(tests);
                    if (!runFinished)
                    {
                        cts.Cancel();
                    }
                    cts.Dispose();
                }
            }
            finally
            {
                if (_testRun != null)
                {
                    _testRun.Dispose();
                    _testRun = null;
                }
            }
            return(tests);
        }
Пример #28
0
        private static void Generate(string projectFolder, string configPath)
        {
            // get config

            configPath = !string.IsNullOrEmpty(configPath)
                ? Path.Combine(projectFolder, configPath)
                : Path.Combine(projectFolder, "tgconfig.json");

            TgConfig config = _configProvider.GetConfig(configPath, projectFolder);

            LogConfigWarnings(config);

            // register assembly resolver

            _assemblyResolver.Directories = config.ExternalAssemblyPaths;
            _assemblyResolver.Register();

            IEnumerable <Assembly> assemblies = GetAssemblies(config.GetAssemblies()).ToArray();

            // create generator

            GeneratorOptions generatorOptions = _generatorOptionsProvider.GetGeneratorOptions(config, assemblies, projectFolder);

            generatorOptions.BaseOutputDirectory = Path.Combine(projectFolder, config.OutputPath);
            var generator = new Generator(generatorOptions, _logger);

            // generate

            if (config.ClearOutputDirectory == true)
            {
                _fileSystem.ClearDirectory(generatorOptions.BaseOutputDirectory);
            }
            if (config.BuildProject == true)
            {
                _projectBuilder.Build(projectFolder);
            }

            _logger.Log($"Generating files for project \"{projectFolder}\"...", LogLevel.Info);

            var generatedFiles = new List <string>();

            if (!config.GenerationSpecs.Any() || config.GenerateFromAssemblies == true)
            {
                generatedFiles.AddRange(generator.Generate(assemblies));
            }

            if (config.GenerationSpecs.Any())
            {
                var typeResolver = new TypeResolver(_logger, _fileSystem, projectFolder, assemblies);

                IEnumerable <GenerationSpec> generationSpecs = config.GenerationSpecs
                                                               .Select(name => typeResolver.Resolve(name, "GenerationSpec"))
                                                               .Where(t => t != null)
                                                               .Select(t => (GenerationSpec)Activator.CreateInstance(t))
                                                               .ToArray();

                generatedFiles.AddRange(generator.Generate(generationSpecs));
            }

            foreach (string file in generatedFiles)
            {
                _logger.Log($"Generated {file}", LogLevel.Info);
            }

            if (config.AddFilesToProject ?? TgConfig.DefaultAddFilesToProject)
            {
                AddFilesToProject(projectFolder, generatedFiles);
            }

            // unregister assembly resolver

            _assemblyResolver.Unregister();

            _logger.Log($"Files for project \"{projectFolder}\" generated successfully.{Environment.NewLine}", LogLevel.Info);
        }
Пример #29
0
 public static void BuildProject() => ProjectBuilder.Build();
Пример #30
0
        public List <Test> RunTests()
        {
            var project = Path.GetFileNameWithoutExtension(_unoProj);

            _logger.ProjectStarting(project, _options.Target.ToString());
            List <Test> tests = new List <Test>();

            try
            {
                _testRun = new TestRun(_logger, _options.TestTimeout, _options.StartupTimeout);

                HttpTestCommunicator communicator = null;
                if (!_options.RunLocal)
                {
                    communicator = new HttpTestCommunicator(_logger, _testRun, NeedsPublicIp());
                }

                var  cts         = new CancellationTokenSource();
                bool runFinished = false;
                try
                {
                    var log             = Log.Default;
                    var target          = _options.Target;
                    var proj            = Project.Load(_unoProj);
                    var outputDirectory = _options.OutputDirectory ?? Path.GetFullPath(Path.Combine(proj.BuildDirectory, "Test", target.Identifier));

                    // YUCK: need to start the communicator before building, to get the Prefix/TestServerUrl
                    if (communicator != null)
                    {
                        communicator.Start();
                    }

                    var options = new BuildOptions {
                        Test            = true,
                        Force           = true,
                        TestFilter      = _options.Filter,
                        TestServerUrl   = _options.RunLocal ? string.Empty : communicator.Prefix,
                        OutputDirectory = outputDirectory,
                        WarningLevel    = 1,
                        Library         = _options.Library,
                        PackageTarget   = Build.Targets.BuildTargets.Package
                    };

                    options.Defines.AddRange(_options.Defines);
                    options.Undefines.AddRange(_options.Undefines);

                    if (_options.OpenDebugger)
                    {
                        options.RunArguments = "debug";
                        options.Native       = false;        // disable native build
                        options.Defines.Add("DEBUG_NATIVE"); // disable native optimizations
                    }

                    var builder = new ProjectBuilder(log, target, options);
                    var result  = builder.Build(proj);
                    if (result.ErrorCount != 0)
                    {
                        throw new Exception("Build failed.");
                    }

                    Log targetLog = null;
                    if (_options.RunLocal)
                    {
                        targetLog = new Log(new DebugLogTestFilter(Console.Out, _testRun), Console.Error);
                    }
                    Task runTask = null;
                    try
                    {
                        if (!_options.AllowDebugger)
                        {
                            runTask = Task.Run(() => result.RunAsync(targetLog, cts.Token), cts.Token);
                        }
                        _testRun.Start();


                        tests = _testRun.WaitUntilFinished();
                        if (runTask != null)
                        {
                            runFinished = runTask.Wait(100);
                        }
                    }
                    finally
                    {
                        if ((target is AndroidBuild || target is iOSBuild) &&
                            !_options.NoUninstall &&
                            runTask != null)
                        {
                            // Wait a little more for app to quit, after that we don't care
                            runTask.Wait(500);
                            Task.Run(() => target.Run(Shell.Default, result.File, "uninstall", cts.Token)).Wait();
                        }
                    }
                }
                finally
                {
                    if (communicator != null)
                    {
                        communicator.Stop();
                    }

                    _logger.ProjectEnded(tests);
                    if (!runFinished)
                    {
                        cts.Cancel();
                    }
                    cts.Dispose();
                }
            }
            finally
            {
                if (_testRun != null)
                {
                    _testRun.Dispose();
                    _testRun = null;
                }
            }
            return(tests);
        }