示例#1
0
        public async void GenerateFromHttpWithSettingTest(string url, string version, int n)
        {
             PocoSetting setting = new PocoSetting
            {
                AddNullableDataType = true,
                AddKeyAttribute = true,
                AddTableAttribute = true,
                AddRequiredAttribute = true,
                AddNavigation = true
            };

             //var url = "http://services.odata.org/V4/OData/OData.svc";
             O2P o2p = new O2P( setting);
             var code = await o2p.GenerateAsync(new Uri(url));
             Debug.WriteLine(code);

             Assert.AreEqual(o2p.MetaDataVersion, version);
             Assert.AreEqual(o2p.ClassList.Count, n);
             Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

             StringAssert.Contains("[Key]", code);
             StringAssert.Contains("[Required]", code);
             StringAssert.Contains("[Table", code);

        }
示例#2
0
 public O2P(string url, string user, string password)
 {
     Url      = url;
     User     = user;
     Password = password;
     Setting  = new PocoSetting();
 }
示例#3
0
        public async void GenerateFromHttpWithSettingTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                AddNullableDataType  = true,
                AddKeyAttribute      = true,
                AddTableAttribute    = true,
                AddRequiredAttribute = true,
                AddNavigation        = true
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

            StringAssert.Contains("[Key]", code);
            StringAssert.Contains("[Required]", code);
            StringAssert.Contains("[Table", code);
            StringAssert.Contains("virtual public Supplier Supplier  {get;set;}", code);
            StringAssert.DoesNotContain("public class Product :", code);
            StringAssert.Contains("System.ComponentModel.DataAnnotations.Schema", code);
            StringAssert.Contains("System.ComponentModel.DataAnnotations", code);
        }
        public void Property_declaration_test()
        {
            // Arrange
            var setting = new PocoSetting
            {
                AddEager      = false,
                AddNavigation = true,
                Attributes    = new List <string> {
                    "key", "json"
                },
            };

            _attributeManager.Init(setting);
            var property = new PropertyTemplate
            {
                PropName    = "ProductId",
                PropType    = "int",
                PropComment = "// not null",
                IsKey       = true
            };
            // Act
            string sut      = new PropertyGenerator(property, setting);
            var    expected = @"
[Key]
[JsonProperty(PropertyName = ""ProductId"")]
        public virtual int ProductId {get;set;} // not null
";

            // Assert
            Assert.That(sut, Does.Match(expected.GetRegexPattern()));
        }
        public void JsonAttributeWithCamelCasePropertyDeclaration_test()
        {
            // Arrange
            var setting = new PocoSetting
            {
                AddJsonAttribute = true,
                NameCase         = CaseEnum.Camel
            };

            _attributeManager.Init(setting);

            PropertyTemplate property = new PropertyTemplate
            {
                PropName = "CategoryID",
                PropType = "int",
                IsKey    = true
            };
            // Act
            var sut = new PropertyGenerator(property, setting);
            // Assert
            var expected =
                $"[JsonProperty(PropertyName = \"CategoryID\")] {Constant.NewLine}public int categoryID {{get;set;}} ";


            Assert.AreEqual(sut.ToString().TrimAllSpace(), expected.TrimAllSpace());
        }
        public void Property_attributes_test(string att, string expected)
        {
            // Arrange
            var setting = new PocoSetting
            {
                Attributes = new List <string> {
                    att
                }
            };

            _attributeManager.Init(setting);

            var property = new PropertyTemplate
            {
                PropName = "ProductId",
                PropType = "string",
                Serial   = 1,
                IsKey    = true,
            };
            // Act
            string sut = new PropertyGenerator(property, setting);

            // Assert
            Assert.IsTrue(sut.Contains(expected));
        }
        public void AllAttributesPropertyDeclaration_test()
        {
            // Arrange
            var setting = new PocoSetting
            {
                AddKeyAttribute      = true,
                AddRequiredAttribute = true,
                AddJsonAttribute     = true
            };

            _attributeManager.Init(setting);

            PropertyTemplate property = new PropertyTemplate
            {
                PropName = "CategoryID",
                PropType = "int",
                IsKey    = true
            };

            // Act
            var sut = new PropertyGenerator(property, setting);


            // Assert
            Assert.IsTrue(sut.ToString().Contains("[Key]") &&
                          sut.ToString().Contains("[Required]") &&
                          sut.ToString().Contains("[JsonProperty(PropertyName = \"CategoryID\")]"));
        }
