public void ExpressionTypeAllowListScanner_Simple() { var ws = new ExpressionTypeAllowListScanner { Types = { typeof(string), typeof(Func <string,string>), typeof(int), } }; foreach (var e in new Expression[] { (Expression <Func <string, string> >)(s => s.Substring(0, 1).ToUpper()), }) { Assert.AreSame(e, ws.Visit(e)); } foreach (var e in new Expression[] { (Expression <Func <string, char> >)(s => s[0]), }) { Assert.ThrowsException <NotSupportedException>(() => ws.Visit(e)); } }
public void ExpressionTypeAllowListScanner_Generic1() { var ws = new ExpressionTypeAllowListScanner { Types = { typeof(List <int>), typeof(HashSet <>), typeof(Func <>), } }; foreach (var e in new Expression[] { (Expression <Func <List <int> > >)(() => new List <int>()), (Expression <Func <HashSet <int> > >)(() => new HashSet <int>()), (Expression <Func <HashSet <string> > >)(() => new HashSet <string>()), }) { Assert.AreSame(e, ws.Visit(e)); } foreach (var e in new Expression[] { (Expression <Func <List <string> > >)(() => new List <string>()), }) { Assert.ThrowsException <NotSupportedException>(() => ws.Visit(e)); } }
public void ExpressionTypeAllowListScanner_Generic1() { var ws = new ExpressionTypeAllowListScanner { Types = { typeof(List <int>), typeof(HashSet <>), typeof(Func <>), } }; foreach (var e in new Expression[] { #pragma warning disable IDE0004 // Remove Unnecessary Cast. (Only unnecessary on C# 10 or later.) (Expression <Func <List <int> > >)(() => new List <int>()), (Expression <Func <HashSet <int> > >)(() => new HashSet <int>()), (Expression <Func <HashSet <string> > >)(() => new HashSet <string>()), #pragma warning restore IDE0004 }) { Assert.AreSame(e, ws.Visit(e)); } foreach (var e in new Expression[] { #pragma warning disable IDE0004 // Remove Unnecessary Cast. (Only unnecessary on C# 10 or later.) (Expression <Func <List <string> > >)(() => new List <string>()), #pragma warning restore IDE0004 }) { Assert.ThrowsException <NotSupportedException>(() => ws.Visit(e)); } }
public void ExpressionTypeAllowListScanner_Generic2() { var ws = new ExpressionTypeAllowListScanner { Types = { typeof(IEnumerable <>), typeof(int), typeof(bool), typeof(string), typeof(Func <, >), } }; foreach (var e in new Expression[] { (Expression <Func <IEnumerable <int>, IEnumerable <string> > >)(xs => from x in xs where x > 0 select x.ToString()), }) { Assert.AreSame(e, ws.Visit(e)); } }