Package games.stendhal.server.entity.player

Source Code of games.stendhal.server.entity.player.PlayerTest

/* $Id: PlayerTest.java,v 1.30 2010/12/04 15:44:43 martinfuchs Exp $ */
/***************************************************************************
*                   (C) Copyright 2003-2010 - Stendhal                    *
***************************************************************************
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************/
package games.stendhal.server.entity.player;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import games.stendhal.common.KeyedSlotUtil;
import games.stendhal.common.constants.Nature;
import games.stendhal.server.core.engine.StendhalRPZone;
import games.stendhal.server.entity.Entity;
import games.stendhal.server.entity.item.Item;
import games.stendhal.server.maps.MockStendhalRPRuleProcessor;
import games.stendhal.server.maps.MockStendlRPWorld;

import java.util.HashMap;

import marauroa.common.game.RPObject;
import marauroa.server.game.db.DatabaseFactory;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import utilities.PlayerTestHelper;

public class PlayerTest {
  private String playername = "player";
  private Player player;
  private Player killer;
  private StendhalRPZone zone;
 
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    new DatabaseFactory().initializeDatabase();
    MockStendlRPWorld.get();
  }

  @After
  public void tearDown() throws Exception {
    MockStendhalRPRuleProcessor.get().clearPlayers();
  }

  @Before
  public void setUp() throws Exception {
    zone = new StendhalRPZone("the zone where the corpse shall be slain");
    player = PlayerTestHelper.createPlayer(playername);
    zone.add(player);
    killer = PlayerTestHelper.createPlayer("killer")
  }

  /**
   * Tests for hashCode.
   */
  @Test
  public void testHashCode() {
    assertThat(player.hashCode(), is(playername.hashCode()));
  }

  /**
   * Tests for equalsObject.
   */
  @Test
  public void testEqualsObject() {
    assertThat(player, equalTo(player));
    assertThat(player, equalTo(PlayerTestHelper.createPlayer(playername)));
    assertThat(player, not(equalTo(PlayerTestHelper.createPlayer(playername + 's'))));
  }

  /**
   * Tests for toString.
   */
  @Test
  public void testToString() {
    assertThat(player.toString(), is("Player [" + playername + ", " + playername.hashCode() + ']'));
  }

  /**
   * Tests for isObstacle.
   */
  @Test
  public void testIsObstacle() {
    final Entity ent = new Entity() {
      // just a sub class
    };
    ent.setResistance(100);
    assertTrue(player.isObstacle(ent));
    ent.setResistance(95);

    assertFalse(player.isObstacle(ent));
    assertThat(player.getResistance(ent), is(95));
  }

  /**
   * Tests for onAdded.
   */
  @SuppressWarnings("null")
  @Test
  public void testOnAdded() {
    player.onAdded(new StendhalRPZone("playertest"));
    RPObject object = KeyedSlotUtil.getKeyedSlotObject(player, "!visited");
    if (object == null) {
      fail("slot not found");
    }
    assertTrue(object.has("playertest"));
    assertThat(player.get("visibility"), is("100"));
    player.onAdded(new StendhalRPZone(PlayerDieer.DEFAULT_DEAD_AREA));
    object = KeyedSlotUtil.getKeyedSlotObject(player, "!visited");
    if (object == null) {
      fail("slot not found");

    }
    assertTrue(object.has(PlayerDieer.DEFAULT_DEAD_AREA));
    assertThat(player.get("visibility"), is("50"));
    player.onRemoved(new StendhalRPZone(PlayerDieer.DEFAULT_DEAD_AREA));
    assertThat(player.get("visibility"), is("100"));
  }

  /**
   * Tests for describe.
   */
  @Test
  public void testDescribe() {
    final int hours = player.getAge() / 60;
    final int minutes = player.getAge() % 60;
    final String time = hours + " hours and " + minutes + " minutes";
    assertThat(player.describe(), is("You see " + player.getTitle() + ".\n" + player.getTitle() + " is level "
        + player.getLevel() + " and has been playing " + time + "."));
  }
 
  /**
   * Tests for describeOfPlayerWithAwayMessage.
   */
  @Test
  public void testDescribeOfPlayerWithAwayMessage() {
    final int hours = player.getAge() / 60;
    final int minutes = player.getAge() % 60;
    final String time = hours + " hours and " + minutes + " minutes";
    player.setAwayMessage("I am away.");
    String description = player.describe();
    String expectedDescription = "You see " + player.getTitle() + ".\n"
        + player.getTitle() + " is level " + player.getLevel()
        + " and has been playing " + time + "."
        + "\nplayer is away and has left a message: "
        + player.getAwayMessage();
    assertThat(description, is(expectedDescription));
  }
 
  /**
   * Tests for describeOfPlayerWithGrumpyMessage.
   */
  @Test
  public void testDescribeOfPlayerWithGrumpyMessage() {
    final int hours = player.getAge() / 60;
    final int minutes = player.getAge() % 60;
    final String time = hours + " hours and " + minutes + " minutes";
    player.setGrumpyMessage("I am grumpy.");
    String description = player.describe();
    String expectedDescription = "You see " + player.getTitle() + ".\n"
        + player.getTitle() + " is level " + player.getLevel()
        + " and has been playing " + time + "."
        + "\nplayer is grumpy and has left a message: "
        + player.getGrumpyMessage();
    assertThat(description, is(expectedDescription));
  }

  /**
   * Tests for describeOfPlayerWithAwayAndGrumpyMessage.
   */
  @Test
  public void testDescribeOfPlayerWithAwayAndGrumpyMessage() {
    final int hours = player.getAge() / 60;
    final int minutes = player.getAge() % 60;
    final String time = hours + " hours and " + minutes + " minutes";
    player.setAwayMessage("I am away.");
    player.setGrumpyMessage("I am grumpy.");
    String description = player.describe();
    String expectedDescription = "You see " + player.getTitle() + ".\n"
        + player.getTitle() + " is level " + player.getLevel()
        + " and has been playing " + time + "."
        + "\nplayer is away and has left a message: "
        + player.getAwayMessage()
        + "\nplayer is grumpy and has left a message: "
        + player.getGrumpyMessage();
    assertThat(description, is(expectedDescription));
  }
 
  /**
   * Tests for isGhost.
   */
  @Test
  public void testIsGhost() {
    assertFalse(player.isGhost());
    player.setGhost(true);
    assertTrue(player.isGhost());
    player.setGhost(false);
    assertFalse(player.isGhost());

  }

  /**
   * Tests for addGetUseKarma.
   */
  @Test
  public void testAddGetUseKarma() {

    assertThat(player.getKarma(), is(10.0));
    player.addKarma(5.0);
    assertThat(player.getKarma(), is(15.0));
    assertThat(player.getDouble("karma"), is(player.getKarma()));
    player.useKarma(5.0);
    assertTrue(player.getKarma() >= 10.0);
    assertTrue(player.getKarma() <= 15.0);

  }

  /**
   * Tests for isInvisible.
   */
  @Test
  public void testIsInvisible() {
    final Player player2 = PlayerTestHelper.createPlayer("player2");
    assertThat(player2.isInvisibleToCreatures(), not(is(true)));
    player2.setInvisible(true);
    assertThat(player2.isInvisibleToCreatures(), is(true));
    player2.setInvisible(false);
    assertThat(player2.isInvisibleToCreatures(), not(is(true)));
  }

  /**
   * Tests for setImmune.
   */
  @Test
  public void testSetImmune() {
    Player bob = PlayerTestHelper.createPlayer("bob");
    assertFalse(bob.isImmune());
    bob.setImmune();
    assertTrue(bob.isImmune());
  }

 
  /**
   * Tests for removeImmunity.
   */
  @Test
  public void testRemoveImmunity() {
    Player bob = PlayerTestHelper.createPlayer("bob");
    assertFalse(bob.isImmune());
    bob.setImmune();
    assertTrue(bob.isImmune());
    bob.removeImmunity();
    assertFalse(bob.isImmune());
   
  }
 
  /**
   * Tests for isBadBoy.
   */
  @Test
  public void testIsBadBoy() throws Exception {
    assertFalse(player.isBadBoy());
    assertFalse(killer.isBadBoy());

    player.onDead(killer);
    assertTrue(killer.isBadBoy());
    assertFalse(player.isBadBoy());
  }
 
  /**
   * Tests for rehabilitate.
   */
  @Test
  public void testRehabilitate() throws Exception {
    assertFalse(player.isBadBoy());
    assertFalse(killer.isBadBoy());

    player.onDead(killer);
    assertTrue(killer.isBadBoy());
    assertFalse(player.isBadBoy());
    killer.rehabilitate();
    assertFalse(player.isBadBoy());
    assertFalse(killer.isBadBoy());

  }
 
  /**
   * Tests for getWidth.
   */
  @Test
  public void testgetWidth() throws Exception {
    Player bob = PlayerTestHelper.createPlayer("bob");
    assertThat(bob.getWidth(), is(1.0));
    assertThat(bob.get("width"), is("1"));
   
    assertThat(bob.getHeight(), is(1.0));
    assertThat(bob.get("height"), is("1"));
   
    Player george = Player.createZeroLevelPlayer("george2", null);
    assertThat(george.getWidth(), is(1.0));
    assertThat(george.get("width"), is("1"));
   
    assertThat(george.getHeight(), is(1.0));
    assertThat(george.get("height"), is("1"));
  }

  /**
   * Tests for quest.
   */
  @Test
  public void testQuest() {
    Player player = PlayerTestHelper.createPlayer("questTestPlayer");
    player.setQuest("testquest", "start");
    assertThat(player.getQuest("testquest"), equalTo("start"));
    assertThat(player.getQuest("testquest", 0), equalTo("start"));
    assertThat(player.getQuest("testquest", 1), equalTo(""));

    player.setQuest("testquest", 0, "cont");
    assertThat(player.getQuest("testquest"), equalTo("cont"));
    assertThat(player.getQuest("testquest", 0), equalTo("cont"));
    assertThat(player.getQuest("testquest", 1), equalTo(""));

    player.setQuest("testquest", 1, "end");
    assertThat(player.getQuest("testquest"), equalTo("cont;end"));
    assertThat(player.getQuest("testquest", 0), equalTo("cont"));
    assertThat(player.getQuest("testquest", 1), equalTo("end"));
    assertThat(player.getQuest("testquest", 2), equalTo(""));

    player.setQuest("testquest", 0, "first");
    assertThat(player.getQuest("testquest"), equalTo("first;end"));
    assertThat(player.getQuest("testquest", 0), equalTo("first"));
    assertThat(player.getQuest("testquest", 1), equalTo("end"));
    assertThat(player.getQuest("testquest", 2), equalTo(""));

    player.setQuest("testquest", 1, "second");
    assertThat(player.getQuest("testquest"), equalTo("first;second"));
    assertThat(player.getQuest("testquest", 0), equalTo("first"));
    assertThat(player.getQuest("testquest", 1), equalTo("second"));
    assertThat(player.getQuest("testquest", 2), equalTo(""));

    player.setQuest("testquest2", 1, "second");
    assertThat(player.getQuest("testquest2"), equalTo(";second"));
    assertThat(player.getQuest("testquest2", 0), equalTo(""));
    assertThat(player.getQuest("testquest2", 1), equalTo("second"));
    assertThat(player.getQuest("testquest2", 2), equalTo(""));

    assertThat(player.getQuest("testquest3"), nullValue());
    assertThat(player.getQuest("testquest3", 0), nullValue());
    assertThat(player.getQuest("testquest3", 1), nullValue());
    assertThat(player.getQuest("testquest3", 2), nullValue());

  }
 
  /**
   * Test that the damage done by a player is of right type.
   */
  @Test
  public void testGetDamageType() {
    Player player = PlayerTestHelper.createPlayer("don Quijote");
    assertThat("Default damage type", player.getDamageType(), is(Nature.CUT));
    Item item = new Item("torch", "junk", "subclass",
        new HashMap<String, String>());
    player.equip("rhand", item);
    for (Nature type : Nature.values()) {
      item.setDamageType(type);
      assertThat("Non weapon items should not change the damage type", player.getDamageType(), is(Nature.CUT));
    }
    // turn the item in to a weapon
    item.put("class", "club");
    for (Nature type : Nature.values()) {
      item.setDamageType(type);
      assertThat("Damage type should be got from the weapon", player.getDamageType(), is(type));
    }
  }
 
  /**
   * Test that players susceptibility is calculated correctly
   */
  @Test
  public void testGetSusceptibility() {
    Player player = PlayerTestHelper.createPlayer("test dummy");
    for (Nature type : Nature.values()) {
      assertThat("Default susceptibility", player.getSusceptibility(type), closeTo(1.0, 0.00001));
    }
   
    Item armor = new Item("rainbow armor", "armor", "subclass",
        new HashMap<String, String>());
    player.equip("armor", armor);
    HashMap<Nature, Double> armorMap = new HashMap<Nature, Double>();
    armor.setSusceptibilities(armorMap);
   
    for (Nature type : Nature.values()) {
      armorMap.put(type, 0.42);
      for (Nature type2 : Nature.values()) {
        if (type == type2) {
          assertThat(player.getSusceptibility(type2), closeTo(0.42, 0.00001));
        } else {
          assertThat(player.getSusceptibility(type2), closeTo(1.0, 0.00001));
        }
      }
      armorMap.remove(type);
    }
   
    Item legs = new Item("rainbow legs", "legs", "subclass",
        new HashMap<String, String>());
    player.equip("legs", legs);
    HashMap<Nature, Double> legsMap = new HashMap<Nature, Double>();
    legs.setSusceptibilities(legsMap);
    legsMap.put(Nature.ICE, 0.5);
   
    for (Nature type : Nature.values()) {
      armorMap.put(type, 0.42);
      for (Nature type2 : Nature.values()) {
        double expected;
        double ice = 1.0;
        if (type2 == Nature.ICE) {
          // Ice effect if we are checking ice resistance
          ice = 0.5;
        }
        if (type == type2) {
          // checking the type we gave resistance 0.42
          expected = ice * 0.42;
        } else {
          // only the ice effect, if any
          expected = ice;
        }
   
        assertThat("Susceptibility to " + type2, player.getSusceptibility(type2), closeTo(expected, 0.00001));
      }
      armorMap.remove(type);
    }
  }
}
TOP

Related Classes of games.stendhal.server.entity.player.PlayerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.