string GetExpressionPath(RemoteValueFake remoteValue)
        {
            string expressionPath;

            Assert.True(remoteValue.GetExpressionPath(out expressionPath));
            return(expressionPath);
        }
        public void GetExpressionPathComplexPointerAndNonPointer()
        {
            var value_10 = new RemoteValueFake("value", "10");
            var value_20 = new RemoteValueFake("value", "20");

            var next = new RemoteValueFake("next", "");

            next.SetTypeInfo(
                new SbTypeStub("LinkedListNode*", TypeFlags.IS_CLASS | TypeFlags.IS_POINTER));
            next.AddChild(value_20);

            var head = new RemoteValueFake("head", "");

            head.SetTypeInfo(
                new SbTypeStub("LinkedListNode*", TypeFlags.IS_CLASS | TypeFlags.IS_POINTER));
            head.AddChild(next);
            head.AddChild(value_10);

            var list = new RemoteValueFake("list", "");

            list.SetTypeInfo(new SbTypeStub("LinkedList", TypeFlags.IS_CLASS));
            list.AddChild(head);

            Assert.That(GetExpressionPath(list), Is.EqualTo("list"));
            Assert.That(GetExpressionPath(head), Is.EqualTo("list.head"));
            Assert.That(GetExpressionPath(value_10), Is.EqualTo("list.head->value"));
            Assert.That(GetExpressionPath(value_20), Is.EqualTo("list.head->next->value"));
        }
        public void GetValueForExpressionPathComplexPointerAndNonPointer()
        {
            var value_10 = new RemoteValueFake("value", "10");
            var value_20 = new RemoteValueFake("value", "20");

            var next = new RemoteValueFake("next", "");

            next.SetTypeInfo(
                new SbTypeStub("LinkedListNod*", TypeFlags.IS_CLASS | TypeFlags.IS_POINTER));
            next.AddChild(value_20);

            var head = new RemoteValueFake("head", "");

            head.SetTypeInfo(
                new SbTypeStub("LinkedListNode*", TypeFlags.IS_CLASS | TypeFlags.IS_POINTER));
            head.AddChild(next);
            head.AddChild(value_10);

            var list = new RemoteValueFake("list", "");

            list.SetTypeInfo(new SbTypeStub("LinkedList", TypeFlags.IS_CLASS));
            list.AddChild(head);

            var h   = list.GetValueForExpressionPath(".head");
            var v10 = list.GetValueForExpressionPath(".head->value");
            var n   = list.GetValueForExpressionPath(".head->next");
            var v20 = list.GetValueForExpressionPath(".head->next->value");

            Assert.That(h, Is.SameAs(head));
            Assert.That(v10, Is.SameAs(value_10));
            Assert.That(n, Is.SameAs(next));
            Assert.That(v20, Is.SameAs(value_20));
        }
        public static RemoteValueFake CreateSimpleString(string name, string val)
        {
            var remoteValue = new RemoteValueFake(name, val);

            remoteValue.SetTypeInfo(new SbTypeStub("std::string", TypeFlags.IS_SCALAR));
            return(remoteValue);
        }
        public static RemoteValueFake CreateError(string errorMessage, string name = "",
                                                  string value = "")
        {
            var errorValue = new RemoteValueFake(name, value);

            errorValue.SetError(new SbErrorStub(false, errorMessage));
            return(errorValue);
        }
        public static RemoteValueFake Create(string typename, TypeFlags typeFlags, string name,
                                             string val)
        {
            var remoteValue = new RemoteValueFake(name, val.ToString());

            remoteValue.SetTypeInfo(new SbTypeStub(typename, typeFlags));
            return(remoteValue);
        }
        public void IsPointerWhenIsAnInstancePointer()
        {
            var remoteValue = new RemoteValueFake("varName", "value");

            remoteValue.SetTypeInfo(new SbTypeStub("TypeName", TypeFlags.INSTANCE_IS_POINTER));

            Assert.True(remoteValue.TypeIsPointerType());
        }
        public void IsPointerWhenNotAPointer()
        {
            var remoteValue = new RemoteValueFake("varName", "value");

            remoteValue.SetTypeInfo(new SbTypeStub("TypeName", TypeFlags.NONE));

            Assert.False(remoteValue.TypeIsPointerType());
        }
        public void GetTypeName()
        {
            var remoteValue = new RemoteValueFake("varName", "value");

            remoteValue.SetTypeInfo(new SbTypeStub("TypeName", TypeFlags.NONE));

            Assert.That(remoteValue.GetTypeName(), Is.EqualTo("TypeName"));
        }
        public static RemoteValueFake CreateUnsignedLongRegister(string name, ulong val)
        {
            var remoteValue = new RemoteValueFake(name, val.ToString());

            remoteValue.SetTypeInfo(new SbTypeStub("unsigned long", TypeFlags.IS_INTEGER));
            remoteValue.SetValueType(DebuggerApi.ValueType.Register);
            return(remoteValue);
        }
        public static RemoteValueFake CreateSimpleBool(string name, bool val)
        {
            var remoteValue = new RemoteValueFake(name, val ? "true" : "false");
            var type        = new SbTypeStub("bool", TypeFlags.IS_SCALAR);

            type.SetByteSize(sizeof(bool));
            remoteValue.SetTypeInfo(type);
            return(remoteValue);
        }
        public void CreateValueFromExpressionWhenExpressionNotFound()
        {
            var value     = new RemoteValueFake("_myVar", "17");
            var exprValue = value.CreateValueFromExpression("name", "dummyExpression");

            Assert.That(exprValue.GetName(), Is.EqualTo(""));
            Assert.That(exprValue.GetDefaultValue(), Is.EqualTo(""));
            Assert.That(exprValue.GetError().Fail, Is.True);
        }
        public static RemoteValueFake CreateSimpleDouble(string name, double val)
        {
            var remoteValue = new RemoteValueFake(name, val.ToString());
            var type        = new SbTypeStub("double", TypeFlags.IS_FLOAT);

            type.SetByteSize(sizeof(double));
            remoteValue.SetTypeInfo(type);
            return(remoteValue);
        }
        public void CantAddChildMoreThanOnce()
        {
            var value = new RemoteValueFake("_myVar", "17");
            var child = new RemoteValueFake("_myChild", "23");

            value.AddChild(child);

            Assert.Throws <InvalidOperationException>(() => value.AddChild(child));
        }
        public static RemoteValueFake CreateSimpleLong(string name, long val)
        {
            var remoteValue = new RemoteValueFake(name, val.ToString());
            var type        = new SbTypeStub("long", TypeFlags.IS_INTEGER);

            type.SetByteSize(sizeof(long));
            remoteValue.SetTypeInfo(type);
            return(remoteValue);
        }
        public static RemoteValueFake CreateLldbEvalError(LldbEvalErrorCode errCode,
                                                          string errorMessage = "",
                                                          string name         = "", string value = "")
        {
            var errorValue = new RemoteValueFake(name, value);

            errorValue.SetError(new SbErrorStub(false, errorMessage, Convert.ToUInt32(errCode)));
            return(errorValue);
        }
        public static RemoteValueFake CreateUnsafeAddressPointer(
            string typeName, string name, string value)
        {
            var remoteValue = new RemoteValueFake(name, value);
            var typeFlags   = TypeFlags.IS_POINTER;

            remoteValue.SetTypeInfo(new SbTypeStub(typeName, typeFlags));
            return(remoteValue);
        }
        public static RemoteValueFake CreateSimpleChar(string name, char val)
        {
            var remoteValue = new RemoteValueFake(name, val.ToString());
            var type        = new SbTypeStub("char", TypeFlags.IS_SCALAR);

            type.SetByteSize(sizeof(char));
            remoteValue.SetTypeInfo(type);
            return(remoteValue);
        }
        public void GetChildrenWhenOutOfBounds()
        {
            var value = new RemoteValueFake("_myVar", "17");

            value.AddChild(new RemoteValueFake("child", "pi/e"));

            List <RemoteValue> children = value.GetChildren(0, 3);

            Assert.That(children[0].GetDefaultValue(), Is.EqualTo("pi/e"));
            Assert.That(children[1], Is.Null);
        }
        public static RemoteValueFake CreateReference(string typeName, string name, string value)
        {
            if (!IsHex(value))
            {
                throw new Exception("Reference RemoteValueFake requires value to be a hex value");
            }

            var remoteValue = new RemoteValueFake(name, value);

            remoteValue.SetTypeInfo(new SbTypeStub(typeName, TypeFlags.IS_REFERENCE));
            return(remoteValue);
        }
        public static RemoteValueFake CreateSimpleArray <T>(string name, string typeName,
                                                            Func <string, T, RemoteValueFake> itemFactory, params T[] values)
        {
            var remoteValue = new RemoteValueFake(name, "");

            remoteValue.SetTypeInfo(new SbTypeStub($"{typeName}[]", TypeFlags.IS_ARRAY));
            for (int i = 0; i < values.Length; i++)
            {
                remoteValue.AddChild(itemFactory($"[{i}]", values[i]));
            }
            return(remoteValue);
        }
        public static RemoteValueFake CreateAddressOf(RemoteValueFake remoteValue, long address)
        {
            var sbAddress = new RemoteValueFake(null, $"0x{address.ToString("X")}");
            var type      =
                new SbTypeStub($"{remoteValue.GetTypeName()}*",
                               TypeFlags.HAS_CHILDREN | TypeFlags.IS_POINTER | TypeFlags.HAS_VALUE);

            type.SetByteSize(PtrSize);
            sbAddress.SetTypeInfo(type);
            sbAddress.AddChild(remoteValue);
            return(sbAddress);
        }
