Beispiel #1
0
        public void BI1067_1070()
        {
            BGenTool bgen = new BGenTool {
                Profile = Profile.iOS,
            };

            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "tests", "diamond-protocol-errors.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1067, "The type 'DiamondProtocol.A.C' is trying to inline the property 'P1' from the protocols 'DiamondProtocol.A.P1' and 'DiamondProtocol.A.P2', but the inlined properties don't share the same accessors ('DiamondProtocol.A.P1 P1' is read-only, while '$DiamondProtocol.A.P2 P1' is write-only).");
            bgen.AssertWarning(1068, "The type 'DiamondProtocol.D.C' is trying to inline the property 'P1' from the protocols 'DiamondProtocol.D.P1' and 'DiamondProtocol.D.P2', and the inlined properties use different selectors (P1.P1 uses 'pA', and P2.P1 uses 'pB'.");
            bgen.AssertError(1069, "The type 'DiamondProtocol.Y.C' is trying to inline the methods binding the selector 'm1:' from the protocols 'DiamondProtocol.Y.P1' and 'DiamondProtocol.Y.P2', using methods with different signatures ('Void M1(System.Int32)' vs 'Int32 M1(System.Boolean)').");
            bgen.AssertError(1070, "The type 'DiamondProtocol.C.C' is trying to inline the property 'P1' from the protocols 'DiamondProtocol.C.P1' and 'DiamondProtocol.C.P2', but the inlined properties are of different types ('DiamondProtocol.C.P1 P1' is int, while 'DiamondProtocol.C.P2 P1' is int).");
            bgen.AssertErrorCount(3);
            bgen.AssertWarningCount(1);
        }
Beispiel #2
0
        public void BindAsNullableNSValueArrayError()
        {
            // https://bugzilla.xamarin.com/show_bug.cgi?id=57797

            var bgen = new BGenTool {
                Profile = Profile.iOS
            };

            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;
using ObjCRuntime;
using AVFoundation;
using CoreAnimation;

namespace Bug57797Tests {

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[BindAs (typeof (CATransform3D? []))]
		[Export (""PCATransform3DNullableArray"")]
		NSValue [] PCATransform3DNullableArrayValue { get; set; }
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1048, "Unsupported type CATransform3D?[] decorated with [BindAs]");
        }
Beispiel #3
0
        public void BI1066()
        {
            var bgen = new BGenTool {
                Profile      = Profile.iOS,
                ProcessEnums = true
            };

            bgen.CreateTemporaryBinding(@"
using System;
using ObjCRuntime;
using Foundation;

namespace BI1066Errors
{
	[BaseType (typeof (NSObject))]
	interface C
	{
		// Can't put SEL into NSArray (SEL isn't an NSObject), so a Selector[] parameter/return value doesn't make sense
		[Export (""testSelectorArrayReturnValue"")]
		Selector[] TestSelectorArrayReturnValue ();
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1066, "Unsupported return type 'ObjCRuntime.Selector[]' in BI1066Errors.C.TestSelectorArrayReturnValue.");
            bgen.AssertErrorCount(2);              // We show the same error twice.
        }
Beispiel #4
0
        public void BindAsNullableNSNumberArrayError()
        {
            // https://bugzilla.xamarin.com/show_bug.cgi?id=57797

            var bgen = new BGenTool {
                Profile      = Profile.iOS,
                ProcessEnums = true
            };

            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;
using ObjCRuntime;
using AVFoundation;
using CoreAnimation;

namespace Bug57797Tests {

	[Native]
	enum Foo : long {
		One,
		Two
	}

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[BindAs (typeof (Foo? []))]
		[Export (""strongNullableAVMediaTypesProperties"")]
		NSNumber[] StrongNullableFoo { get; set; }
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1048, "Unsupported type Foo?[] decorated with [BindAs]");
        }
Beispiel #5
0
        public void BI1065()
        {
            var bgen = new BGenTool {
                Profile      = Profile.iOS,
                ProcessEnums = true
            };

            bgen.CreateTemporaryBinding(@"
using System;
using ObjCRuntime;
using Foundation;

namespace BI1065Errors
{
	[BaseType (typeof (NSObject))]
	interface C
	{
		// Can't put SEL into NSArray (SEL isn't an NSObject), so a Selector[] parameter/return value doesn't make sense
		[Export (""testSelectorArray:"")]
		void TestSelectorArray (Selector[] values);
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1065, "Unsupported parameter type 'ObjCRuntime.Selector[]' for the parameter 'values' in BI1065Errors.C.TestSelectorArray.");
            bgen.AssertErrorCount(1);
        }
Beispiel #6
0
        public void BI0086()
        {
            var bgen = new BGenTool();

            bgen.CreateTemporaryBinding("");
            bgen.AssertExecuteError("build");
            bgen.AssertError(86, "A target framework (--target-framework) must be specified.");
        }
Beispiel #7
0
        public void BI1059()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "bi1059.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1059, "Found 2 Foundation.PreserveAttribute attributes on the member the type BI1059. At most one was expected.");
        }
Beispiel #8
0
        public void BI1049()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "bindas1049error.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1049, "Could not unbox type String from NSNumber container used on member BindAs1049ErrorTests.MyFooClass.StringMethod decorated with [BindAs].");
        }
Beispiel #9
0
        public void BI1048()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "bindas1048error.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1048, "Unsupported type String decorated with [BindAs]");
        }
Beispiel #10
0
        public void BI0087()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.macOSClassic;
            bgen.CreateTemporaryBinding("");
            bgen.AssertExecuteError("build");
            bgen.AssertError(87, "Xamarin.Mac Classic binding projects are not supported anymore. Please upgrade the binding project to a Xamarin.Mac Unified binding project.");
        }
