public void Error()
        {
            var source =
                @"using System.Diagnostics;
[DebuggerDisplay(""Value"", Name=""Name"", Type=""Type"")]
class A
{
}
class B
{
    bool f;
    internal A P { get { return new A(); } }
    internal A Q { get { while(f) { } return new A(); } }
}
";
            DkmClrRuntimeInstance  runtime        = null;
            GetMemberValueDelegate getMemberValue = (v, m) => (m == "Q") ? CreateErrorValue(runtime.GetType("A"), "Function evaluation timed out") : null;

            runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlibAndSystemCore(GetAssembly(source)), getMemberValue: getMemberValue);
            using (runtime.Load())
            {
                var type       = runtime.GetType("B");
                var value      = CreateDkmClrValue(type.Instantiate(), type: type);
                var evalResult = FormatResult("o", value);
                var children   = GetChildren(evalResult);
                Verify(children,
                       EvalResult("Name", "Value", "Type", "o.P", DkmEvaluationResultFlags.ReadOnly),
                       EvalFailedResult("Q", "Function evaluation timed out", "A", "o.Q"),
                       EvalResult("f", "false", "bool", "o.f", DkmEvaluationResultFlags.Boolean));
            }
        }
Exemplo n.º 2
0
        public void NoQuotes_String()
        {
            var runtime           = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib());
            var inspectionContext = CreateDkmInspectionContext(DkmEvaluationFlags.NoQuotes);
            var stringType        = runtime.GetType(typeof(string));

            // null
            var value      = CreateDkmClrValue(null, type: stringType);
            var evalResult = FormatResult("s", value, inspectionContext: inspectionContext);

            Verify(evalResult,
                   EvalResult("s", "null", "string", "s", editableValue: null, flags: DkmEvaluationResultFlags.None));

            // ""
            value      = CreateDkmClrValue(string.Empty, type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "", "string", "s", editableValue: "\"\"", flags: DkmEvaluationResultFlags.RawString));

            // "'"
            value      = CreateDkmClrValue("'", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "'", "string", "s", editableValue: "\"'\"", flags: DkmEvaluationResultFlags.RawString));

            // "\""
            value      = CreateDkmClrValue("\"", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "\"", "string", "s", editableValue: "\"\\\"\"", flags: DkmEvaluationResultFlags.RawString));

            // "\\"
            value      = CreateDkmClrValue("\\", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "\\", "string", "s", editableValue: "\"\\\\\"", flags: DkmEvaluationResultFlags.RawString));

            // "a\r\n\t\v\b\u001eb"
            value      = CreateDkmClrValue("a\r\n\tb\v\b\u001ec", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "a\r\n\tb\v\b\u001ec", "string", "s", editableValue: "\"a\\r\\n\\tb\\v\\b\\u001ec\"", flags: DkmEvaluationResultFlags.RawString));

            // "a\0b"
            value      = CreateDkmClrValue("a\0b", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "a\0b", "string", "s", editableValue: "\"a\\0b\"", flags: DkmEvaluationResultFlags.RawString));

            // "\u007f\u009f"
            value      = CreateDkmClrValue("\u007f\u009f", type: stringType);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "\u007f\u009f", "string", "s", editableValue: "\"\\u007f\\u009f\"", flags: DkmEvaluationResultFlags.RawString));

            // " " with alias
            value      = CreateDkmClrValue(" ", type: stringType, alias: "1", evalFlags: DkmEvaluationResultFlags.HasObjectId);
            evalResult = FormatResult("s", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("s", "  {$1}", "string", "s", editableValue: "\" \"", flags: DkmEvaluationResultFlags.RawString | DkmEvaluationResultFlags.HasObjectId));

            // array
            value      = CreateDkmClrValue(new string[] { "1" }, type: stringType.MakeArrayType());
            evalResult = FormatResult("a", value, inspectionContext: inspectionContext);
            Verify(evalResult,
                   EvalResult("a", "{string[1]}", "string[]", "a", editableValue: null, flags: DkmEvaluationResultFlags.Expandable));
            var children = GetChildren(evalResult);

            // DkmInspectionContext should not be inherited.
            Verify(children,
                   EvalResult("[0]", "\"1\"", "string", "a[0]", editableValue: "\"1\"", flags: DkmEvaluationResultFlags.RawString));
        }
