[eval] Allow class attributes
[mono.git] / mcs / class / Mono.CSharp / Test / Evaluator / TypesTest.cs
index 93fbcb4a0e5ceb053a4cef64b8f334056ca31713..47aee14e4c57d9f357f359f3ce70ca1d1b1a5ec1 100644 (file)
@@ -1,3 +1,31 @@
+//
+// TypesTest.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
 using System;
 using NUnit.Framework;
 using Mono.CSharp;
@@ -25,7 +53,10 @@ namespace MonoTests.EvaluatorTest
                        Evaluator.Run ("class X {}");
                        Evaluator.Run ("class X { public static string Foo () { return \"Test\"; } }");
                        object res = Evaluator.Evaluate ("X.Foo ();");
-                       Assert.AreEqual ("Test", res);
+                       Assert.AreEqual ("Test", res, "#1");
+                       Evaluator.Run ("class X { public static int Foo () { return 5; } }");
+                       res = Evaluator.Evaluate ("X.Foo ();");
+                       Assert.AreEqual (5, res, "#2");
                }
 
                [Test]
@@ -52,5 +83,47 @@ namespace MonoTests.EvaluatorTest
                        Evaluator.Run ("using System;");
                        Evaluator.Run ("struct Z { }");
                }
+
+               [Test]
+               public void MoreThanOneType ()
+               {
+                       Evaluator.Run ("public class D { int x; public int X { get { return x; } set { x = value;} } };");
+                       Evaluator.Run ("public class C { public int Speed{get;set;}};");
+               }
+
+               [Test]
+               public void StructType ()
+               {
+                       Evaluator.Run ("class C { }");
+                       Evaluator.Run ("struct B { public string foo; public int bar; }");
+                       Evaluator.Run ("B aStruct = new B { foo = \"foo\", bar = 1 };");
+               }
+
+               [Test]
+               public void NestedType ()
+               {
+                       Evaluator.Run ("class A { class B { } }");
+                       Evaluator.Run ("var x = new A ();");
+               }
+
+               [Test]
+               public void DelegateType ()
+               {
+                       Evaluator.Run ("public delegate int D();");
+                       Evaluator.Run ("D d = delegate () { return 7; };");
+                       object res = Evaluator.Evaluate ("d();");
+                       Assert.AreEqual (7, res);
+               }
+
+               [Test]
+               public void ClassWithAttribute ()
+               {
+                       Evaluator.Run ("public class A : System.Attribute { }");
+                       Evaluator.Run ("[A] public class B {}");
+                       Evaluator.Run ("var attr = new B().GetType().GetCustomAttributes(false)[0];");
+
+                       object res = Evaluator.Evaluate ("attr.GetType().Name;");
+                       Assert.AreEqual ("A", res);
+               }
        }
 }
\ No newline at end of file