示例#8
0
 public O2P(string url, string user, string password)
 {
     Url = url;
     User = user;
     Password = password;
     Setting = new PocoSetting();
 }
        /// <summary>
        /// Initialize factory with setting.Attributes
        /// </summary>
        /// <param name="setting"></param>
        /// <returns></returns>
        public AttributeFactory Init(PocoSetting?setting = null)
        {
            if (setting == null)
            {
                setting = new PocoSetting();
            }

            //obsolet: -k -q -j -t are replaced by -a <names>
            var list = setting.Attributes;

            if (setting.AddKeyAttribute && !list.Contains("key"))
            {
                list.Add("key");
            }

            if (setting.AddRequiredAttribute && !list.Contains("req"))
            {
                list.Add("req");
            }

            if (setting.AddTableAttribute && !list.Contains("tab"))
            {
                list.Add("tab");
            }

            //    case "json":
            if (setting.AddJsonAttribute && !list.Contains("json"))
            {
                list.Add("json");
            }

            _attributes = new List <string>(setting.Attributes);//add attributes of commandline options
            return(this);
        }
        public void Type_is_enum_with_flags_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate
            {
                Name         = "Feature",
                NameSpace    = "SP",
                IsEnum       = true,
                IsFlags      = true,
                EnumElements = new List <string> {
                    "Feature0", "Feature1"
                }
            };
            var gen = Moq.Moq4IPocoGenerator(ct);

            //Act
            var sut  = new PocoClassGeneratorCs(gen, setting);
            var code = sut.ClassToString(ct);
            //Assert
            var expected = @"
[Flags] public enum Feature
	 {
         Feature0,
         Feature1 
	}
";

            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
示例#11
0
 internal Poco(MetaDataInfo metaData, PocoSetting setting)
 {
     _setting     = setting ?? new PocoSetting();
     MetaData     = metaData;
     SchemaErrors = new List <string>();
     EntitySets   = new List <IEdmEntitySet>();
 }
        public void ClassTemplate_All_Attributes_With_SettingTest()
        {
            // Arrange
            var p = new ClassTemplate()
            {
                Name          = "ProductDetail",
                EntitySetName = "productDetail"
            };

            var setting = new PocoSetting()
            {
                Attributes = new List <string>(list),
            };

            var atts = AttributeFactory.Default
                       .Init(setting)
                       .GetAllAttributes(p);

            var match = ListCheck(atts, new List <string>
            {
                "[DataContract]",
                "[Table(\"productDetail\")]",
                "[ProtoContract]",
            });

            Assert.IsTrue(match);
        }
        public void RequiredAttributePropertyDeclaration_test()
        {
            // Arrange
            var setting = new PocoSetting
            {
                AddRequiredAttribute = true
            };

            _attributeManager.Init(setting);

            PropertyTemplate property = new PropertyTemplate
            {
                PropName = "CategoryID",
                PropType = "int",
                IsKey    = true
            };
            // Act
            var sut = new PropertyGenerator(property, setting);
            // Assert

            var expected = @"
[Required]
public int CategoryID {get;set;} ";

            Assert.AreEqual(sut.ToString().TrimAllSpace(), expected.TrimAllSpace());
        }
        public void PropertyTemplate_All_Attributes_With_SettingTest()
        {
            // Arrange
            PropertyTemplate p = new PropertyTemplate
            {
                PropName = "FirstName",
                PropType = "string",
                IsKey    = true,
                Serial   = 1,
            };

            var setting = new PocoSetting()
            {
                Attributes = new List <string>(list),
            };

            var atts = AttributeFactory.Default
                       .Init(setting)
                       .GetAllAttributes(p);

            var match = ListCheck(atts, new List <string>
            {
                "[ProtoMember(1)]",
                "[DataMember]",
                " [Key]",
                "[Required]",
                "[Display(Name = \"First Name\")]",
                "[JsonProperty(PropertyName = \"FirstName\")]",
            });

            Assert.IsTrue(match);
        }
        public void PropertyTemplate_with_seeting_Attribute_Test(string name, string expected)
        {
            // Arrange
            PropertyTemplate p = new PropertyTemplate
            {
                PropName = "FirstName",
                PropType = "string",
                IsKey    = true,
                Serial   = 1,
            };

            //Act
            var setting = new PocoSetting
            {
                Attributes = new List <string> {
                    name
                }
            };

            var sut = AttributeFactory.Default
                      .Init(setting)
                      .GetAllAttributes(p);
            var att = string.Join(" ", sut);

            //Assert
            Assert.AreEqual(expected, att);
        }
示例#16
0
        public void AddAsemplyTest()
        {
            var             pocosetting = new PocoSetting();
            AssemplyManager am          = new AssemplyManager(pocosetting, new ConcurrentDictionary <string, ClassTemplate>());

            am.AddAssemply("xyz");
            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("xyz")));
        }