Beispiel #11
0
        public void GH6863_method()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "ghissue6863_method.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1072, "The BindAs type for the parameter \"id_test\" in the method \"GH6863_method.MyFooClass.StringMethod\" must be an array when the parameter's type is an array.");
        }
Beispiel #12
0
        public void BI0002()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding("InvalidCodeHere");
            bgen.AssertExecuteError("build");
            bgen.AssertError(2, "Could not compile the API bindings.");
        }
Beispiel #13
0
        public void BI1050_protocol()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "bindas1050protocolerror.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1050, "[BindAs] cannot be used inside Protocol or Model types. Type: MyFooClass");
        }
Beispiel #14
0
        public void BI1112_Bug37527_WrongProperty()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.AddTestApiDefinition("bug37527-wrong-property.cs");
            bgen.CreateTemporaryBinding();
            bgen.AssertExecuteError("build");
            bgen.AssertError(1112, "Property 'TestProperty' should be renamed to 'Delegate' for BaseType.Events and BaseType.Delegates to work.");
        }
Beispiel #15
0
        public void MissingExportOnProperty(Profile profile)
        {
            var bgen = new BGenTool();

            bgen.Profile = profile;
            bgen.Defines = BGenTool.GetDefaultDefines(profile);
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "missing-export-property.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1018, "No [Export] attribute on property Test.NSTextInputClient.SelectedRange");
        }
Beispiel #16
0
        public void BI1113_Bug37527_MissingProperty()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.AddTestApiDefinition("bug37527-missing-property.cs");
            bgen.CreateTemporaryBinding();
            bgen.AssertExecuteError("build");
            bgen.AssertError(1113, "BaseType.Delegates were set but no properties could be found. Do ensure that the WrapAttribute is used on the right properties.");
        }
Beispiel #17
0
        public void BI1040(Profile profile)
        {
            var bgen = new BGenTool();

            bgen.Profile = profile;
            bgen.Defines = BGenTool.GetDefaultDefines(profile);
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "protocol-duplicate-method-diff-out.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1040, "The selector doit:withmore on type Derived is found multiple times with different argument out states on argument 1.");
        }
Beispiel #18
0
        public void BI1037(Profile profile)
        {
            var bgen = new BGenTool();

            bgen.Profile = profile;
            bgen.Defines = BGenTool.GetDefaultDefines(profile);
            bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "protocol-duplicate-abstract-error.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertError(1037, "The selector Identifier on type Derived is found multiple times with both read only and write only versions, with no read/write version.");
        }
Beispiel #19
0
        public void BI1042()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.AddTestApiDefinition("bi1042.cs");
            bgen.CreateTemporaryBinding();
            bgen.ProcessEnums = true;
            bgen.AssertExecuteError("build");
            bgen.AssertError(1042, "Missing '[Field (LibraryName=value)]' for BindingTests.Tools.DoorOpener (e.g.\"__Internal\")");
        }
