using System; using System.IO; using NUnit.Framework; using Xamarin.Tests; namespace GeneratorTests { [TestFixture ()] [Parallelizable (ParallelScope.All)] public class ErrorTests { [Test] 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."); } [Test] public void BI0086 () { var bgen = new BGenTool (); bgen.CreateTemporaryBinding (""); bgen.AssertExecuteError ("build"); bgen.AssertError (86, "A target framework (--target-framework) must be specified."); } [Test] [TestCase (Profile.iOS)] 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')."); } [Test] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] [TestCase (Profile.macOSClassic)] 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."); } [Test] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] [TestCase (Profile.macOSClassic)] public void BI1038 (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-return.cs"))); bgen.AssertExecuteError ("build"); bgen.AssertError (1038, "The selector DoIt on type Derived is found multiple times with different return types."); } [Test] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] [TestCase (Profile.macOSClassic)] public void BI1039 (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-length.cs"))); bgen.AssertExecuteError ("build"); bgen.AssertError (1039, "The selector doit:itwith:more: on type Derived is found multiple times with different argument length 3 : 4."); } [Test] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] [TestCase (Profile.macOSClassic)] 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."); } [Test] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] [TestCase (Profile.macOSClassic)] 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."); } [Test] 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."); } [Test] 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]"); } [Test] 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]."); } [Test] public void BI1050_model () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "bindas1050modelerror.cs"))); bgen.AssertExecuteError ("build"); bgen.AssertError (1050, "[BindAs] cannot be used inside Protocol or Model types. Type: MyFooClass"); } [Test] 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"); } [Test] public void BI1060 () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "bug42855.cs"))); bgen.AssertExecute ("build"); bgen.AssertWarning (1060, "The Bug42855Tests.MyFooClass protocol is decorated with [Model], but not [BaseType]. Please verify that [Model] is relevant for this protocol; if so, add [BaseType] as well, otherwise remove [Model]."); } [Test] 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."); } [Test] 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."); } [Test] public void BI1117 () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (@"using System; using Foundation; namespace Bug52570Tests { [Category] [BaseType (typeof (FooObject))] interface FooObject_Extensions { [Static] [Export (""someMethod:"")] bool SomeMethod (NSRange range); } [BaseType (typeof (NSObject))] interface FooObject { } }"); bgen.AssertExecute ("build"); bgen.AssertWarning (1117, "The member 'SomeMethod' is decorated with [Static] and its container class Bug52570Tests.FooObject_Extensions is decorated with [Category] this leads to hard to use code. Please inline SomeMethod into Bug52570Tests.FooObject class."); } [Test] public void BI1117_classinternal () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "bug52570classinternal.cs"))); bgen.AssertExecute ("build"); bgen.AssertNoWarnings (); } [Test] public void BI1117_methodinternal () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "bug52570methodinternal.cs"))); bgen.AssertExecute ("build"); bgen.AssertNoWarnings (); } [Test] public void BI1117_allowstaticmembers () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "bug52570allowstaticmembers.cs"))); bgen.AssertExecute ("build"); bgen.AssertNoWarnings (); } [Test] 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]"); } [Test] public void BindAsNullableNSStringArrayError () { // 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 (AVMediaTypes? []))] [Export (""strongNullableAVMediaTypesProperties"")] NSString [] StrongNullableAVMediaTypesProperties { get; set; } } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1048, "Unsupported type AVMediaTypes?[] decorated with [BindAs]"); } [Test] 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]"); } [Test] 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]"); } [Test] public void BindAsNoRefParam () { 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 (""setCGAffineTransformValueRefNonNullable:"")] void SetCGAffineTransformValueRefNonNullable ([BindAs (typeof (CGAffineTransform))] ref NSValue value); } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1048, "Unsupported type 'ref/out NSValue' decorated with [BindAs]"); } [Test] 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]"); } [Test] 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'."); } [Test] public void BI1062_NoAsyncMethodRefHandlerTest () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (@" using System; using Foundation; namespace BI1062Tests { delegate void MyHandler (ref bool staaph, NSError error); [BaseType (typeof (NSObject))] interface FooObject { [Async] [Export (""fooMethod:"")] void FooMethod (MyHandler handler); } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1062, "The member 'FooObject.FooMethod' contains ref/out parameters and must not be decorated with [Async]."); } [Test] public void BI1062_NoAsyncMethodOutHandlerTest () { var bgen = new BGenTool (); bgen.Profile = Profile.iOS; bgen.CreateTemporaryBinding (@" using System; using Foundation; namespace BI1062Tests { delegate void MyHandler (out bool staaph, NSError error); [BaseType (typeof (NSObject))] interface FooObject { [Async] [Export (""fooMethod:"")] void FooMethod (MyHandler handler); } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1062, "The member 'FooObject.FooMethod' contains ref/out parameters and must not be decorated with [Async]."); } [Test] public void BI1062_NoAsyncMethodOutParameterTest () { 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 (out NSObject obj, MyHandler handler); } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1062, "The member 'FooObject.FooMethod' contains ref/out parameters and must not be decorated with [Async]."); } [Test] 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 handler); } }"); bgen.AssertExecuteError ("build"); bgen.AssertError (1062, "The member 'FooObject.FooMethod' contains ref/out parameters and must not be decorated with [Async]."); } [Test] 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'"); } [Test] 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); } [Test] 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); } [Test] 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. } [Test] [TestCase (Profile.iOS)] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] 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); } } [Test] [TestCase (Profile.iOS)] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] public void NoWarn (Profile profile) { const string message = "The member 'SomeMethod' is decorated with [Static] and its container class nowarnTests.FooObject_Extensions is decorated with [Category] this leads to hard to use code. Please inline SomeMethod into nowarnTests.FooObject class."; { // Enabled var bgen = new BGenTool (); bgen.Profile = profile; bgen.Defines = BGenTool.GetDefaultDefines (profile); bgen.NoWarn = string.Empty; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "nowarn.cs"))); bgen.AssertExecute ("build"); bgen.AssertNoWarnings (); } { // Disabled var bgen = new BGenTool (); bgen.Profile = profile; bgen.Defines = BGenTool.GetDefaultDefines (profile); bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "nowarn.cs"))); bgen.AssertExecute ("build"); bgen.AssertWarning (1117, message); } { // Only 1116 var bgen = new BGenTool (); bgen.Profile = profile; bgen.Defines = BGenTool.GetDefaultDefines (profile); bgen.NoWarn = "1116"; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "nowarn.cs"))); bgen.AssertExecute ("build"); bgen.AssertWarning (1117, message); } { // Only 1117 var bgen = new BGenTool (); bgen.Profile = profile; bgen.Defines = BGenTool.GetDefaultDefines (profile); bgen.NoWarn = "1117"; bgen.CreateTemporaryBinding (File.ReadAllText (Path.Combine (Configuration.SourceRoot, "tests", "generator", "nowarn.cs"))); bgen.AssertExecute ("build"); bgen.AssertNoWarnings (); } } [Test] [TestCase (Profile.iOS)] [TestCase (Profile.macOSFull)] [TestCase (Profile.macOSMobile)] 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"); } } }