public void TypeReferenceEquals()
        {
            var int_ref = JavaTypeReference.Int;

            Assert.AreEqual(JavaTypeReference.Int, int_ref, "primitive types 2");

            var pkg       = new JavaPackage("com.example", "com/example", null);
            var dummyType = JavaApiTestHelper.CreateClass(pkg, "Dummy");
            var tps       = new JavaTypeParameters(dummyType);
            var gt        = new JavaTypeParameter("T", tps);

            Assert.AreEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter("T", tps), null), "type parameters");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference(new JavaTypeParameter("U", tps), null), "type parameters 2");
            Assert.AreNotEqual(new JavaTypeReference(gt, null), new JavaTypeReference(gt, "[]"), "type parameters: array vs. non-array");
            Assert.AreEqual(new JavaTypeReference(gt, "[]"), new JavaTypeReference(gt, "[]"), "type parameters: array vs. array");

            var type = JavaApiTestHelper.CreateClass(pkg, "T");

            Assert.AreEqual(new JavaTypeReference(type, null, null), new JavaTypeReference(type, null, null), "type vs. type");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, null), "type: array vs. non array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, "[][]"), "type: array vs. array of array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, null), new JavaTypeReference(new JavaTypeParameter("T", tps), null), "type vs. type parameters");

            Assert.AreNotEqual(new JavaTypeReference(gt, "[]"), new JavaTypeReference(type, null, null), "type: array vs. non array");
            Assert.AreNotEqual(new JavaTypeReference(type, null, "[]"), new JavaTypeReference(type, null, "[][]"), "type: array vs. array of array");
        }
        public void AncestralOverrides()
        {
            string xml = @"<api>
  <package name='XXX'>
    <class abstract='true' deprecated='not deprecated' extends='android.app.ExpandableListActivity' extends-generic-aware='android.app.ExpandableListActivity' final='false' name='SherlockExpandableListActivity' static='false' visibility='public' jni-signature='Landroid/app/ExpandableListActivity;'>
      <method abstract='false' deprecated='not deprecated' final='false' name='addContentView' native='false' return='void' static='false' synchronized='false' visibility='public' jni-signature='(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V'>
        <parameter name = 'view' type='android.view.View' jni-type='Landroid/view/View;'>
        </parameter>
        <parameter name = 'params' type='android.view.ViewGroup.LayoutParams' jni-type='Landroid/view/ViewGroup$LayoutParams;'>
        </parameter>
      </method>
    </class>
  </package>
</api>";

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            xapi.ResolveCollection();

            var t = xapi.Packages ["XXX"].Types.First(_ => _.Name == "SherlockExpandableListActivity");
            var m = t.Methods.First(_ => _.Name == "addContentView");

            Assert.IsNotNull(m.BaseMethod, "base method not found");
        }
        public void GenericConstructors()
        {
            string xml = @"<api>
		  <package name='XXX'>
		    <class abstract='true' deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public' jni-signature='Landroid/app/GenericConstructors' extends='java.lang.Object' extends-generic-aware='java.lang.Object'>
		      <constructor deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public' jni-signature='(LTTE;)V'>
		        <typeParameters>
		          <typeParameter name='E' interfaceBounds='' jni-interfaceBounds='' />
		        </typeParameters>
		        <parameter name = 'e' type='E' jni-type='TE;'>
		        </parameter>
		      </constructor>
		    </class>
		  </package>
		</api>"        ;

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            var results = xapi.ResolveCollection();

            var t = xapi.Packages ["XXX"].Types.First(_ => _.Name == "GenericConstructors") as JavaClassModel;
            var m = t.Constructors.FirstOrDefault();

            Assert.IsNotNull(m.TypeParameters, "constructor not found");
        }
