Esempio n. 1
0
        string BuildPythonInitializerMemberElement(DsdlType type, string fieldName, ParseTreeNode node)
        {
            switch (type)
            {
            case PrimitiveDsdlType _:
                var text = node.GetText(SourceText);
                switch (text)
                {
                case "true":
                    text = "True";
                    break;

                case "false":
                    text = "False";
                    break;

                case "null":
                    text = "None";
                    break;
                }

                if (text.EndsWith("f", StringComparison.OrdinalIgnoreCase) &&
                    node.FindToken()?.Value is float)     // Remove float 'f' suffix.
                {
                    text = text.Substring(0, text.Length - 1);
                }

                return(text);

            case ArrayDsdlType adt when IsString(fieldName, type):
                return(node.GetText(SourceText));

            case ArrayDsdlType adt:
                var nestesNodes = node.FindChild("members");
                if (nestesNodes == null)
                {
                    return("[]");
                }
                var arrayContent = nestesNodes.ChildNodes.Select(x => BuildPythonInitializerMemberElement(adt.ElementType, fieldName, x));
                return($"[{string.Join(", ", arrayContent)}]");

            case CompositeDsdlTypeBase cdt:
                var t = _compoundTypesLookup[cdt];
                return($"{t.Namespace}.{t.Name}(" +
                       string.Join(", ", BuildPythonInitializerMembers(cdt.Fields, node.FindChild("members"))) +
                       ")");

            default:
                throw new InvalidOperationException();
            }
        }
Esempio n. 2
0
        string BuildTestMethodMemberElement(DsdlType type, string fieldName, ParseTreeNode node)
        {
            if (IsEnum(fieldName, type))
            {
                var enumType = GetOrCreateEnum(fieldName, type);
                return($"({enumType}){node.GetText(SourceText)}");
            }
            if (IsString(fieldName, type))
            {
                return(node.GetText(SourceText));
            }

            switch (type)
            {
            case PrimitiveDsdlType _:
                return(node.GetText(SourceText));

            case ArrayDsdlType adt:
                var nestesNodes = node.FindChild("members");
                if (nestesNodes == null)
                {
                    return($"new {GetCSharpType(adt, false, fieldName)} {{ }}");
                }
                var arrayContent = nestesNodes.ChildNodes.Select(x => BuildTestMethodMemberElement(adt.ElementType, fieldName, x));
                return($"new {GetCSharpType(adt, false, fieldName)} {{ {string.Join(", ", arrayContent)} }}");

            case CompositeDsdlTypeBase cdt:
                var t = _compoundTypesLookup[cdt];
                return($"new {t.CSharpName} {{ " +
                       string.Join(", ", BuildTestMethodMembers(cdt.Fields, node.FindChild("members"))) +
                       " }");

            default:
                throw new InvalidOperationException();
            }
        }