80 lines
3.2 KiB
Java
80 lines
3.2 KiB
Java
package h05;
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.sourcegrade.jagr.api.rubric.TestForSubmission;
|
|
import org.tudalgo.algoutils.transform.util.headers.ClassHeader;
|
|
import org.tudalgo.algoutils.transform.util.headers.MethodHeader;
|
|
import org.tudalgo.algoutils.tutor.general.assertions.Context;
|
|
|
|
import java.lang.reflect.Modifier;
|
|
import java.util.Set;
|
|
|
|
import static h05.TestUtils.assertStringEquals;
|
|
import static org.tudalgo.algoutils.transform.SubmissionExecutionHandler.*;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.*;
|
|
|
|
@TestForSubmission
|
|
public class WeatherBalloonTest {
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
resetAll();
|
|
}
|
|
|
|
@Test
|
|
public void testHeader() {
|
|
ClassHeader originalClassHeader = getOriginalClassHeader(WeatherBalloon.class);
|
|
|
|
assertTrue(Modifier.isPublic(originalClassHeader.modifiers()), emptyContext(), result ->
|
|
"WeatherBalloon is not public");
|
|
assertTrue(originalClassHeader.getInterfaceTypes().contains(Flying.class), emptyContext(), result ->
|
|
"WeatherBalloon does not implement interface Flying");
|
|
}
|
|
|
|
@Test
|
|
public void testStart() {
|
|
Airspace airspace = Airspace.get();
|
|
TestUtils.clearAirspace();
|
|
WeatherBalloon weatherBalloonInstance = new WeatherBalloon(0);
|
|
|
|
Delegation.disable(MethodHeader.of(WeatherBalloon.class, "start"));
|
|
call(weatherBalloonInstance::start, emptyContext(), result ->
|
|
"An exception occurred while invoking method start");
|
|
Set<Flying> flyingInAirspace = airspace.getFlyingInAirspace();
|
|
assertEquals(1, flyingInAirspace.size(), emptyContext(), result ->
|
|
"Number of aircraft in airspace differs from expected value");
|
|
assertSame(weatherBalloonInstance, flyingInAirspace.iterator().next(), emptyContext(), result ->
|
|
"Calling WeatherBalloon (using 'this') was not added to airspace");
|
|
}
|
|
|
|
@Test
|
|
public void testPop() {
|
|
Airspace airspace = Airspace.get();
|
|
TestUtils.clearAirspace();
|
|
|
|
WeatherBalloon weatherBalloonInstance = new WeatherBalloon(0);
|
|
weatherBalloonInstance.start();
|
|
|
|
Delegation.disable(MethodHeader.of(WeatherBalloon.class, "pop"));
|
|
call(weatherBalloonInstance::pop, emptyContext(), result ->
|
|
"An exception occurred while invoking method pop");
|
|
Set<?> flyingInAirspace = airspace.getFlyingInAirspace();
|
|
assertEquals(0, flyingInAirspace.size(), emptyContext(), result ->
|
|
"Number of aircraft in airspace differs from expected value");
|
|
}
|
|
|
|
@Test
|
|
public void testGetIdentifier() {
|
|
int balloonNumber = 12345;
|
|
Context context = contextBuilder()
|
|
.add("balloonNumber", balloonNumber)
|
|
.build();
|
|
WeatherBalloon weatherBalloonInstance = new WeatherBalloon(balloonNumber);
|
|
|
|
// TODO: Implementation and exercise sheet differ
|
|
Delegation.disable(MethodHeader.of(WeatherBalloon.class, "getIdentifier"));
|
|
assertStringEquals("WeatherBalloon " + balloonNumber, weatherBalloonInstance.getIdentifier(), context,
|
|
result -> "Identifier returned by getIdentifier is incorrect");
|
|
}
|
|
}
|