Пример #4
0
        public void GenericDerivation()
        {
            var dic = api.FindType("java.util.Dictionary") as JavaClassModel;

            Assert.IsNotNull(dic, "Dictionary not found");
            Assert.AreEqual(0, dic.GenericInheritanceMapping.Count, "Dictionary should have no mapping.");

            var hashtable = api.FindType("java.util.Hashtable") as JavaClassModel;

            Assert.IsNotNull(hashtable, "Hashtable not found");
            Assert.AreEqual(0, hashtable.GenericInheritanceMapping.Count, "Hashtable should have no mapping.");

            var pkg       = new JavaPackage("com.example", "com/example", null);
            var dummyType = JavaApiTestHelper.CreateClass(pkg, "Dummy");
            var tps       = new JavaTypeParameters(dummyType);

            var props = api.FindType("java.util.Properties") as JavaClassModel;

            Assert.IsNotNull(props, "Properties not found");
            Assert.AreEqual(2, props.GenericInheritanceMapping.Count, "Properties should have no mapping.");

            var k = new JavaTypeReference(new JavaTypeParameter("K", tps), null);
            var v = new JavaTypeReference(new JavaTypeParameter("V", tps), null);

            Assert.IsNotNull(props.GenericInheritanceMapping [k], "Properties: mapping for K not found.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [k].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
            Assert.AreEqual("java.lang.Object", props.GenericInheritanceMapping [v].ReferencedType.FullName, "Properties: mapping for K is not to java.lang.Object.");
        }
Пример #5
0
        public void GenericInheritanceMappings()
        {
            var obj = api.FindType("java.lang.Object") as JavaClassModel;

            Assert.IsNotNull(obj.GenericInheritanceMapping, "java.lang.Object mapping not found");
            Assert.AreEqual(0, obj.GenericInheritanceMapping.Count, "ContentObservable mapping not found");

            var kls = api.FindType("android.database.ContentObservable") as JavaClassModel;
            var map = kls.GenericInheritanceMapping;

            Assert.IsNotNull(map, "ContentObservable mapping not found");
            Assert.AreEqual(1, map.Count, "ContentObservable mapping count unexpected");

            Assert.IsNotNull(map.Keys.First().ReferencedTypeParameter, "key is not GenericTypeParameter");
            Assert.IsNotNull("T", map.Keys.First().ReferencedTypeParameter.Name, "key GenericTypeParameter has unexpected name");
            Assert.IsNotNull(map.Values.First().ReferencedType, "value is not to JavaType");
            Assert.IsNotNull("android.database.ContentObserver", map.Values.First().ReferencedType.FullName, "value JavaType has unexpected name");

            var pkg       = new JavaPackage("com.example", "com/example", null);
            var dummyType = JavaApiTestHelper.CreateClass(pkg, "Dummy");
            var tps       = new JavaTypeParameters(dummyType);
            var gt        = new JavaTypeParameter("T", tps);

            Assert.IsTrue(map.TryGetValue(new JavaTypeReference(gt, null), out var mapped),
                          "Mapped type for generic parameter 'T' not found, or dictionary lookup failed.");

            Assert.AreEqual("android.database.ContentObserver", mapped.ReferencedType.FullName, "unexpected resolved type");
        }
Пример #6
0
        public void IntentServiceHack()
        {
            // https://github.com/xamarin/java.interop/issues/717
            var api = JavaApiTestHelper.GetLoadedApi();

            // Create "mono.android.app" package
            var mono_android_app = api.AddPackage("mono.android.app", "mono/android/app");

            // Remove "android.app.IntentService" type
            var android_app    = api.Packages["android.app"];
            var intent_service = android_app.Types.Single(t => t.Name == "IntentService");

            android_app.Types.Remove(intent_service);
            api.RemoveType(intent_service);

            // Create new "mono.android.app.IntentService" type
            var new_intent_service = JavaApiTestHelper.CreateClass(mono_android_app, "IntentService");

            api.AddType(new_intent_service);

            api.ResolveCollection();

            // Ensure we can resolve the type by either name
            Assert.AreSame(new_intent_service, api.FindType("mono.android.app.IntentService"));
            Assert.AreSame(new_intent_service, api.FindType("android.app.IntentService"));
        }
Пример #7
0
        public void InheritedGenericTypeParameters()
        {
            // Ensure we can resolve generic type parameters from parent types:
            // public class MyClass<T>
            // {
            //     public class MyNestedClass<U>
            //     {
            //       public void DoT (T value) { }
            //       public void DoU (U value) { }
            //     }
            // }
            var xml = @"
<api api-source='class-parse'>
   <package name='example' jni-name='example'>
      <class abstract='false' deprecated='not deprecated' jni-extends='Ljava/lang/Object;' extends='java.lang.Object' extends-generic-aware='java.lang.Object' final='false' name='MyClass' jni-signature='Lexample/MyClass;' source-file-name='MyClass.java' static='false' visibility='public'>
         <typeParameters>
            <typeParameter name='T' jni-classBound='Ljava/lang/Object;' classBound='java.lang.Object' interfaceBounds='' jni-interfaceBounds='' />
         </typeParameters>
         <constructor deprecated='not deprecated' final='false' name='MyClass' static='false' visibility='public' bridge='false' synthetic='false' jni-signature='()V' />
      </class>
      <class abstract='false' deprecated='not deprecated' jni-extends='Ljava/lang/Object;' extends='java.lang.Object' extends-generic-aware='java.lang.Object' final='false' name='MyClass.MyNestedClass' jni-signature='Lexample/MyClass$MyNestedClass;' source-file-name='MyClass.java' static='false' visibility='public'>
         <typeParameters>
            <typeParameter name='U' jni-classBound='Ljava/lang/Object;' classBound='java.lang.Object' interfaceBounds='' jni-interfaceBounds='' />
         </typeParameters>
         <constructor deprecated='not deprecated' final='false' name='MyClass.MyNestedClass' static='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Lexample/MyClass;)V' />
         <method abstract='false' deprecated='not deprecated' final='false' name='DoT' native='false' return='void' jni-return='V' static='false' synchronized='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Ljava/lang/Object;)V'>
            <parameter name='p0' type='T' jni-type='TT;' />
         </method>
         <method abstract='false' deprecated='not deprecated' final='false' name='DoU' native='false' return='void' jni-return='V' static='false' synchronized='false' visibility='public' bridge='false' synthetic='false' jni-signature='(Ljava/lang/Object;)V'>
            <parameter name='p0' type='U' jni-type='TU;' />
         </method>
      </class>
   </package>
</api>";

            var xapi = JavaApiTestHelper.GetLoadedApi();

            JavaXmlApiImporter.ParseString(xml, xapi);

            var results = xapi.ResolveCollection();

            var t = xapi.Packages ["example"].Types.First(_ => _.Name == "MyClass").NestedTypes.First(_ => _.Name == "MyNestedClass") as JavaClassModel;

            Assert.AreEqual(2, t.Methods.Count);

            Assert.IsNotNull(t.Methods.SingleOrDefault(m => m.Name == "DoT"), "Method with generic T not found");
            Assert.IsNotNull(t.Methods.SingleOrDefault(m => m.Name == "DoU"), "Method with generic U not found");
        }
 public void SetupFixture()
 {
     api = JavaApiTestHelper.GetLoadedApi();
 }
 public void SetupFixture()
 {
     api = JavaApiTestHelper.GetLoadedApi();
     api.ResolveCollection();
 }