示例#17
0
 /// <summary>
 /// cto initialization
 /// </summary>
 /// <param name="pocoSetting">Seting parameters of generating code</param>
 /// <param name="model">The model containing all classes </param>
 public AssemplyManager(PocoSetting pocoSetting, IDictionary <string, ClassTemplate> model)
 {
     _pocoSetting      = pocoSetting;
     _model            = model;
     AssemplyReference = new List <string>();
     AddAssemply(DefaultAssemply);//add default assemplies
     AddAssemplyReferenceList();
 }
示例#18
0
        public void AddAsemplyArrayTest()
        {
            var             pocosetting = new PocoSetting();
            AssemplyManager am          = new AssemplyManager(pocosetting, new List <ClassTemplate>());

            am.AddAssemply("xyz", "abc");
            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("xyz")));
            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("abc")));
        }
示例#19
0
        public async Task web_api2_v3_mult_namespace_class_and_enum_Test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.MultiSchemaV3,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            var expected = @"
namespace ODataDemo
{
	public partial class Customer
	{
	    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public partial class Location
	{
	    public string Address {get;set;} 
	    public string City {get;set;}
	}
}
namespace ODataDemo2
{
	public partial class Customer
	{
    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public partial class Customer2
	{
	    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public enum Feature
	 {
        Feature1=0,
        Feature2=1,
        Feature3=2,
        Feature4=3 
	}
}
";

            //Assert
            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
示例#20
0
        public void InheritanceDisabledWithInheritSettingTest()
        {
            var setting = new PocoSetting
            {
                Inherit = "MyBaseClass",
            };
            var o2p = new O2P(setting);

            Assert.IsFalse(o2p.Setting.UseInheritance);
        }
示例#21
0
        //{"required" ,"System.ComponentModel.DataAnnotations.Schema"},
        //{"table" ,"System.ComponentModel.DataAnnotations.Schema"},
        //{"json","Newtonsoft.Json"},
        ////assemplies for datatype
        //{"geometry","Microsoft.Spatial"},
        //{"geography", "Microsoft.Spatial"}
        public void AddAsemplyByKey(string key, string value)
        {
            var pocosetting = new PocoSetting
            {
                AddKeyAttribute = true
            };

            AssemplyManager am = new AssemplyManager(pocosetting, new ConcurrentDictionary <string, ClassTemplate>());

            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains(value)));
        }
示例#22
0
        public void AddAsemplyMultiAttributes()
        {
            var pocosetting = new PocoSetting
            {
                AddTableAttribute    = true,
                AddRequiredAttribute = true
            };

            AssemplyManager am = new AssemplyManager(pocosetting, new ConcurrentDictionary <string, ClassTemplate>());

            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("System.ComponentModel.DataAnnotations.Schema")));
        }
示例#23
0
        public void AddExternalAsemply()
        {
            var pocosetting = new PocoSetting
            {
                AddTableAttribute    = true,
                AddRequiredAttribute = true
            };

            AssemplyManager am = new AssemplyManager(pocosetting, new List <ClassTemplate>());

            am.AddAssemply("xyz");
            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("System.ComponentModel.DataAnnotations.Schema")));
            Assert.IsTrue(am.AssemplyReference.Exists(m => m.Contains("xyz")));
        }
示例#24
0
        public async Task Filter_by_namespace_Test()
        {
            var url        = TestSample.NorthWindV4;
            var connString = new OdataConnectionString {
                ServiceUrl = url
            };
            var setting = new PocoSetting {
                Include = new List <string> {
                    "NorthwindModel*"
                }
            };
            var o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(connString);

            Assert.IsTrue(code.Contains("public partial class Product"));
        }
        public void ReducedBaseTyp_in_the_same_namespace_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate {
                Name = "Folder", NameSpace = "SP", BaseType = "SP.FileSystem"
            };
            var gen = Moq.Moq4IPocoGenerator(ct);

            //Act
            var sut         = new PocoClassGeneratorCs(gen, setting);
            var reducedType = sut.ReducedBaseTyp(ct);

            //Assert
            Assert.That(reducedType, Is.EqualTo("FileSystem"));
        }
        public void code_generation_with_multi_namespace_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var list    = new List <ClassTemplate>
            {
                new ClassTemplate {
                    Name = "Folder", NameSpace = "SP"
                },
                new ClassTemplate {
                    Name = "Folder", NameSpace = "SP2", BaseType = "SP.Folder"
                },
                new ClassTemplate {
                    Name = "File", NameSpace = "SP2"
                },
            };
            var gen = Moq.Moq4IPocoGenerator(list);

            //Act
            var sut  = new PocoClassGeneratorCs(gen, setting);
            var code = sut.GeneratePoco();

            //Assert
            var expected = @"
