示例#1
0
        public void TestWhamMasterTemplate()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema, true);
            wham.AddSchema(Schemas.ShippingAddressSchema, true);
            wham.AddSchema(Schemas.AddressCollectionSchema, true);

            var namedStream = SetupFakeOutput();

            var masterResult = wham.Liquidize(BuiltInTemplates.WhamMasterTemplate);

            var errors = ("" + string.Join("\r\n", wham.Context.Errors.Select(e => e.ToString()))).Trim();

            Assert.AreEqual(string.Empty, errors);

            Assert.IsNotEmpty(masterResult);
            masterResult = masterResult.Trim();
            Assert.AreEqual(string.Empty, masterResult.ToLower());

            Assert.IsTrue(namedStream.Items.Count >= 4);
            Console.WriteLine(string.Join("\r\n", namedStream.Items.Select(i => i.Name)));

            Assert.IsNotNull(namedStream.Items.First().Name);
            Assert.IsTrue(namedStream.Items.First().Name.ToLower().EndsWith("address.cs"));
            Assert.IsNotNull(namedStream.Items.First().WrittenContents);
            Assert.IsTrue(namedStream.Items.First().WrittenContents.StartsWith("using"));

            Assert.IsNotNull(namedStream.Items.Any(s => s.Name.ToLower().EndsWith(".csproj")));
            Assert.AreEqual(2, namedStream.Items.Count(s => s.Name.ToLower().EndsWith(".config")));
            Assert.AreEqual(5, namedStream.Items.Count(s => s.WrittenContents.StartsWith("<?xml")));
        }
示例#2
0
        public void TestIsEmptyOperator()
        {
            WhamEngine.InitEngine();
            Assert.AreEqual("EMPTY", Template.Parse("{% if NOCOLLECTION is_empty %}EMPTY{% endif %}").Render());

            Assert.AreEqual("EMPTY", Template.Parse("{% if '' is_empty %}EMPTY{% endif %}").Render());
            Assert.AreEqual("", Template.Parse("{% if 'aaa' is_empty %}EMPTY{% endif %}").Render());
        }
示例#3
0
        public void TestTrimTag()
        {
            WhamEngine.InitEngine();

            var t = Template.Parse("{% Trim %}   {% endTrim %}").Render();

            Assert.IsEmpty(t);

            t = Template.Parse("{% Trim %}  NOT EMPTY {% endTrim %}").Render();
            Assert.IsNotEmpty(t);
            Assert.AreEqual("NOT EMPTY", t);
        }
示例#4
0
        public void TestIncludedPropertyTypes()
        {
            WhamEngine.InitEngine();
            var schemaDrop = Schemas.ShippingAddressDrop;
            var hash       = Hash.FromAnonymousObject(new { schema = schemaDrop });

            string res;

            res = Template.Parse("{% for propType in schema.IncludedProperties %}{{propType.Value | FullClassName : propType.Key}}, {% endfor %}").RenderWithErrors(hash);
            Assert.IsNotEmpty(res);
            Assert.AreEqual("string, string, string, string, TypesEnum?, ", res);
        }
示例#5
0
        public void TestIncludedProperties()
        {
            WhamEngine.InitEngine();
            var schemaDrop = Schemas.ShippingAddressDrop;
            var hash       = Hash.FromAnonymousObject(new { schema = schemaDrop });

            string res;

            res = Template.Parse("{% for propName in schema.IncludedPropertyNames %}{{propName}}, {% endfor %}").RenderWithErrors(hash);
            Assert.IsNotEmpty(res);;
            Assert.AreEqual("line1, line2, city, country, type, ", res);
        }
示例#6
0
        public void TestResolverAddSchema()
        {
            WhamEngine ctx = new WhamEngine();

            ctx.Resolver.Add(new Uri("http://wham.org/Base.Address"), Schemas.AddressBaseSchema);

            JSchema addressCollection = null;

            Assert.DoesNotThrow(() =>
                                addressCollection = JSchema.Parse(Schemas.AddressCollectionSchema, ctx.Resolver)
                                );

            Assert.AreEqual("Base.AddressCollection", addressCollection.Title);
        }
