public void SignAndroidPackage_DefaultProperties() { string versionCode = "1", versionName = "1.0", packageName = "com.test"; var project = MSBuild.NewProject(testDirectory); var projectFile = Path.Combine(tempDirectory, "test.csproj"); project.Save(projectFile); MSBuild.Restore(projectFile); MSBuild.Build(projectFile, "SignAndroidPackage"); var propsPath = Path.Combine(objDirectory, "Xamarin.Android.Lite.props"); FileAssert.Exists(propsPath); var manifestPath = Path.Combine(objDirectory, "AndroidManifest.xml"); FileAssert.Exists(manifestPath); var ns = AndroidManifest.AndroidNamespace.Namespace; var manifest = AndroidManifest.Read(manifestPath); Assert.AreEqual(versionCode, manifest.Document.Attribute(ns + "versionCode")?.Value, "versionCode should match"); Assert.AreEqual(versionName, manifest.Document.Attribute(ns + "versionName")?.Value, "versionName should match"); Assert.AreEqual(packageName, manifest.Document.Attribute("package")?.Value, "package should match"); var apkPath = Path.Combine(binDirectory, packageName + ".apk"); FileAssert.Exists(apkPath); }
public void ApkShouldChangeDuringNuGetUpgrade() { var baseApk = Path.Combine(testDirectory, "..", "..", "..", "bin", MSBuild.Configuration, "build", "com.xamarin.android.lite.apk"); FileAssert.Exists(baseApk); var backup = Path.GetTempFileName(); File.Copy(baseApk, backup, true); try { var project = MSBuild.NewProject(testDirectory); var projectFile = Path.Combine(tempDirectory, "test.csproj"); project.Save(projectFile); MSBuild.Restore(projectFile); MSBuild.Build(projectFile, "SignAndroidPackage"); //Simulate a NuGet upgrade, as if the base APK changed using (var zip = ZipArchive.Open(baseApk, FileMode.Append)) { zip.AddEntry(new byte [0], "foo.txt"); } MSBuild.Build(projectFile, "SignAndroidPackage"); var builtApk = Path.Combine(binDirectory, "com.test.apk"); using (var zip = ZipArchive.Open(baseApk, FileMode.Open)) { Assert.IsTrue(zip.ContainsEntry("foo.txt"), "APK should be updated!"); } } finally { File.Copy(backup, baseApk, true); File.Delete(backup); } }
public void Clean() { var project = MSBuild.NewProject(testDirectory); var projectFile = Path.Combine(tempDirectory, "test.csproj"); project.Save(projectFile); MSBuild.Restore(projectFile); MSBuild.Build(projectFile, "SignAndroidPackage"); MSBuild.Clean(projectFile); var allowedFiles = new [] { //NOTE: apparently MSBuild 15.7.179 leaves this behind? $(ProjectAssetsCache) file "test.assets.cache", }; //Seriously, I am disgusted by them var offensiveFiles = new List <string> (); offensiveFiles.AddRange(Directory.EnumerateFiles(binDirectory, "*", SearchOption.AllDirectories).Where(f => !allowedFiles.Contains(Path.GetFileName(f)))); offensiveFiles.AddRange(Directory.EnumerateFiles(objDirectory, "*", SearchOption.AllDirectories).Where(f => !allowedFiles.Contains(Path.GetFileName(f)))); if (offensiveFiles.Count > 0) { var message = new StringBuilder(); message.AppendLine("Files should not exist:"); offensiveFiles.Aggregate(message, (m, f) => m.AppendLine(f)); Assert.Fail(message.ToString()); } //Build one more time, checking we should not have to /t:Restore again MSBuild.Build(projectFile, "SignAndroidPackage"); }
public void Run() { EnsureDeviceConnected(); var project = MSBuild.NewProject(testDirectory); var projectFile = Path.Combine(tempDirectory, "test.csproj"); project.Save(projectFile); MSBuild.Restore(projectFile); MSBuild.Build(projectFile, "Run"); }
public void SignAndroidPackage_UpdateProperties() { string versionCode = "1234", versionName = "1.2.3.4", packageName = "com.mycompany.myapp"; var versionCodeElement = MSBuild.NewElement("AndroidVersionCode").WithValue(versionCode); var versionNameElement = MSBuild.NewElement("AndroidVersionName").WithValue(versionName); var packageNameElement = MSBuild.NewElement("AndroidPackageName").WithValue(packageName); var project = MSBuild.NewProject(testDirectory); var propertyGroup = MSBuild.NewElement("PropertyGroup"); propertyGroup.Add(versionCodeElement); propertyGroup.Add(versionNameElement); propertyGroup.Add(packageNameElement); project.AddFirst(propertyGroup); var projectFile = Path.Combine(tempDirectory, "test.csproj"); project.Save(projectFile); MSBuild.Restore(projectFile); MSBuild.Build(projectFile, "SignAndroidPackage"); versionCodeElement.Value = versionCode = "99"; versionNameElement.Value = versionName = "2.0"; packageNameElement.Value = packageName = "com.mycompany.myapp2"; project.Save(projectFile); MSBuild.Build(projectFile, "SignAndroidPackage"); var manifestPath = Path.Combine(objDirectory, "AndroidManifest.xml"); FileAssert.Exists(manifestPath); var ns = AndroidManifest.AndroidNamespace.Namespace; var manifest = AndroidManifest.Read(manifestPath); Assert.AreEqual(versionCode, manifest.Document.Attribute(ns + "versionCode")?.Value, "versionCode should match"); Assert.AreEqual(versionName, manifest.Document.Attribute(ns + "versionName")?.Value, "versionName should match"); Assert.AreEqual(packageName, manifest.Document.Attribute("package")?.Value, "package should match"); }