File: EcmaDocTests.cs

package info (click to toggle)
mono 6.12.0.199%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,192 kB
  • sloc: cs: 11,181,844; xml: 2,850,076; ansic: 689,413; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,845; makefile: 19,951; sh: 15,030; python: 4,771; pascal: 925; sql: 859; sed: 16; php: 1
file content (66 lines) | stat: -rw-r--r-- 3,237 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;

using NUnit.Framework;

using Monodoc;
using Monodoc.Generators;

namespace MonoTests.Monodoc
{
	[TestFixture]
	public class EcmaDocTest
	{
		// Because EcmaDoc is internal and we can't use InternalsVisibleTo since test assemblies aren't
		// signed/strong-named by the build, we have to resort to reflection
		TDelegate GetTestedMethod<TDelegate> (string methodName)
		{
			var ecmaDoc = Type.GetType ("Monodoc.Providers.EcmaDoc, monodoc");
			return (TDelegate)(object)Delegate.CreateDelegate (typeof (TDelegate), ecmaDoc.GetMethod (methodName));
		}

		[Test]
		public void CountTypeGenericArgumentsTest ()
		{
			var realCountTypeGenericArguments = GetTestedMethod<Func<string, int, int>> ("CountTypeGenericArguments");
			// Since we don't use the optional start index parameters, bypass it by wrapping the func
			Func<string, int> countTypeGenericArguments = s => realCountTypeGenericArguments (s, 0);

			Assert.AreEqual (0, countTypeGenericArguments ("T:System.String"), "#0a");
			Assert.AreEqual (0, countTypeGenericArguments ("T:String"), "#0b");
			Assert.AreEqual (0, countTypeGenericArguments ("String"), "#0c");

			Assert.AreEqual (1, countTypeGenericArguments ("T:System.Collections.Foo<T>"), "#1a");
			Assert.AreEqual (1, countTypeGenericArguments ("T:System.Foo<T>"), "#1b");
			Assert.AreEqual (1, countTypeGenericArguments ("T:Foo<T>"), "#1c");
			Assert.AreEqual (1, countTypeGenericArguments ("Foo<T>"), "#1d");

			Assert.AreEqual (2, countTypeGenericArguments ("T:System.Collections.Foo<T, U>"), "#2a");
			Assert.AreEqual (2, countTypeGenericArguments ("T:System.Foo<TKey, TValue>"), "#2b");
			Assert.AreEqual (2, countTypeGenericArguments ("T:Foo<Something,Else>"), "#2c");
			Assert.AreEqual (2, countTypeGenericArguments ("Foo<TDelegate,TArray>"), "#2d");

			Assert.AreEqual (3, countTypeGenericArguments ("T:System.Collections.Foo<T, U, V>"), "#3a");
			Assert.AreEqual (3, countTypeGenericArguments ("T:System.Foo<TKey, TValue, THash>"), "#3b");
			Assert.AreEqual (3, countTypeGenericArguments ("T:Foo<Something,Else,Really>"), "#3c");
			Assert.AreEqual (3, countTypeGenericArguments ("Foo<TDelegate,TArray,TEvent>"), "#3d");
		}

		[Test]
		public void CountTypeGenericArgumentsTest_Nested ()
		{
			var realCountTypeGenericArguments = GetTestedMethod<Func<string, int, int>> ("CountTypeGenericArguments");
			// Since we don't use the optional start index parameters, bypass it by wrapping the func
			Func<string, int> countTypeGenericArguments = s => realCountTypeGenericArguments (s, 0);

			Assert.AreEqual (1, countTypeGenericArguments ("T:System.Collections.Foo<T[]>"), "#1a");
			Assert.AreEqual (1, countTypeGenericArguments ("T:System.Collections.Foo<IList<T>>"), "#1b");
			Assert.AreEqual (2, countTypeGenericArguments ("T:System.Collections.Foo<T, KeyValuePair<T, U>>"), "#2a");
			Assert.AreEqual (2, countTypeGenericArguments ("T:System.Collections.Foo<T, KeyValuePair<IProducerConsumerCollection<U>, IEquatable<V>>>"), "#2b");
			Assert.AreEqual (3, countTypeGenericArguments ("T:System.Collections.Foo<T, IProducerConsumerCollection<U>, IEquatable<V>>"), "#3a");
		}
	}
}