StreamReader_Test.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Linq.Expressions;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Vit.Core.Module.Serialization;
  4. using Vit.Linq;
  5. using Vit.Linq.ExpressionNodes;
  6. using Vit.Linq.ExpressionNodes.ComponentModel;
  7. using Vitorm.StreamQuery;
  8. namespace Vitorm.MsTest.StreamQuery
  9. {
  10. [TestClass]
  11. public class StreamReader_Test
  12. {
  13. IQueryable<int> GetQuery()
  14. {
  15. var convertService = ExpressionConvertService.Instance;
  16. var queryTypeName = "TestQuery";
  17. Func<Expression, Type, object> QueryExecutor = (expression, type) =>
  18. {
  19. ExpressionNode_Lambda node;
  20. // #1 Code to Data
  21. // query => query.Where().OrderBy().Skip().Take().Select().ToList();
  22. var isArgument = QueryableBuilder.CompareQueryByName(queryTypeName);
  23. node = convertService.ConvertToData_LambdaNode(expression, autoReduce: true, isArgument: isArgument);
  24. var strNode = Json.Serialize(node);
  25. // #2 convert to CombinedStream
  26. var streamReader = new Vitorm.StreamQuery.StreamReader();
  27. streamReader.AddMethodCallConvertor(Queryable_Extensions_Batch.Convert);
  28. var stream = streamReader.ReadFromNode(node) as CombinedStream;
  29. var strStream = Json.Serialize(stream);
  30. if (nameof(Queryable_Extensions_Batch.Batch) == stream.method)
  31. {
  32. var batchSize = (int)stream.methodArguments[0];
  33. var result = Enumerable.Repeat(0, 10).Select(i => Enumerable.Range(0, batchSize).ToList());
  34. return result;
  35. }
  36. throw new NotSupportedException("Method not support:" + stream.method);
  37. };
  38. return QueryableBuilder.Build<int>(QueryExecutor, queryTypeName);
  39. }
  40. [TestMethod]
  41. public void Test()
  42. {
  43. var query = GetQuery();
  44. var result = query.Batch(15);
  45. Assert.AreEqual(10, result.Count());
  46. foreach (var list in result)
  47. {
  48. Assert.AreEqual(15, list.Count);
  49. }
  50. }
  51. }
  52. }