Beispiel #20
0
        public void BI1046()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.AddTestApiDefinition("bi1046.cs");
            bgen.CreateTemporaryBinding();
            bgen.ProcessEnums = true;
            bgen.AssertExecuteError("build");
            bgen.AssertError(1046, "The [Field] constant HMAccessoryCategoryTypeGarageDoorOpener cannot only be used once inside enum HMAccessoryCategoryType.");
        }
Beispiel #21
0
        public void BI1036(Profile profile)
        {
            var bgen = new BGenTool();

            bgen.Profile = profile;
            bgen.Defines = BGenTool.GetDefaultDefines(profile);
            bgen.ApiDefinitions.Add(Path.Combine(Configuration.SourceRoot, "tests", "generator", "bi1036.cs"));
            bgen.CreateTemporaryBinding();
            bgen.AssertExecuteError("build");
            bgen.AssertError(1036, "The last parameter in the method 'NS.Foo.Method' must be a delegate (it's 'System.String').");
        }
Beispiel #22
0
        public void WarnAsError(Profile profile)
        {
            const string message = "The member 'SomeMethod' is decorated with [Static] and its container class warnaserrorTests.FooObject_Extensions is decorated with [Category] this leads to hard to use code. Please inline SomeMethod into warnaserrorTests.FooObject class.";
            {
                // Enabled
                var bgen = new BGenTool();
                bgen.Profile     = profile;
                bgen.Defines     = BGenTool.GetDefaultDefines(profile);
                bgen.WarnAsError = string.Empty;
                bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "warnaserror.cs")));
                bgen.AssertExecuteError("build");
                bgen.AssertError(1117, message);
            }

            {
                // Disabled
                var bgen = new BGenTool();
                bgen.Profile = profile;
                bgen.Defines = BGenTool.GetDefaultDefines(profile);
                bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "warnaserror.cs")));
                bgen.AssertExecute("build");
                bgen.AssertWarning(1117, message);
            }

            {
                // Only 1116
                var bgen = new BGenTool();
                bgen.Profile     = profile;
                bgen.Defines     = BGenTool.GetDefaultDefines(profile);
                bgen.WarnAsError = "1116";
                bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "warnaserror.cs")));
                bgen.AssertExecute("build");
                bgen.AssertWarning(1117, message);
            }

            {
                // Only 1117
                var bgen = new BGenTool();
                bgen.Profile     = profile;
                bgen.Defines     = BGenTool.GetDefaultDefines(profile);
                bgen.WarnAsError = "1117";
                bgen.CreateTemporaryBinding(File.ReadAllText(Path.Combine(Configuration.SourceRoot, "tests", "generator", "warnaserror.cs")));
                bgen.AssertExecuteError("build");
                bgen.AssertError(1117, message);
            }
        }
Beispiel #23
0
        public void BI1063_NoDoubleWrapTest()
        {
            var bgen = new BGenTool {
                Profile      = Profile.iOS,
                ProcessEnums = true
            };

            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;

namespace BI1063Tests {

	enum PersonRelationship {
		[Field (null)]
		None,

		[Field (""INPersonRelationshipFather"", ""__Internal"")]
		Father,

		[Field (""INPersonRelationshipMother"", ""__Internal"")]
		Mother
	}

	[BaseType (typeof (NSObject))]
	interface Wrappers {

		// SmartEnum -- Normal Wrap getter Property

		[Export (""presenceType"")]
		NSString _PresenceType { get; }

		[Wrap (""PersonRelationshipExtensions.GetValue (_PresenceType)"")]
		PersonRelationship PresenceType {
			[Wrap (""PersonRelationshipExtensions.GetValue (_PresenceType)"")]
			get;
		}
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1063, "The 'WrapAttribute' can only be used at the property or at getter/setter level at a given time. Property: 'BI1063Tests.Wrappers.PresenceType'");
        }
Beispiel #24
0
        public void Bug57094Test()
        {
            // https://bugzilla.xamarin.com/show_bug.cgi?id=57094
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;
using ObjCRuntime;

namespace Bug57094 {

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[Field (""SomeField"", ""__Internal"")]
		byte [] SomeField { get; }
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1014, "Unsupported type for Fields: byte[] for 'Bug57094.FooObject SomeField'.");
        }
Beispiel #25
0
        public void BindAsNoOutParam()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;
using CoreGraphics;
using ObjCRuntime;

namespace Bug57804TestsRef {

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[Export (""setCGAffineTransformValueOutNonNullable:"")]
		void SetCGAffineTransformValueOutNonNullable ([BindAs (typeof (CGAffineTransform))] out NSValue value);
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1048, "Unsupported type 'ref/out NSValue' decorated with [BindAs]");
        }
