public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions, PListSubstitutions plistReplacements = null, bool includeAssets = false)
        {
            plistReplacements = plistReplacements ?? PListSubstitutions.None;
            FileCopier templateEngine = CreateEngine(outputDirectory);

            if (includeAssets)
            {
                templateEngine.CopyDirectory("Icons/Assets.xcassets");

                projectSubstitutions.ItemGroup += @"<ItemGroup>
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\Contents.json"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128%402x.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16%402x.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-256%402x.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32.png"" />
    <ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32%402x.png"" />
    <ImageAsset Include=""Assets.xcassets\Contents.json"" />
  </ItemGroup>";

                // HACK - Should process using CopyFileWithSubstitutions
                plistReplacements.Replacements.Add("</dict>", @"<key>XSAppIconAssets</key><string>Assets.xcassets/AppIcon.appiconset</string></dict>");
            }

            ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl));

            templateEngine.CopyTextWithSubstitutions(GetAppMainSourceText(TemplateInfo.Language), TemplateInfo.SourceName, replacements);

            templateEngine.CopyFileWithSubstitutions("Info-Unified.plist", plistReplacements.CreateReplacementAction(), "Info.plist");

            return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions)));
        }
        public static OutputText TestSystemMonoExecutable(UnifiedTestConfig config, bool shouldFail = false)
        {
            config.guid      = Guid.NewGuid();
            config.TestCode += GenerateOutputCommand(config.TmpDir, config.guid);

            var engine = new MacSystemMonoTemplateEngine();
            ProjectSubstitutions projectSubstitutions = CreateDefaultSubstitutions(config);
            FileSubstitutions    fileSubstitutions    = new FileSubstitutions()
            {
                TestCode = config.TestCode
            };
            string csprojTarget = engine.Generate(config.TmpDir, projectSubstitutions, fileSubstitutions);

            string buildOutput = BuildProject(csprojTarget, isUnified: true, shouldFail: shouldFail, release: config.Release);

            if (shouldFail)
            {
                return(new OutputText(buildOutput, ""));
            }

            string exePath   = Path.Combine(config.TmpDir, "bin", config.Release ? "Release" : "Debug", "SystemMonoExample.app/Contents/MacOS/SystemMonoExample");
            string runOutput = RunEXEAndVerifyGUID(config.TmpDir, config.guid, exePath);

            return(new OutputText(buildOutput, runOutput));
        }
        public static OutputText TestClassicExecutable(string tmpDir, string testCode = "", string csprojConfig = "", bool shouldFail = false, bool includeMonoRuntime = false)
        {
            Guid guid = Guid.NewGuid();

            testCode += GenerateOutputCommand(tmpDir, guid);

            var engine = new MacClassicAppTemplateEngine();
            ProjectSubstitutions projectSubstitutions = new ProjectSubstitutions {
                CSProjConfig = csprojConfig
            };
            FileSubstitutions fileSubstitutions = new FileSubstitutions {
                TestCode = testCode
            };
            string csprojTarget = engine.Generate(tmpDir, projectSubstitutions, fileSubstitutions, includeMonoRuntime);

            string buildOutput = BuildProject(csprojTarget, isUnified: false, shouldFail: shouldFail);

            if (shouldFail)
            {
                return(new OutputText(buildOutput, ""));
            }

            string exePath   = Path.Combine(tmpDir, "bin/Debug/ClassicExample.app/Contents/MacOS/ClassicExample");
            string runOutput = RunEXEAndVerifyGUID(tmpDir, guid, exePath);

            return(new OutputText(buildOutput, runOutput));
        }
Example #4
0
        public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions, bool includeMonoRuntime = false)
        {
            const string TestCode       = @"using MonoMac.Foundation;
using MonoMac.AppKit;

namespace TestCase
{
	class MainClass
	{
		%DECL%

		static void Main (string[] args)
		{
			NSApplication.Init ();
			%CODE%
		}
	}
}";
            FileCopier   templateEngine = CreateEngine(outputDirectory);

            ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl));

            templateEngine.CopyTextWithSubstitutions(TestCode, TemplateInfo.SourceName, replacements);

            templateEngine.CopyFile("Info-Classic.plist", "Info.plist");

            ReplacementGroup replacementGroup = ReplacementGroup.Create(Replacement.Create("%CODE%", projectSubstitutions.CSProjConfig), Replacement.Create("%INCLUDE_MONO_RUNTIME%", includeMonoRuntime.ToString()));

            return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, replacementGroup));
        }
        public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions)
        {
            FileCopier templateEngine = CreateEngine(outputDirectory);

            templateEngine.CopyFileWithSubstitutions(TemplateInfo.SourceName, Replacement.Create("%CODE%", fileSubstitutions.TestCode));

            return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions)));
        }
        public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions)
        {
            FileCopier templateEngine = CreateEngine(outputDirectory);

            templateEngine.CopyFileWithSubstitutions("ApiDefinition.cs", Replacement.Create("%CODE%", fileSubstitutions.ApiDefinition));
            templateEngine.CopyFileWithSubstitutions("StructsAndEnums.cs", Replacement.Create("%CODE%", fileSubstitutions.StructsAndEnums));

            return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions)));
        }
Example #7
0
        public string Generate(string outputDirectory, ProjectSubstitutions projectSubstitutions, FileSubstitutions fileSubstitutions)
        {
            FileCopier templateEngine = CreateEngine(outputDirectory);

            ReplacementGroup replacements = ReplacementGroup.Create(Replacement.Create("%CODE%", fileSubstitutions.TestCode), Replacement.Create("%DECL%", fileSubstitutions.TestDecl));

            templateEngine.CopyTextWithSubstitutions(MacAppTemplateEngine.GetAppMainSourceText(ProjectLanguage.CSharp), TemplateInfo.SourceName, replacements);

            templateEngine.CopyFile("Info-Unified.plist", "Info.plist");

            return(templateEngine.CopyFileWithSubstitutions(TemplateInfo.ProjectName, GetStandardProjectReplacement(projectSubstitutions)));
        }
Example #8
0
        public void MacTestApp()
        {
            var tmpDir = Cache.CreateTemporaryDirectory();

            var engine            = new MacAppTemplateEngine(ProjectFlavor.FullXM, ProjectLanguage.CSharp);
            var fileSubstitutions = new FileSubstitutions {
                TestCode = "System.Console.WriteLine (typeof (int));"
            };
            var projectSubstitutions = new ProjectSubstitutions {
                References = "<Reference Include=\"System.Net.Http\" />",
            };
            string projectPath = engine.Generate(tmpDir, projectSubstitutions, fileSubstitutions);

            ProjectBuilder.BuildProject(projectPath, "/");              /* Use system XM instead of _mac-build today */
        }