287 lines
10 KiB
C#
Raw Normal View History

using mdoc.Mono.Documentation.Updater.Formatters;
using mdoc.Test.SampleClasses;
using Mono.Documentation.Updater;
using NUnit.Framework;
namespace mdoc.Test
{
[TestFixture]
[Category("Javascript")]
[Category("Usage")]
class JsUsageFormatterTests : BasicFormatterTests<JsUsageFormatter>
{
protected override JsUsageFormatter formatter => new JsUsageFormatter();
#region IsSupported
[Test]
public void Test_IsSupportedType_WebHostHidden()
{
Assert.IsFalse(formatter.IsSupported(GetType(typeof(WebHostHiddenTestClass))));
}
[Test]
public void Test_IsSupportedMember_WebHostHidden()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(WebHostHiddenTestClass),
i => i.Name == nameof(WebHostHiddenTestClass.SomeMethod))));
}
[Test]
public void Test_IsSupportedType_Generic()
{
Assert.IsFalse(formatter.IsSupported(GetType(typeof(SomeGenericClass<>))));
}
[Test]
public void Test_IsSupportedMember_Generic()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeGenericClass<>),
i => i.Name == "SomeMethod")));
}
[Test]
public void Test_IsSupportedMember_Generic2()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeGenericClass<>),
i => i.Name == "SomeMethod2")));
}
[Test]
public void Test_IsSupportedMember_Generic3()
{
// WinRT doesn't support public types with generic parameters
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeGenericClass<>),
i => i.Name == "SomeMethod3")));
}
[Test]
public void Test_IsSupported_MethodWithWebHostHiddenParameter()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeClass),
i => i.Name == nameof(SomeClass.SomeMethodWebHostHiddenParameter))));
}
[Test]
public void Test_IsSupported_MethodWithWebHostHiddenReturn()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeClass),
i => i.Name == nameof(SomeClass.SomeMethodWebHostHiddenReturn))));
}
[Test]
public void Test_IsSupportedMember_Operator()
{
// Operator overloads are not supported as they are not supported for Windows Runtime
// (that is to say, they are not supported at the ABI level).
// C# supports operator overloading, and C# implementations get compiled to metadata as static methods
// on the type in question, such as TypeName::op_Equality, TypeName::op_GreaterThan, etc.
// You can see a list on StackOverflow. As long as theyre public, they can be invoked by name
// just like any other static method.
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(TestClass),
i => i.Name == "op_UnaryPlus")));
}
[Test]
public void Test_IsSupportedMember_NotOperator()
{
Assert.IsFalse(formatter.IsSupported(GetMethod(typeof(SomeClass),
i => i.Name == nameof(SomeClass.op_NotOperator))));
}
#endregion
#region Fields
[Test]
[Category("Fields")]
public void Test_Field()
=> TestFieldSignature(typeof(SomeStruct),
null, nameof(SomeStruct.IntMember));
#endregion
#region Properties
[Test]
[Category("Properties")]
public void Test_Property_0()
=> TestPropertySignature(typeof(SomeClass),
@"var int32 = someClass.property;
someClass.property = int32;",
nameof(SomeClass.Property));
[Test]
[Category("Properties")]
public void Test_Property_1()
=> TestPropertySignature(typeof(SomeClass),
@"var testClass = someClass.property2;
someClass.property2 = testClass;",
nameof(SomeClass.Property2));
[Test]
[Category("Properties")]
public void Test_Property_2()
=> TestPropertySignature(typeof(SomeClass),
"var testClass = someClass.property3;",
nameof(SomeClass.Property3));
[Test]
[Category("Properties")]
public void Test_Property_3()
=> TestPropertySignature(typeof(SomeClass),
"someClass.property4 = testClass;",
nameof(SomeClass.Property4));
[Test]
[Category("Properties")]
public void Test_Static_Property_0()
=> TestPropertySignature(typeof(SomeClass),
@"var int32 = SomeClass.staticProperty;
SomeClass.staticProperty = int32;",
nameof(SomeClass.StaticProperty));
#endregion
#region Types
[Test]
[Category("Types")]
[Category("Enums")]
public void Test_Enum_0()
=> TestTypeSignature(typeof(SomeEnum), "var value = mdoc.Test.SampleClasses.SomeEnum.testEnumElement1");
[Test]
[Category("Types")]
[Category("Enums")]
public void Test_Enum_1()
=> TestTypeSignature(typeof(SomeEmptyEnum), null);
[Test]
[Category("Types")]
[Category("Struct")]
public void Test_Struct()
=> TestTypeSignature(typeof(SomeStruct),
@"var someStruct = {
intMember : /* Your value */,
staticMember : /* Your value */,
testClassMember : /* Your value */
}");
[Test]
[Category("Types")]
[Category("Deleagates")]
public void Test_Delegate()
=> TestTypeSignature(typeof(SomeDelegate),
@"var someDelegateHandler = function(str){
/* Your code */
}");
[Test]
[Category("Types")]
[Category("Class")]
public void Test_Class_0()
=> TestTypeSignature(typeof(SomeClass),
@"var someClass = new SomeClass(i, j);");
[Test]
[Category("Types")]
[Category("Class")]
public void Test_Class_1()
=> TestTypeSignature(typeof(SomeClassWithManyConstructors), null);
#endregion
#region Methods
[Test]
[Category("Methods")]
public void Test_AyncMethod()
=> TestMethodSignature(typeof(SomeClass),
"someClass.asyncMethod().done( /* Your success and error handlers */ )",
nameof(SomeClass.AsyncMethod));
[Test]
[Category("Methods")]
public void Test_StaticAyncMethod()
=> TestMethodSignature(typeof(SomeClass),
"mdoc.Test.SampleClasses.SomeClass.staticAsyncMethod().done( /* Your success and error handlers */ )",
nameof(SomeClass.StaticAsyncMethod));
[Test]
[Category("Methods")]
public void Test_Method()
=> TestMethodSignature(typeof(SomeClass),
"someClass.someMethod()",
nameof(SomeClass.SomeMethod));
[Test]
[Category("Methods")]
public void Test_StaticMethod()
=> TestMethodSignature(typeof(SomeClass),
"mdoc.Test.SampleClasses.SomeClass.someStaticMethod()",
nameof(SomeClass.SomeStaticMethod));
[Test]
[Category("Methods")]
public void Test_MethodWithParameters()
=> TestMethodSignature(typeof(SomeClass),
"someClass.someMethodWithParameters(someClass, i)",
nameof(SomeClass.SomeMethodWithParameters));
[Test]
[Category("Methods")]
public void Test_MethodWithReturn()
=> TestMethodSignature(typeof(SomeClass),
"var int32 = someClass.someMethod2()",
nameof(SomeClass.SomeMethod2));
[Test]
[Category("Methods")]
public void Test_MethodWithReturnBool()
=> TestMethodSignature(typeof(SomeClass),
"var boolean = someClass.someMethodWithReturnBool()",
nameof(SomeClass.SomeMethodWithReturnBool));
[Test]
[Category("Methods")]
public void Test_StaticMethodWithReturn()
=> TestMethodSignature(typeof(SomeClass),
"var int32 = mdoc.Test.SampleClasses.SomeClass.someStaticMethod2()",
nameof(SomeClass.SomeStaticMethod2));
[Test]
[Category("Methods")]
[Category("Constructors")]
public void Test_Constructor()
=> TestMethodSignature(typeof(TestClass),
"var testClass = new TestClass();",
".ctor");
#endregion
#region Events
[Test]
[Category("Events")]
public void Test_Event()
=> TestEventSignature(typeof(SomeClass),
"function onAppMemoryUsageIncreased(eventArgs) { /* Your code */ }" + MemberFormatter.GetLineEnding() +
"someClass.addEventListener(\"appmemoryusageincreased\", onAppMemoryUsageIncreased);" + MemberFormatter.GetLineEnding() +
"someClass.removeEventListener(\"appmemoryusageincreased\", onAppMemoryUsageIncreased);" + MemberFormatter.GetLineEnding() +
"- or -" + MemberFormatter.GetLineEnding() +
"someClass.onappmemoryusageincreased = onAppMemoryUsageIncreased;",
nameof(SomeClass.AppMemoryUsageIncreased));
[Test]
[Category("Events")]
public void Test_StaticEvent()
=> TestEventSignature(typeof(SomeClass),
"function onStaticEvent(eventArgs) { /* Your code */ }" + MemberFormatter.GetLineEnding() +
"mdoc.Test.SampleClasses.SomeClass.addEventListener(\"staticevent\", onStaticEvent);" + MemberFormatter.GetLineEnding() +
"mdoc.Test.SampleClasses.SomeClass.removeEventListener(\"staticevent\", onStaticEvent);" + MemberFormatter.GetLineEnding() +
"- or -" + MemberFormatter.GetLineEnding() +
"mdoc.Test.SampleClasses.SomeClass.onstaticevent = onStaticEvent;",
nameof(SomeClass.StaticEvent));
[Test]
[Category("Events")]
public void Test_EventPrivate()
=> TestEventSignature(typeof(SomeClass),
null,
"PrivateEvent");
#endregion
}
}