public async Task MergesModelsWithUserDefinedTypes() { var schemas = new[] { "../../../models/Merge/Envelope.json", "../../../models/Merge/FacadePanel.json", "../../../models/Merge/Level.json" }; var asm = await TypeGenerator.GenerateInMemoryAssemblyFromUrisAndLoadAsync(schemas); var facadePanelType = asm.Assembly.GetType("Elements.FacadePanel"); Assert.NotNull(facadePanelType); var envelopeType = asm.Assembly.GetType("Elements.Envelope"); Assert.NotNull(envelopeType); var model1 = JsonConvert.DeserializeObject <Model>(File.ReadAllText("../../../models/Merge/facade.json")); var count1 = model1.Elements.Count; var model2 = JsonConvert.DeserializeObject <Model>(File.ReadAllText("../../../models/Merge/structure.json")); var count2 = model2.Elements.Count; var merge = new Model(); merge.AddElements(model1.Elements.Values); merge.AddElements(model2.Elements.Values); merge.ToGlTF("models/Merge.glb"); }
public async Task GeneratesInMemoryAssembly() { var uris = new[] { "https://raw.githubusercontent.com/hypar-io/Schemas/master/FacadeAnchor.json", "https://raw.githubusercontent.com/hypar-io/Schemas/master/Mullion.json" }; var asm = await TypeGenerator.GenerateInMemoryAssemblyFromUrisAndLoadAsync(uris); var mullionType = asm.GetType("Test.Foo.Bar.Mullion"); var anchorType = asm.GetType("Test.Foo.Bar.FacadeAnchor"); Assert.NotNull(mullionType); Assert.NotNull(anchorType); Assert.NotNull(mullionType.GetProperty("CenterLine")); Assert.NotNull(mullionType.GetProperty("Profile")); Assert.NotNull(anchorType.GetProperty("Location")); var ctors = mullionType.GetConstructors(); Assert.Single <ConstructorInfo>(ctors); var centerLine = new Line(new Vector3(0, 0), new Vector3(5, 5)); var profile = new Profile(Polygon.Rectangle(0.1, 0.1)); // Profile @profile, Line @centerLine, NumericProperty @length, Transform @transform, Material @material, Representation @representation, System.Guid @id, string @name var t = new Transform(); var m = BuiltInMaterials.Steel; var mullion = Activator.CreateInstance(mullionType, new object[] { profile, centerLine, new NumericProperty(0, NumericPropertyUnitType.Length), t, m, new Representation(new List <SolidOperation>()), false, Guid.NewGuid(), "Test Mullion" }); }
public async Task FailsWithBadSchema() { var uris = new[] { "https://raw.githubusercontent.com/hypar-io/Schemas/master/ThisDoesntExist.json", "https://raw.githubusercontent.com/hypar-io/Schemas/master/Mullion.json" }; var result = await TypeGenerator.GenerateInMemoryAssemblyFromUrisAndLoadAsync(uris); Assert.False(result.Success); Assert.NotEmpty(result.DiagnosticResults); }
public async Task InMemoryCodeGenOfTypeWithEmbeddedType() { var tmpPath = Path.Combine(Path.GetTempPath(), "HyparModels"); string relEmbeddedSchemaTestPath = RelativeSavedSchemaPath(embeddedSchemaTest, tmpPath, "embeddedSchemaTest.json"); string relEmbeddedSchemaTestPath2 = RelativeSavedSchemaPath(embeddedSchemaTest2, tmpPath, "embeddedSchemaTest2.json"); // Load schemas in memeory. var asm = await TypeGenerator.GenerateInMemoryAssemblyFromUrisAndLoadAsync(new[] { relEmbeddedSchemaTestPath, relEmbeddedSchemaTestPath2 }); Assert.True(asm.Success); var facadeType = asm.Assembly.GetType("Elements.FacadePanel"); Assert.NotNull(facadeType); }
public async Task ThrowsWithBadSchema() { var uris = new[] { "https://raw.githubusercontent.com/hypar-io/Schemas/master/ThisDoesn'tExist.json", "https://raw.githubusercontent.com/hypar-io/Schemas/master/Mullion.json" }; await Assert.ThrowsAsync <Exception>(async() => await TypeGenerator.GenerateInMemoryAssemblyFromUrisAndLoadAsync(uris)); }