예제 #1
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.");
        }
예제 #2
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.");
        }
예제 #3
0
        public void BI1041(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-type.cs")));
            bgen.AssertExecuteError("build");
            bgen.AssertErrorPattern(1041, "The selector doit:with:more: on type Derived is found multiple times with different argument types on argument 2 - System.Int32 : .*Foundation.NSObject.");
        }
예제 #4
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.");
        }
예제 #5
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.");
        }
예제 #6
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').");
        }
예제 #7
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.");
        }
예제 #8
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\")");
        }
예제 #9
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);
        }
예제 #10
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);
            }
        }
예제 #11
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'");
        }
예제 #12
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'.");
        }
예제 #13
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]");
        }
예제 #14
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].");
        }
예제 #15
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]");
        }