Exemplo n.º 3
0
        public void RawView()
        {
            var source =
                @"using System.Diagnostics;
internal class P
{
    public P(C c)
    {
        this.G = c.F != null;
    }
    public readonly bool G;
}
[DebuggerTypeProxy(typeof(P))]
class C
{
    internal C() : this(new C(null))
    {
    }
    internal C(C f)
    {
        this.F = f;
    }
    internal readonly C F;
}
class Program
{
    static void Main()
    {
        var o = new C();
        System.Diagnostics.Debugger.Break();
    }
}";
            var runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(GetAssembly(source)));

            using (runtime.Load())
            {
                var type = runtime.GetType("C");

                // Non-null value.
                var value = CreateDkmClrValue(
                    value: type.Instantiate(),
                    type: type);
                var evalResult = FormatResult("o", "o, raw", value, inspectionContext: CreateDkmInspectionContext(DkmEvaluationFlags.ShowValueRaw));
                Verify(evalResult,
                       EvalResult("o", "{C}", "C", "o, raw", DkmEvaluationResultFlags.Expandable));
                var children = GetChildren(evalResult);
                Verify(children,
                       EvalResult("F", "{C}", "C", "o.F", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly));
                children = GetChildren(children[0]);
                // ShowValueRaw is not inherited.
                Verify(children,
                       EvalResult("G", "false", "bool", "new P(o.F).G", DkmEvaluationResultFlags.Boolean | DkmEvaluationResultFlags.ReadOnly),
                       EvalResult("Raw View", null, "", "o.F, raw", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly, DkmEvaluationResultCategory.Data));

                // Null value.
                value = CreateDkmClrValue(
                    value: null,
                    type: type);
                evalResult = FormatResult("o", "o, raw", value, inspectionContext: CreateDkmInspectionContext(DkmEvaluationFlags.ShowValueRaw));
                Verify(evalResult,
                       EvalResult("o", "null", "C", "o, raw"));
            }
        }
