Exemplo n.º 1
0
        public void ParseTermInChild()
        {
            // Arrange
            var doc = new JObject(new JProperty("foo", "bar"),
                                  new JProperty("child",
                                                new JObject(new JProperty("Ick", "much"), new JProperty("Ock", "wow"))));
            var localObject = new LocalType();

            // Act
            var root  = new VocabTerm <LocalType>();
            var child = new VocabTerm <LocalChildType>("child");

            child.MapProperty <string>("Ick", (s, o) => s.Ick = o);
            child.MapProperty <string>("Ock", (s, o) => s.Ock = o);

            root.MapObject <LocalChildType>(child, (s) =>
            {
                var subject   = s;
                subject.Child = new LocalChildType();
                return(subject.Child);
            });

            JsonStreamingParser.ParseStream(doc.ToMemoryStream(), localObject, root);

            // Assert
            Assert.Equal("much", localObject.Child.Ick);
            Assert.Equal("wow", localObject.Child.Ock);
        }
Exemplo n.º 2
0
        public void ParseAPIsJsonDocumentMinimal()
        {
            var stream = this.GetType().Assembly.GetManifestResourceStream(this.GetType(), "apis.json");

            var rootMap = new VocabTerm <ApisJson>(null);

            rootMap.MapProperty <string>("name", (s, o) => s.Name = o);
            rootMap.MapProperty <string>("url", (s, o) => s.Url   = new Uri(o));

            var apiMap = new VocabTerm <ApisJsonApi>("apis");

            apiMap.MapProperty <string>("name", (s, o) => s.Name        = o);
            apiMap.MapProperty <string>("description", (s, o) => s.Name = o);
            apiMap.MapProperty <string>("baseUrl", (s, o) => s.BaseUrl  = new Uri(o));

            rootMap.MapObject <ApisJsonApi>(apiMap, (s) =>
            {
                if (s.Apis == null)
                {
                    s.Apis = new List <ApisJsonApi>();
                }
                var api = new ApisJsonApi();
                s.Apis.Add(api);
                return(api);
            });

            var apis = new ApisJson();

            JsonStreamingParser.ParseStream(stream, apis, rootMap);

            Assert.Equal("API Evangelist", apis.Name);
            Assert.Equal(2, apis.Apis.Count());
        }
Exemplo n.º 3
0
        public void ParseTermInChild()
        {
            // Arrange
            var doc = new JObject(new JProperty("foo", "bar"),
                                    new JProperty("child",
                                            new JObject(new JProperty("Ick", "much"), new JProperty("Ock", "wow"))));
            var localObject = new LocalType();

            // Act
            var root = new VocabTerm<LocalType>();
            var child = new VocabTerm<LocalChildType>("child");

            child.MapProperty<string>("Ick", (s, o) => s.Ick = o);
            child.MapProperty<string>("Ock", (s, o) => s.Ock = o);

            root.MapObject<LocalChildType>(child, (s) =>
            {
                var subject = s;
                subject.Child = new LocalChildType();
                return subject.Child;
            });

            JsonStreamingParser.ParseStream(doc.ToMemoryStream(), localObject, root);

            // Assert
            Assert.Equal("much", localObject.Child.Ick);
            Assert.Equal("wow", localObject.Child.Ock);
        }
Exemplo n.º 4
0
        public void ParseSwaggerPaths()
        {
            var opsTerm = new VocabTerm <Operation>();

            var pathTerm = new VocabTerm <Path>();

            pathTerm.MapAnyObject <Operation>(opsTerm, (s, p) => {
                return(s.AddOperation(p, Guid.NewGuid().ToString()));
            });

            var pathsTerm = new VocabTerm <OpenApiDocument>("paths");

            pathsTerm.MapAnyObject <Path>(pathTerm, (s, p) => {
                return(s.AddPath(p));
            });

            var rootTerm = new VocabTerm <OpenApiDocument>();

            rootTerm.MapObject <OpenApiDocument>(pathsTerm, (s) =>
            {
                return(s);
            });



            var stream = this.GetType().Assembly
                         .GetManifestResourceStream(this.GetType(), "forecast.io.swagger.json");

            var swaggerDoc = new OpenApiDocument();

            JsonStreamingParser.ParseStream(stream, swaggerDoc, rootTerm);

            Assert.Equal(1, swaggerDoc.Paths.Count);
            Assert.Equal(1, swaggerDoc.Paths.First().Value.Operations.Count());
        }
