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
        void ProcessType(ParseTreeNode node)
        {
            switch (node.Term.Name)
            {
            case "type_declaration":
                var typeName = node.FindChild("Identifier").FindTokenAndGetText();
                var typeBody = node.FindChild("type_body_content").FindTokenAndGetText();
                CreateType(string.Join(".", _namespacesStack), typeName, typeBody);
                break;

            default:
                throw new InvalidOperationException();
            }
        }
        private TopRequestItems GetTopRequestItems(ParseTreeNode requestDoc)
        {
            var topItems = new TopRequestItems();
            // query contains operation(s), anonymous ops, and fragment definitions
            var elemListNode = requestDoc.FindChild(TermNames.RequestElemList);

            if (elemListNode == null)
            {
                return(topItems);
            }
            foreach (var node in elemListNode.ChildNodes)
            {
                switch (node.Term.Name)
                {
                case TermNames.FragmDef:
                    topItems.Fragments.Add(node);
                    break;

                case TermNames.RequestOp:
                    topItems.Operations.Add(node);
                    break;

                case TermNames.DefaultQuery:
                    topItems.AnonymousQueries.Add(node);
                    break;
                }
            }
            return(topItems);
        }
Esempio n. 4
0
        string BuildPythonInitializer(TestType t, ParseTreeNode tcase)
        {
            if (!(t.Body is MessageType scheme))
            {
                throw new NotSupportedException("Message is the only supported type.");
            }

            return($"{t.Namespace}.{t.Name} (" +
                   string.Join(", ", BuildPythonInitializerMembers(scheme.Fields, tcase.FindChild("members"))) +
                   ")");
        }
Esempio n. 5
0
        void ProcessNamespace(ParseTreeNode node)
        {
            switch (node.Term.Name)
            {
            case "namespace_declarations_opt":
                foreach (var i in node.ChildNodes)
                {
                    ProcessNamespace(i);
                }
                break;

            case "namespace_declaration":
                var namespaceName = node.FindChild("qualified_identifier").GetText(_sourceText);

                var nsMembers = node.FindChild("namespace_member_declarations");
                if (nsMembers != null)
                {
                    _namespacesStack.Push(namespaceName);

                    foreach (var i in nsMembers.ChildNodes)
                    {
                        switch (i.Term.Name)
                        {
                        case "namespace_declaration":
                            ProcessNamespace(i);
                            break;

                        case "type_declaration":
                            ProcessType(i);
                            break;
                        }
                    }

                    _namespacesStack.Pop();
                }
                break;

            default:
                throw new InvalidOperationException();
            }
        }
Esempio n. 6
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();
            }
        }
        public static string GetDescription(this ParseTreeNode node)
        {
            var descrNode = node.FindChild(TermNames.DescrOpt);

            return(descrNode?.GetText());
        }