示例#7
0
        public void TestAddressToCS_ClassTemplateProperties()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema, true);

            var cs = wham.Liquidize(BuiltInTemplates.CS_ClassTemplate);

            Assert.IsNotNull(cs);
            Assert.IsTrue(cs.IndexOf("Wham.Base") > 0);
            Assert.IsTrue(cs.IndexOf("Liquid error:") < 0);
            Assert.IsEmpty(wham.Context.Errors);
            Console.WriteLine(cs);
        }
示例#8
0
        public void TestSchemaProperties()
        {
            WhamEngine.InitEngine();
            var schemaDrop = Schemas.ShippingAddressDrop;
            var hash       = Hash.FromAnonymousObject(new { schema = schemaDrop });

            string res;

            res = Template.Parse("{{schema.Title}}").Render(hash);
            Assert.AreEqual(schemaDrop.Title, res);

            res = Template.Parse("{{schema.BaseClassName}}").RenderWithErrors(hash);
            Assert.IsNotEmpty(res);
            Assert.IsFalse(res.Contains("BaseClassName"));
            Assert.AreEqual(schemaDrop.BaseClassName, res);
        }
示例#9
0
        public void TestAddressToCS_ClassTemplate()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema, true);

            var cs = wham.Liquidize(BuiltInTemplates.CS_ClassTemplate);

            Assert.IsNotNull(wham.Context.Strainer);
            Assert.IsTrue(wham.Context.Strainer.RespondTo("Namespace"));

            Assert.IsNotNull(cs);
            Assert.IsTrue(cs.IndexOf("Wham.Base") > 0);
            Assert.IsTrue(cs.IndexOf("Liquid error:") < 0);

            Assert.IsEmpty(wham.Context.Errors);
        }
示例#10
0
        public void TestWhamMasterTemplateWithFileOutput()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema, true);
            wham.AddSchema(Schemas.ShippingAddressSchema, true);
            wham.AddSchema(Schemas.AddressCollectionSchema, true);

            var masterResult = wham.Liquidize(BuiltInTemplates.WhamMasterTemplate);

            Console.WriteLine(masterResult.Trim());

            var errors = ("" + string.Join("\r\n", wham.Context.Errors.Select(e => e.ToString()))).Trim();

            Console.WriteLine(errors);
            Assert.AreEqual(string.Empty, errors);
        }
示例#11
0
        public void TestIsRegisterClassFilter()
        {
            WhamEngine.InitEngine();

            int wasCalled = 0;

            ClassNameFilters.RegisterClassCallback = new WeakReference <Action <string, string, object> >((input, name, data) =>
            {
                wasCalled++;
            });

            var rc1 = Template.Parse("{{ 'OK' | RegisterClass :'X' }}").Render();

            Assert.AreEqual("OK", rc1);
            Assert.AreEqual(1, wasCalled);

            Assert.AreEqual("OK", Template.Parse("{{ 'OK' | RegisterResource :'X' }}").Render());
            Assert.AreEqual(2, wasCalled);
        }
示例#12
0
        public void TestMasterCSTemplate()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema, true);

            var namedStream = SetupFakeOutput();

            var masterResult = wham.Liquidize(MasterTemplate);

            Assert.IsTrue(wham.Context.Errors == null || wham.Context.Errors.Count == 0);
            Assert.IsNotEmpty(masterResult);
            masterResult = masterResult.Trim();
            Assert.AreEqual("address.cs", masterResult.ToLower());
            Assert.IsNotNull(namedStream.Name);
            Assert.IsTrue(namedStream.Name.ToLower().EndsWith("address.cs"));
            Assert.IsNotNull(namedStream.WrittenContents);
            Assert.IsTrue(namedStream.WrittenContents.StartsWith("using"));
        }
示例#13
0
        public void TestShippingAddressToCS_ClassTemplate()
        {
            WhamEngine wham = new WhamEngine();

            wham.AddSchema(Schemas.AddressBaseSchema);
            wham.AddSchema(Schemas.ShippingAddressSchema, true);

            var cs = wham.Liquidize(BuiltInTemplates.CS_ClassTemplate);

            Assert.IsNotNull(wham.Context.Strainer);

            Assert.IsNotNull(cs);
            Assert.IsTrue(cs.IndexOf("Wham.Base") > 0);
            Assert.IsTrue(cs.IndexOf("Liquid error:") < 0);
            Assert.IsEmpty(wham.Context.Errors);

            Assert.IsTrue(cs.IndexOf("public enum TypesEnum {") > 0);

            Console.WriteLine(cs);
        }
