public void testDragoonDemotedByBrave() {
        Map map = getTestMap(plains);
        Game game = ServerTestHelper.startServerGame(map);
        InGameController igc = ServerTestHelper.getInGameController();

        List<CombatResult> crs;
        Player dutch = game.getPlayer("model.nation.dutch");
        Player inca = game.getPlayer("model.nation.inca");

        Tile tile1 = map.getTile(5, 8);
        tile1.setExploredBy(dutch, true);
        tile1.setExploredBy(inca, true);
        Tile tile2 = map.getTile(4, 8);
        tile2.setExploredBy(dutch, true);
        tile2.setExploredBy(inca, true);
        // Build indian settlements
        FreeColTestCase.IndianSettlementBuilder builder
            = new FreeColTestCase.IndianSettlementBuilder(game);
        builder.player(inca).settlementTile(map.getTile(1, 1))
            .capital(true).skillToTeach(null);
        IndianSettlement settlement1 = builder.build();
        builder.reset().player(inca).settlementTile(map.getTile(8, 8))
            .skillToTeach(null);
        IndianSettlement settlement2 = builder.build();
        Unit dragoon = new ServerUnit(game, tile1, dutch, colonistType, horses, muskets);
        Unit brave = new ServerUnit(game, tile2, inca, braveType);
        brave.setIndianSettlement(settlement1);

        // Dragoon loses and brave captures its horses
        crs = fakeAttackResult(CombatResult.LOSE, dragoon, brave);
        assertTrue("Dragoon v Brave (1) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.CAPTURE_EQUIP);
        igc.combat((ServerPlayer) dutch, dragoon, brave, crs);

        assertEquals("Colonist should be a dragoon",
                     colonistType, dragoon.getType());
        assertEquals("Dragoon should be Dutch",
                     dutch, dragoon.getOwner());
        assertEquals("Dragoon should be on Tile1",
                     tile1, dragoon.getTile());
        assertEquals("Dragoon should have equipment",
                     1, dragoon.getEquipment().size());
        assertEquals("Dragoon should have muskets",
                     1, dragoon.getEquipment().getCount(muskets));
        assertEquals("Brave should have equipment",
                     1, brave.getEquipment().size());
        assertEquals("Brave should have Indian Horses",
                     1, brave.getEquipment().getCount(indianHorses));
        assertEquals("Braves settlement should have 25 Indian Horses",
                     25, settlement1.getGoodsCount(horsesType));
        assertEquals("Other settlement should not have horses",
                     0, settlement2.getGoodsCount(horsesType));

        // Dragoon loses and brave captures its muskets
        crs = fakeAttackResult(CombatResult.LOSE, dragoon, brave);
        assertTrue("Dragoon v Brave (2) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.CAPTURE_EQUIP);
        igc.combat((ServerPlayer) dutch, dragoon, brave, crs);

        assertEquals("Colonist should be a dragoon",
                     colonistType, dragoon.getType());
        assertEquals("Dragoon should be Dutch",
                     dutch, dragoon.getOwner());
        assertEquals("Dragoon should be on Tile1",
                     tile1, dragoon.getTile());
        assertTrue("Dragoon should not have equipment",
                   dragoon.getEquipment().isEmpty());
        assertEquals("Brave should have more equipment",
                     2, brave.getEquipment().size());
        assertEquals("Brave should have Indian Horses",
                     1, brave.getEquipment().getCount(indianHorses));
        assertEquals("Brave should have Indian Muskets",
                     1, brave.getEquipment().getCount(indianMuskets));
        assertEquals("Braves settlement should have 25 Indian Muskets",
                     25, settlement1.getGoodsCount(musketType));
        assertEquals("Other settlement should not have muskets",
                     0, settlement2.getGoodsCount(musketType));

        // Dragoon loses and is slaughtered
        crs = fakeAttackResult(CombatResult.LOSE, dragoon, brave);
        assertTrue("Dragoon v Brave (3) failed", crs.size() == 2
                   && crs.get(0) == CombatResult.LOSE
                   && crs.get(1) == CombatResult.SLAUGHTER_UNIT);
        igc.combat((ServerPlayer) dutch, dragoon, brave, crs);

        assertTrue("Dragoon should be disposed",
                   dragoon.isDisposed());
    }