Exemplo n.º 5
0
        public static VocabTerm<OpenApiDocument> Create()
        {
            var openApiTerm = new VocabTerm<OpenApiDocument>();

            openApiTerm.MapProperty<string>("swagger", (s, o) => s.Version = o);

            openApiTerm.MapProperty<string>("schemes", (s, o) =>
            {
                if (s.Schemes == null) s.Schemes = new List<String>();
                s.Schemes.Add(o);
            });

            var infoTerm = new VocabTerm<Info>("info");
            infoTerm.MapProperty<string>("description",(s,o) => s.Description = o);
            infoTerm.MapProperty<string>("termsOfService", (s, o) => s.TermsOfService = o);
            infoTerm.MapProperty<string>("title", (s, o) => s.Title = o);

            openApiTerm.MapObject<Info>(infoTerm, (s) =>
            {
                s.Info = new Info();
                return s.Info;
            });

            var contactTerm = new VocabTerm<Contact>("contact");
            infoTerm.MapObject<Contact>(contactTerm, (s) =>
            {
                s.Contact = new Contact();
                return s.Contact;
            });

            var opsTerm = new VocabTerm<Operation>();
            opsTerm.MapProperty<string>("operationId", (s, o) => s.Id = o);
            //opsTerm.MapProperty<string>("x-controller", (s, o) => s. = o);

            var pathTerm = new VocabTerm<Path>();
            pathTerm.MapAnyObject<Operation>(opsTerm, (s, p) => {
                return s.AddOperation(p, Guid.NewGuid().ToString());
            });

            var pathsTerm = new VocabTerm<OpenApiDocument>("paths");

            pathsTerm.MapAnyObject<Path>(pathTerm, (s, p) => {
                return s.AddPath(p);
            });

            openApiTerm.MapObject<OpenApiDocument>(pathsTerm, (s) =>
            {
                return s;
            });


            return openApiTerm;
        }
Exemplo n.º 6
0
        public void GetGlobalTerm()
        {
            var termFoo = new VocabTerm("foo");
            var termBar = new VocabTerm("bar");
            var termBaz = new VocabTerm("baz");

            var rootTerm = new VocabTerm(null); 
            rootTerm.AddChild(termFoo.Term,termFoo);
            rootTerm.AddChild(termBar.Term,termBar);
            rootTerm.AddChild(termBaz.Term,termBaz);

            Assert.Equal(termFoo, rootTerm.Find("foo"));
            Assert.Null(rootTerm.Find("fooz"));
            Assert.Equal(termBaz, rootTerm.Find("baz"));

        }
Exemplo n.º 7
0
        public void GetGlobalTerm()
        {
            var termFoo = new VocabTerm("foo");
            var termBar = new VocabTerm("bar");
            var termBaz = new VocabTerm("baz");

            var rootTerm = new VocabTerm(null);

            rootTerm.AddChild(termFoo.Term, termFoo);
            rootTerm.AddChild(termBar.Term, termBar);
            rootTerm.AddChild(termBaz.Term, termBaz);

            Assert.Equal(termFoo, rootTerm.Find("foo"));
            Assert.Null(rootTerm.Find("fooz"));
            Assert.Equal(termBaz, rootTerm.Find("baz"));
        }
