public void ConstructorImplementedAsNotUsableFromScriptDoesNotAppearOnTheType() { var metadataImporter = new MockMetadataImporter { GetConstructorSemantics = ctor => ConstructorScriptSemantics.NotUsableFromScript() }; Compile(new[] { "class C { public C() {} }" }, metadataImporter: metadataImporter); FindClass("C").UnnamedConstructor.Should().BeNull(); }
public void UsingConstructorMarkedAsNotUsableFromScriptGivesAnError() { var er = new MockErrorReporter(false); Compile(new[] { "class Class { public Class() {} public void M() { var c = new Class(); } }" }, metadataImporter: new MockMetadataImporter { GetConstructorSemantics = c => ConstructorScriptSemantics.NotUsableFromScript() }, errorReporter: er); Assert.That(er.AllMessagesText.Any(m => m.StartsWith("Error:") && m.Contains("constructor"))); }
public void UsingConstructorMarkedAsNotUsableFromScriptGivesAnError() { var er = new MockErrorReporter(false); Compile(new[] { "class Class { public Class() {} public void M() { var c = new Class(); } }" }, metadataImporter: new MockMetadataImporter { GetConstructorSemantics = c => ConstructorScriptSemantics.NotUsableFromScript() }, errorReporter: er); Assert.That(er.AllMessages.Any(msg => msg.Severity == MessageSeverity.Error && msg.FormattedMessage.Contains("constructor"))); }
public void InvokingBaseConstructorMarkedAsNotUsableFromScriptIsAnError() { var rpt = new MockErrorReporter(false); Compile(new[] { @"class B { public B() {} } class D : B { public D() {} }" }, errorReporter: rpt, metadataImporter: new MockMetadataImporter { GetConstructorSemantics = c => c.DeclaringType.Name == "D" ? ConstructorScriptSemantics.Unnamed() : ConstructorScriptSemantics.NotUsableFromScript() }); Assert.That(rpt.AllMessagesText.Any(msg => msg.StartsWith("Error", StringComparison.InvariantCultureIgnoreCase) && msg.IndexOf("cannot be used", StringComparison.InvariantCultureIgnoreCase) >= 0)); }
public void ChainingToConstructorMarkedAsNotUsableFromScriptIsAnError() { var rpt = new MockErrorReporter(false); Compile(new[] { @"class C { public C() : this(0) { } public C(int x) { } }" }, errorReporter: rpt, metadataImporter: new MockMetadataImporter { GetConstructorSemantics = c => c.Parameters.Count == 0 ? ConstructorScriptSemantics.Unnamed() : ConstructorScriptSemantics.NotUsableFromScript() }); Assert.That(rpt.AllMessagesText.Any(msg => msg.StartsWith("Error", StringComparison.InvariantCultureIgnoreCase) && msg.IndexOf("cannot be used", StringComparison.InvariantCultureIgnoreCase) >= 0)); }