|
From: Stefan F. <ste...@us...> - 2012-06-30 04:57:13
|
junit/rails/game/state/ChangeStackTest.java | 117 +++++++++
src/rails/algorithms/RevenueManager.java | 26 --
src/rails/common/GuiHints.java | 17 -
src/rails/common/parser/ComponentManager.java | 6
src/rails/common/parser/GameFileParser.java | 4
src/rails/game/Bank.java | 32 --
src/rails/game/BankPortfolio.java | 21 -
src/rails/game/BaseToken.java | 21 -
src/rails/game/BonusToken.java | 19 -
src/rails/game/Company.java | 15 -
src/rails/game/CompanyManager.java | 10
src/rails/game/CompanyType.java | 17 -
src/rails/game/EndOfGameRound.java | 12 -
src/rails/game/Game.java | 6
src/rails/game/GameManager.java | 70 ++---
src/rails/game/MapHex.java | 30 +-
src/rails/game/MapManager.java | 11
src/rails/game/OperatingRound.java | 39 +--
src/rails/game/PhaseManager.java | 18 -
src/rails/game/Player.java | 122 ++++------
src/rails/game/PlayerManager.java | 13 -
src/rails/game/PrivateCompany.java | 15 -
src/rails/game/PublicCertificate.java | 9
src/rails/game/PublicCompany.java | 154 +++++--------
src/rails/game/Round.java | 23 -
src/rails/game/ShareSellingRound.java | 35 --
src/rails/game/StartItem.java | 33 +-
src/rails/game/StartPacket.java | 23 +
src/rails/game/StartRound.java | 22 -
src/rails/game/StartRound_1830.java | 14 -
src/rails/game/StartRound_1835.java | 27 --
src/rails/game/StockMarket.java | 14 -
src/rails/game/StockRound.java | 39 +--
src/rails/game/StockSpace.java | 30 --
src/rails/game/Stop.java | 26 --
src/rails/game/SwitchableUIRound.java | 6
src/rails/game/Tile.java | 10
src/rails/game/TileManager.java | 15 -
src/rails/game/Token.java | 36 ---
src/rails/game/Train.java | 17 -
src/rails/game/TrainCertificateType.java | 24 --
src/rails/game/TrainManager.java | 28 +-
src/rails/game/TreasuryShareRound.java | 33 --
src/rails/game/correct/CashCorrectionManager.java | 17 -
src/rails/game/correct/CorrectionManager.java | 23 -
src/rails/game/correct/CorrectionManagerI.java | 3
src/rails/game/correct/CorrectionType.java | 4
src/rails/game/correct/MapCorrectionManager.java | 14 -
src/rails/game/model/BaseTokensModel.java | 27 --
src/rails/game/model/BonusModel.java | 11
src/rails/game/model/CalculatedMoneyModel.java | 22 -
src/rails/game/model/CashMoneyModel.java | 25 --
src/rails/game/model/CertificateCountModel.java | 28 --
src/rails/game/model/CertificatesModel.java | 31 +-
src/rails/game/model/MoneyModel.java | 10
src/rails/game/model/PortfolioModel.java | 46 +--
src/rails/game/model/PresidentModel.java | 22 -
src/rails/game/model/PriceModel.java | 29 --
src/rails/game/model/PrivatesModel.java | 24 --
src/rails/game/model/TrainsModel.java | 24 --
src/rails/game/round/Activity.java | 4
src/rails/game/round/RoundContext.java | 9
src/rails/game/special/ExchangeForShare.java | 13 -
src/rails/game/special/LocatedBonus.java | 13 -
src/rails/game/special/SellBonusToken.java | 20 -
src/rails/game/special/SpecialProperty.java | 15 +
src/rails/game/special/SpecialRight.java | 11
src/rails/game/special/SpecialTileLay.java | 13 -
src/rails/game/special/SpecialTokenLay.java | 11
src/rails/game/special/SpecialTrainBuy.java | 14 -
src/rails/game/specific/_1825/OperatingRound_1825.java | 10
src/rails/game/specific/_1825/PublicCompany_1825.java | 12 -
src/rails/game/specific/_1825/StartRound_1825.java | 13 -
src/rails/game/specific/_1825/StockRound_1825.java | 17 -
src/rails/game/specific/_1835/OperatingRound_1835.java | 24 --
src/rails/game/specific/_1835/PrussianFormationRound.java | 11
src/rails/game/specific/_1835/StockRound_1835.java | 16 -
src/rails/game/specific/_1851/StartRound_1851.java | 19 -
src/rails/game/specific/_1856/CGRFormationRound.java | 23 -
src/rails/game/specific/_1856/OperatingRound_1856.java | 17 -
src/rails/game/specific/_1856/PublicCompany_1856.java | 17 -
src/rails/game/specific/_1856/PublicCompany_CGR.java | 16 -
src/rails/game/specific/_1856/ShareSellingRound_1856.java | 21 -
src/rails/game/specific/_1856/StockRound_1856.java | 18 -
src/rails/game/specific/_1880/Investor_1880.java | 18 -
src/rails/game/specific/_1880/OperatingRound_1880.java | 23 -
src/rails/game/specific/_1880/PublicCompany_1880.java | 23 -
src/rails/game/specific/_1880/StartRound_1880.java | 43 ---
src/rails/game/specific/_1880/StockRound_1880.java | 16 -
src/rails/game/specific/_1889/OperatingRound_1889.java | 26 --
src/rails/game/specific/_18AL/NameTrains.java | 10
src/rails/game/specific/_18AL/NameableTrain.java | 14 -
src/rails/game/specific/_18AL/NamedTrainToken.java | 16 -
src/rails/game/specific/_18AL/OperatingRound_18AL.java | 10
src/rails/game/specific/_18EU/FinalMinorExchangeRound.java | 11
src/rails/game/specific/_18EU/GameManager_18EU.java | 9
src/rails/game/specific/_18EU/OperatingRound_18EU.java | 17 -
src/rails/game/specific/_18EU/StartRound_18EU.java | 34 --
src/rails/game/specific/_18EU/StockRound_18EU.java | 28 --
src/rails/game/specific/_18GA/OperatingRound_18GA.java | 10
src/rails/game/specific/_18TN/OperatingRound_18TN.java | 15 -
src/rails/game/specific/_18TN/PublicCompany_18TN.java | 12 -
src/rails/game/state/AbstractItem.java | 38 ---
src/rails/game/state/ArrayListChange.java | 12 -
src/rails/game/state/ArrayListMultimapState.java | 10
src/rails/game/state/ArrayListState.java | 18 -
src/rails/game/state/BooleanChange.java | 11
src/rails/game/state/BooleanState.java | 11
src/rails/game/state/Change.java | 16 -
src/rails/game/state/ChangeStack.java | 27 +-
src/rails/game/state/Context.java | 126 ----------
src/rails/game/state/GenericState.java | 13 -
src/rails/game/state/GenericStateChange.java | 14 -
src/rails/game/state/HashMapChange.java | 14 -
src/rails/game/state/HashMapState.java | 21 -
src/rails/game/state/HashMultimapState.java | 10
src/rails/game/state/HashSetChange.java | 13 -
src/rails/game/state/HashSetState.java | 18 -
src/rails/game/state/IntegerChange.java | 13 -
src/rails/game/state/IntegerState.java | 13 -
src/rails/game/state/Item.java | 20 -
src/rails/game/state/Manager.java | 110 +++++++++
src/rails/game/state/Model.java | 4
src/rails/game/state/MultimapChange.java | 13 -
src/rails/game/state/MultimapState.java | 4
src/rails/game/state/Observable.java | 8
src/rails/game/state/OwnableItem.java | 5
src/rails/game/state/OwnableManager.java | 5
src/rails/game/state/Portfolio.java | 18 -
src/rails/game/state/PortfolioChange.java | 8
src/rails/game/state/PortfolioList.java | 8
src/rails/game/state/PortfolioManager.java | 15 -
src/rails/game/state/PortfolioMap.java | 8
src/rails/game/state/Root.java | 101 ++++----
src/rails/game/state/State.java | 16 -
src/rails/game/state/StateManager.java | 45 +--
src/rails/game/state/StringChange.java | 9
src/rails/game/state/StringState.java | 13 -
src/rails/game/state/Wallet.java | 8
src/rails/game/state/WalletChange.java | 13 -
src/rails/game/state/WalletManager.java | 11
141 files changed, 1436 insertions(+), 1715 deletions(-)
New commits:
commit 5ac0e9a3f06f1e9cce6ba3ecabd24f401082447b
Author: Stefan Frey <ste...@we...>
Date: Sat Jun 30 06:56:17 2012 +0200
Modified approach to Root, Manager and Context objects
diff --git a/src/rails/common/parser/ComponentManager.java b/src/rails/common/parser/ComponentManager.java
index daa7f30..3e0d57f 100644
--- a/src/rails/common/parser/ComponentManager.java
+++ b/src/rails/common/parser/ComponentManager.java
@@ -9,7 +9,7 @@ import org.slf4j.LoggerFactory;
import rails.common.LocalText;
import rails.common.parser.XMLTags;
-import rails.game.state.Context;
+import rails.game.state.Manager;
/**
* ComponentManage - an implementation of ComponentManagerI, which handles the
@@ -28,7 +28,7 @@ public class ComponentManager {
private Map<String, ConfigurableComponent> mComponentMap =
new HashMap<String, ConfigurableComponent>();
- public ComponentManager(Context context, String gameName, Tag tag, Map<String, String> gameOptions)
+ public ComponentManager(Manager context, String gameName, Tag tag, Map<String, String> gameOptions)
throws ConfigurationException {
this.gameName = gameName;
@@ -41,7 +41,7 @@ public class ComponentManager {
}
}
- private void configureComponent(Context context, Tag componentTag)
+ private void configureComponent(Manager context, Tag componentTag)
throws ConfigurationException {
// Extract the attributes of the Component
diff --git a/src/rails/common/parser/GameFileParser.java b/src/rails/common/parser/GameFileParser.java
index 528892e..f4ebe84 100644
--- a/src/rails/common/parser/GameFileParser.java
+++ b/src/rails/common/parser/GameFileParser.java
@@ -15,7 +15,7 @@ import rails.game.PlayerManager;
import rails.game.StockMarket;
import rails.game.TileManager;
import rails.game.TrainManager;
-import rails.game.state.Context;
+import rails.game.state.Manager;
public class GameFileParser extends XMLParser {
private static String GAME_XML_FILE = "Game.xml";
@@ -34,7 +34,7 @@ public class GameFileParser extends XMLParser {
private RevenueManager revenueManager;
private Bank bank;
- public GameFileParser(Context context, String name, Map<String, String> gameOptions) {
+ public GameFileParser(Manager context, String name, Map<String, String> gameOptions) {
directories.add("data/" + name);
diff --git a/src/rails/game/Game.java b/src/rails/game/Game.java
index 3279b26..b71533c 100644
--- a/src/rails/game/Game.java
+++ b/src/rails/game/Game.java
@@ -11,9 +11,7 @@ import rails.common.DisplayBuffer;
import rails.common.LocalText;
import rails.common.parser.*;
import rails.game.action.PossibleAction;
-import rails.game.state.Context;
import rails.game.state.Root;
-import rails.game.state.StateManager;
import rails.util.GameFileIO;
public class Game {
@@ -79,10 +77,9 @@ public class Game {
public boolean setup() {
// first define root GameContext to be able to define states
- StateManager stateManager = StateManager.create(parent, id)
- Context context = Root.create(parent);
+ Root root = Root.create("states");
- GameFileParser gfp = new GameFileParser(context, name, gameOptions);
+ GameFileParser gfp = new GameFileParser(root, name, gameOptions);
playerManager = gfp.getPlayerManager();
companyManager = gfp.getCompanyManager();
trainManager = gfp.getTrainManager();
diff --git a/src/rails/game/round/Activity.java b/src/rails/game/round/Activity.java
index bea0143..812b7ca 100644
--- a/src/rails/game/round/Activity.java
+++ b/src/rails/game/round/Activity.java
@@ -3,7 +3,7 @@ package rails.game.round;
import java.util.List;
import rails.game.action.PossibleAction;
-import rails.game.state.Context;
+import rails.game.state.Manager;
interface Activity {
@@ -11,7 +11,7 @@ interface Activity {
* creation based on a specific context
* @param context
*/
- public void create(Context context);
+ public void create(Manager context);
/**
* @return true if activity is active
diff --git a/src/rails/game/state/AbstractItem.java b/src/rails/game/state/AbstractItem.java
index 7a8b0ac..e76ec25 100644
--- a/src/rails/game/state/AbstractItem.java
+++ b/src/rails/game/state/AbstractItem.java
@@ -32,8 +32,8 @@ public abstract class AbstractItem implements Item {
}
public Context getContext() {
- if (parent instanceof Context) {
- return (Context)parent;
+ if (parent instanceof Manager) {
+ return (Manager)parent;
} else {
// recursive definition
return parent.getContext();
@@ -41,7 +41,7 @@ public abstract class AbstractItem implements Item {
}
public String getURI() {
- if (parent instanceof Context) {
+ if (parent instanceof Manager) {
return id;
} else {
// recursive definition
diff --git a/src/rails/game/state/Context.java b/src/rails/game/state/Context.java
index b4d5ae4..487e1e3 100644
--- a/src/rails/game/state/Context.java
+++ b/src/rails/game/state/Context.java
@@ -1,96 +1,15 @@
package rails.game.state;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
/**
- * Contexts allow location of other items
+ * A context describe a service that allows to locate items
*/
-public class Context implements Item {
- // standard item fields
- protected final String id;
- protected final Item parent;
- // context reference to the root
- protected final Root root;
+public interface Context extends Item {
- // storage of items
- protected final HashMapState<String, Item> items = HashMapState.create(this, "items");
+ public Item localize(String uri);
- protected Context(Item parent, String id) {
- // check arguments
- checkNotNull(parent, "Parent cannot be null");
- checkNotNull(id, "Id cannot be null");
- checkArgument(id != Root.ID, "Id cannot equal " + Root.ID);
-
- // standard fields
- this.parent = parent;
- this.id = id;
-
- // find root and add context there
- root = parent.getContext().getRoot();
- root.addItemToRoot(this);
- }
-
- public static Context create(Item parent, String id) {
- return new Context(parent, id);
- }
-
- public String getId() {
- return id;
- }
+ public void addItem(Item item);
- public Item getParent() {
- return parent;
- }
+ public void removeItem(Item item);
- public Context getContext() {
- return this;
- }
+ public Root getRoot();
- public String getURI() {
- if (parent instanceof Context) {
- return id;
- } else {
- // recursive definition
- return parent.getURI() + Item.SEP + id;
- }
- }
-
- public String getFullURI() {
- // recursive definition
- return parent.getFullURI() + Item.SEP + id;
- }
-
- // Context methods
- public Item localize(String uri) {
- // either item can be found in the map
- if (items.containsKey(uri)) {
- return items.get(uri);
- } else {
- // otherwise search in root
- return root.localize(uri);
- }
- }
-
- void addItem(AbstractItem item) {
- // check if this context is the containing one
- checkArgument(item.getContext() == this, "Context is not the container of the item to add");
- // check if it already exists
- checkArgument(items.containsKey(item.getURI()), "Context already contains item with identical URI");
-
- // all preconditions ok => add item
- items.put(item.getURI(), item);
-
- // add item to root
- root.addItemToRoot(item);
- }
-
- public Root getRoot() {
- return root;
- }
-
- @Override
- public String toString() {
- return parent.toString();
- }
}
diff --git a/src/rails/game/state/Item.java b/src/rails/game/state/Item.java
index f076822..be16c84 100644
--- a/src/rails/game/state/Item.java
+++ b/src/rails/game/state/Item.java
@@ -14,7 +14,7 @@ package rails.game.state;
*/
public interface Item {
- static final char SEP = '.';
+ public static final char SEP = '/';
String getId();
diff --git a/src/rails/game/state/Manager.java b/src/rails/game/state/Manager.java
new file mode 100644
index 0000000..11d5a3b
--- /dev/null
+++ b/src/rails/game/state/Manager.java
@@ -0,0 +1,110 @@
+package rails.game.state;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * A Manager is an abstract implementation of a Context
+ */
+public abstract class Manager implements Context {
+
+ // standard item fields
+ private final String id;
+ private final Item parent;
+
+ protected final Root root;
+
+ // storage of items
+ protected final HashMapState<String, Item> items = HashMapState.create(this, "items");
+
+ protected Manager(Item parent, String id) {
+ checkNotNull(id, "Id cannot be null");
+ this.id = id;
+
+ if (this instanceof Root) {
+ this.parent = null;
+ this.root = null;
+ return;
+ }
+
+ // check arguments, parent can only be null for Root
+ checkNotNull(parent, "Parent cannot be null");
+ this.parent = parent;
+
+ // find root and add context there
+ root = parent.getContext().getRoot();
+ root.addItem(this);
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public Item getParent() {
+ return parent;
+ }
+
+ public Context getContext() {
+ return this;
+ }
+
+ public String getURI() {
+ if (parent instanceof Manager) {
+ return id;
+ } else {
+ // recursive definition
+ return parent.getURI() + Item.SEP + id;
+ }
+ }
+
+ public String getFullURI() {
+ // recursive definition
+ return parent.getFullURI() + Item.SEP + id;
+ }
+
+ // Context methods
+ public Item localize(String uri) {
+ // either item can be found in the map
+ if (items.containsKey(uri)) {
+ return items.get(uri);
+ } else {
+ // otherwise search in root
+ return root.localize(uri);
+ }
+ }
+
+ public void addItem(Item item) {
+ // check if this context is the containing one
+ checkArgument(item.getContext() == this, "Context is not the container of the item to add");
+ // check if it already exists
+ checkArgument(items.containsKey(item.getURI()), "Context already contains item with identical URI");
+
+ // all preconditions ok => add item
+ items.put(item.getURI(), item);
+
+ // add item to root
+ root.addItem(item);
+ }
+
+ public void removeItem(Item item) {
+ // check if this context is the containing one
+ checkArgument(item.getContext() == this, "Context is not the container of the item to add");
+ // check if it is stored
+ checkArgument(!items.containsKey(item.getURI()), "Context does not contain item with that URI");
+
+ // all preconditions ok => remove item
+ items.remove(item.getURI());
+
+ // remove item from root
+ root.removeItem(item);
+ }
+
+ public Root getRoot() {
+ return root;
+ }
+
+ @Override
+ public String toString() {
+ return parent.toString();
+ }
+}
diff --git a/src/rails/game/state/Root.java b/src/rails/game/state/Root.java
index d7fc154..5f5a47d 100644
--- a/src/rails/game/state/Root.java
+++ b/src/rails/game/state/Root.java
@@ -1,41 +1,64 @@
package rails.game.state;
import static com.google.common.base.Preconditions.checkArgument;
-
/**
- * Root is a context that serves as the top node
-
- * It also contains the StateManager if the object tree
- * should be able to contain states
+ * Root is the top node of the context/item hierachy
*/
-public final class Root extends Context {
+public final class Root extends Manager {
+
+ public final static String ID = "/";
+
+ private StateManager stateManager;
+
+ private Root() {
+ super(null, ID);
+ }
/**
- * The reserved id for a root
+ * @param stateManagerId for the embedded StateManager
+ * @return a Root object with initialized StateManager embedded
*/
- public static final String ID = "root";
-
- private Root(StateManager parent) {
- super(parent, ID);
+ public static Root create(String stateManagerId) {
+ Root root = new Root();
+ StateManager stateManager = StateManager.create(root, stateManagerId);
+ root.addStateManager(stateManager);
+ return root;
}
-
+
+ private void addStateManager(StateManager stateManager) {
+ this.stateManager = stateManager;
+ }
+
+ public StateManager getStateManager() {
+ return stateManager;
+ }
+
/**
- * @param the game used for this hierarchy
+ * @throws UnsupportedOperationsException
+ * Not supported for Root
*/
- public static Root create(Game parent) {
- return new Root(parent);
+ @Override
+ public Item getParent() {
+ throw new UnsupportedOperationException();
}
+ /**
+ * @return this
+ */
@Override
- public StateManager getParent() {
- return null;
+ public Context getContext() {
+ return this;
}
+ /**
+ * @return this
+ */
@Override
- public Context getContext() {
- return null;
+ public Root getRoot() {
+ return this;
}
+
@Override
public String getURI() {
return ID;
@@ -52,16 +75,25 @@ public final class Root extends Context {
return items.get(uri);
}
- // Root methods
- void addItemToRoot(Item item) {
+ @Override
+ public void addItem(Item item) {
// check if it already exists
checkArgument(items.containsKey(item.getFullURI()), "Root already contains item with identical fullURI");
- // all preconditions ok
+ // all preconditions ok => add
items.put(item.getFullURI(), item);
}
@Override
+ public void removeItem(Item item) {
+ // check if it already exists
+ checkArgument(!items.containsKey(item.getFullURI()), "Root does not contain item with that fullURI");
+
+ // all preconditions ok => remove
+ items.remove(item.getFullURI());
+ }
+
+ @Override
public String toString() {
return ID;
}
diff --git a/src/rails/game/state/StateManager.java b/src/rails/game/state/StateManager.java
index cd7391c..4526712 100644
--- a/src/rails/game/state/StateManager.java
+++ b/src/rails/game/state/StateManager.java
@@ -13,7 +13,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
-public final class StateManager extends AbstractItem {
+public final class StateManager extends Manager {
protected static Logger log =
LoggerFactory.getLogger(StateManager.class.getPackage().getName());
commit 16dee2d210cab07db6e73a10e3a5f70eeec1e39b
Author: Stefan Frey <ste...@we...>
Date: Fri Jun 22 12:38:31 2012 +0200
refactored Item interface again
diff --git a/junit/rails/game/state/ChangeStackTest.java b/junit/rails/game/state/ChangeStackTest.java
new file mode 100644
index 0000000..04dbb87
--- /dev/null
+++ b/junit/rails/game/state/ChangeStackTest.java
@@ -0,0 +1,117 @@
+package rails.game.state;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.mockito.Mock;
+
+public class ChangeStackTest {
+
+ @Mock
+ private StateManager sm;
+
+ @Test
+ public void testCreate() {
+ ChangeStack stack = ChangeStack.create(sm);
+ assertNotNull(stack);
+ }
+
+ @Test
+ public void testEnable() {
+ ChangeStack stack = ChangeStack.create(sm);
+ assertFalse(stack.isEnabled());
+ stack.enable();
+ assertTrue(stack.isEnabled());
+ }
+
+ @Test
+ public void testIsEnabled() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGetAvailableChangeSet() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGetAvailableChangeSetBoolean() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testStart() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testFinish() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testCancel() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testAddChange() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testIsUndoableByPlayer() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testIsUndoableByManager() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testIsOpen() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGetIndex() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testSize() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGetCurrentIndex() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testGotoIndex() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testIsRedoable() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testRedoMoveSet() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testUndo() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testAdd() {
+ fail("Not yet implemented");
+ }
+
+}
diff --git a/src/rails/algorithms/RevenueManager.java b/src/rails/algorithms/RevenueManager.java
index 0c14e5d..6c70b91 100644
--- a/src/rails/algorithms/RevenueManager.java
+++ b/src/rails/algorithms/RevenueManager.java
@@ -22,11 +22,7 @@ import rails.game.state.Item;
* which are permanent.
* The conversion of Rails elements is in the responsibility of the RevenueAdapter.
* For each GameManager instance only one RevenueManager is created.
- *
- * @author freystef
- *
*/
-
public final class RevenueManager extends AbstractItem implements ConfigurableComponent {
protected static Logger log =
@@ -34,15 +30,21 @@ public final class RevenueManager extends AbstractItem implements ConfigurableCo
private final HashSet<ConfigurableComponent> configurableModifiers = new HashSet<ConfigurableComponent>();
- private final ArrayListState<NetworkGraphModifier> graphModifiers = ArrayListState.create();
- private final ArrayListState<RevenueStaticModifier> staticModifiers = ArrayListState.create();
- private final ArrayListState<RevenueDynamicModifier> dynamicModifiers = ArrayListState.create();
+ private final ArrayListState<NetworkGraphModifier> graphModifiers = ArrayListState.create(this, "graphModifiers");
+ private final ArrayListState<RevenueStaticModifier> staticModifiers = ArrayListState.create(this, "staticModifiers");
+ private final ArrayListState<RevenueDynamicModifier> dynamicModifiers = ArrayListState.create(this, "dynamicModifiers");
private final ArrayList<RevenueStaticModifier> activeStaticModifiers = new ArrayList<RevenueStaticModifier>();
private final ArrayList<RevenueDynamicModifier> activeDynamicModifiers = new ArrayList<RevenueDynamicModifier>();
private RevenueDynamicModifier activeCalculator;
- public RevenueManager() {}
+ private RevenueManager(Item parent, String id) {
+ super(parent, id);
+ }
+
+ public static RevenueManager create(Item parent, String id){
+ return new RevenueManager(parent, id);
+ }
public void configureFromXML(Tag tag) throws ConfigurationException {
@@ -94,14 +96,6 @@ public final class RevenueManager extends AbstractItem implements ConfigurableCo
}
- @Override
- public void init(Item parent, String id) {
- ...
[truncated message content] |
|
From: Stefan F. <ste...@us...> - 2012-07-06 03:53:08
|
junit/rails/game/state/ActionChangeSetTest.java | 105 +----
junit/rails/game/state/AutoChangeSetTest.java | 68 +++
junit/rails/game/state/ChangeStackTest.java | 186 ++++-----
junit/rails/game/state/ManagerTest.java | 86 ++++
junit/rails/game/state/RootTest.java | 18
src/rails/game/Company.java | 2
src/rails/game/GameManager.java | 76 ++-
src/rails/game/MapHex.java | 6
src/rails/game/Player.java | 6
src/rails/game/PublicCompany.java | 18
src/rails/game/ReportBuffer.java | 16
src/rails/game/Round.java | 2
src/rails/game/StockRound.java | 6
src/rails/game/Train.java | 2
src/rails/game/TrainCertificateType.java | 4
src/rails/game/TrainManager.java | 2
src/rails/game/TreasuryShareRound.java | 8
src/rails/game/correct/CorrectionManager.java | 4
src/rails/game/model/CashMoneyModel.java | 6
src/rails/game/model/MoneyModel.java | 4
src/rails/game/special/SpecialProperty.java | 2
src/rails/game/specific/_1835/OperatingRound_1835.java | 6
src/rails/game/specific/_1856/CGRFormationRound.java | 2
src/rails/game/specific/_1856/OperatingRound_1856.java | 2
src/rails/game/specific/_1856/PublicCompany_CGR.java | 4
src/rails/game/specific/_1889/OperatingRound_1889.java | 8
src/rails/game/specific/_18EU/FinalMinorExchangeRound.java | 4
src/rails/game/specific/_18EU/OperatingRound_18EU.java | 4
src/rails/game/specific/_18EU/StockRound_18EU.java | 10
src/rails/game/specific/_18TN/PublicCompany_18TN.java | 2
src/rails/game/state/AbstractItem.java | 10
src/rails/game/state/ActionChangeSet.java | 10
src/rails/game/state/AutoChangeSet.java | 19
src/rails/game/state/BooleanChange.java | 2
src/rails/game/state/BooleanState.java | 2
src/rails/game/state/Change.java | 2
src/rails/game/state/ChangeSet.java | 12
src/rails/game/state/ChangeStack.java | 265 ++++---------
src/rails/game/state/Context.java | 4
src/rails/game/state/Manager.java | 21 -
src/rails/game/state/Root.java | 13
src/rails/game/state/StateManager.java | 9
src/rails/game/state/StringChange.java | 2
src/rails/game/state/StringState.java | 2
src/rails/ui/swing/GridPanel.java | 2
src/rails/ui/swing/ReportWindowDynamic.java | 7
46 files changed, 574 insertions(+), 477 deletions(-)
New commits:
commit 9556b67b9fd599445253dcef4ff9a4fc8041b811
Author: Stefan Frey <ste...@we...>
Date: Thu Jul 5 17:28:06 2012 +0200
updated ChangeStack and ChangeSet and added tests
diff --git a/junit/rails/game/state/AutoChangeSetTest.java b/junit/rails/game/state/AutoChangeSetTest.java
index 384d702..83aee84 100644
--- a/junit/rails/game/state/AutoChangeSetTest.java
+++ b/junit/rails/game/state/AutoChangeSetTest.java
@@ -29,7 +29,7 @@ public class AutoChangeSetTest {
state = BooleanState.create(root, STATE_ID);
state.addModel(model);
changeStack = root.getStateManager().getChangeStack();
- changeSet = changeStack.startAutoChangeSet();
+ changeSet = changeStack.closeCurrentChangeSet();
}
@Test
diff --git a/junit/rails/game/state/ChangeStackTest.java b/junit/rails/game/state/ChangeStackTest.java
new file mode 100644
index 0000000..d1d04ef
--- /dev/null
+++ b/junit/rails/game/state/ChangeStackTest.java
@@ -0,0 +1,122 @@
+package rails.game.state;
+
+import static org.junit.Assert.*;
+import static org.fest.assertions.api.Assertions.assertThat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import rails.game.Player;
+import rails.game.action.PossibleAction;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ChangeStackTest {
+
+ private final static String STATE_ID = "State";
+
+ private Root root;
+ private BooleanState state;
+ private ChangeStack changeStack;
+
+ private AutoChangeSet auto_1, auto_2, auto_3;
+ private ActionChangeSet action_1, action_2, action_3;
+ @Mock Player player;
+ @Mock PossibleAction action;
+
+ @Before
+ public void setUp() {
+ root = Root.create();
+ state = BooleanState.create(root, STATE_ID);
+ changeStack = root.getStateManager().getChangeStack();
+ auto_1 = (AutoChangeSet)changeStack.getCurrentChangeSet();
+ action_1 = changeStack.startActionChangeSet(player, action);
+ auto_2 = changeStack.closeCurrentChangeSet();
+ state.set(true);
+ auto_3 = changeStack.closeCurrentChangeSet();
+ action_2 = changeStack.startActionChangeSet(player, action);
+ state.set(false);
+ action_3 = changeStack.startActionChangeSet(player, action);
+ }
+
+ @Test
+ public void testGetCurrentChangeSet() {
+ assertSame(changeStack.getCurrentChangeSet(), action_3);
+ // on the stack there are auto_1, action_1, auto_2, action_2
+ assertEquals(changeStack.sizeUndoStack(), 4);
+ }
+
+ @Test
+ public void testCloseCurrentChangeSet() {
+ changeStack.closeCurrentChangeSet();
+ assertTrue(action_3.isClosed());
+ assertSame(changeStack.getLastClosedChangeSet(), action_3);
+ // and now action_3 is added
+ assertEquals(changeStack.sizeUndoStack(), 5);
+ }
+
+ @Test
+ public void testUndo() {
+ assertFalse(state.value());
+ // undo action 3
+ assertTrue(changeStack.undo());
+ assertEquals(changeStack.sizeUndoStack(), 4);
+ assertSame(changeStack.getLastClosedChangeSet(), action_2);
+ assertThat(changeStack.getCurrentChangeSet()).isInstanceOf(AutoChangeSet.class);
+ assertFalse(state.value());
+ // undo action 2
+ assertTrue(changeStack.undo());
+ assertEquals(changeStack.sizeUndoStack(), 3);
+ assertSame(changeStack.getLastClosedChangeSet(), auto_2);
+ assertThat(changeStack.getCurrentChangeSet()).isInstanceOf(AutoChangeSet.class);
+ assertTrue(state.value());
+ // undo auto_2 and action 1
+ assertTrue(changeStack.undo());
+ assertEquals(changeStack.sizeUndoStack(), 1);
+ assertSame(changeStack.getLastClosedChangeSet(), auto_1);
+ assertThat(changeStack.getCurrentChangeSet()).isInstanceOf(AutoChangeSet.class);
+ assertFalse(state.value());
+ // undo should not do anything now
+ assertFalse(changeStack.undo());
+ |