Exemplo n.º 8
0
        public void ParseTerm()
        {
            // Arrange
            var doc         = new JObject(new JProperty("foo", "bar"), new JProperty("baz", 22));
            var localObject = new LocalType();

            // Act
            var rootMap = new VocabTerm <LocalType>();

            rootMap.MapProperty <string>("foo", (s, o) => s.Foo = o);
            rootMap.MapProperty <int>("baz", (s, o) => s.Baz    = o);

            JsonStreamingParser.ParseStream(doc.ToMemoryStream(), localObject, rootMap);

            // Assert
            Assert.Equal("bar", localObject.Foo);
            Assert.Equal(22, localObject.Baz);
        }
Exemplo n.º 9
0
        public void ParseTerm()
        {

            // Arrange
            var doc = new JObject(new JProperty("foo", "bar"), new JProperty("baz", 22));
            var localObject = new LocalType();

            // Act
            var rootMap = new VocabTerm<LocalType>();
            rootMap.MapProperty<string>("foo", (s, o) => s.Foo = o);
            rootMap.MapProperty<int>("baz", (s, o) => s.Baz = o);

            JsonStreamingParser.ParseStream(doc.ToMemoryStream(), localObject, rootMap);

            // Assert
            Assert.Equal("bar", localObject.Foo);
            Assert.Equal(22, localObject.Baz);
        }
Exemplo n.º 10
0
        public void ParseProblemDocument()
        {
            var stream = this.GetType().Assembly.GetManifestResourceStream("Hapikit.net.Tests.problem.json");
            Func <string, Uri> typeProducer = (o) => new Uri(o);
            var vocab = new VocabTerm <ProblemDocument>();

            vocab.MapProperty <string>("type", (s, o) => { s.ProblemType = typeProducer(o); });
            vocab.MapProperty <string>("title", (s, o) => { s.Title = o; });
            vocab.MapProperty <string>("detail", (s, o) => { s.Detail = o; });
            vocab.MapProperty <string>("instance", (s, o) => { s.ProblemInstance = new Uri(o, UriKind.RelativeOrAbsolute); });


            var problem = new Tavis.ProblemDocument();

            JsonStreamingParser.ParseStream(stream, problem, vocab);

            Assert.Equal("https://example.com/probs/out-of-credit", problem.ProblemType.OriginalString);
            Assert.Equal("You do not have enough credit.", problem.Title);
        }
Exemplo n.º 11
0
        //   [Fact]
        public void ParseVeryLargeSwaggerPaths()
        {
            var opsTerm = new VocabTerm <Operation>();

            var pathTerm = new VocabTerm <Path>();

            pathTerm.MapAnyObject <Operation>(opsTerm, (s, p) =>
            {
                return(s.AddOperation(p, Guid.NewGuid().ToString()));
            });

            var pathsTerm = new VocabTerm <OpenApiDocument>("paths");

            pathsTerm.MapAnyObject <Path>(pathTerm, (s, p) =>
            {
                return(s.AddPath(p));
            });

            var rootTerm = new VocabTerm <OpenApiDocument>();

            rootTerm.MapObject <OpenApiDocument>(pathsTerm, (s) =>
            {
                return(s);
            });

            var swaggerDoc = new OpenApiDocument();
            var sw         = new Stopwatch();

            using (var stream = File.OpenRead(@"C:\Users\Darrel\Documents\Swagger\WebSites.json"))
            {
                sw.Start();

                JsonStreamingParser.ParseStream(stream, swaggerDoc, rootTerm);
                sw.Stop();
            };

            _output.WriteLine(swaggerDoc.Paths.Count.ToString());
            _output.WriteLine("That took : " + sw.ElapsedMilliseconds);
        }
