Esempio n. 1
0
        public void CompareAaptAndManagedParserOutputWithCustomIds()
        {
            var path = Path.Combine("temp", TestName);

            CreateResourceDirectory(path);
            File.WriteAllText(Path.Combine(Root, path, "res", "layout", "custom.xml"), CustomId);
            File.WriteAllText(Path.Combine(Root, path, "foo.map"), @"a\nb");
            Directory.CreateDirectory(Path.Combine(Root, path, "java"));
            string resPath  = Path.Combine(Root, path, "res");
            int    platform = 0;

            using (var b = new Builder()) {
                platform = b.GetMaxInstalledPlatform();
            }
            IBuildEngine engine = new MockBuildEngine(TestContext.Out);
            var          aapt   = new Aapt()
            {
                BuildEngine                      = engine,
                ToolPath                         = GetPathToAapt(),
                ResourceDirectory                = resPath,
                ManifestFiles                    = new ITaskItem [] { new TaskItem(Path.Combine(Root, path, "AndroidManifest.xml")) },
                ResourceOutputFile               = Path.Combine(Root, path, "foo.apk"),
                AssemblyIdentityMapFile          = Path.Combine(Root, path, "foo.map"),
                JavaPlatformJarPath              = Path.Combine(AndroidSdkDirectory, "platforms", $"android-{platform}", "android.jar"),
                JavaDesignerOutputDirectory      = Path.Combine(Root, path, "java"),
                ResourceSymbolsTextFileDirectory = Path.Combine(Root, path),
                AdditionalResourceDirectories    = new ITaskItem [] { new TaskItem(Path.Combine(Root, path, "lp", "res")) },
                AndroidUseLatestPlatformSdk      = true,
                ApiLevel                         = $"{platform}",
            };

            Assert.IsTrue(aapt.Execute(), "Aapt should have succeeded.");
            string rTxt = Path.Combine(Root, path, "R.txt");

            FileAssert.Exists(rTxt, $"{rTxt} should have been created.");

            var task = new GenerateResourceDesigner {
                BuildEngine = engine
            };

            task.UseManagedResourceGenerator = true;
            task.DesignTimeBuild             = false;
            task.Namespace           = "MonoAndroidApplication4.MonoAndroidApplication4";
            task.NetResgenOutputFile = Path.Combine(Root, path, "Resource.designer.aapt.cs");
            task.ProjectDir          = Path.Combine(Root, path);
            task.ResourceDirectory   = Path.Combine(Root, path, "res") + Path.DirectorySeparatorChar;
            task.Resources           = new TaskItem [] {
                new TaskItem(Path.Combine(Root, path, "res", "values", "strings.xml"), new Dictionary <string, string> ()
                {
                    { "LogicalName", "values\\strings.xml" },
                }),
            };
            task.AdditionalResourceDirectories = new TaskItem [] {
                new TaskItem(Path.Combine(Root, path, "lp", "res")),
            };
            task.ResourceFlagFile    = Path.Combine(Root, path, "AndroidResgen.flag");
            task.IsApplication       = true;
            task.JavaPlatformJarPath = aapt.JavaPlatformJarPath;
            Assert.IsTrue(task.Execute(), "Task should have executed successfully.");

            string aaptDesigner     = Path.Combine(Root, path, "Resource.designer.aapt.cs");
            var    aaptDesignerText = File.ReadAllText(aaptDesigner);

            StringAssert.Contains("MyCustomID", aaptDesignerText, "");
            StringAssert.Contains("HelloWorldTextView", aaptDesignerText, "");
            StringAssert.Contains("ACustomID", aaptDesignerText, "");
            StringAssert.Contains("foo1", aaptDesignerText, "");

            task.UseManagedResourceGenerator = true;
            task.DesignTimeBuild             = true;
            task.NetResgenOutputFile         = Path.Combine(Root, path, "Resource.designer.managedrtxt.cs");
            Assert.IsTrue(task.Execute(), "Task should have executed successfully.");

            string managedDesignerRtxt = Path.Combine(Root, path, "Resource.designer.managedrtxt.cs");

            CompareFilesIgnoreRuntimeInfoString(managedDesignerRtxt, aaptDesigner);

            File.WriteAllText(task.ResourceFlagFile, string.Empty);
            File.Delete(Path.Combine(Root, path, "R.txt.bak"));
            File.Move(rTxt, Path.Combine(Root, path, "R.txt.bak"));

            task.UseManagedResourceGenerator = true;
            task.DesignTimeBuild             = true;
            task.NetResgenOutputFile         = Path.Combine(Root, path, "Resource.designer.managed.cs");
            Assert.IsTrue(task.Execute(), "Task should have executed successfully.");
            string managedDesigner = Path.Combine(Root, path, "Resource.designer.managed.cs");

            var managedDesignerText = File.ReadAllText(managedDesigner);

            StringAssert.Contains("MyCustomID", managedDesignerText, "");
            StringAssert.Contains("HelloWorldTextView", managedDesignerText, "");
            StringAssert.Contains("ACustomID", managedDesignerText, "");
            StringAssert.Contains("foo1", managedDesignerText, "");

            Directory.Delete(Path.Combine(Root, path), recursive: true);
        }