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");
 | |
|     }
 | |
| }
 |