10 changed files with 1091 additions and 31 deletions
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture, Ignore("DOM for attributes is incomplete")] |
||||
public class AttributeTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void NamespaceInAttributeContext() |
||||
{ |
||||
string program = "using System; [$System.Runtime$.CompilerServices.IndexerName(\"bla\")] class Test { }"; |
||||
NamespaceResolveResult result = Resolve<NamespaceResolveResult>(program); |
||||
Assert.AreEqual("System.Runtime", result.NamespaceName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AttributeWithShortName() |
||||
{ |
||||
string program = "using System; [$Obsolete$] class Test {}"; |
||||
|
||||
TypeResolveResult result = Resolve<TypeResolveResult>(program); |
||||
Assert.AreEqual("System.ObsoleteAttribute", result.Type.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void QualifiedAttributeWithShortName() |
||||
{ |
||||
string program = "using System; [$System.Obsolete$] class Test {}"; |
||||
|
||||
TypeResolveResult result = Resolve<TypeResolveResult>(program); |
||||
Assert.AreEqual("System.ObsoleteAttribute", result.Type.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AttributeConstructor1() |
||||
{ |
||||
string program = "using System; [$LoaderOptimization(3)$] class Test { }"; |
||||
var mrr = Resolve<MemberResolveResult>(program); |
||||
Assert.AreEqual("System.LoaderOptimization.#ctor", mrr.Member.FullName); |
||||
Assert.AreEqual("System.Byte", (mrr.Member as IMethod).Parameters[0].Type.Resolve(context).FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AttributeConstructor2() |
||||
{ |
||||
string program = "using System; [$LoaderOptimization(LoaderOptimization.NotSpecified)$] class Test { }"; |
||||
var mrr = Resolve<MemberResolveResult>(program); |
||||
Assert.AreEqual("System.LoaderOptimization.#ctor", mrr.Member.FullName); |
||||
Assert.AreEqual("System.LoaderOptimization", (mrr.Member as IMethod).Parameters[0].Type.Resolve(context).FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AttributeArgumentInClassContext1() |
||||
{ |
||||
string program = @"using System;
|
||||
[AttributeUsage($XXX$)] class MyAttribute : Attribute { |
||||
public const AttributeTargets XXX = AttributeTargets.All; |
||||
} |
||||
";
|
||||
MemberResolveResult result = Resolve<MemberResolveResult>(program); |
||||
Assert.AreEqual("MyAttribute.XXX", result.Member.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AttributeArgumentInClassContext2() |
||||
{ |
||||
string program = @"using System; namespace MyNamespace {
|
||||
[SomeAttribute($E.A$)] class Test { } |
||||
enum E { A, B } |
||||
} |
||||
";
|
||||
MemberResolveResult result = Resolve<MemberResolveResult>(program); |
||||
Assert.AreEqual("MyNamespace.E.A", result.Member.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void SD_1384() |
||||
{ |
||||
string program = @"using System;
|
||||
class Flags { |
||||
[Flags] |
||||
enum $Test$ { } |
||||
}";
|
||||
TypeResolveResult result = Resolve<TypeResolveResult>(program); |
||||
Assert.AreEqual("Flags.Test", result.Type.FullName); |
||||
|
||||
var rt = result.Type.GetDefinition().Attributes[0].AttributeType.Resolve(context); |
||||
Assert.AreEqual("System.FlagsAttribute", rt.FullName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,89 @@
@@ -0,0 +1,89 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture, Ignore("Extension method support not yet implemented")] |
||||
public class ExtensionMethodTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void ExtensionMethodsTest() |
||||
{ |
||||
string program = @"using XN;
|
||||
class TestClass { |
||||
static void Test(A a, B b, C c) { |
||||
$; |
||||
} |
||||
} |
||||
class A { } |
||||
class B { |
||||
public void F(int i) { } |
||||
} |
||||
class C { |
||||
public void F(object obj) { } |
||||
} |
||||
namespace XN { |
||||
public static class XC { |
||||
public static void F(this object obj, int i) { } |
||||
public static void F(this object obj, string s) { } |
||||
} |
||||
} |
||||
";
|
||||
MemberResolveResult mrr; |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$a.F(1)$")); |
||||
Assert.AreEqual("XN.XC.F", mrr.Member.FullName); |
||||
Assert.AreEqual("System.Int32", ((IMethod)mrr.Member).Parameters[1].Type.Resolve(context).FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$a.F(\"text\")$")); |
||||
Assert.AreEqual("XN.XC.F", mrr.Member.FullName); |
||||
Assert.AreEqual("System.String", ((IMethod)mrr.Member).Parameters[1].Type.Resolve(context).FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$b.F(1)$")); |
||||
Assert.AreEqual("B.F", mrr.Member.FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$b.F(\"text\")$")); |
||||
Assert.AreEqual("XN.XC.F", mrr.Member.FullName); |
||||
Assert.AreEqual("System.String", ((IMethod)mrr.Member).Parameters[1].Type.Resolve(context).FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$c.F(1)$")); |
||||
Assert.AreEqual("C.F", mrr.Member.FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$c.F(\"text\")$")); |
||||
Assert.AreEqual("C.F", mrr.Member.FullName); |
||||
} |
||||
|
||||
[Test, Ignore("Test fails due to parser returning incorrect position")] |
||||
public void ExtensionMethodsTest2() |
||||
{ |
||||
string program = @"using System; using System.Collections.Generic;
|
||||
class TestClass { |
||||
static void Test(string[] args) { |
||||
$; |
||||
} |
||||
} |
||||
public static class XC { |
||||
public static int ToInt32(this string s) { return int.Parse(s); } |
||||
public static T[] Slice<T>(this T[] source, int index, int count) { throw new NotImplementedException(); } |
||||
public static IEnumerable<T> Filter<T>(this IEnumerable<T> source, Predicate<T> predicate) { throw new NotImplementedException(); } |
||||
} |
||||
";
|
||||
MemberResolveResult mrr; |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$\"text\".ToInt32()$")); |
||||
Assert.AreEqual("XC.ToInt32", mrr.Member.FullName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$args.Slice(1, 2)$")); |
||||
Assert.AreEqual("XC.Slice", mrr.Member.FullName); |
||||
Assert.AreEqual("System.String[]", mrr.Type.ReflectionName); |
||||
|
||||
mrr = Resolve<MemberResolveResult>(program.Replace("$", "$args.Filter(delegate { return true; })$")); |
||||
Assert.AreEqual("XC.Filter", mrr.Member.FullName); |
||||
Assert.AreEqual("System.Collections.Generic.IEnumerable{System.String}", mrr.Type.ReflectionName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,278 @@
@@ -0,0 +1,278 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture, Ignore("Lambda support not yet implemented")] |
||||
public class LambdaTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void SimpleLambdaTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
Test(i => Console.WriteLine(i)); |
||||
} |
||||
public void Test(Action<int> ac) { ac(42); } |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program.Replace("(i)", "($i$)")); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
|
||||
lrr = Resolve<LocalResolveResult>(program.Replace("i =>", "$i$ =>")); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInConstructorTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
TestClass t = new TestClass(i => Console.WriteLine($i$)); |
||||
} |
||||
public TestClass(Action<int> ac) { ac(42); } |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInGenericConstructorTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
var t = new SomeClass<string>(i => Console.WriteLine($i$)); |
||||
} |
||||
} |
||||
class SomeClass<T> { |
||||
public SomeClass(Action<T> ac) { } |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
#region Lambda In Initializer
|
||||
[Test] |
||||
public void LambdaInCollectionInitializerTest1() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
Converter<int, string>[] arr = { |
||||
i => $i$.ToString() |
||||
}; |
||||
} |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInCollectionInitializerTest2() |
||||
{ |
||||
string program = @"using System; using System.Collections.Generic;
|
||||
class TestClass { |
||||
static void Main() { |
||||
a = new List<Converter<int, string>> { |
||||
i => $i$.ToString() |
||||
}; |
||||
} |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInCollectionInitializerTest3() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
a = new Converter<int, string>[] { |
||||
i => $i$.ToString() |
||||
}; |
||||
} |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInCollectionInitializerTest4() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
Converter<int, string>[] field = new Converter<int, string>[] { |
||||
i => $i$.ToString() |
||||
}; |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInCollectionInitializerTest5() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
Converter<int, string>[] field = { |
||||
i => $i$.ToString() |
||||
}; |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInObjectInitializerTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class X { |
||||
void SomeMethod() { |
||||
Helper h = new Helper { |
||||
F = i => $i$.ToString() |
||||
}; |
||||
} |
||||
} |
||||
class Helper { |
||||
public Converter<int, string> F; |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
#endregion
|
||||
|
||||
[Test] |
||||
public void LambdaExpressionInCastExpression() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void Main(string[] args) { |
||||
var f = (Func<int, string>) ( i => $i$ ); |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaExpressionInReturnStatement() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static Converter<int, string> GetToString() { |
||||
return i => $i$.ToString(); |
||||
} |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program, "i"); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaExpressionInReturnStatementInStatementLambda() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void SomeMethod() { |
||||
Func<Func<string, string>> getStringTransformer = () => { |
||||
return s => $s$.ToUpper(); |
||||
}; |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
public delegate R Func<R>(); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaExpressionInReturnStatementInAnonymousMethod() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void SomeMethod() { |
||||
Func<Func<string, string>> getStringTransformer = delegate { |
||||
return s => $s$.ToUpper(); |
||||
}; |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
public delegate R Func<R>(); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void CurriedLambdaExpressionInCastExpression() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void Main(string[] args) { |
||||
var f = (Func<char, Func<string, int>>) ( a => b => 0 ); |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program.Replace("a =>", "$a$ =>")); |
||||
Assert.AreEqual("System.Char", lrr.Type.ReflectionName); |
||||
|
||||
lrr = Resolve<LocalResolveResult>(program.Replace("b =>", "$b$ =>")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaExpressionInVariableInitializer() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void Main() { |
||||
Func<int, string> f = $i$ => i.ToString(); |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaExpressionInVariableAssignment() |
||||
{ |
||||
string program = @"using System;
|
||||
static class TestClass { |
||||
static void Main() { |
||||
Func<int, string> f; |
||||
f = $i$ => i.ToString(); |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LambdaInDelegateCall() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
Func<Func<int, string>, char> f; |
||||
f($i$ => i.ToString()); |
||||
} |
||||
public delegate R Func<T, R>(T arg); |
||||
}";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,136 @@
@@ -0,0 +1,136 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture, Ignore("LINQ not yet implemented")] |
||||
public class LinqTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void SimpleLinqTest() |
||||
{ |
||||
string program = @"using System; using System.Linq;
|
||||
class TestClass { |
||||
void Test(string[] input) { |
||||
var r = from e in input |
||||
where e.StartsWith(""/"") |
||||
select e.Trim(); |
||||
r.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
LocalResolveResult lrr = Resolve<LocalResolveResult>(program.Replace("where e", "where $e$")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("select e", "select $e$")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("from e", "from $e$")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
|
||||
lrr = Resolve<LocalResolveResult>(program.Replace("r.ToString", "$r$.ToString")); |
||||
Assert.AreEqual("System.Collections.Generic.IEnumerable", lrr.Type.FullName); |
||||
Assert.AreEqual("System.String", ((ParameterizedType)lrr.Type).TypeArguments[0].FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LinqGroupTest() |
||||
{ |
||||
string program = @"using System; using System.Linq;
|
||||
class TestClass { |
||||
void Test(string[] input) { |
||||
var r = from e in input |
||||
group e.ToUpper() by e.Length; |
||||
$r$.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
LocalResolveResult lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Collections.Generic.IEnumerable", lrr.Type.FullName); |
||||
ParameterizedType rt = (ParameterizedType)((ParameterizedType)lrr.Type).TypeArguments[0]; |
||||
Assert.AreEqual("System.Linq.IGrouping", rt.FullName); |
||||
Assert.AreEqual("System.Int32", rt.TypeArguments[0].FullName); |
||||
Assert.AreEqual("System.String", rt.TypeArguments[1].FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LinqQueryableGroupTest() |
||||
{ |
||||
string program = @"using System; using System.Linq;
|
||||
class TestClass { |
||||
void Test(IQueryable<string> input) { |
||||
var r = from e in input |
||||
group e.ToUpper() by e.Length; |
||||
$r$.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
LocalResolveResult lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Linq.IQueryable", lrr.Type.FullName); |
||||
ParameterizedType rt = (ParameterizedType)((ParameterizedType)lrr.Type).TypeArguments[0]; |
||||
Assert.AreEqual("System.Linq.IGrouping", rt.FullName); |
||||
Assert.AreEqual("System.Int32", rt.TypeArguments[0].FullName); |
||||
Assert.AreEqual("System.String", rt.TypeArguments[1].FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void ParenthesizedLinqTest() |
||||
{ |
||||
string program = @"using System; using System.Linq;
|
||||
class TestClass { |
||||
void Test(string[] input) { |
||||
$(from e in input select e.Length)$.ToArray(); |
||||
} |
||||
} |
||||
";
|
||||
ResolveResult rr = Resolve<ResolveResult>(program); |
||||
Assert.AreEqual("System.Collections.Generic.IEnumerable", rr.Type.FullName); |
||||
Assert.AreEqual("System.Int32", ((ParameterizedType)rr.Type).TypeArguments[0].FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LinqSelectReturnTypeTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { static void M() { |
||||
$(from a in new XYZ() select a.ToUpper())$.ToString(); |
||||
}} |
||||
class XYZ { |
||||
public int Select<U>(Func<string, U> f) { return 42; } |
||||
}";
|
||||
ResolveResult rr = Resolve<ResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", rr.Type.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void LinqQueryContinuationTest() |
||||
{ |
||||
string program = @"using System; using System.Linq;
|
||||
class TestClass { |
||||
void Test(string[] input) { |
||||
var r = from x in input |
||||
select x.GetHashCode() into x |
||||
where x == 42 |
||||
select x * x; |
||||
r.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
LocalResolveResult lrr = Resolve<LocalResolveResult>(program.Replace("from x", "from $x$")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("select x.G", "select $x$.G")); |
||||
Assert.AreEqual("System.String", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("into x", "into $x$")); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("where x", "where $x$")); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
lrr = Resolve<LocalResolveResult>(program.Replace("select x * x", "select x * $x$")); |
||||
Assert.AreEqual("System.Int32", lrr.Type.ReflectionName); |
||||
|
||||
lrr = Resolve<LocalResolveResult>(program.Replace("r.ToString", "$r$.ToString")); |
||||
Assert.AreEqual("System.Collections.Generic.IEnumerable`1[[System.Int32]]", lrr.Type.ReflectionName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.TypeSystem; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture] |
||||
public class LocalTypeInferenceTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void TypeInferenceTest() |
||||
{ |
||||
string program = @"class TestClass {
|
||||
static void Test() { |
||||
var a = 3; |
||||
$a$.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Int32", lrr.Type.FullName); |
||||
} |
||||
|
||||
[Test] |
||||
public void TypeInferenceCycleTest() |
||||
{ |
||||
string program = @"class TestClass {
|
||||
static void Test() { |
||||
var a = a; |
||||
$a$.ToString(); |
||||
} |
||||
} |
||||
";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreSame(SharedTypes.UnknownType, lrr.Type); |
||||
} |
||||
|
||||
[Test] |
||||
public void InvalidAnonymousTypeDeclaration() |
||||
{ |
||||
// see SD-1393
|
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main() { |
||||
var contact = {id = 54321}; |
||||
$contact$.ToString(); |
||||
} }";
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual(SharedTypes.UnknownType, lrr.Type); |
||||
} |
||||
} |
||||
} |
||||
@ -1,26 +0,0 @@
@@ -1,26 +0,0 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture] |
||||
public class MemberLookupTests : ResolverTestBase |
||||
{ |
||||
[Test] |
||||
public void ShortMaxValueTest() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
object a = $short.MaxValue$; |
||||
} |
||||
";
|
||||
MemberResolveResult rr = Resolve<MemberResolveResult>(program); |
||||
Assert.AreEqual("System.Int16", rr.Type.FullName); |
||||
Assert.AreEqual("System.Int16.MaxValue", rr.Member.FullName); |
||||
Assert.AreEqual(short.MaxValue, rr.ConstantValue); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.NRefactory.CSharp.Resolver |
||||
{ |
||||
[TestFixture] |
||||
public class UnsafeCodeTests : ResolverTestBase |
||||
{ |
||||
[Test, Ignore("Parser produces parse tree that doesn't match DOM definition??")] |
||||
public void FixedStatement() |
||||
{ |
||||
string program = @"using System;
|
||||
class TestClass { |
||||
static void Main(byte[] a) { |
||||
fixed (byte* p = a) { |
||||
a = $p$; |
||||
} } }";
|
||||
|
||||
var lrr = Resolve<LocalResolveResult>(program); |
||||
Assert.AreEqual("System.Byte*", lrr.Type.ReflectionName); |
||||
|
||||
var rr = Resolve<ResolveResult>(program.Replace("$p$", "$*p$")); |
||||
Assert.AreEqual("System.Byte", lrr.Type.ReflectionName); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue