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; }
public static void Build(string projectFile, string[] extraClasspaths, bool noTrace) { Project project = Project.Load(projectFile); ProjectBuilder builder = new ProjectBuilder(project); builder.Build(extraClasspaths, noTrace); }
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); }
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."); }
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); }
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); })); }
/// <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); }
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)); }
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"); } }
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."); }
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); }
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()); }
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)); }
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())); } }
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); }
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); }
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."); }
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); }
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); }
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); } }
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); }
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); }
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 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); }
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); }
public static void BuildProject() => ProjectBuilder.Build();
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); }