Beispiel #26
0
        public void BI1062_NoAsyncMethodRefParameterTest()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;

namespace BI1062Tests {

	delegate void MyHandler (bool staaph, NSError error);

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[Async]
		[Export (""fooMethod:completion:"")]
		void FooMethod (ref NSObject obj, Action<bool, NSError> handler);
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1062, "The member 'FooObject.FooMethod' contains ref/out parameters and must not be decorated with [Async].");
        }
Beispiel #27
0
        public void BindAsNoMultidimensionalArrays()
        {
            var bgen = new BGenTool();

            bgen.Profile = Profile.iOS;
            bgen.CreateTemporaryBinding(@"
using System;
using Foundation;
using AVFoundation;
using ObjCRuntime;

namespace Bug57795Tests {

	[BaseType (typeof (NSObject))]
	interface FooObject {

		[BindAs (typeof (AVMediaTypes [,]))]
		[Export (""strongAVMediaTypesPropertiesMulti:"")]
		NSString [,] StrongAVMediaTypesPropertiesMulti { get; set; }
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1048, "Unsupported type AVMediaTypes[,] decorated with [BindAs]");
        }
Beispiel #28
0
        public void BI1064()
        {
            var bgen = new BGenTool {
                Profile      = Profile.iOS,
                ProcessEnums = true
            };

            bgen.CreateTemporaryBinding(@"
using System;
using ObjCRuntime;
using Foundation;

namespace BI1064Errors
{
	[BaseType (typeof (NSObject))]
	interface C
	{
		[Export (""testINativeObjectArray:a:b:"")]
		void TestINativeObjectArray (int action, ref INativeObject[] refValues, out INativeObject[] outValues);

		[Export (""invalid1:a:"")]
		void TestInvalid1 (ref DateTime[] refInvalid, out DateTime[] outInvalid);

		[Export (""invalid2:a:"")]
		void TestInvalid2 (ref object[] refInvalid, out object[] outInvalid);

		[Export (""invalid3:a:"")]
		void TestInvalid3 (ref int[] refInvalid, out int[] outInvalid);

		[Export (""invalid4:a:"")]
		void TestInvalid4 (ref object refInvalid, out object outInvalid);

		[Export (""testINativeObject:a:b:"")]
		void TestINativeObject (int action, ref INativeObject refValue, out INativeObject outValue);

		[Export (""testSelectorArray:a:b:"")] // Can't put SEL into NSArray (SEL isn't an NSObject)
		void TestSelectorArray (int action, ref Selector[] refValues, out Selector[] outValues);
	}
}");
            bgen.AssertExecuteError("build");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.INativeObject' for the parameter 'refValue' in BI1064Errors.C.TestINativeObject.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.INativeObject' for the parameter 'outValue' in BI1064Errors.C.TestINativeObject.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.INativeObject[]' for the parameter 'refValues' in BI1064Errors.C.TestINativeObjectArray.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.INativeObject[]' for the parameter 'outValues' in BI1064Errors.C.TestINativeObjectArray.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.DateTime[]' for the parameter 'refInvalid' in BI1064Errors.C.TestInvalid1.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.DateTime[]' for the parameter 'outInvalid' in BI1064Errors.C.TestInvalid1.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Object[]' for the parameter 'refInvalid' in BI1064Errors.C.TestInvalid2.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Object[]' for the parameter 'refInvalid' in BI1064Errors.C.TestInvalid2.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Int32[]' for the parameter 'outInvalid' in BI1064Errors.C.TestInvalid3.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Int32[]' for the parameter 'outInvalid' in BI1064Errors.C.TestInvalid3.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Object' for the parameter 'refInvalid' in BI1064Errors.C.TestInvalid4.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'System.Object' for the parameter 'refInvalid' in BI1064Errors.C.TestInvalid4.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.Selector[]' for the parameter 'refValues' in BI1064Errors.C.TestSelectorArray.");
            bgen.AssertError(1064, "Unsupported ref/out parameter type 'ObjCRuntime.Selector[]' for the parameter 'outValues' in BI1064Errors.C.TestSelectorArray.");
            bgen.AssertErrorCount(14);
        }