// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using NUnit.Framework;
using Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints;
using Ringtoets.HydraRing.Calculation.TestUtil.IllustrationPoints;
namespace Ringtoets.HydraRing.Calculation.Test.Data.Output.IllustrationPoints
{
[TestFixture]
public class WindDirectionClosingSituationTest
{
[Test]
public void Constructor_WithoutWindDirection_ThrowsArgumentNullException()
{
// Call
TestDelegate test = () => new WindDirectionClosingSituation(null, string.Empty);
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("windDirection", exception.ParamName);
}
[Test]
public void Constructor_WithoutClosingSituation_ThrowsArgumentNullException()
{
// Call
TestDelegate test = () => new WindDirectionClosingSituation(new TestWindDirection(), null);
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("closingSituation", exception.ParamName);
}
[Test]
public void Constructor_WithParameters_ReturnNewInstance()
{
// Setup
string closingSituation = string.Empty;
var windDirection = new TestWindDirection();
// Call
var instance = new WindDirectionClosingSituation(windDirection, closingSituation);
// Assert
Assert.NotNull(instance);
Assert.AreEqual(closingSituation, instance.ClosingSituation);
Assert.AreSame(windDirection, instance.WindDirection);
}
[Test]
public void Equals_WithNull_ReturnsFalse()
{
// Setup
var instance = new WindDirectionClosingSituation(new TestWindDirection(), string.Empty);
// Call
bool result = instance.Equals(null);
// Assert
Assert.IsFalse(result);
}
[Test]
public void Equals_DifferentType_ReturnsFalse()
{
// Setup
var instance = new WindDirectionClosingSituation(new TestWindDirection(), string.Empty);
// Call
bool result = instance.Equals(new object());
// Assert
Assert.IsFalse(result);
}
[Test]
[TestCaseSource(nameof(Combinations))]
public void Equals_DifferentScenarios_ReturnExpectedValue(WindDirectionClosingSituation instance,
WindDirectionClosingSituation otherInstance,
bool expectedEqual)
{
// Call
bool areEqualOne = instance.Equals(otherInstance);
bool areEqualTwo = otherInstance.Equals(instance);
// Assert
Assert.AreEqual(expectedEqual, areEqualOne);
Assert.AreEqual(expectedEqual, areEqualTwo);
}
[Test]
public void GetHashCode_InstancesAreEqual_FiltersHashesEqual()
{
// Setup
const string windDirectionName = "SSE";
var random = new Random(21);
double windDirectionAngle = random.NextDouble();
var windDirection = new WindDirection(windDirectionName, windDirectionAngle);
const string closingSituation = "general";
var instance = new WindDirectionClosingSituation(windDirection, closingSituation);
var otherInstance = new WindDirectionClosingSituation(windDirection, closingSituation);
// Call
int result = instance.GetHashCode();
int otherResult = otherInstance.GetHashCode();
// Assert
Assert.AreEqual(result, otherResult);
}
private static TestCaseData[] Combinations()
{
var instanceA = new WindDirectionClosingSituation(new WindDirection("a", 123.2), "situationA");
var instanceB = new WindDirectionClosingSituation(new WindDirection("a", 123.2), "situationA");
var instanceC = new WindDirectionClosingSituation(new WindDirection("a", 3.2), "situationA");
var instanceD = new WindDirectionClosingSituation(new WindDirection("a", 123.2), "situationB");
return new[]
{
new TestCaseData(instanceA, instanceA, true)
{
TestName = "Equals_InstanceAInstanceA_True"
},
new TestCaseData(instanceA, instanceB, true)
{
TestName = "Equals_InstanceAInstanceB_True"
},
new TestCaseData(instanceB, instanceC, false)
{
TestName = "Equals_InstanceBInstanceC_False"
},
new TestCaseData(instanceA, instanceD, false)
{
TestName = "Equals_InstanceAInstanceD_False"
}
};
}
}
}