From 18fd0b89a05936866a02c79de08b38cd6411a6f0 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 8 Dec 2022 14:52:05 +0000 Subject: [PATCH] Inital Commit --- Directory.Build.props | 1 + .../PackagingTest.cs | 28 ++++++++++++++++++- .../Utilities/ArchiveAssemblyHelper.cs | 16 +++++++---- .../Xamarin.Android.Build.Tests.csproj | 1 + .../Resources/Base/MainActivity.cs | 1 + .../Resources/DotNet/MainActivity.cs | 1 + .../Resources/Forms/MainActivity.cs | 3 +- .../Resources/Wear/MainActivity.cs | 1 + .../MSBuildDeviceIntegration.csproj | 1 + .../Tests/LocalizationTests.cs | 27 ++++++++++++++++-- 10 files changed, 71 insertions(+), 9 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 7006a2d902b..9eb443a1fc4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -50,6 +50,7 @@ 6.0.0 6.0.0 2.13.1 + 2.14.1 5.8.9.2 diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index c69455160ff..8754f7d79e7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -73,6 +73,25 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto }; proj.SetProperty ("AndroidUseAssemblyStore", usesAssemblyStores.ToString ()); proj.SetAndroidSupportedAbis ("armeabi-v7a"); + proj.PackageReferences.Add (new Package { + Id = "Humanizer.Core", + Version = "2.14.1", + }); + proj.PackageReferences.Add (new Package { + Id = "Humanizer.Core.es", + Version = "2.14.1", + }); + proj.MainActivity = proj.DefaultMainActivity + .Replace ("//${USINGS}", @"using System; +using Humanizer; +using System.Globalization;") + .Replace ("//${AFTER_ONCREATE}", @"var c = new CultureInfo (""es-ES""); +Console.WriteLine ($""{DateTime.UtcNow.AddHours(-30).Humanize(culture:c)}""); +//${AFTER_ONCREATE}"); + if (Builder.UseDotNet) { + proj.OtherBuildItems.Add (new BuildItem ("Using", "System.Globalization")); + proj.OtherBuildItems.Add (new BuildItem ("Using", "Humanizer")); + } if (!Builder.UseDotNet) { proj.PackageReferences.Add (new Package { Id = "System.Runtime.InteropServices.WindowsRuntime", @@ -80,7 +99,7 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto TargetFramework = "monoandroid71", }); proj.References.Add (new BuildItem.Reference ("Mono.Data.Sqlite.dll")); - proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", "var command = new Mono.Data.Sqlite.SqliteCommand ();"); + proj.MainActivity = proj.MainActivity.Replace ("//${AFTER_ONCREATE}", "var command = new Mono.Data.Sqlite.SqliteCommand ();"); } var expectedFiles = Builder.UseDotNet ? new [] { @@ -95,6 +114,11 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto "System.Linq.dll", "UnnamedProject.dll", "_Microsoft.Android.Resource.Designer.dll", + "Humanizer.dll", + "es/Humanizer.resources.dll", + "System.Collections.dll", + "System.Collections.Concurrent.dll", + "System.Text.RegularExpressions.dll", } : new [] { "Java.Interop.dll", @@ -106,6 +130,8 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto "UnnamedProject.dll", "Mono.Data.Sqlite.dll", "Mono.Data.Sqlite.dll.config", + "Humanizer.dll", + //"es/Humanizer.resources.dll", <- Bug in classic. }; using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "build should have succeeded."); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ArchiveAssemblyHelper.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ArchiveAssemblyHelper.cs index 466512e270d..78f0aabd3fa 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ArchiveAssemblyHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ArchiveAssemblyHelper.cs @@ -239,8 +239,8 @@ void ArchiveContains (string[] fileNames, out List existingFiles, out Li { using (var zip = ZipHelper.OpenZip (archivePath)) { existingFiles = zip.Where (a => a.FullName.StartsWith (assembliesRootDir, StringComparison.InvariantCultureIgnoreCase)).Select (a => a.FullName).ToList (); - missingFiles = fileNames.Where (x => !zip.ContainsEntry (assembliesRootDir + Path.GetFileName (x))).ToList (); - additionalFiles = existingFiles.Where (x => !fileNames.Contains (Path.GetFileName (x))).ToList (); + missingFiles = fileNames.Where (x => !zip.ContainsEntry (assembliesRootDir + x)).ToList (); + additionalFiles = existingFiles.Where (x => !fileNames.Contains (x.Replace (assembliesRootDir, string.Empty))).ToList (); } } @@ -258,7 +258,7 @@ void StoreContains (string[] fileNames, out List existingFiles, out List if (otherFiles.Count > 0) { using (var zip = ZipHelper.OpenZip (archivePath)) { foreach (string file in otherFiles) { - string fullPath = assembliesRootDir + Path.GetFileName (file); + string fullPath = assembliesRootDir + file; if (zip.ContainsEntry (fullPath)) { existingFiles.Add (file); } @@ -266,7 +266,13 @@ void StoreContains (string[] fileNames, out List existingFiles, out List } } - var explorer = new AssemblyStoreExplorer (archivePath); + var explorer = new AssemblyStoreExplorer (archivePath, customLogger: (a, s) => { + Console.WriteLine ($"DEBUG! {s}"); + }); + + foreach (var f in explorer.AssembliesByName) { + Console.WriteLine ($"DEBUG!\tKey:{f.Key}"); + } // Assembly stores don't store the assembly extension var storeAssemblies = explorer.AssembliesByName.Keys.Select (x => $"{x}.dll"); @@ -298,7 +304,7 @@ void StoreContains (string[] fileNames, out List existingFiles, out List } foreach (string file in fileNames) { - if (existingFiles.Contains (Path.GetFileName (file))) { + if (existingFiles.Contains (file)) { continue; } missingFiles.Add (file); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj index 19b9d3839f4..d6ebaf54736 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj @@ -56,6 +56,7 @@ + diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/MainActivity.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/MainActivity.cs index 4b2ff76580c..8e1a16169e6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/MainActivity.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/MainActivity.cs @@ -6,6 +6,7 @@ using Android.Views; using Android.Widget; using Android.OS; +//${USINGS} namespace ${ROOT_NAMESPACE} { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/DotNet/MainActivity.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/DotNet/MainActivity.cs index ed408f5cf1b..7b6e41efcd7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/DotNet/MainActivity.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/DotNet/MainActivity.cs @@ -1,3 +1,4 @@ +//${USINGS} namespace ${ROOT_NAMESPACE} { [Android.Runtime.Register ("${JAVA_PACKAGENAME}.MainActivity"), Activity (Label = "${PROJECT_NAME}", MainLauncher = true, Icon = "@drawable/icon")] diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Forms/MainActivity.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Forms/MainActivity.cs index 718c868b0f0..2cb1ed6142c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Forms/MainActivity.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Forms/MainActivity.cs @@ -6,6 +6,7 @@ using Android.Views; using Android.Widget; using Android.OS; +//${USINGS} namespace ${ROOT_NAMESPACE} { @@ -23,4 +24,4 @@ protected override void OnCreate (Bundle savedInstanceState) LoadApplication (new App ()); } } -} \ No newline at end of file +} diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Wear/MainActivity.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Wear/MainActivity.cs index 7fb0cd749e9..09aa236dc7e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Wear/MainActivity.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Wear/MainActivity.cs @@ -8,6 +8,7 @@ using Android.Support.Wearable.Views; using Android.Views; using Android.Widget; +//${USINGS} namespace ${ROOT_NAMESPACE} { diff --git a/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj b/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj index 9691bb7b73b..8f6b1ecd0b8 100644 --- a/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj +++ b/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj @@ -40,6 +40,7 @@ + diff --git a/tests/MSBuildDeviceIntegration/Tests/LocalizationTests.cs b/tests/MSBuildDeviceIntegration/Tests/LocalizationTests.cs index 8c0893503e5..0f58f12ba19 100644 --- a/tests/MSBuildDeviceIntegration/Tests/LocalizationTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/LocalizationTests.cs @@ -7,6 +7,7 @@ using NUnit.Framework; using NUnit.Framework.Interfaces; using Xamarin.ProjectTools; +using Humanizer; namespace Xamarin.Android.Build.Tests { @@ -30,14 +31,23 @@ public void BeforeAllTests () } proj = new XamarinAndroidApplicationProject (packageName: "LocalizationTests"); - proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", @"button.Text = $""Strings.SomeString={Strings.SomeString}""; + proj.PackageReferences.Add (new Package { + Id = "Humanizer", + Version = "2.14.1", + }); + var source = proj.DefaultMainActivity + .Replace ("//${USINGS}", @"using Humanizer; +using System.Globalization;"); + source = source.Replace ("//${AFTER_ONCREATE}", @"button.Text = $""Strings.SomeString={Strings.SomeString}""; Console.WriteLine ($""LocaleNative={Java.Util.Locale.Default.Language}-{Java.Util.Locale.Default.Country}""); Console.WriteLine ($""CurrentCulture={System.Globalization.CultureInfo.CurrentCulture.Name}""); Console.WriteLine ($""Strings.SomeString={Strings.SomeString}""); + Console.WriteLine ($""Humanizer={DateTime.UtcNow.AddHours(-30).Humanize()}""); "); + proj.MainActivity = source; InlineData.AddCultureResourcesToProject (proj, "Strings", "SomeString"); InlineData.AddCultureResourceDesignerToProject (proj, proj.RootNamespace ?? proj.ProjectName, "Strings", "SomeString"); - + builder = CreateApkBuilder (Path.Combine ("temp", "LocalizationTests")); builder.BuildLogFile = "onetimesetup-install.log"; Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); @@ -247,8 +257,21 @@ public void CheckLocalizationIsCorrect (string locale) } return false; }, appStartupLogcatFile, 45), $"App output did not contain '{logcatSearchString}'"); + Assert.IsTrue (logLine.Contains (expectedLogcatOutput), $"Line '{logLine}' did not contain '{expectedLogcatOutput}'"); + string humanizerLogCatFile = Path.Combine (Root, builder.ProjectDirectory, $"humanizer-logcat-{locale.Replace ("/", "-")}.log"); + var culture = new CultureInfo (locale); + expectedLogcatOutput = DateTime.UtcNow.AddHours(-30).Humanize(culture: culture); + logcatSearchString = "Humanizer="; + Assert.IsTrue (MonitorAdbLogcat ((line) => { + if (line.Contains (logcatSearchString)) { + logLine = line; + return true; + } + return false; + }, humanizerLogCatFile, timeout:45), $"App output did not contain '{logcatSearchString}'"); Assert.IsTrue (logLine.Contains (expectedLogcatOutput), $"Line '{logLine}' did not contain '{expectedLogcatOutput}'"); + } } }