11using System ;
22using System . Collections . Generic ;
33using System . IO ;
4+ using System . Linq ;
45using System . Reflection ;
56using System . Text ;
67using Java . Interop . Tools . Generator . Enumification ;
78using MonoDroid . Generation ;
89using NUnit . Framework ;
910using NUnit . Framework . Internal ;
11+ using Xamarin . Android . Binder ;
1012
1113namespace generatortests
1214{
1315 [ TestFixture ]
14- class EnumGeneratorTests
16+ class EnumGeneratorTests : CodeGeneratorTestBase
1517 {
16- protected EnumGenerator generator ;
17- protected StringBuilder builder ;
18- protected StringWriter writer ;
18+ protected new EnumGenerator generator ;
19+
20+ protected override CodeGenerationTarget Target => CodeGenerationTarget . XAJavaInterop1 ;
1921
2022 [ SetUp ]
21- public void SetUp ( )
23+ public new void SetUp ( )
2224 {
2325 builder = new StringBuilder ( ) ;
2426 writer = new StringWriter ( builder ) ;
@@ -60,7 +62,78 @@ public void WriteEnumWithGens ()
6062 Assert . AreEqual ( GetExpected ( nameof ( WriteEnumWithGens ) ) , writer . ToString ( ) . NormalizeLineEndings ( ) ) ;
6163 }
6264
63- protected string GetExpected ( string testName )
65+ [ Test ]
66+ public void ObsoletedOSPlatformAttributeSupport ( )
67+ {
68+ var xml = @"<api>
69+ <package name='java.lang' jni-name='java/lang'>
70+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
71+ </package>
72+ <package name='android.app' jni-name='android/app'>
73+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='ActivityManager' static='false' visibility='public' jni-signature='Landroid/app/ActivityManager;'>
74+ <field deprecated='deprecated' final='true' name='RECENT_IGNORE_UNAVAILABLE' jni-signature='Ljava/lang/String;' static='true' transient='false' type='java.lang.String' type-generic-aware='java.lang.String' value='"android.permission.BIND_CHOOSER_TARGET_SERVICE"' visibility='public' volatile='false' deprecated-since='31' api-since='30' />
75+ </class>
76+ </package>
77+ </api>" ;
78+
79+ options . UseObsoletedOSPlatformAttributes = true ;
80+
81+ var enu = CreateEnum ( ) ;
82+ var gens = ParseApiDefinition ( xml ) ;
83+
84+ generator . WriteEnumeration ( options , enu , gens . ToArray ( ) ) ;
85+
86+ // Ensure [ObsoletedOSPlatform] and [SupportedOSPlatform] are written
87+ Assert . True ( writer . ToString ( ) . NormalizeLineEndings ( ) . Contains ( "[global::System.Runtime.Versioning.SupportedOSPlatformAttribute(\" android30.0\" )][global::System.Runtime.Versioning.ObsoletedOSPlatform(\" android31.0\" )]WithExcluded=1" ) , writer . ToString ( ) ) ;
88+ }
89+
90+ [ Test ]
91+ public void ObsoleteAttributeSupport ( )
92+ {
93+ var xml = @"<api>
94+ <package name='java.lang' jni-name='java/lang'>
95+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
96+ </package>
97+ <package name='android.app' jni-name='android/app'>
98+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='ActivityManager' static='false' visibility='public' jni-signature='Landroid/app/ActivityManager;'>
99+ <field deprecated='deprecated' final='true' name='RECENT_IGNORE_UNAVAILABLE' jni-signature='Ljava/lang/String;' static='true' transient='false' type='java.lang.String' type-generic-aware='java.lang.String' value='"android.permission.BIND_CHOOSER_TARGET_SERVICE"' visibility='public' volatile='false' deprecated-since='31' api-since='30' />
100+ </class>
101+ </package>
102+ </api>" ;
103+
104+ var enu = CreateEnum ( ) ;
105+ var gens = ParseApiDefinition ( xml ) ;
106+
107+ generator . WriteEnumeration ( options , enu , gens . ToArray ( ) ) ;
108+
109+ // Ensure [Obsolete] is written
110+ Assert . True ( writer . ToString ( ) . NormalizeLineEndings ( ) . Contains ( "[global::System.Obsolete(@\" deprecated\" )]WithExcluded=1" ) , writer . ToString ( ) ) ;
111+ }
112+
113+ [ Test ]
114+ public void ObsoleteFieldButNotEnumAttributeSupport ( )
115+ {
116+ var xml = @"<api>
117+ <package name='java.lang' jni-name='java/lang'>
118+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
119+ </package>
120+ <package name='android.app' jni-name='android/app'>
121+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='ActivityManager' static='false' visibility='public' jni-signature='Landroid/app/ActivityManager;'>
122+ <field deprecated='This constant will be removed in the future version. Use Android.App.RecentTaskFlags enum directly instead of this field.' final='true' name='RECENT_IGNORE_UNAVAILABLE' jni-signature='Ljava/lang/String;' static='true' transient='false' type='java.lang.String' type-generic-aware='java.lang.String' value='"android.permission.BIND_CHOOSER_TARGET_SERVICE"' visibility='public' volatile='false' deprecated-since='31' api-since='30' />
123+ </class>
124+ </package>
125+ </api>" ;
126+
127+ var enu = CreateEnum ( ) ;
128+ var gens = ParseApiDefinition ( xml ) ;
129+
130+ generator . WriteEnumeration ( options , enu , gens . ToArray ( ) ) ;
131+
132+ // [Obsolete] should not be written because the value isn't deprecated, just the _field_ is deprecated because we want people to use the enum instead
133+ Assert . False ( writer . ToString ( ) . NormalizeLineEndings ( ) . Contains ( "[global::System.Obsolete(@\" deprecated\" )]WithExcluded=1" ) , writer . ToString ( ) ) ;
134+ }
135+
136+ protected new string GetExpected ( string testName )
64137 {
65138 var root = Path . GetDirectoryName ( Assembly . GetExecutingAssembly ( ) . Location ) ;
66139
@@ -71,7 +144,7 @@ protected string GetExpected (string testName)
71144 {
72145 var enu = new EnumMappings . EnumDescription {
73146 Members = new List < ConstantEntry > {
74- new ConstantEntry { EnumMember = "WithExcluded" , Value = "1" , JavaSignature = "android/app/ActivityManager.RECENT_IGNORE_UNAVAILABLE" } ,
147+ new ConstantEntry { EnumMember = "WithExcluded" , Value = "1" , JavaSignature = "android/app/ActivityManager.RECENT_IGNORE_UNAVAILABLE" , ApiLevel = 30 } ,
75148 new ConstantEntry { EnumMember = "IgnoreUnavailable" , Value = "2" , JavaSignature = "android/app/ActivityManager.RECENT_WITH_EXCLUDED" }
76149 } ,
77150 BitField = false ,
0 commit comments