public void IsInputValid_ShapeNegativePositionX_ShouldReturnFalse() { //Arrange List <ShapeDto> shapeInputs = new List <ShapeDto>(); ShapeDto shapeDto = new ShapeDto { ShapeType = ShapeType.Rectangle, PositionX = "-10", PositionY = "10", Width = "10", Height = "10" }; shapeInputs.Add(shapeDto); var settings = Mock.Create <ISettings>(); var errorLogger = Mock.Create <IErrorLogger>(); var inputValidator = Mock.Create(() => new InputValidator(settings, errorLogger)); Mock.Arrange(() => settings.CanvasSize).Returns(1000).OccursNever(); Mock.Arrange(() => errorLogger .LogParameterError(nameof(shapeDto.PositionX), shapeDto.PositionX, shapeDto.ShapeType.ToString())).OccursOnce(); //Act var result = inputValidator.IsInputValid(shapeInputs); //Assert Assert.False(result); Mock.Assert(settings); Mock.Assert(errorLogger); }
public void IsInputValid_QuadrilateralShapeInputValid_ShouldReturnTrue() { //Arrange List <ShapeDto> shapeInputs = new List <ShapeDto>(); ShapeDto shapeDto = new ShapeDto { ShapeType = ShapeType.Rectangle, PositionX = "10", PositionY = "10", Width = "10", Height = "10" }; shapeInputs.Add(shapeDto); var settings = Mock.Create <ISettings>(); var errorLogger = Mock.Create <IErrorLogger>(); var inputValidator = Mock.Create(() => new InputValidator(settings, errorLogger)); Mock.Arrange(() => settings.CanvasSize).Returns(1000).Occurs(2); Mock.Arrange(() => errorLogger .LogParameterError(Arg.AnyString, Arg.AnyString, Arg.AnyString)).OccursNever(); //Act var result = inputValidator.IsInputValid(shapeInputs); //Assert Assert.True(result); Mock.Assert(settings); Mock.Assert(errorLogger); }
public void IsInputValid_ShapeHorizontalDiameterInvalidValue_ShouldReturnFalse() { //Arrange List <ShapeDto> shapeInputs = new List <ShapeDto>(); ShapeDto shapeDto = new ShapeDto { ShapeType = ShapeType.Ellipse, PositionX = "10", PositionY = "10", HorizontalDiameter = "Test", VerticalDiameter = "10" }; shapeInputs.Add(shapeDto); var settings = Mock.Create <ISettings>(); var errorLogger = Mock.Create <IErrorLogger>(); var inputValidator = Mock.Create(() => new InputValidator(settings, errorLogger)); Mock.Arrange(() => settings.CanvasSize).Returns(1000).OccursNever(); Mock.Arrange(() => errorLogger .LogParameterError(nameof(shapeDto.HorizontalDiameter), shapeDto.HorizontalDiameter, shapeDto.ShapeType.ToString())).OccursOnce(); //Act var result = inputValidator.IsInputValid(shapeInputs); //Assert Assert.False(result); Mock.Assert(settings); Mock.Assert(errorLogger); }
public void IsInputValid_InvalidInput_NullReturned() { //Arrange ShapeDto shapeInput = new ShapeDto { ShapeType = ShapeType.Square, PositionX = "-10", PositionY = "10", Width = "10" }; IEnumerable <ShapeDto> shapeInputs = new ShapeDto[] { shapeInput }; var consoleInputRetriever = Mock.Create <IConsoleInputRetriever>(); var inputValidator = Mock.Create <IInputValidator>(); var consoleReader = Mock.Create(() => new ConsoleReader(consoleInputRetriever, inputValidator)); Mock.Arrange(() => consoleInputRetriever.GetShapeInputs()).Returns(shapeInputs).OccursOnce(); Mock.Arrange(() => inputValidator.IsInputValid(shapeInputs)).Returns(false).OccursOnce(); //Act var shapes = consoleReader.GetShapesData(); //Assert Assert.Null(shapes); Mock.Assert(consoleInputRetriever); Mock.Assert(inputValidator); }
public static IBasicShape MapApiToDomain(ShapeDto input) { IBasicShape output = null; switch (input.Type) { case ShapeDto.ShapeType.Sphere: // TODO: worth normalizing Shape instantiation e.g. new() output = Sphere.CreateDefaultInstance(); break; case ShapeDto.ShapeType.Plane: output = new Plane(); break; default: throw new ArgumentOutOfRangeException(nameof(input.Type), "Unrecognized shape type: " + input.Type); } if (input.Material != null) { output.Material = MaterialFactory.MapApiToDomain(input.Material); } if (input.Transformations != null && input.Transformations.Any()) { foreach (var transform in input.Transformations) { var domainTransformAction = TransformationFactory.MapApiTransformToDomainAction(transform); domainTransformAction(output.Transformation); } } return(output); }
protected override Shape CreateShape(ShapeDto request) { return(new Triangle( x: request.X, y: request.Y, z: request.Z)); }
public void IsInputValid_ValidInput_ShapesReturned() { //Arrange ShapeDto shapeInput = new ShapeDto { ShapeType = ShapeType.Square, PositionX = "10", PositionY = "10", Width = "10" }; IEnumerable <ShapeDto> shapeInputs = new ShapeDto[] { shapeInput }; var consoleInputRetriever = Mock.Create <IConsoleInputRetriever>(); var inputValidator = Mock.Create <IInputValidator>(); var consoleReader = Mock.Create(() => new ConsoleReader(consoleInputRetriever, inputValidator)); Mock.Arrange(() => consoleInputRetriever.GetShapeInputs()).Returns(shapeInputs).OccursOnce(); Mock.Arrange(() => inputValidator.IsInputValid(shapeInputs)).Returns(true).OccursOnce(); //Act var square = consoleReader.GetShapesData().First() as Square; //Assert Assert.Equal(shapeInput.ShapeType.ToString(), square.GetType().Name); Assert.Equal(int.Parse(shapeInput.PositionX), square.PositionX); Assert.Equal(int.Parse(shapeInput.PositionY), square.PositionY); Assert.Equal(int.Parse(shapeInput.Width), square.Width); Mock.Assert(consoleInputRetriever); Mock.Assert(inputValidator); }
private bool IsConstantShapeValid(ShapeDto shape) { var paramValue = shape.ShapeType == ShapeType.Square ? shape.Width : shape.HorizontalDiameter; var paramName = shape.ShapeType == ShapeType.Square ? nameof(shape.Width) : nameof(shape.HorizontalDiameter); return(IsShapePositionAndSizeValid(shape.ShapeType.ToString(), nameof(shape.PositionX), paramName, shape.PositionX, paramValue) && IsCanvasParamValid(shape.ShapeType.ToString(), nameof(shape.PositionY), shape.PositionY, out _)); }
public static Shape Create(ShapeDto dto) { var shape = new Shape { Name = dto.Name }; Validate(shape); return(shape); }
private bool IsDynamicShapeValid(ShapeDto shape) { var paramWidthValue = shape.ShapeType == ShapeType.Ellipse ? shape.HorizontalDiameter : shape.Width; var paramWidthName = shape.ShapeType == ShapeType.Ellipse ? nameof(shape.HorizontalDiameter) : nameof(shape.Width); var paramHeightValue = shape.ShapeType == ShapeType.Ellipse ? shape.VerticalDiameter : shape.Height; var paramHeightName = shape.ShapeType == ShapeType.Ellipse ? nameof(shape.VerticalDiameter) : nameof(shape.Height); return(IsShapePositionAndSizeValid(shape.ShapeType.ToString(), nameof(shape.PositionX), paramWidthName, shape.PositionX, paramWidthValue) && IsShapePositionAndSizeValid(shape.ShapeType.ToString(), nameof(shape.PositionY), paramHeightName, shape.PositionY, paramHeightValue)); }
public async Task <long> CreateAsync(ShapeDto request) { request.ThrowIfNull(nameof(request)); request.ThrowIfInvalid(); var shape = request.NewShapeOrThrowIfInvalid(); var entity = await _context.AddEntityAsync(shape); await _context.SaveChangesAsync(); return(entity.Id); }
private bool IsShapeValid(ShapeDto shape) { if (shape.ShapeType == ShapeType.Square || shape.ShapeType == ShapeType.Circle) { return(IsConstantShapeValid(shape)); } if (shape.ShapeType == ShapeType.Rectangle || shape.ShapeType == ShapeType.Textbox || shape.ShapeType == ShapeType.Ellipse) { return(IsDynamicShapeValid(shape)); } return(false); }
public ActionResult SaveShape(ShapeDto dto) { if (String.IsNullOrWhiteSpace(dto.Name)) { return(this.Direct(new { success = false })); } if (dto.Id == Guid.Empty.ToString()) { dto.Id = new Guid().ToString(); } return(this.Direct(new { success = true, data = dto })); }
public async Task GetAreaByIdAsync_ValidData_OkAsync(ShapeType type, bool enable, long? x, long? y, long? z, long? radius, double expected) { await using var context = new SqliteContext(); var target = new ShapeService(context); var request = new ShapeDto { Type = type, RadiusEnabled = enable, X = x, Y = y, Z = z, Radius = radius }; var shapeId = await target.CreateAsync(request); var area = await target.GetAreaByIdAsync(shapeId); Assert.Equal(expected, area); }
public async Task CreateAsync_ValidData_OkAsync(ShapeType type, bool enable, long? x, long? y, long? z, long? radius = null) { await using var context = new SqliteContext(); var target = new ShapeService(context); var request = new ShapeDto { Type = type, RadiusEnabled = enable, X = x, Y = y, Z = z, Radius = radius }; var shape = await context.Shapes.ByIdOrFailAsync(await target.CreateAsync(request)); Assert.Equal(x, shape.X); Assert.Equal(y, shape.Y); Assert.Equal(z, shape.Z); Assert.Equal(radius, shape.Radius); }
private Shape ConstructShape(ShapeDto shape) { switch (shape.ShapeType) { case ShapeType.Square: return(Square.Create(int.Parse(shape.PositionX), int.Parse(shape.PositionY), int.Parse(shape.Width))); case ShapeType.Rectangle: return(Rectangle.Create(int.Parse(shape.PositionX), int.Parse(shape.PositionY), int.Parse(shape.Width), int.Parse(shape.Height))); case ShapeType.Textbox: return(Textbox.Create(int.Parse(shape.PositionX), int.Parse(shape.PositionY), int.Parse(shape.Width), int.Parse(shape.Height), shape.Text)); case ShapeType.Circle: return(Circle.Create(int.Parse(shape.PositionX), int.Parse(shape.PositionY), int.Parse(shape.HorizontalDiameter))); case ShapeType.Ellipse: return(Ellipse.Create(int.Parse(shape.PositionX), int.Parse(shape.PositionY), int.Parse(shape.HorizontalDiameter), int.Parse(shape.VerticalDiameter))); default: return(null); } }
private Shape GetShape(ShapeDto dto) { return(new ShapeFactory(dto).Get()); }
public static SceneDto GetSphereCentralWithPlanesExample() { // Templates var defaultSphere = Sphere.CreateDefaultInstance(); var defaultMaterial = Material.CreateDefaultInstance(); var white = Color.White; // Copying ReRenderSphereCentralWithPlanes code using serializable DTOs. // Planes var floor = new ShapeDto { Type = ShapeDto.ShapeType.Plane, Material = new MaterialDto { Color = new ColorDto { A = Material.DefaultColorA, R = 1F, G = 0.9F, B = 0.9F }, Specular = 0F, Ambient = defaultMaterial.Ambient, Diffuse = defaultMaterial.Diffuse, Shininess = defaultMaterial.Shininess } }; var left_wall = new ShapeDto { Type = ShapeDto.ShapeType.Plane, Material = floor.Material, Transformations = new List <TransformDto> { new TransformDto { TransformType = TransformDto.TransformationType.RotateX, RotationRadians = MathF.PI / 2 }, new TransformDto { TransformType = TransformDto.TransformationType.RotateY, RotationRadians = -MathF.PI / 4 }, new TransformDto { TransformType = TransformDto.TransformationType.Translate, VectorTransformation = new VectorDto { X = 0F, Y = 0F, Z = 5F } } } }; var right_wall = new ShapeDto { Type = ShapeDto.ShapeType.Plane, Material = floor.Material, Transformations = new List <TransformDto> { new TransformDto { TransformType = TransformDto.TransformationType.RotateX, RotationRadians = MathF.PI / 2 }, new TransformDto { TransformType = TransformDto.TransformationType.RotateY, RotationRadians = MathF.PI / 4 }, new TransformDto { TransformType = TransformDto.TransformationType.Translate, VectorTransformation = new VectorDto { X = 0F, Y = 0F, Z = 5F } } } }; // Spheres var middle = new ShapeDto { Type = ShapeDto.ShapeType.Sphere, Material = new MaterialDto { Color = new ColorDto { A = Material.DefaultColorA, R = 0.1F, G = 1F, B = 0.5F }, Diffuse = 0.7F, Specular = 0.3F, Ambient = defaultMaterial.Ambient, Shininess = defaultMaterial.Shininess }, Transformations = new List <TransformDto> { new TransformDto { TransformType = TransformDto.TransformationType.Translate, VectorTransformation = new VectorDto { X = -0.5F, Y = 1F, Z = 0.5F } } } }; var right = new ShapeDto { Type = ShapeDto.ShapeType.Sphere, Material = new MaterialDto { Color = new ColorDto { A = Material.DefaultColorA, R = 0.5F, G = 1F, B = 0.1F }, Diffuse = 0.7F, Specular = 0.3F, Ambient = defaultMaterial.Ambient, Shininess = defaultMaterial.Shininess }, Transformations = new List <TransformDto> { new TransformDto { TransformType = TransformDto.TransformationType.Scale, VectorTransformation = new VectorDto { X = 0.5F, Y = 0.5F, Z = 0.5F } }, new TransformDto { TransformType = TransformDto.TransformationType.Translate, VectorTransformation = new VectorDto { X = 1.5F, Y = 0.5F, Z = -0.5F } } } }; var left = new ShapeDto { Type = ShapeDto.ShapeType.Sphere, Material = new MaterialDto { Color = new ColorDto { A = Material.DefaultColorA, R = 1F, G = 0.8F, B = 0.1F }, Diffuse = 0.7F, Specular = 0.3F, Ambient = defaultMaterial.Ambient, Shininess = defaultMaterial.Shininess }, Transformations = new List <TransformDto> { new TransformDto { TransformType = TransformDto.TransformationType.Scale, VectorTransformation = new VectorDto { X = 0.33F, Y = 0.33F, Z = 0.33F } }, new TransformDto { TransformType = TransformDto.TransformationType.Translate, VectorTransformation = new VectorDto { X = -1.5F, Y = 0.33F, Z = -0.75F } } } }; // Scene - pull together shapes into root serializable object // Use low res until happy, then crank up. Takes a lot of clock cycles! #pragma warning disable CS0219 // Variable is assigned but its value is never used int high = 1000; int medium = 500; int low = 250; int res = medium; #pragma warning restore CS0219 // Variable is assigned but its value is never used var scene = new SceneDto { Shapes = new List <ShapeDto> { floor, left_wall, right_wall, left, middle, right }, LightSource = new LightDto { Position = new VectorDto { X = -10F, Y = 10F, Z = -10F }, Intensity = new ColorDto { A = white.ScA, R = white.ScR, G = white.ScG, B = white.ScB } }, Camera = new CameraDto { HSize = res, VSize = res / 2, FieldOfView = MathF.PI / 3, From = new VectorDto { X = 0F, Y = 1.5F, Z = -5F }, To = new VectorDto { X = 0F, Y = 1F, Z = 0F }, Up = new VectorDto { X = 0F, Y = 1F, Z = 0F } } }; return(scene); }
private IShape GetShape(ShapeDto shape) { return(ShapeServices.WithDto(shape).Get()); }
protected abstract Shape CreateShape(ShapeDto request);
public Shape GetShape(ShapeDto request) { Shape shape = CreateShape(request); return(shape); }
public ActionResult SaveShape(ShapeDto dto) { if (String.IsNullOrWhiteSpace(dto.Name)) return this.Direct(new { success = false }); if (dto.Id == Guid.Empty.ToString()) dto.Id = new Guid().ToString(); return this.Direct(new { success = true, data = dto }); }
public async Task <long> CreateAsync(ShapeDto rectangle) { return(await _shapeService.CreateAsync(rectangle)); }
protected override Shape CreateShape(ShapeDto request) { return(new Circle( radius: request.Radius)); }