//-----------------------------------------------------------------------
//
// Copyright (c) 2011 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 13-05-2011
// Tests for Geometry2DData (2D geometry as is used by the old D-Serie programs)
//-----------------------------------------------------------------------
namespace Deltares.Dam.Tests
{
using System;
using Deltares.Dam.Data;
using NUnit.Framework;
[TestFixture]
public class Geometry2DDataTests
{
[Test]
public void AddBoundaryLineIncreasesCount()
{
var geometry2DData = new Geometry2DData();
Assert.AreEqual(0, geometry2DData.LayerCount, "New Geometry2DData object should have no boundary lines");
geometry2DData.AddLayer(new Geometry2DLayer());
Assert.AreEqual(1, geometry2DData.LayerCount, "Adding boundary line did not increase boundary line count");
}
[Test]
public void GetBoundaryLineReturnsCorrectObject()
{
var geometry2DData = new Geometry2DData();
var geometry2DBoundaryLine0 = new Geometry2DBoundaryLine();
geometry2DBoundaryLine0.Points.Add(new Geometry2DPoint(1.0, 0.0));
geometry2DBoundaryLine0.Points.Add(new Geometry2DPoint(10.0, 1.1));
geometry2DData.AddLayer(new Geometry2DLayer() { boundaryLine = geometry2DBoundaryLine0 });
var geometry2DBoundaryLine1 = new Geometry2DBoundaryLine();
geometry2DBoundaryLine1.Points.Add(new Geometry2DPoint(1.0, 1.0));
geometry2DBoundaryLine1.Points.Add(new Geometry2DPoint(10.0, 2.1));
geometry2DData.AddLayer(new Geometry2DLayer() { boundaryLine = geometry2DBoundaryLine1 });
Geometry2DLayer layerActual = geometry2DData.GetLayer(0);
Assert.IsTrue(geometry2DBoundaryLine0.Equals(layerActual.boundaryLine));
Assert.IsFalse(layerActual.boundaryLine.Equals(new Geometry2DBoundaryLine()));
layerActual = geometry2DData.GetLayer(1);
Assert.IsTrue(geometry2DBoundaryLine1.Equals(layerActual.boundaryLine));
}
[Test]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void IndexTooSmallRaisesException()
{
var geometry2DData = new Geometry2DData();
geometry2DData.AddLayer(new Geometry2DLayer());
Geometry2DLayer geometry2DLayerActual = geometry2DData.GetLayer(0);
geometry2DLayerActual = geometry2DData.GetLayer(-1);
}
[Test]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void IndexTooLargeRaisesException()
{
var geometry2DData = new Geometry2DData();
geometry2DData.AddLayer(new Geometry2DLayer());
Geometry2DLayer geometry2DLayerActual = geometry2DData.GetLayer(0);
geometry2DLayerActual = geometry2DData.GetLayer(1);
}
[Test]
public void AlignedBoundaryLinesValidateSuccesful()
{
var geometry2DData = new Geometry2DData();
Geometry2DBoundaryLine geometry2DBoundaryLine0 = Add2AlignedBoundaryLines(geometry2DData);
geometry2DData.Validate(); // Should succeed
}
[Test]
[ExpectedException(typeof(Geometry2DDataException))]
public void LeftUnalignedBoundaryLinesRaiseExceptionOnValidate()
{
var geometry2DData = new Geometry2DData();
Geometry2DBoundaryLine geometry2DBoundaryLine0 = Add2AlignedBoundaryLines(geometry2DData);
geometry2DBoundaryLine0.Points[0].X += 1.0;
geometry2DData.Validate(); // Should fail
}
[Test]
[ExpectedException(typeof(Geometry2DDataException))]
public void RightUnalignedBoundaryLinesRaiseExceptionOnValidate()
{
var geometry2DData = new Geometry2DData();
Geometry2DBoundaryLine geometry2DBoundaryLine0 = Add2AlignedBoundaryLines(geometry2DData);
geometry2DBoundaryLine0.Points[geometry2DBoundaryLine0.Points.Count - 1].X += 1.0;
geometry2DData.Validate(); // Should fail
}
private Geometry2DBoundaryLine Add2AlignedBoundaryLines(Geometry2DData geometry2DData)
{
var geometry2DBoundaryLine0 = new Geometry2DBoundaryLine();
geometry2DBoundaryLine0.Points.Add(new Geometry2DPoint(0.0, 0.0));
geometry2DBoundaryLine0.Points.Add(new Geometry2DPoint(10.0, 1.1));
geometry2DData.AddLayer(new Geometry2DLayer() { boundaryLine = geometry2DBoundaryLine0 });
var geometry2DBoundaryLine1 = new Geometry2DBoundaryLine();
geometry2DBoundaryLine1.Points.Add(new Geometry2DPoint(0.0, 1.0));
geometry2DBoundaryLine1.Points.Add(new Geometry2DPoint(10.0, 2.1));
geometry2DData.AddLayer(new Geometry2DLayer() { boundaryLine = geometry2DBoundaryLine1 });
return geometry2DBoundaryLine0;
}
}
}