public void TestQSRecordLookup() { var c = new CodeContext(); var qs = new DummyQueryReference(); var v = Expression.Constant(10); c.Add(qs, v); Assert.AreEqual(0, c.GetAndResetQuerySourceLookups().Length, "# of query source look ups isn't zero initially"); // Look up bogus and make sure it is null var qsNotStored = new DummyQueryReference(); c.GetReplacement(qsNotStored); Assert.AreEqual(0, c.GetAndResetQuerySourceLookups().Length, "Dummy lookup shouldn't cache reference."); // Look up good one and make sure it worked. c.GetReplacement(qs); var qsReferenced = c.GetAndResetQuerySourceLookups(); Assert.AreEqual(1, qsReferenced.Length, "# of qs lookups after a real reference"); Assert.AreEqual(qs, qsReferenced[0], "QS recorded in lookup"); }
public void TestQSReloadLookup() { var c = new CodeContext(); var qs1 = new DummyQueryReference(); var qs2 = new DummyQueryReference(); var qsList = new IQuerySource[] { qs1, qs2 }; c.RestoreQuerySourceLookups(qsList); Assert.AreEqual(2, c.GetAndResetQuerySourceLookups().Length, "# after a restore"); }
public void TestAddQueryReferenceSource() { var c = new CodeContext(); var qs = new DummyQueryReference(); var v = Expression.Constant(10); c.Add(qs, v); Assert.AreEqual(v, c.GetReplacement(qs), "Query Source Lookup."); }
public void TestForNonArray() { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; ArrayExpressionParser.ParseArrayExpression(s, Expression.Variable(typeof(int), "d"), gc, cc, MEFUtilities.MEFContainer); }
public void TestRunForNormalArray() { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; ArrayExpressionParser.ParseArrayExpression(s, Expression.Variable(typeof(int[]), "d"), gc, cc, MEFUtilities.MEFContainer); Assert.IsNotNull(cc.LoopVariable, "loop variable"); }
public void TestQSResetsRecordLookup() { var c = new CodeContext(); var qs = new DummyQueryReference(); var v = Expression.Constant(10); c.Add(qs, v); c.GetReplacement(qs); var qsReferenced = c.GetAndResetQuerySourceLookups(); Assert.AreEqual(0, c.GetAndResetQuerySourceLookups().Length, "# of qs lookups after a reset"); }
public void IEnumerableWithNothingBehindItCheck() { // We can't loop over a random ienumerable - that isn't enough infomration // about where the loop came from (so we can't build the loop unless we know what we // are looping over!). var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var arr = Expression.Variable(typeof(IEnumerable <int>), "d"); var r = ArrayExpressionParser.ParseArrayExpression(s, arr, gc, cc, MEFUtilities.MEFContainer); }
public void TestRunForConvertedArray() { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var arr = Expression.Variable(typeof(int[]), "d"); var cvt = Expression.Convert(arr, typeof(IEnumerable <int>)); var r = ArrayExpressionParser.ParseArrayExpression(s, cvt, gc, cc, MEFUtilities.MEFContainer); Assert.IsNotNull(r); Assert.IsNotNull(cc.LoopVariable, "loop variable"); }
/// <summary> /// Do the work of executing the array parse /// </summary> /// <param name="e"></param> private static GeneratedCode ExecuteArrayParseOnExpression(Expression e) { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var r = ArrayExpressionParser.ParseArrayExpression(s, e, gc, cc, MEFUtilities.MEFContainer); gc.DumpCodeToConsole(); Assert.IsNotNull(cc.LoopVariable, "loop variable"); return(gc); }
public void TestQMStoreResetsQSLookupList() { var c = new CodeContext(); var qm = new QueryModel(new Remotion.Linq.Clauses.MainFromClause("dude", typeof(int), Expression.Parameter(typeof(IEnumerable <int>))), new Remotion.Linq.Clauses.SelectClause(Expression.Parameter(typeof(int)))); var qs = new DummyQueryReference(); c.Add(qs, Expression.Constant(10)); c.GetReplacement(qs); var e1 = Expression.Parameter(typeof(int)); var s1 = c.Add(qm, e1); Assert.AreEqual(0, c.GetAndResetQuerySourceLookups().Length, "# of qs references after a lookup"); }
public void TestQMInvalidedByQSChange() { var c = new CodeContext(); var qm = new QueryModel(new Remotion.Linq.Clauses.MainFromClause("dude", typeof(int), Expression.Parameter(typeof(IEnumerable <int>))), new Remotion.Linq.Clauses.SelectClause(Expression.Parameter(typeof(int)))); var qs = new DummyQueryReference(); c.Add(qs, Expression.Constant(10)); c.GetReplacement(qs); var e1 = Expression.Parameter(typeof(int)); var s1 = c.Add(qm, e1); Assert.AreEqual(e1, c.GetReplacement(qm), "Initial lookup"); c.Add(qs, Expression.Constant(20)); Assert.IsNull(c.GetReplacement(qm), "Lookup after referenced QS has changed"); }
public void TestRunForConvertedArray() { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var arr = Expression.Variable(typeof(int[]), "d"); var cvt = Expression.Convert(arr, typeof(IEnumerable<int>)); var r = ArrayExpressionParser.ParseArrayExpression(s, cvt, gc, cc, MEFUtilities.MEFContainer); Assert.IsNotNull(r); Assert.IsNotNull(cc.LoopVariable, "loop variable"); }
public void IEnumerableWithNothingBehindItCheck() { // We can't loop over a random ienumerable - that isn't enough infomration // about where the loop came from (so we can't build the loop unless we know what we // are looping over!). var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var arr = Expression.Variable(typeof(IEnumerable<int>), "d"); var r = ArrayExpressionParser.ParseArrayExpression(s, arr, gc, cc, MEFUtilities.MEFContainer); }
/// <summary> /// Do the work of executing the array parse /// </summary> /// <param name="e"></param> private static GeneratedCode ExecuteArrayParseOnExpression(Expression e) { var gc = new GeneratedCode(); var cc = new CodeContext(); IQuerySource s = new DummyQueryReference() { ItemName = "q", ItemType = typeof(int) }; var r = ArrayExpressionParser.ParseArrayExpression(s, e, gc, cc, MEFUtilities.MEFContainer); gc.DumpCodeToConsole(); Assert.IsNotNull(cc.LoopVariable, "loop variable"); return gc; }
public void TestAddQueryRefereceSource() { var c = new CodeContext(); var qs = new DummyQueryReference(); var v = Expression.Constant(10); c.Add(qs, v); Assert.AreEqual(v, c.GetReplacement(qs), "Query Source Lookup."); }
public void TestQMInvalidedByQSChange() { var c = new CodeContext(); var qm = new QueryModel(new Remotion.Linq.Clauses.MainFromClause("dude", typeof(int), Expression.Parameter(typeof(IEnumerable<int>))), new Remotion.Linq.Clauses.SelectClause(Expression.Parameter(typeof(int)))); var qs = new DummyQueryReference(); c.Add(qs, Expression.Constant(10)); c.GetReplacement(qs); var e1 = Expression.Parameter(typeof(int)); var s1 = c.Add(qm, e1); Assert.AreEqual(e1, c.GetReplacement(qm), "Initial lookup"); c.Add(qs, Expression.Constant(20)); Assert.IsNull(c.GetReplacement(qm), "Lookup after referenced QS has changed"); }
public void TestQMStoreResetsQSLookupList() { var c = new CodeContext(); var qm = new QueryModel(new Remotion.Linq.Clauses.MainFromClause("dude", typeof(int), Expression.Parameter(typeof(IEnumerable<int>))), new Remotion.Linq.Clauses.SelectClause(Expression.Parameter(typeof(int)))); var qs = new DummyQueryReference(); c.Add(qs, Expression.Constant(10)); c.GetReplacement(qs); var e1 = Expression.Parameter(typeof(int)); var s1 = c.Add(qm, e1); Assert.AreEqual(0, c.GetAndResetQuerySourceLookups().Length, "# of qs references after a lookup"); }