using SP;
using SP2;
namespace SP
{
	public partial class Folder
	{
	}

}
namespace SP2
{
	public partial class Folder : SP.Folder
	{
	}

	public partial class File
	{
	}
}
";

            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
        public void Class_renamed_has_no_json_attribute_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate {
                Name = "Event", NameSpace = "SP", OriginalName = "event"
            };
            var gen = Moq.Moq4IPocoGenerator(ct);

            //Act
            var sut  = new PocoClassGeneratorCs(gen, setting);
            var code = sut.ClassToString(ct);
            //Assert
            var expected = "public partial class Event";

            Assert.That(code, Does.Contain(expected));
        }
示例#28
0
        public CsCommand(Options options, IPocoFileSystem fileSystem)
        {
            if (fileSystem == null)
            {
                _fileSystem = new NullFileSystem();
            }
            else
            {
                _fileSystem = fileSystem;
            }

            Errors                = new List <string>();
            ArgOptions            = optionManager = new OptionManager(options);
            odataConnectionString = optionManager.GetOdataConnectionString();
            PocoSettingOptions    = optionManager.GetPocoSetting();
            O2PGen                = new O2P(PocoSettingOptions);
        }
        public void rename_reserved_keyword_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate {
                Name = "event", NameSpace = "SP", BaseType = "SP.FileSystem", OriginalName = "event"
            };
            var gen = Moq.Moq4IPocoGenerator(ct);

            //Act
            var sut  = new PocoClassGeneratorCs(gen, setting);
            var name = sut.ClassList.FirstOrDefault()?.Name;

            //Assert
            Assert.That(sut.ClassList.Count, Is.EqualTo(1));
            Assert.That(name, Is.EqualTo("Event"));
        }
        public void Property_has__type_collection_without_prefix_namespac_test()
        {
            // Arrange
            var setting  = new PocoSetting();
            var property = new PropertyTemplate
            {
                PropName       = "Table",
                PropType       = "List<SimpleDataTable>",
                ClassNameSpace = "SP1",
            };
            var expected = "public List<SimpleDataTable> Table {get;set;}";
            // Act
            string sut = new PropertyGenerator(property, setting);

            // Assert
            Assert.IsTrue(sut.Contains(expected));
        }
        public void Class_basetype_has_different_namespace_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate {
                Name = "Folder", NameSpace = "SP1", BaseType = "SP.FileSystemItem"
            };
            var gen = Moq.Moq4IPocoGenerator(ct);
            var sut = new PocoClassGeneratorCs(gen, setting);

            //Act
            var code = sut.ClassToString(ct);
            //Assert
            var expected = "public partial class Folder : SP.FileSystemItem";

            Assert.That(code, Does.Contain(expected));
        }
        public void Class_is_complex_test()
        {
            //Arrange
            var setting = new PocoSetting();
            var ct      = new ClassTemplate {
                Name = "Folder", NameSpace = "SP", IsComplex = true
            };
            var gen = Moq.Moq4IPocoGenerator(ct);

            //Act
            var sut  = new PocoClassGeneratorCs(gen, setting);
            var code = sut.ClassToString(ct);
            //Assert
            var expected = "public partial class Folder";

            Assert.That(code, Does.Contain(expected));
        }
示例#33
0
        public async Task<string> BaseTest(string url, string version, int n, PocoSetting setting )
        {
            O2P o2P = new O2P(setting);

            var code = await o2P.GenerateAsync(new Uri(url) );
        //    var metaString = await o2P.SaveMetaDataTo("north.xml");
            if (o2P.MediaType == Media.Http)
            {
                Assert.Greater(o2P.ServiceHeader.Count, 0);
            }
            Debug.WriteLine(code);
            //Debug.WriteLine(metaString);

            Assert.AreEqual(o2P.MetaDataVersion, version);
            Assert.AreEqual(o2P.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2P.SchemaNamespace));
            //Assert.IsTrue(MatchFileContent("north.cs", code));
            //Assert.IsTrue(MatchFileContent("north.xml", metaString));
            return code;
        }
示例#34
0
 public O2P()
 {
    // _fluent = new Api.O2P( )
     Setting = new PocoSetting();
 }
示例#35
0
 public O2P(string url)
 {
     Url = url;
     Setting = new PocoSetting();
 }