Exemplo n.º 4
0
        public void Cast()
        {
            var source =
                @"class C
{
}";
            var runtime = new DkmClrRuntimeInstance(
                ReflectionUtilities.GetMscorlib(GetAssembly(source))
                );

            using (runtime.Load())
            {
                IDkmClrFullNameProvider fullNameProvider = new CSharpFormatter();
                var inspectionContext = CreateDkmInspectionContext();
                var type = runtime.GetType("C");

                Assert.Equal(
                    "(C)o",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.None
                        )
                    );
                Assert.Equal(
                    "o as C",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );
                Assert.Equal(
                    "(C)(o)",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeArgument
                        )
                    );
                Assert.Equal(
                    "(o) as C",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeArgument
                        | DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );
                Assert.Equal(
                    "((C)o)",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeEntireExpression
                        )
                    );
                Assert.Equal(
                    "(o as C)",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeEntireExpression
                        | DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );
                Assert.Equal(
                    "((C)(o))",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeEntireExpression
                        | DkmClrCastExpressionOptions.ParenthesizeArgument
                        )
                    );
                Assert.Equal(
                    "((o) as C)",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "o",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeEntireExpression
                        | DkmClrCastExpressionOptions.ParenthesizeArgument
                        | DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );

                // Some of the same tests with "..." as the expression ("..." is used
                // by the debugger when the expression cannot be determined).
                Assert.Equal(
                    "(C)...",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "...",
                        type,
                        null,
                        DkmClrCastExpressionOptions.None
                        )
                    );
                Assert.Equal(
                    "... as C",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "...",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );
                Assert.Equal(
                    "(... as C)",
                    fullNameProvider.GetClrCastExpression(
                        inspectionContext,
                        "...",
                        type,
                        null,
                        DkmClrCastExpressionOptions.ParenthesizeEntireExpression
                        | DkmClrCastExpressionOptions.ConditionalCast
                        )
                    );
            }
        }
        public void HideNonPublicMembersBaseClass()
        {
            var sourceA =
                @"public class A
{
    public object FA0;
    internal object FA1;
    protected internal object FA2;
    protected object FA3;
    private object FA4;
    public object PA0 { get { return null; } }
    internal object PA1 { get { return null; } }
    protected internal object PA2 { get { return null; } }
    protected object PA3 { get { return null; } }
    private object PA4 { get { return null; } }
    public object PA5 { set { } }
    public object PA6 { internal get; set; }
    public object PA7 { protected internal get; set; }
    public object PA8 { protected get; set; }
    public object PA9 { private get; set; }
    internal object PAA { private get; set; }
    protected internal object PAB { internal get; set; }
    protected internal object PAC { protected get; set; }
    protected object PAD { private get; set; }
    public static object SFA0;
    internal static object SFA1;
    protected static internal object SPA2 { get { return null; } }
    protected static object SPA3 { get { return null; } }
    public static object SPA4 { private get { return null; } set { } }
}";
            var sourceB =
                @"public class B : A
{
    public object FB0;
    internal object FB1;
    protected internal object FB2;
    protected object FB3;
    private object FB4;
    public object PB0 { get { return null; } }
    internal object PB1 { get { return null; } }
    protected internal object PB2 { get { return null; } }
    protected object PB3 { get { return null; } }
    private object PB4 { get { return null; } }
    public object PB5 { set { } }
    public object PB6 { internal get; set; }
    public object PB7 { protected internal get; set; }
    public object PB8 { protected get; set; }
    public object PB9 { private get; set; }
    internal object PBA { private get; set; }
    protected internal object PBB { internal get; set; }
    protected internal object PBC { protected get; set; }
    protected object PBD { private get; set; }
    public static object SPB0 { get { return null; } }
    public static object SPB1 { internal get { return null; } set { } }
    protected static internal object SFB2;
    protected static object SFB3;
    private static object SFB4;
}
class C
{
    A a = new B();
}";
            // Derived class in assembly with PDB,
            // base class in assembly without PDB.
            var compilationA = CSharpTestBase.CreateCompilation(sourceA, options: TestOptions.ReleaseDll);
            var bytesA       = compilationA.EmitToArray();
            var referenceA   = MetadataReference.CreateFromImage(bytesA);

            var         compilationB = CSharpTestBase.CreateCompilation(sourceB, options: TestOptions.DebugDll, references: new MetadataReference[] { referenceA });
            var         bytesB       = compilationB.EmitToArray();
            var         assemblyA    = ReflectionUtilities.Load(bytesA);
            var         assemblyB    = ReflectionUtilities.Load(bytesB);
            DkmClrValue value;

            using (ReflectionUtilities.LoadAssemblies(assemblyA, assemblyB))
            {
                var runtime = new DkmClrRuntimeInstance(new[] { assemblyB });
                var type    = assemblyB.GetType("C", throwOnError: true);
                value = CreateDkmClrValue(
                    Activator.CreateInstance(type),
                    runtime.GetType((TypeImpl)type));
            }

            var rootExpr   = "new C()";
            var evalResult = FormatResult(rootExpr, value, inspectionContext: CreateDkmInspectionContext(DkmEvaluationFlags.HideNonPublicMembers));

            Verify(evalResult,
                   EvalResult(rootExpr, "{C}", "C", rootExpr, DkmEvaluationResultFlags.Expandable));

            var children = GetChildren(evalResult);

            Verify(children,
                   EvalResult("a", "{B}", "A {B}", "(new C()).a", DkmEvaluationResultFlags.Expandable));

            // The native EE includes properties where the setter is accessible but the getter is not.
            // We treat those properties as non-public.
            children = GetChildren(children[0]);
            Verify(children,
                   EvalResult("FA0", "null", "object", "(new C()).a.FA0"),
                   EvalResult("FA2", "null", "object", "(new C()).a.FA2"),
                   EvalResult("FA3", "null", "object", "(new C()).a.FA3"),
                   EvalResult("FB0", "null", "object", "((B)(new C()).a).FB0"),
                   EvalResult("FB1", "null", "object", "((B)(new C()).a).FB1"),
                   EvalResult("FB2", "null", "object", "((B)(new C()).a).FB2"),
                   EvalResult("FB3", "null", "object", "((B)(new C()).a).FB3"),
                   EvalResult("FB4", "null", "object", "((B)(new C()).a).FB4"),
                   EvalResult("PA0", "null", "object", "(new C()).a.PA0", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PA2", "null", "object", "(new C()).a.PA2", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PA3", "null", "object", "(new C()).a.PA3", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PA7", "null", "object", "(new C()).a.PA7"),
                   EvalResult("PA8", "null", "object", "(new C()).a.PA8"),
                   EvalResult("PAC", "null", "object", "(new C()).a.PAC"),
                   EvalResult("PB0", "null", "object", "((B)(new C()).a).PB0", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PB1", "null", "object", "((B)(new C()).a).PB1", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PB2", "null", "object", "((B)(new C()).a).PB2", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PB3", "null", "object", "((B)(new C()).a).PB3", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PB4", "null", "object", "((B)(new C()).a).PB4", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PB6", "null", "object", "((B)(new C()).a).PB6"),
                   EvalResult("PB7", "null", "object", "((B)(new C()).a).PB7"),
                   EvalResult("PB8", "null", "object", "((B)(new C()).a).PB8"),
                   EvalResult("PB9", "null", "object", "((B)(new C()).a).PB9"),
                   EvalResult("PBA", "null", "object", "((B)(new C()).a).PBA"),
                   EvalResult("PBB", "null", "object", "((B)(new C()).a).PBB"),
                   EvalResult("PBC", "null", "object", "((B)(new C()).a).PBC"),
                   EvalResult("PBD", "null", "object", "((B)(new C()).a).PBD"),
                   EvalResult("Static members", null, "", "B", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly, DkmEvaluationResultCategory.Class),
                   EvalResult("Non-Public members", null, "", "(new C()).a, hidden", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly, DkmEvaluationResultCategory.Data));

            // Static members
            var more = GetChildren(children[children.Length - 2]);

            Verify(more,
                   EvalResult("SFA0", "null", "object", "A.SFA0"),
                   EvalResult("SFB2", "null", "object", "B.SFB2"),
                   EvalResult("SFB3", "null", "object", "B.SFB3"),
                   EvalResult("SFB4", "null", "object", "B.SFB4"),
                   EvalResult("SPA2", "null", "object", "A.SPA2", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("SPA3", "null", "object", "A.SPA3", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("SPB0", "null", "object", "B.SPB0", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("SPB1", "null", "object", "B.SPB1"),
                   EvalResult("Non-Public members", null, "", "B, hidden", DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly, DkmEvaluationResultCategory.Data));

            // Non-Public static members
            more = GetChildren(more[more.Length - 1]);
            Verify(more,
                   EvalResult("SFA1", "null", "object", "A.SFA1"),
                   EvalResult("SPA4", "null", "object", "A.SPA4"));

            // Non-Public members
            more = GetChildren(children[children.Length - 1]);
            Verify(more,
                   EvalResult("FA1", "null", "object", "(new C()).a.FA1"),
                   EvalResult("FA4", "null", "object", "(new C()).a.FA4"),
                   EvalResult("PA1", "null", "object", "(new C()).a.PA1", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PA4", "null", "object", "(new C()).a.PA4", DkmEvaluationResultFlags.ReadOnly),
                   EvalResult("PA6", "null", "object", "(new C()).a.PA6"),
                   EvalResult("PA9", "null", "object", "(new C()).a.PA9"),
                   EvalResult("PAA", "null", "object", "(new C()).a.PAA"),
                   EvalResult("PAB", "null", "object", "(new C()).a.PAB"),
                   EvalResult("PAD", "null", "object", "(new C()).a.PAD"));
        }
Exemplo n.º 6
0
        public void NamesFromTypeArguments_LongTuples()
        {
            var source =
                @"class A1 { }
class A2 { }
class A3 { }
class A4 { }
class A5 { }
class A6 { }
class A7 { }
class A8 { }
class B1 { }
class B2 { }
class B3 { }
class B4 { }
class B5 { }
class B6 { }
class B7 { }
class B8 { }
class B9 { }
class B10 { }
class C1 { }
class C2 { }
class A<T, U>
{
    (dynamic A1, A2 A2, T A3, A4 A4, A5 A5, U A6, A7 A7, A8 A8, (T A9, U A10) A11) F =
        (new A1(), new A2(), default(T), new A4(), new A5(), default(U), new A7(), new A8(), (default(T), default(U)));
}
class B
{
    A<((dynamic B1, B2 B2) B3, B4 B4, dynamic B5, B6 B6, B7 B7, dynamic B8, B9 B9, B10 B10, dynamic B11), (C1 C1, (C2 C2, dynamic C3) C4)> G =
        new A<((dynamic B1, B2 B2) B3, B4 B4, dynamic B5, B6 B6, B7 B7, dynamic B8, B9 B9, B10 B10, dynamic B11), (C1 C1, (C2 C2, dynamic C3) C4)>();
}";
            var assembly0    = GenerateTupleAssembly();
            var reference0   = AssemblyMetadata.CreateFromImage(assembly0).GetReference();
            var compilation1 = CSharpTestBaseBase.CreateCompilationWithMscorlib45AndCSruntime(source, additionalRefs: new[] { reference0 });
            var assembly1    = compilation1.EmitToArray();
            var runtime      = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(ReflectionUtilities.Load(assembly0), ReflectionUtilities.Load(assembly1)));

            using (runtime.Load())
            {
                var type       = runtime.GetType("B");
                var value      = type.Instantiate();
                var evalResult = FormatResult("o", value);
                var children   = GetChildren(evalResult);
                Verify(children,
                       EvalResult(
                           "G",
                           "{A<((object, B2), B4, object, B6, B7, object, B9, B10, object), (C1, (C2, object))>}",
                           "A<((dynamic B1, B2 B2) B3, B4 B4, dynamic B5, B6 B6, B7 B7, dynamic B8, B9 B9, B10 B10, dynamic B11), (C1 C1, (C2 C2, dynamic C3) C4)> {A<((object, B2), B4, object, B6, B7, object, B9, B10, object), (C1, (C2, object))>}",
                           "o.G",
                           DkmEvaluationResultFlags.Expandable));
                children = GetChildren(children[0]);
                Verify(children,
                       EvalResult(
                           "F",
                           "({A1}, {A2}, ((null, null), null, null, null, null, null, null, null, null), {A4}, {A5}, (null, (null, null)), {A7}, {A8}, (((null, null), null, null, null, null, null, null, null, null), (null, (null, null))))",
                           "(dynamic A1, A2 A2, ((dynamic B1, B2 B2) B3, B4 B4, dynamic B5, B6 B6, B7 B7, dynamic B8, B9 B9, B10 B10, dynamic B11) A3, A4 A4, A5 A5, (C1 C1, (C2 C2, dynamic C3) C4) A6, A7 A7, A8 A8, (((dynamic B1, B2 B2) B3, B4 B4, dynamic B5, B6 B6, B7 B7, dynamic B8, B9 B9, B10 B10, dynamic B11) A9, (C1 C1, (C2 C2, dynamic C3) C4) A10) A11) {(object, A2, ((object, B2), B4, object, B6, B7, object, B9, B10, object), A4, A5, (C1, (C2, object)), A7, A8, (((object, B2), B4, object, B6, B7, object, B9, B10, object), (C1, (C2, object))))}",
                           "o.G.F",
                           DkmEvaluationResultFlags.Expandable));
            }
        }
Exemplo n.º 7
0
        public void IsTupleCompatible()
        {
            var source =
                @"namespace System
{
    struct ValueTuple { }
    struct ValueTuple<T1> { }
    struct ValueTuple<T1, T2> { }
    struct ValueTuple<T1, T2, T3> { }
    struct ValueTuple<T1, T2, T3, T4> { }
    struct ValueTuple<T1, T2, T3, T4, T5> { }
    struct ValueTuple<T1, T2, T3, T4, T5, T6> { }
    struct ValueTuple<T1, T2, T3, T4, T5, T6, T7> { }
    struct ValueTuple<T1, T2, T3, T4, T5, T6, T7, T8> { }
    struct ValueTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> { }
}";
            var runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(GetAssembly(source)));

            using (runtime.Load())
            {
                var type = runtime.GetType("System.ValueTuple");
                int cardinality;
                Assert.False(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(0, cardinality);

                type = runtime.GetType("System.ValueTuple`1", typeof(int));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(1, cardinality);

                type = runtime.GetType("System.ValueTuple`2", typeof(int), typeof(string));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(2, cardinality);

                type = runtime.GetType("System.ValueTuple`3", typeof(int), typeof(string), typeof(int));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(3, cardinality);

                type = runtime.GetType("System.ValueTuple`4", typeof(int), typeof(string), typeof(int), typeof(string));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(4, cardinality);

                type = runtime.GetType("System.ValueTuple`5", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(5, cardinality);

                type = runtime.GetType("System.ValueTuple`6", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(6, cardinality);

                type = runtime.GetType("System.ValueTuple`7", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string), typeof(int));
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(7, cardinality);

                type = runtime.GetType("System.ValueTuple`8", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string));
                Assert.False(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(0, cardinality);

                type = runtime.GetType("System.ValueTuple`1", typeof(string));
                type = runtime.GetType("System.ValueTuple`8", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), ((TypeImpl)type.GetLmrType()).Type);
                Assert.True(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(8, cardinality);

                type = runtime.GetType("System.ValueTuple`9", typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string), typeof(int), typeof(string), typeof(int));
                Assert.False(type.GetLmrType().IsTupleCompatible(out cardinality));
                Assert.Equal(0, cardinality);
            }
        }
Exemplo n.º 8
0
        public void DynamicMetaObjectProviderDebugViewItemsError()
        {
            var     expression = "o";
            dynamic o          = new ExpandoObject();

            o.Answer = 42;

            DkmClrRuntimeInstance runtime = null;

            runtime = new DkmClrRuntimeInstance(ReflectionUtilities.GetMscorlib(),
                                                getMemberValue: (_, m) => (m == "Items") ? CreateErrorValue(runtime.GetType(typeof(Array)), "Function evaluation timed out") : null);
            var type  = new DkmClrType(runtime, (TypeImpl)o.GetType());
            var value = CreateDkmClrValue((object)o, type);

            var fullName = expression + ", dynamic";
            var result   = FormatResult(expression, fullName, value, inspectionContext: CreateDkmInspectionContext(DkmEvaluationFlags.DynamicView));

            Verify(result,
                   EvalResult(expression, Resources.DynamicViewValueWarning, "", fullName, DkmEvaluationResultFlags.Expandable | DkmEvaluationResultFlags.ReadOnly));
            Verify(GetChildren(result),
                   EvalFailedResult(Resources.ErrorName, "Function evaluation timed out"));
        }