Exemplo n.º 12
0
     //   [Fact]
        public void ParseVeryLargeSwaggerPaths()
        {
            var opsTerm = new VocabTerm<Operation>();

            var pathTerm = new VocabTerm<Path>();
            pathTerm.MapAnyObject<Operation>(opsTerm, (s, p) =>
            {
                return s.AddOperation(p, Guid.NewGuid().ToString());
            });

            var pathsTerm = new VocabTerm<OpenApiDocument>("paths");

            pathsTerm.MapAnyObject<Path>(pathTerm, (s, p) =>
            {
                return s.AddPath(p);
            });

            var rootTerm = new VocabTerm<OpenApiDocument>();
            rootTerm.MapObject<OpenApiDocument>(pathsTerm, (s) =>
            {
                return s;
            });

            var swaggerDoc = new OpenApiDocument();
            var sw = new Stopwatch();
            using (var stream = File.OpenRead(@"C:\Users\Darrel\Documents\Swagger\WebSites.json"))
            {

                sw.Start();

                JsonStreamingParser.ParseStream(stream, swaggerDoc, rootTerm);
                sw.Stop();
            };

            _output.WriteLine(swaggerDoc.Paths.Count.ToString());
            _output.WriteLine("That took : " + sw.ElapsedMilliseconds);

        }
Exemplo n.º 13
0
        public static void ParseStream(Stream stream, object rootSubject, VocabTerm rootTerm)
        {
            using (var reader = new JsonTextReader(new StreamReader(stream)))
            {
                var ostack = new Stack<Context>();

                Context currentContext = null;
                Func<Context, object, Context> currentParser = null;

                while (reader.Read())
                {
                    switch (reader.TokenType)
                    {
                        case JsonToken.StartObject:

                            if (currentContext == null)
                            {
                                currentContext = new Context(rootSubject, rootTerm);
                                currentParser = rootTerm.Parser;
                            }
                            else
                            {
                                // Save current context before creating new context
                                ostack.Push(currentContext);

                                if (currentParser != null) // If we have a handler to create a new context object
                                {
                                    // Update to new Context unless we are walking an Array of objects
                                    var newContext = currentParser(currentContext, currentContext.LastProperty);
                                    if (newContext != null)  
                                    {
                                        currentContext = newContext;
                                    }
                                }
                                else
                                {
                                    currentContext = new Context(null, null);  // Unknown object
                                }
                            }

                            DiagSource?.Write("Hapikit.JsonStreamingParser.NewObject", currentContext);
                            break;
                        case JsonToken.StartArray:
                            DiagSource?.Write("Hapikit.JsonStreamingParser.StartArray", currentContext);
                            break;
                        case JsonToken.EndArray:
                            DiagSource?.Write("Hapikit.JsonStreamingParser.EndArray", currentContext);
                            break;
                        case JsonToken.EndObject:
                            // Update context object
                            DiagSource?.Write("Hapikit.JsonStreamingParser.EndObject", currentContext);
                            if (ostack.Count > 0)
                            {
                                currentParser = currentContext.TermMap?.Parser;
                                currentContext = ostack.Pop();
                            }
                            break;

                        case JsonToken.PropertyName:
                            // Determine new VocabTerm based on new Property
                            currentContext.LastProperty = reader.Value.ToString();
                            currentParser = currentContext.TermMap?.FindParser(currentContext.LastProperty);
                            DiagSource?.Write("Hapikit.JsonStreamingParser.PropertyName", currentContext.TermMap);
                            break;
                        case JsonToken.Integer:
                        case JsonToken.Boolean:
                        case JsonToken.String:
                            // Use VocabTerm Parser to Update Subject based on the current Term.
                            if (currentParser != null)
                            {
                                DiagSource?.Write("Hapikit.JsonStreamingParser.PropertyValue", reader.Value);
                                currentParser(currentContext, reader.Value);
                            }
                            else
                            {
                                DiagSource?.Write("Hapikit.JsonStreamingParser.MissingTermHandler", new { Context = currentContext, Value = reader.Value });
                            }
                            break;
                    }
                }
            }
        }
