1 // Permission is hereby granted, free of charge, to any person obtaining 2 // a copy of this software and associated documentation files (the 3 // "Software"), to deal in the Software without restriction, including 4 // without limitation the rights to use, copy, modify, merge, publish, 5 // distribute, sublicense, and/or sell copies of the Software, and to 6 // permit persons to whom the Software is furnished to do so, subject to 7 // the following conditions: 8 // 9 // The above copyright notice and this permission notice shall be 10 // included in all copies or substantial portions of the Software. 11 // 12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 18 // 19 // Authors: 20 // Federico Di Gregorio <fog@initd.org> 21 22 using System; 23 using System.Reflection; 24 using System.Linq; 25 using System.Linq.Expressions; 26 using NUnit.Framework; 27 28 namespace MonoTests.System.Linq.Expressions 29 { 30 [TestFixture] 31 public class ExpressionTest_Quote 32 { 33 [Test] 34 [ExpectedException (typeof (ArgumentNullException))] Arg1Null()35 public void Arg1Null () 36 { 37 Expression.Quote (null); 38 } 39 40 [Test] 41 [ExpectedException (typeof (ArgumentException))] QuoteConstant()42 public void QuoteConstant () 43 { 44 Expression.Quote (Expression.Constant (1)); 45 } 46 47 [Test] CompiledQuote()48 public void CompiledQuote () 49 { 50 var quote42 = Expression.Lambda<Func<Expression<Func<int>>>> ( 51 Expression.Quote ( 52 Expression.Lambda<Func<int>> ( 53 42.ToConstant ()))).Compile (); 54 55 var get42 = quote42 ().Compile (); 56 57 Assert.AreEqual (42, get42 ()); 58 } 59 60 [Test] ParameterInQuotedExpression()61 public void ParameterInQuotedExpression () // #550722 62 { 63 // Expression<Func<string, Expression<Func<string>>>> e = (string s) => () => s; 64 65 var s = Expression.Parameter (typeof (string), "s"); 66 67 var lambda = Expression.Lambda<Func<string, Expression<Func<string>>>> ( 68 Expression.Quote ( 69 Expression.Lambda<Func<string>> (s, new ParameterExpression [0])), 70 s); 71 72 var fs = lambda.Compile () ("bingo").Compile (); 73 74 Assert.AreEqual ("bingo", fs ()); 75 } 76 } 77 } 78