示例#23
0
        public RemoteValue Dereference()
        {
            if (dereference != null)
            {
                return(dereference);
            }
            var remoteValueError = new RemoteValueFake("", "");

            remoteValueError.SetError(new SbErrorStub(false,
                                                      "error: error: Not a pointer type or no child"));
            return(remoteValueError);
        }
示例#24
0
        public RemoteValue CreateValueFromAddress(string name, ulong address, SbType type)
        {
            if (valuesForAddress.TryGetValue(address, out RemoteValue value))
            {
                return(new RemoteValueNameDecorator(value, name));
            }

            var remoteValueError = new RemoteValueFake("", "");

            remoteValueError.SetError(new SbErrorStub(false, "invalid"));
            return(remoteValueError);
        }
        public void GetValueForExpressionChildDoesntExist()
        {
            var list = new RemoteValueFake("list", "");

            list.SetTypeInfo(new SbTypeStub("CustomListType", TypeFlags.IS_CLASS));
            list.AddChild(new RemoteValueFake("size", "17"));

            Assert.False(list.TypeIsPointerType());

            var value = list.GetValueForExpressionPath("list->end");

            Assert.That(value.GetError().Fail());
        }
        public void GetValueForExpressionInvalidExpression([Values(".9", "size")] string path)
        {
            var list = new RemoteValueFake("list", "");

            list.SetTypeInfo(new SbTypeStub("CustomListType", TypeFlags.IS_CLASS));
            list.AddChild(new RemoteValueFake("size", "17"));

            Assert.False(list.TypeIsPointerType());

            var value = list.GetValueForExpressionPath(path);

            Assert.That(value.GetError().Fail());
        }
        public void GetValueForExpressionPointerStructMismatch()
        {
            var list = new RemoteValueFake("list", "");

            list.SetTypeInfo(
                new SbTypeStub("CustomListType*", TypeFlags.IS_CLASS | TypeFlags.IS_POINTER));
            list.AddChild(new RemoteValueFake("size", "17"));

            Assert.True(list.TypeIsPointerType());

            var value = list.GetValueForExpressionPath(".size");

            Assert.That(value.GetError().Fail());
        }
        public static RemoteValueFake CreateClassReference(string className, string name,
                                                           string value)
        {
            if (!IsHex(value))
            {
                throw new Exception("Pointer RemoteValueFake requires value to be a hex value");
            }
            var remoteValue = new RemoteValueFake(name, value);
            var classType   = new SbTypeStub(className, TypeFlags.IS_CLASS);
            var pointerType = new SbTypeStub(className + "&", TypeFlags.IS_REFERENCE, classType);

            remoteValue.SetTypeInfo(pointerType);
            return(remoteValue);
        }