Exemplo n.º 14
0
        public static VocabTerm <ApisJson> Create()
        {
            var vocab = new VocabTerm <ApisJson>();

            vocab.MapProperty <string>("name", (s, o) => s.Name = o);
            vocab.MapProperty <string>("description", (s, o) => s.Description = o);
            vocab.MapProperty <string>("url", (s, o) => s.Url           = new Uri(o));
            vocab.MapProperty <string>("image", (s, o) => s.Image       = new Uri(o));
            vocab.MapProperty <string>("modified", (s, o) => s.Modified = DateTime.Parse(o));
            vocab.MapProperty <string>("created", (s, o) => s.Created   = DateTime.Parse(o));
            vocab.MapProperty <string>("tags", (s, o) =>
            {
                if (s.Tags == null)
                {
                    s.Tags = new List <string>();
                }
                s.Tags.Add(o);
            });

            vocab.MapProperty <string>("specificationVersion", (s, o) => s.SpecificationVersion = o);

            var apivocab = new VocabTerm <ApisJsonApi>("apis");

            apivocab.MapProperty <string>("name", (s, o) => s.Name         = o);
            apivocab.MapProperty <string>("description", (s, o) => s.Name  = o);
            apivocab.MapProperty <string>("humanUrl", (s, o) => s.HumanUrl = new Uri(o));
            apivocab.MapProperty <string>("baseUrl", (s, o) => s.BaseUrl   = new Uri(o));
            apivocab.MapProperty <string>("version", (s, o) => s.Version   = o);
            apivocab.MapProperty <string>("image", (s, o) => s.Image       = new Uri(o));

            apivocab.MapProperty <string>("tags", (s, o) =>
            {
                if (s.Tags == null)
                {
                    s.Tags = new List <string>();
                }
                s.Tags.Add(o);
            }

                                          );
            vocab.MapObject <ApisJsonApi>(apivocab, (s) =>
            {
                var api = new ApisJsonApi();
                s.Apis.Add(api);
                return(api);
            }

                                          );
            // Properties
            var propertyTerm = new VocabTerm <ApisJsonProperty>("properties");

            propertyTerm.MapProperty <string>("url", (s, o) => s.Url   = new Uri(o));
            propertyTerm.MapProperty <string>("type", (s, o) => s.Type = o);
            apivocab.MapObject <ApisJsonProperty>(propertyTerm, (s) =>
            {
                var property = new ApisJsonProperty();
                s.Properties.Add(property);
                return(property);
            }

                                                  );
            // Contact
            var contactTerm = new VocabTerm <ApisJsonContact>("contact");

            contactTerm.MapProperty <string>("fn", (s, o) => s.Url            = new Uri(o));
            contactTerm.MapProperty <string>("email", (s, o) => s.Email       = o);
            contactTerm.MapProperty <string>("url", (s, o) => s.Url           = new Uri(o));
            contactTerm.MapProperty <string>("org", (s, o) => s.Org           = o);
            contactTerm.MapProperty <string>("adr", (s, o) => s.Adr           = o);
            contactTerm.MapProperty <string>("tel", (s, o) => s.Tel           = o);
            contactTerm.MapProperty <string>("x-twitter", (s, o) => s.Twitter = o);
            contactTerm.MapProperty <string>("x-github", (s, o) => s.Github   = o);
            contactTerm.MapProperty <string>("photo", (s, o) => s.Photo       = new Uri(o));
            contactTerm.MapProperty <string>("vcard", (s, o) => s.VCard       = new Uri(o));
            apivocab.MapObject <ApisJsonContact>(contactTerm, (s) =>
            {
                s.Contact = new ApisJsonContact();
                return(s.Contact);
            }

                                                 );
            // Include
            var includeTerm = new VocabTerm <ApisJsonInclude>("include");

            includeTerm.MapProperty <string>("name", (s, o) => s.Name = o);
            includeTerm.MapProperty <string>("url", (s, o) => s.Url   = new Uri(o));
            vocab.MapObject <ApisJsonInclude>(includeTerm, (s) =>
            {
                var include = new ApisJsonInclude();
                s.Includes.Add(include);
                return(include);
            }

                                              );
            //Maintainers
            var maintainers = contactTerm.Clone <ApisJson>("maintainers");

            vocab.MapObject <ApisJsonContact>(maintainers, (s) =>
            {
                var contact = new ApisJsonContact();
                s.Maintainers.Add(contact);
                return(contact);
            }

                                              );
            return(vocab);
        }
