diff --git a/.gitignore b/.gitignore index 5b8e7bc68d2..3f721ca4ff2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props *~ external/monodroid/ external/mono/ +tests/api-compatibility/reference/*.dll \ No newline at end of file diff --git a/NuGet.config b/NuGet.config index bf21c4d2f72..b82b970d2db 100644 --- a/NuGet.config +++ b/NuGet.config @@ -5,5 +5,6 @@ + \ No newline at end of file diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj index 4379aa364cb..9c64a1e25cc 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj @@ -48,6 +48,7 @@ + diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs new file mode 100644 index 00000000000..843d37b1781 --- /dev/null +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using Xamarin.Tools.Zip; + +namespace Xamarin.Android.Tools.BootstrapTasks +{ + public sealed class CheckApiCompatibility : Task + { + // This dictionary holds Api versions + // key is the Api version + // value is the previous Api version in relation to the key + static readonly Dictionary api_versions = new Dictionary () + { + { "v4.4", "" }, + { "v4.4.87", "v4.4" }, + { "v5.0", "v4.4.87" }, + { "v5.1", "v5.0" }, + { "v6.0", "v5.1" }, + { "v7.0", "v6.0" }, + { "v7.1", "v7.0" }, + { "v8.0", "v7.1" }, + { "v8.1", "v8.0" }, + { "v9.0", "v8.1" }, + { "v10.0", "v9.0" }, + }; + + static readonly string [] assemblies = + { + "Mono.Android.dll", + }; + + // Path where Microsoft.DotNet.ApiCompat nuget package is located + [Required] + public string ApiCompatPath { get; set; } + + // Api level just built + [Required] + public string ApiLevel { get; set; } + + // The last stable api level. + [Required] + public string LastStableApiLevel { get; set; } + + // Output Path where the assembly was just built + [Required] + public string TargetImplementationPath { get; set; } + + // Path to xamarin-android-api-compatibility folder + [Required] + public string ApiCompatibilityPath { get; set; } + + // This Build tasks validates that changes are not breaking Api + public override bool Execute () + { + Log.LogMessage (MessageImportance.High, $"CheckApiCompatibility for ApiLevel: {ApiLevel}"); + + // Check to see if Api has a previous Api defined. + if (!api_versions.TryGetValue (ApiLevel, out string previousApiLevel)) { + Log.LogError ($"Please add ApiLevel:{ApiLevel} to the list of supported apis."); + return !Log.HasLoggedErrors; + } + + // Get the previous api implementation path by replacing the current api string with the previous one. + var previousTargetImplementationPath = TargetImplementationPath.Replace (ApiLevel, previousApiLevel); + + // In case previous api is not defined or directory does not exist we can skip the check. + var validateAgainstPreviousApi = !(string.IsNullOrWhiteSpace (previousApiLevel) || !Directory.Exists (previousTargetImplementationPath)); + if (validateAgainstPreviousApi) { + + // First we check the Api level assembly against the previous api level assembly + // i.e.: check api breakages using "the just built V2.dll" against "the just built V1.dll" + ValidateApiCompat (previousTargetImplementationPath, false); + + if (Log.HasLoggedErrors) { + return !Log.HasLoggedErrors; + } + } + + // If Api level is the latest we should also compare it against the reference assembly + // located on the external folder. (xamarin-android-api-compatibility) + // i.e.: check apicompat using "the just built V2.dll" against V2.dll located on xamarin-android-api-compatibility repo + if (ApiLevel == LastStableApiLevel) { + + // Check xamarin-android-api-compatibility reference directory exists + var referenceContractPath = Path.Combine (ApiCompatibilityPath, "reference"); + if (!Directory.Exists (referenceContractPath)) { + Log.LogMessage (MessageImportance.High, $"CheckApiCompatibility Warning: Skipping reference contract check.\n{referenceContractPath} does not exist."); + return !Log.HasLoggedErrors; + } + + // Before validate, check that zip files were decompressed. + var zipFiles = Directory.GetFiles (referenceContractPath, "*.zip"); + foreach (var zipFile in zipFiles) { + using (var zip = ZipArchive.Open (zipFile, FileMode.Open)) { + zip.ExtractAll (referenceContractPath); + } + } + + ValidateApiCompat (referenceContractPath, true); + } + + return !Log.HasLoggedErrors; + } + + // Validates Api compatibility between contract (previous version) and implementation (current version) + // We do that by using Microsoft.DotNet.ApiCompat.dll + void ValidateApiCompat (string contractPath, bool validateAgainstReference) + { + const string ApiCompatTemp = "ApiCompatTemp"; + + var apiCompat = Path.Combine (ApiCompatPath, "Microsoft.DotNet.ApiCompat.exe"); + var contractPathDirectory = Path.Combine (contractPath, ApiCompatTemp); + var targetImplementationPathDirectory = Path.Combine (TargetImplementationPath, ApiCompatTemp); + + try { + // Copy interesting assemblies to a temp folder. + // This is done to avoids the Microsoft.DotNet.ApiCompat.exe to analyze unwanted assemblies + // We need to validate assembly exist in both contract and implementation folders. + Directory.CreateDirectory (contractPathDirectory); + Directory.CreateDirectory (targetImplementationPathDirectory); + + foreach (var assemblyToValidate in assemblies) { + var contractAssembly = Path.Combine (contractPath, assemblyToValidate); + if (!File.Exists (contractAssembly)) { + Log.LogMessage ($"Contract assembly {assemblyToValidate} does not exists in the contract path."); + continue; + } + + var implementationAssembly = Path.Combine (TargetImplementationPath, assemblyToValidate); + if (!File.Exists (implementationAssembly)) { + Log.LogError ($"Implementation assembly {assemblyToValidate} exists in the contract path but not on the implementation folder."); + return; + } + + File.Copy (contractAssembly, Path.Combine (contractPathDirectory, assemblyToValidate), true); + File.Copy (implementationAssembly, Path.Combine (targetImplementationPathDirectory, assemblyToValidate), true); + } + + using (var genApiProcess = new Process ()) { + + genApiProcess.StartInfo.FileName = apiCompat; + genApiProcess.StartInfo.Arguments = $"\"{contractPathDirectory}\" -i \"{targetImplementationPathDirectory}\" "; + + // Verify if there is an exclusion list + var excludeAttributes = Path.Combine (ApiCompatibilityPath, $"api-compat-exclude-attributes.txt"); + if (File.Exists (excludeAttributes)) { + genApiProcess.StartInfo.Arguments += $"--exclude-attributes {excludeAttributes} "; + } + + genApiProcess.StartInfo.UseShellExecute = false; + genApiProcess.StartInfo.CreateNoWindow = true; + genApiProcess.StartInfo.RedirectStandardOutput = true; + + Log.LogMessage (MessageImportance.High, $"CompatApi command: {genApiProcess.StartInfo.FileName} {genApiProcess.StartInfo.Arguments}"); + + // Get api definition for previous Api + genApiProcess.Start (); + ValidateIssues (genApiProcess.StandardOutput, validateAgainstReference); + genApiProcess.WaitForExit (); + } + } finally { + if (Directory.Exists (contractPathDirectory)) { + Directory.Delete (contractPathDirectory, true); + } + + if (Directory.Exists (targetImplementationPathDirectory)) { + Directory.Delete (targetImplementationPathDirectory, true); + } + } + } + + // Validates there is no issue or issues found are acceptable + void ValidateIssues (StreamReader content, bool validateAgainstReference) + { + // Load issues into a dictionary + var issuesFound = LoadIssues (content); + + Dictionary> acceptableIssues = null; + + // Verify if there is a file with acceptable issues. + var acceptableIssuesFile = Path.Combine (ApiCompatibilityPath, $"acceptable-breakages-{ (validateAgainstReference ? "vReference" : ApiLevel) }.txt"); + if (!File.Exists (acceptableIssuesFile)) { + + // If file does not exist but no issues were reported we can return here. + if (issuesFound == null || issuesFound.Count == 0) { + return; + } + } else { + + // Read and Convert the acceptable issues into a dictionary + using (var streamReader = new StreamReader (acceptableIssuesFile)) { + acceptableIssues = LoadIssues (streamReader); + } + } + + // Now remove all acceptable issues form the dictionary of issues found. + var count = 0; + if (acceptableIssues != null) { + foreach (var item in acceptableIssues) { + if (!issuesFound.TryGetValue (item.Key, out HashSet issues)) { + // we should always be able to find the assembly that is reporting the issues + Log.LogMessage (MessageImportance.High, $"There is an invalid assembly listed on the acceptable breakages file: {item.Key}"); + count++; + continue; + } + + foreach (var issue in item.Value) { + // we should always be able to remove the issue, if we try to remove an issue that does not exist, + // it means the acceptable list is incorrect and should be reported. + if (!issues.Remove (issue)) { + Log.LogMessage (MessageImportance.High, $"There is an invalid issue listed on the acceptable breakages file: {issue}"); + count++; + } + } + } + } + + // Any issue that still exist on issues found means it is a new issue and we should report + foreach (var item in issuesFound) { + if (item.Value.Count == 0) { + continue; + } + + Log.LogMessage (MessageImportance.High, item.Key); + foreach (var issue in item.Value) { + Log.LogMessage (MessageImportance.High, issue); + count++; + } + } + + if (count > 0) { + Log.LogMessage (MessageImportance.High, $"Total Issues: {count}"); + Log.LogError ($"CheckApiCompatibility found nonacceptable Api breakages for ApiLevel: {ApiLevel}."); + } + } + + // Converts list of issue into a dictionary + Dictionary> LoadIssues (StreamReader content) + { + var issues = new Dictionary> (); + HashSet currentSet = null; + + while (!content.EndOfStream) { + var line = content.ReadLine (); + + if (string.IsNullOrWhiteSpace (line) || line.StartsWith ("#")) { + continue; + } + + line = line.Trim (); + + // Create hashset per assembly + if (line.StartsWith ("Compat issues with assembly", StringComparison.InvariantCultureIgnoreCase)) { + currentSet = new HashSet (); + issues.Add (line, currentSet); + continue; + } + + // end of file + if (line.StartsWith ("Total Issues:", StringComparison.InvariantCultureIgnoreCase)) { + break; + } + + if (currentSet == null) { + // Hashset should never be null, unless exception file is not defining assembly line. + Log.LogError ($"Exception report/file should start with: Compat issues with assembly"); + return null; + } + + // Add rule to hashset + currentSet.Add (line); + } + + return issues; + } + } +} diff --git a/build-tools/Xamarin.Android.Tools.BootstrapTasks/packages.config b/build-tools/Xamarin.Android.Tools.BootstrapTasks/packages.config index d5cba3e9a8d..e4c135f8ddb 100644 --- a/build-tools/Xamarin.Android.Tools.BootstrapTasks/packages.config +++ b/build-tools/Xamarin.Android.Tools.BootstrapTasks/packages.config @@ -1,5 +1,7 @@  + + \ No newline at end of file diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index 858f7fb7f2e..80c2ea6441c 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -1,6 +1,7 @@ + @@ -160,4 +161,30 @@ AfterTargets="Clean"> + + ../../tests/api-compatibility + + + + + + + + + + + + diff --git a/tests/api-compatibility/README.md b/tests/api-compatibility/README.md new file mode 100644 index 00000000000..cbb29579c4d --- /dev/null +++ b/tests/api-compatibility/README.md @@ -0,0 +1,120 @@ +# Check-Api-Compatibility + +**Check-Api-Compatibility** is a process to check that changes are not causing +APIs breakages in `Mono.Android.dll`. The process uses the +[Microsoft.DotNet.ApiCompat][mdac] tool in order to test API compatibility +between a two .NET assemblies. When testing, the tool will compare a *contract* +(old assembly) against an *implementation* (new assembly). + +The *contract* represents the API that's expected: for example a reference +assembly or a previous version of an assembly. We could also called it the +V1 assembly. + +The *implementation* represents the API that's provided: for example the +current version of an assembly. We could also called it the V2 assembly. + +[mdac]: https://github.com/dotnet/arcade/tree/master/src/Microsoft.DotNet.ApiCompat + + +## Build Task + +We have developed a build task that will wrap *Microsoft.DotNet.ApiCompat.exe* +and perform the required checks. The build task is called +`` and it is +located under [BootstrapTasks][bst]. + +`` expects the following parameters: + + * `ApiCompatPath`: Path where `Microsoft.DotNet.ApiCompat` nuget package + is located. + + * `ApiLevel`: API-level just built. + + * `LastStableApiLevel`: The last stable api level. + + * `TargetImplementationPath`: Path to the implementation assembly. Based on + this path we will generate the contract path by replace current version with + previous version + + * `ApiCompatibilityPath`: Path to the Api Compatibility folder. In this + folder we should find the acceptable-breakages files and the reference + folder that contains the current `Mono.Android.dll` assembly. + +The *task* is aware of the API levels and what is the previous API level for a +given `$(TargetFrameworkVersion)`, so when building v2.0, the task knows if +previous version is v1.5 or v1.0 for example. + + +## Acceptable Breakages + +When *Microsoft.DotNet.ApiCompat* executes, it prints out all API breakages it +encounters. + +To *ignore* a reported API breakage, copy the error message produced by +*Microsoft.DotNet.ApiCompat* into an appropriate +`tests/api-compatibility/acceptable-breakages-*.txt` file. The `*` is replaced +with the *current* `$(TargetFrameworkVersion)` value being processed. + +For example, when comparing `Mono.Android.dll` v6.0 against v7.0, the following +warning is reported: + + CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.App.Activity.LastNonConfigurationInstance' in the contract but not the implementation. + +This warning is produced because in v6.0 (API-23) we produced: + +```csharp +[Obsolete (@"deprecated")] +public virtual unsafe Java.Lang.Object LastNonConfigurationInstance { +``` + +because [`android.app.Activity.getLastNonConfigurationInstance`][aglnci] was +deprecated in API-15, so we declared it `[Obsolete]`. + +[aglnci]: https://developer.android.com/reference/android/app/Activity#getLastNonConfigurationInstance() + + +Meanwhile in v7.0 (API-24) we stopped emitting `[Obsolete]`: + +```csharp +public virtual unsafe Java.Lang.Object LastNonConfigurationInstance { +``` + +This is because Google *un-deprecated* the method! + +To ignore this warning, `tests/api-compatibility/acceptable-breakages-v7.0.txt` +contains the above message text, which causes `` to +ignore the reported warning. + +When accepting break changes against the current reference assembly, use +`tests/api-compatibility/acceptable-breakages-vReference.txt` to control the +items that are acceptable. + + +## Assembly reference + +Besides checking against a previous API Level, we should also check against the +current API Level. This will prevent us from breaking the current stable +binding. In order to be able to do that we need to commit the `Mono.Android.dll` +assembly to our repository. + +We don't want to commit the "naked" assembly because it is quite large (around 30MB), +so we should first strip IL code from the assembly by using `cil-strip.exe`, for +example on macOS: + + +``` +$ mono bin/Debug/lib/xamarin.android/xbuild/Xamarin/Android/cil-strip.exe Mono.Android.dll Mono.Android-out.dll +Mono CIL Stripper + +26747392 Mono.Android.dll +19300864 Mono.Android-out.dll +``` + +Rename `Mono.Android-out.dll` to `Mono.Android.dll`, then compress into a `.zip` file: + +``` +zip Mono.Android.dll.zip Mono.Android.dll +``` + +Commit the new `Mono.Android.dll.zip` file into +`tests/api-compatibility/reference/Mono.Android.dll.zip`. diff --git a/tests/api-compatibility/acceptable-breakages-v10.0.txt b/tests/api-compatibility/acceptable-breakages-v10.0.txt new file mode 100644 index 00000000000..4b8e8f456b5 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v10.0.txt @@ -0,0 +1,40 @@ +Compat issues with assembly Mono.Android: +MembersMustExist : Member 'Android.Media.AudioRecord.add_RoutingChanged(System.EventHandler)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Android.Media.AudioRecord.remove_RoutingChanged(System.EventHandler)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Android.Media.AudioTrack.add_RoutingChanged(System.EventHandler)' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Android.Media.AudioTrack.remove_RoutingChanged(System.EventHandler)' does not exist in the implementation but it does exist in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.Wifi.WpsInfo' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.Int32 Android.Net.Wifi.WpsInfo.Display' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.Int32 Android.Net.Wifi.WpsInfo.Invalid' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.Int32 Android.Net.Wifi.WpsInfo.Keypad' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.Int32 Android.Net.Wifi.WpsInfo.Label' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.Int32 Android.Net.Wifi.WpsInfo.Pbc' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.Wifi.WpsInfo..ctor()' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.Wifi.WpsInfo..ctor(Android.Net.Wifi.WpsInfo)' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.Wifi.WpsInfo.DescribeContents()' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.Wifi.WpsInfo.WriteToParcel(Android.OS.Parcel, Android.OS.ParcelableWriteFlags)' in the contract but not the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Text.SpannableStringInternal.CharAt(System.Int32)' changed from '[RegisterAttribute("charAt", "(I)C", "")]' in the contract to '[RegisterAttribute("charAt", "(I)C", "GetCharAt_IHandler")]' in the implementation. +CannotMakeMemberAbstract : Member 'Android.Text.SpannableStringInternal.CharAt(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Text.SpannableStringInternal.GetChars(System.Int32, System.Int32, System.Char[], System.Int32)' changed from '[RegisterAttribute("getChars", "(II[CI)V", "")]' in the contract to '[RegisterAttribute("getChars", "(II[CI)V", "GetGetChars_IIarrayCIHandler")]' in the implementation. +CannotMakeMemberAbstract : Member 'Android.Text.SpannableStringInternal.GetChars(System.Int32, System.Int32, System.Char[], System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Text.SpannableStringInternal.Length()' changed from '[RegisterAttribute("length", "()I", "")]' in the contract to '[RegisterAttribute("length", "()I", "GetLengthHandler")]' in the implementation. +CannotMakeMemberAbstract : Member 'Android.Text.SpannableStringInternal.Length()' is abstract in the implementation but is not abstract in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Text.SpannableStringInternal.ToString()' changed from '[RegisterAttribute("toString", "()Ljava/lang/String;", "")]' in the contract to '[RegisterAttribute("toString", "()Ljava/lang/String;", "GetToStringHandler")]' in the implementation. +CannotMakeMemberAbstract : Member 'Android.Text.SpannableStringInternal.ToString()' is abstract in the implementation but is not abstract in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(Java.Lang.ICharSequence)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(Java.Lang.ICharSequence, System.Int32, System.Int32)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(System.Char)' changed from '[RegisterAttribute("append", "(C)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(C)Ljava/lang/StringBuffer;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(Java.Lang.ICharSequence)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(Java.Lang.ICharSequence, System.Int32, System.Int32)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(System.Char)' changed from '[RegisterAttribute("append", "(C)Ljava/lang/Appendable;", "")]' in the contract to '[RegisterAttribute("append", "(C)Ljava/lang/StringBuilder;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Clear()' changed from '[RegisterAttribute("clear", "()Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("clear", "()Ljava/nio/Buffer;", "GetClearHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Flip()' changed from '[RegisterAttribute("flip", "()Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("flip", "()Ljava/nio/Buffer;", "GetFlipHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Limit(System.Int32)' changed from '[RegisterAttribute("limit", "(I)Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("limit", "(I)Ljava/nio/Buffer;", "GetLimit_IHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Mark()' changed from '[RegisterAttribute("mark", "()Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("mark", "()Ljava/nio/Buffer;", "GetMarkHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Position(System.Int32)' changed from '[RegisterAttribute("position", "(I)Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("position", "(I)Ljava/nio/Buffer;", "GetPosition_IHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Reset()' changed from '[RegisterAttribute("reset", "()Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("reset", "()Ljava/nio/Buffer;", "GetResetHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Nio.Buffer.Rewind()' changed from '[RegisterAttribute("rewind", "()Ljava/nio/Buffer;", "")]' in the contract to '[RegisterAttribute("rewind", "()Ljava/nio/Buffer;", "GetRewindHandler")]' in the implementation. +CannotRemoveBaseTypeOrInterface : Type 'Java.Util.Concurrent.Atomic.DoubleAccumulator' does not inherit from base type 'Java.Util.Concurrent.Atomic.Striped64' in the implementation but it does in the contract. +CannotRemoveBaseTypeOrInterface : Type 'Java.Util.Concurrent.Atomic.DoubleAdder' does not inherit from base type 'Java.Util.Concurrent.Atomic.Striped64' in the implementation but it does in the contract. +CannotRemoveBaseTypeOrInterface : Type 'Java.Util.Concurrent.Atomic.LongAccumulator' does not inherit from base type 'Java.Util.Concurrent.Atomic.Striped64' in the implementation but it does in the contract. +CannotRemoveBaseTypeOrInterface : Type 'Java.Util.Concurrent.Atomic.LongAdder' does not inherit from base type 'Java.Util.Concurrent.Atomic.Striped64' in the implementation but it does in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v4.4.87.txt b/tests/api-compatibility/acceptable-breakages-v4.4.87.txt new file mode 100644 index 00000000000..4e3a56f7a80 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v4.4.87.txt @@ -0,0 +1,5 @@ +Compat issues with assembly Mono.Android: +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetActivityBanner(Android.Content.ComponentName)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetActivityBanner(Android.Content.Intent)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetApplicationBanner(Android.Content.PM.ApplicationInfo)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetApplicationBanner(System.String)' is abstract in the implementation but is missing in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v5.0.txt b/tests/api-compatibility/acceptable-breakages-v5.0.txt new file mode 100644 index 00000000000..6c7bbb82a8f --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v5.0.txt @@ -0,0 +1,38 @@ +Compat issues with assembly Mono.Android: +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.AddSharedElement(Android.Views.View, System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.CodeCacheDir' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.NoBackupFilesDir' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.CodeCacheDir.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.GetExternalMediaDirs()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.NoBackupFilesDir.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.PackageInstaller' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetLeanbackLaunchIntentForPackage(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetUserBadgedDrawableForDensity(Android.Graphics.Drawables.Drawable, Android.OS.UserHandle, Android.Graphics.Rect, System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetUserBadgedIcon(Android.Graphics.Drawables.Drawable, Android.OS.UserHandle)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetUserBadgedLabelFormatted(Java.Lang.ICharSequence, Android.OS.UserHandle)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.PackageInstaller.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.InputMethodServices.AbstractInputMethodService.AbstractInputMethodSessionImpl.UpdateCursorAnchorInfo(Android.Views.InputMethods.CursorAnchorInfo)' is abstract in the implementation but is missing in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.String Android.Provider.Settings.Secure.InstallNonMarketApps' in the contract but not the implementation. +InterfacesShouldHaveSameMembers : Interface member 'Android.Speech.Tts.ISynthesisCallback.HasFinished' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Speech.Tts.ISynthesisCallback.HasStarted' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Speech.Tts.ISynthesisCallback.Error(Android.Speech.Tts.TextToSpeechError)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Speech.Tts.ISynthesisCallback.HasFinished.get()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Speech.Tts.ISynthesisCallback.HasStarted.get()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedFling(Android.Views.View, System.Single, System.Single, System.Boolean)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedPreFling(Android.Views.View, System.Single, System.Single)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedPreScroll(Android.Views.View, System.Int32, System.Int32, System.Int32[])' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedScroll(Android.Views.View, System.Int32, System.Int32, System.Int32, System.Int32)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedScrollAccepted(Android.Views.View, Android.Views.View, Android.Views.ScrollAxis)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnStartNestedScroll(Android.Views.View, Android.Views.View, Android.Views.ScrollAxis)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnStopNestedScroll(Android.Views.View)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.NavigationBarColor' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.StatusBarColor' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.NavigationBarColor.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.SetNavigationBarColor(Android.Graphics.Color)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.SetStatusBarColor(Android.Graphics.Color)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.StatusBarColor.get()' is abstract in the implementation but is missing in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.RequestCursorUpdates(System.Int32)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputMethodSession.UpdateCursorAnchorInfo(Android.Views.InputMethods.CursorAnchorInfo)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.MixedContentMode' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.MixedContentMode.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.MixedContentMode.set(Android.Webkit.MixedContentHandling)' is abstract in the implementation but is missing in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v5.1.txt b/tests/api-compatibility/acceptable-breakages-v5.1.txt new file mode 100644 index 00000000000..7ab1c33ead2 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v5.1.txt @@ -0,0 +1,185 @@ +Compat issues with assembly Mono.Android: +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.OnNestedPrePerformAccessibilityAction(Android.Views.View, Android.Views.Accessibility.Action, Android.OS.Bundle)' is present in the implementation but not in the contract. +CannotMakeTypeAbstract : Type 'Android.Webkit.CookieManager' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.HasCookies' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.AcceptCookie()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.AcceptThirdPartyCookies(Android.Webkit.WebView)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.Flush()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.GetCookie(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.HasCookies.get()' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.CookieManager.RemoveAllCookie()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.RemoveAllCookie()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.RemoveAllCookies(Android.Webkit.IValueCallback)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.CookieManager.RemoveExpiredCookie()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.RemoveExpiredCookie()' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.CookieManager.RemoveSessionCookie()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.RemoveSessionCookie()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.RemoveSessionCookies(Android.Webkit.IValueCallback)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.SetAcceptCookie(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.SetAcceptThirdPartyCookies(Android.Webkit.WebView, System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.SetCookie(System.String, System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.CookieManager.SetCookie(System.String, System.String, Android.Webkit.IValueCallback)' is abstract in the implementation but is not abstract in the contract. +CannotMakeTypeAbstract : Type 'Android.Webkit.WebBackForwardList' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.CurrentIndex' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.CurrentItem' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.Size' is abstract in the implementation but is not abstract in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebBackForwardList.Clone()' is abstract in the implementation but is missing in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.CurrentIndex.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.CurrentItem.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.GetItemAtIndex(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebBackForwardList.Size.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeTypeAbstract : Type 'Android.Webkit.WebHistoryItem' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Favicon' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.OriginalUrl' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Title' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Url' is abstract in the implementation but is not abstract in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebHistoryItem.Clone()' is abstract in the implementation but is missing in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Favicon.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.OriginalUrl.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Title.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebHistoryItem.Url.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeTypeAbstract : Type 'Android.Webkit.WebIconDatabase' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.Close()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.Open(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.ReleaseIconForPageUrl(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.RemoveAllIcons()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.RequestIconForPageUrl(System.String, Android.Webkit.WebIconDatabase.IIconListener)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebIconDatabase.RetainIconForPageUrl(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowContentAccess' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowFileAccess' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkImage' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkLoads' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BuiltInZoomControls' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CacheMode' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CursiveFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabaseEnabled' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.DatabasePath' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabasePath' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFixedFontSize' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFontSize' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultTextEncodingName' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.DefaultZoom' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultZoom' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DisplayZoomControls' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DomStorageEnabled' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FantasyFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FixedFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptCanOpenWindowsAutomatically' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptEnabled' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.LightTouchEnabled' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LightTouchEnabled' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadsImagesAutomatically' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadWithOverviewMode' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MediaPlaybackRequiresUserGesture' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumFontSize' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumLogicalFontSize' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SansSerifFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SaveFormData' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.SavePassword' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SavePassword' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SerifFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.StandardFontFamily' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.TextZoom' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UserAgentString' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UseWideViewPort' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowContentAccess.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowContentAccess.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowFileAccess.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.AllowFileAccess.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkImage.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkImage.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkLoads.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BlockNetworkLoads.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BuiltInZoomControls.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.BuiltInZoomControls.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CacheMode.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CacheMode.set(Android.Webkit.CacheModes)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CursiveFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.CursiveFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabaseEnabled.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabaseEnabled.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabasePath.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DatabasePath.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFixedFontSize.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFixedFontSize.set(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFontSize.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultFontSize.set(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultTextEncodingName.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultTextEncodingName.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultZoom.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DefaultZoom.set(Android.Webkit.WebSettings.ZoomDensity)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DisplayZoomControls.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DisplayZoomControls.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DomStorageEnabled.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.DomStorageEnabled.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.EnableSmoothTransition()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.EnableSmoothTransition()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FantasyFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FantasyFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FixedFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.FixedFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.GetLayoutAlgorithm()' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.GetPluginState()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.GetPluginState()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptCanOpenWindowsAutomatically.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptCanOpenWindowsAutomatically.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptEnabled.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.JavaScriptEnabled.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LightTouchEnabled.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LightTouchEnabled.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadsImagesAutomatically.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadsImagesAutomatically.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadWithOverviewMode.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.LoadWithOverviewMode.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MediaPlaybackRequiresUserGesture.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MediaPlaybackRequiresUserGesture.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumFontSize.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumFontSize.set(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumLogicalFontSize.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.MinimumLogicalFontSize.set(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SansSerifFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SansSerifFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SaveFormData.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SaveFormData.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SavePassword.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SavePassword.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SerifFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SerifFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetAppCacheEnabled(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.SetAppCacheMaxSize(System.Int64)' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetAppCacheMaxSize(System.Int64)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetAppCachePath(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.SetEnableSmoothTransition(System.Boolean)' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetEnableSmoothTransition(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetGeolocationDatabasePath(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetGeolocationEnabled(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetLayoutAlgorithm(Android.Webkit.WebSettings.LayoutAlgorithm)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetNeedInitialFocus(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.SetPluginState(Android.Webkit.WebSettings.PluginState)' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetPluginState(Android.Webkit.WebSettings.PluginState)' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebSettings.SetRenderPriority(Android.Webkit.WebSettings.RenderPriority)' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetRenderPriority(Android.Webkit.WebSettings.RenderPriority)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetSupportMultipleWindows(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SetSupportZoom(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.StandardFontFamily.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.StandardFontFamily.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SupportMultipleWindows()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.SupportZoom()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.TextZoom.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.TextZoom.set(System.Int32)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UserAgentString.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UserAgentString.set(System.String)' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UseWideViewPort.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebSettings.UseWideViewPort.set(System.Boolean)' is abstract in the implementation but is not abstract in the contract. +CannotMakeTypeAbstract : Type 'Android.Webkit.WebViewDatabase' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasFormData' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasHttpAuthUsernamePassword' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebViewDatabase.HasUsernamePassword' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasUsernamePassword' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.ClearFormData()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.ClearHttpAuthUsernamePassword()' is abstract in the implementation but is not abstract in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebViewDatabase.ClearUsernamePassword()' in the contract but not the implementation. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.ClearUsernamePassword()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasFormData.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasHttpAuthUsernamePassword.get()' is abstract in the implementation but is not abstract in the contract. +CannotMakeMemberAbstract : Member 'Android.Webkit.WebViewDatabase.HasUsernamePassword.get()' is abstract in the implementation but is not abstract in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v6.0.txt b/tests/api-compatibility/acceptable-breakages-v6.0.txt new file mode 100644 index 00000000000..694d885cea9 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v6.0.txt @@ -0,0 +1,23 @@ +Compat issues with assembly Mono.Android: +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.App.Notification.Action.Icon' in the contract but not the implementation. +MembersMustExist : Member 'Android.App.Notification.Action.Icon.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'Android.App.Notification.Action.Icon.set(System.Int32)' does not exist in the implementation but it does exist in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.CheckSelfPermission(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.GetSystemServiceName(Java.Lang.Class)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.IsPermissionRevokedByPolicy(System.String, System.String)' is abstract in the implementation but is missing in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Database.ICursor.Extras.set(Android.OS.Bundle)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.InputSurface' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.IsReprocessable' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.InputSurface.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.IsReprocessable.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.Prepare(Android.Views.Surface)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraDevice.CreateConstrainedHighSpeedCaptureSession(System.Collections.Generic.IList, Android.Hardware.Camera2.CameraCaptureSession.StateCallback, Android.OS.Handler)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraDevice.CreateReprocessableCaptureSession(Android.Hardware.Camera2.Params.InputConfiguration, System.Collections.Generic.IList, Android.Hardware.Camera2.CameraCaptureSession.StateCallback, Android.OS.Handler)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraDevice.CreateReprocessCaptureRequest(Android.Hardware.Camera2.TotalCaptureResult)' is abstract in the implementation but is missing in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Net.ProxyInfo' in the contract but not the implementation. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.StartActionModeForChild(Android.Views.View, Android.Views.ActionMode.ICallback, Android.Views.ActionModeType)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.Window.ICallback.OnSearchRequested(Android.Views.SearchEvent)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.Window.ICallback.OnWindowStartingActionMode(Android.Views.ActionMode.ICallback, Android.Views.ActionModeType)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.OffscreenPreRaster' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.OffscreenPreRaster.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.OffscreenPreRaster.set(System.Boolean)' is abstract in the implementation but is missing in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v7.0.txt b/tests/api-compatibility/acceptable-breakages-v7.0.txt new file mode 100644 index 00000000000..ebbc05af683 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v7.0.txt @@ -0,0 +1,50 @@ +Compat issues with assembly Mono.Android: +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.App.Activity.LastNonConfigurationInstance' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.App.Activity.OnRetainNonConfigurationInstance()' in the contract but not the implementation. +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.CommitNow()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.CommitNowAllowingStateLoss()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.Job.JobScheduler.GetPendingJob(System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.DataDir' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.IsDeviceProtectedStorage' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.CreateDeviceProtectedStorageContext()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.DataDir.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.DeleteSharedPreferences(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.IsDeviceProtectedStorage.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.MoveDatabaseFrom(Android.Content.Context, System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.MoveSharedPreferencesFrom(Android.Content.Context, System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetPackageGids(System.String, Android.Content.PM.PackageInfoFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetPackageUid(System.String, Android.Content.PM.PackageInfoFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.HasSystemFeature(System.String, System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraDevice.CreateCaptureSessionByOutputConfigurations(System.Collections.Generic.IList, Android.Hardware.Camera2.CameraCaptureSession.StateCallback, Android.OS.Handler)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraDevice.CreateReprocessableCaptureSessionByConfigurations(Android.Hardware.Camera2.Params.InputConfiguration, System.Collections.Generic.IList, Android.Hardware.Camera2.CameraCaptureSession.StateCallback, Android.OS.Handler)' is abstract in the implementation but is missing in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.ShowContextMenuForChild(Android.Views.View, System.Single, System.Single)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.SetDecorCaptionShade(Android.Views.DecorCaptionShade)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.Window.SetResizingCaptionDrawable(Android.Graphics.Drawables.Drawable)' is abstract in the implementation but is missing in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.Handler' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.CloseConnection()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.DeleteSurroundingTextInCodePoints(System.Int32, System.Int32)' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.Handler.get()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Webkit.IWebResourceRequest.IsRedirect' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Webkit.IWebResourceRequest.IsRedirect.get()' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.DisabledActionModeMenuItems' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.DisabledActionModeMenuItems.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.DisabledActionModeMenuItems.set(Android.Webkit.MenuItems)' is abstract in the implementation but is missing in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.Webkit.WebViewClient.OnUnhandledKeyEvent(Android.Webkit.WebView, Android.Views.KeyEvent)' in the contract but not the implementation. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.RemoteAddress' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.Bind(Java.Net.SocketAddress)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.RemoteAddress.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.SetOption(Java.Net.ISocketOption, Java.Lang.Object)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.ServerSocketChannel.Bind(Java.Net.SocketAddress, System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.ServerSocketChannel.SetOption(Java.Net.ISocketOption, Java.Lang.Object)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.RemoteAddress' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.Bind(Java.Net.SocketAddress)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.RemoteAddress.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.SetOption(Java.Net.ISocketOption, Java.Lang.Object)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.ShutdownInput()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.ShutdownOutput()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.Spi.SelectorProvider.OpenDatagramChannel(Java.Net.IProtocolFamily)' is abstract in the implementation but is missing in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Java.Util.ISortedMap.EntrySet()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Java.Util.ISortedMap.KeySet()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Java.Util.ISortedMap.Values()' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Javax.Sql.ICommonDataSource.ParentLogger' is present in the implementation but not in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Javax.Sql.ICommonDataSource.ParentLogger.get()' is present in the implementation but not in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v7.1.txt b/tests/api-compatibility/acceptable-breakages-v7.1.txt new file mode 100644 index 00000000000..686515bb3a0 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v7.1.txt @@ -0,0 +1,5 @@ +Compat issues with assembly Mono.Android: +CannotChangeAttribute : Attribute 'Android.Runtime.IntDefinitionAttribute' on 'Android.Telecom.ConnectionProperties Android.Telecom.ConnectionProperties.HasCdmaVoicePrivacy' changed from '[IntDefinitionAttribute(null, JniField="android/telecom/Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY")]' in the contract to '[IntDefinitionAttribute("Android.Telecom.Connection.PropertyHasCdmaVoicePrivacy", JniField="android/telecom/Connection.PROPERTY_HAS_CDMA_VOICE_PRIVACY")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.IntDefinitionAttribute' on 'Android.Telecom.ConnectionProperties Android.Telecom.ConnectionProperties.IsExternalCall' changed from '[IntDefinitionAttribute(null, JniField="android/telecom/Connection.PROPERTY_IS_EXTERNAL_CALL")]' in the contract to '[IntDefinitionAttribute("Android.Telecom.Connection.PropertyIsExternalCall", JniField="android/telecom/Connection.PROPERTY_IS_EXTERNAL_CALL")]' in the implementation. +MembersMustExist : Member 'Android.Telecom.RemoteConference.ConnectionProperties.get()' does not exist in the implementation but it does exist in the contract. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.InputMethods.IInputConnection.CommitContent(Android.Views.InputMethods.InputContentInfo, Android.Views.InputMethods.InputContentFlags, Android.OS.Bundle)' is present in the implementation but not in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v8.0.txt b/tests/api-compatibility/acceptable-breakages-v8.0.txt new file mode 100644 index 00000000000..c94903bf747 --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v8.0.txt @@ -0,0 +1,81 @@ +Compat issues with assembly Mono.Android: +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.Fragments' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.IsStateSaved' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.PrimaryNavigationFragment' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.Fragments.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.IsStateSaved.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.PrimaryNavigationFragment.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.RegisterFragmentLifecycleCallbacks(Android.App.FragmentManager.FragmentLifecycleCallbacks, System.Boolean)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentManager.UnregisterFragmentLifecycleCallbacks(Android.App.FragmentManager.FragmentLifecycleCallbacks)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.RunOnCommit(Java.Lang.IRunnable)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.SetPrimaryNavigationFragment(Android.App.Fragment)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.App.FragmentTransaction.SetReorderingAllowed(System.Boolean)' is abstract in the implementation but is missing in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.App.Notification.Builder.SetNumber(System.Int32)' in the contract but not the implementation. +CannotAddAbstractMembers : Member 'Android.App.Job.JobScheduler.Enqueue(Android.App.Job.JobInfo, Android.App.Job.JobWorkItem)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.CreateContextForSplit(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.RegisterReceiver(Android.Content.BroadcastReceiver, Android.Content.IntentFilter, Android.Content.ActivityFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.RegisterReceiver(Android.Content.BroadcastReceiver, Android.Content.IntentFilter, System.String, Android.OS.Handler, Android.Content.ActivityFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.RevokeUriPermission(System.String, Android.Net.Uri, Android.Content.ActivityFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.Context.StartForegroundService(Android.Content.Intent)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.InstantAppCookieMaxBytes' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.IsInstantApp' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.CanRequestPackageInstalls()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.ClearInstantAppCookie()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetChangedPackages(System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetInstantAppCookie()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetPackageInfo(Android.Content.PM.VersionedPackage, Android.Content.PM.PackageInfoFlags)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.GetSharedLibraries(Android.Content.PM.PackageInstallReason)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.InstantAppCookieMaxBytes.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.InvokeIsInstantApp(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.IsInstantApp.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.SetApplicationCategoryHint(System.String, System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Content.PM.PackageManager.UpdateInstantAppCookie(System.Byte[])' is abstract in the implementation but is missing in the contract. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.String Android.Hardware.Camera.ActionNewPicture' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'System.String Android.Hardware.Camera.ActionNewVideo' in the contract but not the implementation. +CannotAddAbstractMembers : Member 'Android.Hardware.Camera2.CameraCaptureSession.FinalizeOutputConfigurations(System.Collections.Generic.IList)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Icu.Text.LocaleDisplayNames.GetUiListCompareWholeItems(System.Collections.Generic.ICollection, Java.Util.IComparator)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.OS.Vibrator.HasAmplitudeControl' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.OS.Vibrator.HasAmplitudeControl.get()' is abstract in the implementation but is missing in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.IntDefinitionAttribute' on 'Android.Telecom.ConnectionProperties Android.Telecom.ConnectionProperties.SelfManaged' changed from '[IntDefinitionAttribute(null, JniField="android/telecom/Connection.PROPERTY_SELF_MANAGED")]' in the contract to '[IntDefinitionAttribute("Android.Telecom.Connection.PropertySelfManaged", JniField="android/telecom/Connection.PROPERTY_SELF_MANAGED")]' in the implementation. +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Text.BidiFormatter.UnicodeWrap(System.String)' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Text.BidiFormatter.UnicodeWrap(System.String, Android.Text.ITextDirectionHeuristic)' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Text.BidiFormatter.UnicodeWrap(System.String, Android.Text.ITextDirectionHeuristic, System.Boolean)' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'Android.Runtime.RegisterAttribute' exists on 'Android.Text.BidiFormatter.UnicodeWrap(System.String, System.Boolean)' in the contract but not the implementation. +InterfacesShouldHaveSameMembers : Interface member 'Android.Views.IViewParent.KeyboardNavigationClusterSearch(Android.Views.View, Android.Views.FocusSearchDirection)' is present in the implementation but not in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.AutofillId' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.AutofillId.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.AutofillId.set(Android.Views.Autofill.AutofillId)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.NewHtmlInfoBuilder(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetAutofillHints(System.String[])' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetAutofillId(Android.Views.Autofill.AutofillId, System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetAutofillOptions(Java.Lang.ICharSequence[])' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetAutofillType(Android.Views.AutofillType)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetAutofillValue(Android.Views.Autofill.AutofillValue)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetDataIsSensitive(System.Boolean)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetHtmlInfo(Android.Views.ViewStructure.HtmlInfo)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetInputType(System.Int32)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetLocaleList(Android.OS.LocaleList)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetOpaque(System.Boolean)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Views.ViewStructure.SetWebDomain(System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.SafeBrowsingEnabled' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.SafeBrowsingEnabled.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebSettings.SafeBrowsingEnabled.set(System.Boolean)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebViewDatabase.GetHttpAuthUsernamePassword(System.String, System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Android.Webkit.WebViewDatabase.SetHttpAuthUsernamePassword(System.String, System.String, System.String, System.String)' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Lang.AbstractStringBuilder.ToString()' is abstract in the implementation but is missing in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.Class.GetAnnotationsByType(Java.Lang.Class)' changed from '[RegisterAttribute("getAnnotationsByType", "(Ljava/lang/Class;)[Ljava/lang/Object;", "")]' in the contract to '[RegisterAttribute("getAnnotationsByType", "(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.Class.GetDeclaredAnnotation(Java.Lang.Class)' changed from '[RegisterAttribute("getDeclaredAnnotation", "(Ljava/lang/Class;)Ljava/lang/Object;", "")]' in the contract to '[RegisterAttribute("getDeclaredAnnotation", "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(Java.Lang.ICharSequence)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/Appendable;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(Java.Lang.ICharSequence, System.Int32, System.Int32)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuffer.Append(System.Char)' changed from '[RegisterAttribute("append", "(C)Ljava/lang/StringBuffer;", "")]' in the contract to '[RegisterAttribute("append", "(C)Ljava/lang/Appendable;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(Java.Lang.ICharSequence)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;)Ljava/lang/Appendable;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(Java.Lang.ICharSequence, System.Int32, System.Int32)' changed from '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;", "")]' in the contract to '[RegisterAttribute("append", "(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;", "")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Java.Lang.StringBuilder.Append(System.Char)' changed from '[RegisterAttribute("append", "(C)Ljava/lang/StringBuilder;", "")]' in the contract to '[RegisterAttribute("append", "(C)Ljava/lang/Appendable;", "")]' in the implementation. +TypesMustExist : Type 'Java.Lang.Reflect.Constructor.InterfaceConsts' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Java.Lang.Reflect.Method.InterfaceConsts' does not exist in the implementation but it does exist in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.LocalAddress' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.DatagramChannel.LocalAddress.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.ServerSocketChannel.LocalAddress' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.ServerSocketChannel.LocalAddress.get()' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.LocalAddress' is abstract in the implementation but is missing in the contract. +CannotAddAbstractMembers : Member 'Java.Nio.Channels.SocketChannel.LocalAddress.get()' is abstract in the implementation but is missing in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-v9.0.txt b/tests/api-compatibility/acceptable-breakages-v9.0.txt new file mode 100644 index 00000000000..18426d933db --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-v9.0.txt @@ -0,0 +1,8 @@ +Compat issues with assembly Mono.Android: +InterfacesShouldHaveSameMembers : Interface member 'Android.Content.Res.IXmlResourceParser.GetAttributeNamespace(System.Int32)' is present in the implementation but not in the contract. +CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Database.Sqlite.SQLiteDatabase.Path.get()' changed from '[RegisterAttribute("getPath", "()Ljava/lang/String;", "")]' in the contract to '[RegisterAttribute("getPath", "()Ljava/lang/String;", "GetGetPathHandler")]' in the implementation. +CannotChangeAttribute : Attribute 'Android.Runtime.IntDefinitionAttribute' on 'Android.Telecom.ConnectionProperties Android.Telecom.ConnectionProperties.IsRtt' changed from '[IntDefinitionAttribute(null, JniField="android/telecom/Connection.PROPERTY_IS_RTT")]' in the contract to '[IntDefinitionAttribute("Android.Telecom.Connection.PropertyIsRtt", JniField="android/telecom/Connection.PROPERTY_IS_RTT")]' in the implementation. +TypesMustExist : Type 'Android.Telephony.CellIdentityCdma.InterfaceConsts' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Android.Telephony.CellIdentityGsm.InterfaceConsts' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Android.Telephony.CellIdentityLte.InterfaceConsts' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Android.Telephony.CellIdentityWcdma.InterfaceConsts' does not exist in the implementation but it does exist in the contract. \ No newline at end of file diff --git a/tests/api-compatibility/acceptable-breakages-vReference.txt b/tests/api-compatibility/acceptable-breakages-vReference.txt new file mode 100644 index 00000000000..e03c07ffa2b --- /dev/null +++ b/tests/api-compatibility/acceptable-breakages-vReference.txt @@ -0,0 +1,5 @@ +Compat issues with assembly Mono.Android: +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.IncludeAndroidResourcesFromAttribute' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.NativeLibraryReferenceAttribute' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.ReferenceFilesAttribute' in the contract but not the implementation. +CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Java.Interop.JavaLibraryReferenceAttribute' in the contract but not the implementation. \ No newline at end of file diff --git a/tests/api-compatibility/api-compat-exclude-attributes.txt b/tests/api-compatibility/api-compat-exclude-attributes.txt new file mode 100644 index 00000000000..070aa5d7953 --- /dev/null +++ b/tests/api-compatibility/api-compat-exclude-attributes.txt @@ -0,0 +1,7 @@ +// These attributes should be excluded from api-compat check reference assemblies. + +T:Java.Interop.JavaTypeParametersAttribute + +T:System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute +T:System.Runtime.CompilerServices.AsyncStateMachineAttribute +T:System.Runtime.CompilerServices.IteratorStateMachineAttribute \ No newline at end of file diff --git a/tests/api-compatibility/reference/Mono.Android.dll.zip b/tests/api-compatibility/reference/Mono.Android.dll.zip new file mode 100644 index 00000000000..ce3cc65773f Binary files /dev/null and b/tests/api-compatibility/reference/Mono.Android.dll.zip differ