示例#29
0
        // Resolves expressions to values added via AddValueFromExpression().
        // If there are multiple values added to the same expression it iterates them until we
        // get to the last value, which is never discarded.
        //
        // Example:
        //   var box = new RemoteValueFake("myBox", "");
        //   box.AddValueFromExpression("expression", new RemoteValueFake("int", "1"));
        //   box.AddValueFromExpression("expression", new RemoteValueFake("int", "2"));
        //
        //   var t = box.CreateValueFromExpression("temp1", "expression");
        //   var y = box.CreateValueFromExpression("temp2", "expression");
        //   var z = box.CreateValueFromExpression("temp3", "expression");
        //   Assert.That(t.GetDefaultValue(), Is.EqualTo("1"));
        //   Assert.That(y.GetDefaultValue(), Is.EqualTo("2"));
        //   Assert.That(z.GetDefaultValue(), Is.EqualTo("2"));
        public RemoteValue CreateValueFromExpression(string name, string expression)
        {
            Queue <RemoteValue> values;

            if (expressionValues.TryGetValue(expression, out values))
            {
                RemoteValue resultValue = values.Count > 1 ? values.Dequeue() : values.Peek();
                return(new RemoteValueNameDecorator(resultValue, name));
            }

            var remoteValueError = new RemoteValueFake("", "");

            remoteValueError.SetError(new SbErrorStub(false, "error: error: No value"));
            return(remoteValueError);
        }
        public void CreateValueFromExpressionWhenExpressionFound()
        {
            var value = new RemoteValueFake("_myVar", "17");

            var exprValue = new RemoteValueFake("$23", "Q");

            exprValue.SetTypeInfo(new SbTypeStub("char", TypeFlags.IS_SCALAR));
            value.AddValueFromExpression("dummyExpression", exprValue);

            var exprResult = value.CreateValueFromExpression("exprName", "dummyExpression");

            Assert.That(exprResult.GetName(), Is.EqualTo("exprName"));
            Assert.That(exprResult.GetTypeName(), Is.EqualTo("char"));
            Assert.That(exprResult.GetDefaultValue(), Is.EqualTo("Q"));
        }