package com.lyndir.omicron.api;
import static org.testng.Assert.*;
import org.testng.annotations.Test;
/**
* @author lhunath, 2013-07-16
*/
public class ExtractorModuleTest extends AbstractTest {
@Test
public void testOnNewTurn()
throws Exception {
// Create an extractor unit on a tile with fuel.
ExtractorModule extractorModule = ExtractorModule.createWithStandardResourceCost().resourceType( ResourceType.FUEL ).speed( 5 );
ContainerModule unconnectedContainerModule = ContainerModule.createWithStandardResourceCost()
.resourceType( ResourceType.FUEL )
.capacity( 3 );
createUnit( testUnitType( "Extractor", extractorModule ), 0, 0 );
createUnit( testUnitType( "Unconnected Container", unconnectedContainerModule ), 3, 0 );
extractorModule.getGameObject().getLocation().get().setResourceQuantity( ResourceType.FUEL, 10 );
// There is no connected container yet, mining should fail.
assertEquals( (int) extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).get(), 10 );
extractorModule.onNewTurn();
assertEquals( (int) extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).get(), 10 );
// Create a connected container unit.
ContainerModule smallConnectedContainerModule = ContainerModule.createWithStandardResourceCost()
.resourceType( ResourceType.FUEL )
.capacity( 3 );
createUnit( testUnitType( "Small Connected Container", smallConnectedContainerModule ), 1, 0 );
// Now we should be able to mine enough to fill the container.
assertEquals( smallConnectedContainerModule.getAvailable(), 3 );
extractorModule.onNewTurn();
assertEquals( (int) extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).get(), 7 );
assertEquals( smallConnectedContainerModule.getAvailable(), 0 );
extractorModule.onNewTurn();
assertEquals( (int) extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).get(), 7 );
assertEquals( smallConnectedContainerModule.getAvailable(), 0 );
// Create a bigger connected container unit.
ContainerModule bigConnectedContainerModule = ContainerModule.createWithStandardResourceCost()
.resourceType( ResourceType.FUEL )
.capacity( 15 );
createUnit( testUnitType( "Big Connected Container", bigConnectedContainerModule ), 0, 1 );
// Now we should be able to mine enough to max out the extractor's speed and then empty the tile.
assertEquals( smallConnectedContainerModule.getAvailable(), 0 );
assertEquals( bigConnectedContainerModule.getAvailable(), 15 );
extractorModule.onNewTurn();
assertEquals( (int) extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).get(), 2 );
assertEquals( bigConnectedContainerModule.getAvailable(), 10 );
extractorModule.onNewTurn();
assertFalse( extractorModule.getGameObject().getLocation().get().getResourceQuantity( ResourceType.FUEL ).isPresent() );
assertEquals( bigConnectedContainerModule.getAvailable(), 8 );
assertEquals( bigConnectedContainerModule.getStock(), 7 );
}
}