示例#14
0
        public void TestGuidTag()
        {
            Guid guid;

            WhamEngine.InitEngine();

            var g1 = Template.Parse("{% Guid 'D' %}").Render();

            Assert.IsNotEmpty(g1);
            Assert.IsTrue(Guid.TryParseExact(g1, "D", out guid));

            var g2 = Template.Parse("{% Guid %}").Render();

            Assert.IsNotEmpty(g2);

            Assert.AreNotSame(g1, g2);

            g1 = Template.Parse("{% Guid 'N' %}").Render();
            Assert.IsNotEmpty(g1);
            Assert.IsTrue(Guid.TryParseExact(g1, "N", out guid));

            Assert.Throws <WhamException>(() => Template.Parse("{% Guid 'INVALID' %}").Render());
        }
示例#15
0
        // $ mono whamrun.exe /Users/Sten/Documents/Projects/Wham/JsonSchemas

        public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
            {
                if (e.Exception is TargetInvocationException)
                {
                    Console.WriteLine("[TGIAODIFQWR] Target Invocation Exception: " + e.Exception.Message);
                }
                else
                {
                    Console.WriteLine("[ATIOAEIRJQW] Exception: " + e.Exception);
                }
            };

            if (args == null || !args.Any())
            {
                Console.WriteLine("Usage: WhamRun inputFolder [outputFolder]\r\n inputFolder must contain JSON Schema files");
            }
            else
            {
                if (Directory.Exists(args[0]))
                {
                    Directory.SetCurrentDirectory(args[0]);

                    var files = Directory.GetFiles(args[0]);

                    var schemas = files
                                  .Select(f => new Tuple <string, string>(f, File.ReadAllText(f)))
                                  .Where(ft => ft.Item2.Contains("\"title\""))
                                  .Select(t => new SchemaItem {
                        FileName = t.Item1, Content = t.Item2
                    })
                                  .ToList();

                    WhamEngine engine = new WhamEngine();

                    while (schemas.Any())
                    {
                        var added = schemas
                                    .Where(s => string.IsNullOrEmpty(s.Uri))
                                    .Where(s =>
                        {
                            try
                            {
                                var uri = engine.AddSchema(s.Content);
                                s.Uri   = uri.AbsolutePath;
                                return(!string.IsNullOrEmpty(s.Uri));
                            }
                            catch (Exception sx)
                            {
                                s.Error = sx;
                            }

                            return(false);
                        })
                                    .ToList();
                        if (!added.Any())
                        {
                            break;
                        }
                    }

                    if (schemas.Any(s => string.IsNullOrEmpty(s.Uri)))
                    {
                        Console.WriteLine("Not all schemas can be added");
                        Console.WriteLine(String.Join("\r\n",
                                                      schemas.Where(s => string.IsNullOrEmpty(s.Uri))
                                                      .Select(s => "  File: " + s.FileName + "  ERROR: " + s.Error)));
                    }
                    else
                    {
                        Console.WriteLine("All schemas loaded.");
                        var outPath = args.Skip(1).FirstOrDefault() ?? Path.Combine(args.First(), "WhAM");
                        if (!Directory.Exists(outPath))
                        {
                            Directory.CreateDirectory(outPath);
                        }
                        Directory.SetCurrentDirectory(outPath);

                        Console.WriteLine("Wham output to: " + outPath);
                        var result = ("" + engine.Liquidize(BuiltInTemplates.WhamMasterTemplate)).Trim();

                        Console.WriteLine(result);

                        if (engine.Context.Errors != null && engine.Context.Errors.Any())
                        {
                            Console.WriteLine("dotLIQUID ERRORS:");
                            Console.WriteLine(string.Join(System.Environment.NewLine,
                                                          engine.Context.Errors.Select(e => " - Error: " + e.Message + "  " + e.InnerException)));
                        }

                        Console.WriteLine("Done.");
                    }
                }
                else
                {
                    Console.WriteLine("input folder must exist");
                }
            }
        }