Example #1
0
 public ResolveResultConverterStrategyTuple(Type tupleType)
     : base(tupleType)
 {
     _componentStrategies = HarshTuple.GetComponentTypes(tupleType)
                            .Select(GetNestedTupleStrategy)
                            .ToImmutableArray();
 }
Example #2
0
 public override Object ConvertNestedComponents(IEnumerator <Object> componentEnumerator)
 => HarshTuple.Create(
     ResultType,
     _componentStrategies.Select(
         s => s.ConvertNestedComponents(componentEnumerator)
         )
     );
Example #3
0
        private ResolveResultConverterStrategy GetNestedTupleStrategy(Type t)
        {
            if (HarshGrouping.IsGroupingType(t))
            {
                throw Logger.Fatal.ArgumentFormat(
                          nameof(t),
                          SR.ResolveResultConverterStrategyTuple_NestedGroupingNotAllowed,
                          ResultType
                          );
            }

            if (HarshTuple.IsTupleType(t))
            {
                return(new ResolveResultConverterStrategyTuple(t));
            }

            return(ResolveResultConverterStrategyUnpack.Instance);
        }
 private static void AddComponentsFlat(ImmutableArray <Type> .Builder result, Type t)
 {
     if (HarshTuple.IsTupleType(t))
     {
         foreach (var ct in HarshTuple.GetComponentTypes(t))
         {
             AddComponentsFlat(result, ct);
         }
     }
     else if (HarshGrouping.IsGroupingType(t))
     {
         AddComponentsFlat(result, t.GenericTypeArguments[0]);
         AddComponentsFlat(result, t.GenericTypeArguments[1]);
     }
     else
     {
         result.Add(t);
     }
 }
        internal static ResolveResultConverterStrategy GetStrategyForType(Type type)
        {
            if (type == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(type));
            }

            if (HarshGrouping.IsGroupingType(type))
            {
                return(new ResolveResultConverterStrategyGrouping(type));
            }

            if (HarshTuple.IsTupleType(type))
            {
                return(new ResolveResultConverterStrategyTuple(type));
            }

            return(ResolveResultConverterStrategyUnpack.Instance);
        }
Example #6
0
 public void MakeTupleType_fails_empty()
 {
     Assert.Throws <ArgumentException>(
         () => HarshTuple.MakeTupleType()
         );
 }
Example #7
0
 public void MakeTupleType_fails_nine_Qs()
 {
     Assert.Throws <ArgumentException>(
         () => HarshTuple.MakeTupleType(NineQs)
         );
 }
Example #8
0
 public void IsTupleType_is_false_for_non_tuples(Type type)
 {
     Assert.False(HarshTuple.IsTupleType(type));
 }
Example #9
0
 public void MakeTupleType_makes_tuple_type(Type expected, params Type[] args)
 {
     Assert.Equal(expected, HarshTuple.MakeTupleType(args));
 }
Example #10
0
 public void IsTupleType_is_true_for_tuples(Type type)
 {
     Assert.True(HarshTuple.IsTupleType(type));
 }
Example #11
0
 public void GetComponentTypes_returns_components(Type t, Type[] expected)
 {
     Assert.Equal(expected, HarshTuple.GetComponentTypes(t));
 }
Example #12
0
 public void GetComponentTypes_fails_for_unconstructed_tuple(Type t)
 {
     Assert.Throws <ArgumentException>(
         () => HarshTuple.GetComponentTypes(t)
         );
 }
Example #13
0
        public void MakeTupleType_creates_nested_tuple_eighteen()
        {
            var actual = HarshTuple.MakeTupleType(EighteenQs);

            Assert.Equal(EighteenQsType, actual);
        }
Example #14
0
        public void MakeTupleType_creates_nested_tuple_nine()
        {
            var actual = HarshTuple.MakeTupleType(NineQs);

            Assert.Equal(NineQsType, actual);
        }