Exemplo n.º 15
0
        public void ParseAPIsJsonDocumentMinimal()
        {
            var stream = this.GetType().Assembly.GetManifestResourceStream(this.GetType(), "apis.json");

            var rootMap = new VocabTerm<ApisJson>(null);
            rootMap.MapProperty<string>("name",         (s, o) => s.Name = o );
            rootMap.MapProperty<string>("url",          (s, o) => s.Url = new Uri(o));

            var apiMap = new VocabTerm<ApisJsonApi>("apis");
            apiMap.MapProperty<string>("name",          (s, o) => s.Name = o);
            apiMap.MapProperty<string>("description",   (s, o) => s.Name = o);
            apiMap.MapProperty<string>("baseUrl",       (s, o) => s.BaseUrl = new Uri(o));

            rootMap.MapObject<ApisJsonApi>(apiMap, (s) =>
            {
                if (s.Apis == null)
                {
                    s.Apis = new List<ApisJsonApi>();
                }
                var api = new ApisJsonApi();
                s.Apis.Add(api);
                return api;
            });

            var apis = new ApisJson();
            JsonStreamingParser.ParseStream(stream, apis, rootMap);

            Assert.Equal("API Evangelist", apis.Name);
            Assert.Equal(2, apis.Apis.Count());
        }
Exemplo n.º 16
0
        public void ParseSwaggerPaths()
        {

            var opsTerm = new VocabTerm<Operation>();

            var pathTerm = new VocabTerm<Path>();
            pathTerm.MapAnyObject<Operation>(opsTerm, (s, p) => {
                return s.AddOperation(p, Guid.NewGuid().ToString());
            });

            var pathsTerm = new VocabTerm<OpenApiDocument>("paths");

            pathsTerm.MapAnyObject<Path>(pathTerm,(s,p) => {
                return s.AddPath(p);
            });

            var rootTerm = new VocabTerm<OpenApiDocument>();
            rootTerm.MapObject<OpenApiDocument>(pathsTerm, (s) =>
             {
                 return s;
             });



            var stream = this.GetType().Assembly
     .GetManifestResourceStream(this.GetType(), "forecast.io.swagger.json");

            var swaggerDoc = new OpenApiDocument();

            JsonStreamingParser.ParseStream(stream, swaggerDoc, rootTerm);

            Assert.Equal(1, swaggerDoc.Paths.Count);
            Assert.Equal(1, swaggerDoc.Paths.First().Value.Operations.Count());
        }
Exemplo n.º 17
0
 public Context(object subject, VocabTerm term)
 {
     Subject = subject;
     TermMap = term;
 }
Exemplo n.º 18
0
        public void ParseProblemDocument()
        {
            var stream = this.GetType().Assembly.GetManifestResourceStream("Hapikit.net.Tests.problem.json");
            Func<string, Uri> typeProducer = (o) => new Uri(o); 
            var vocab = new VocabTerm<ProblemDocument>();
            
            vocab.MapProperty<string>("type", (s, o) => { s.ProblemType = typeProducer(o); });
            vocab.MapProperty<string>("title", (s, o) => { s.Title = o; });
            vocab.MapProperty<string>("detail", (s, o) => { s.Detail = o; });
            vocab.MapProperty<string>("instance", (s, o) => { s.ProblemInstance = new Uri(o,UriKind.RelativeOrAbsolute); });


            var problem = new Tavis.ProblemDocument();
            JsonStreamingParser.ParseStream(stream, problem, vocab);

            Assert.Equal("https://example.com/probs/out-of-credit", problem.ProblemType.OriginalString);
            Assert.Equal("You do not have enough credit.", problem.Title);
        }