예제 #1
0
def create_lumberjack_production_session():
    """Create a saved game with a producing production and then load it."""
    session, player = new_session()
    settlement, island = settle(session)

    for x in [29, 30, 31, 32]:
        Build(
            BUILDINGS.TREE,
            x,
            29,
            island,
            settlement=settlement,
        )(player)
    building = Build(BUILDINGS.LUMBERJACK,
                     30,
                     30,
                     island,
                     settlement=settlement)(player)
    production = building.get_component(Producer).get_productions()[0]

    # wait for the lumberjack to start producing
    while True:
        if production.get_state() is PRODUCTION.STATES.producing:
            break
        session.run(ticks=1)

    fd1, filename1 = tempfile.mkstemp()
    os.close(fd1)
    assert session.save(savegamename=filename1)
    session.end(keep_map=True)

    # load the game
    session = load_session(filename1)
    return session
예제 #2
0
def test_load_inactive_production():
	"""
	create a savegame with a inactive production, load it
	"""
	session, player = new_session()
	settlement, island = settle(session)

	lj = Build(BUILDINGS.LUMBERJACK, 30, 30, island, settlement=settlement)(player)
	# Set lumberjack to inactive
	lj.get_component(Producer).set_active(active = False)
	worldid = lj.worldid

	session.run(seconds=1)

	fd, filename = tempfile.mkstemp()
	os.close(fd)

	assert session.save(savegamename=filename)

	session.end(keep_map=True)

	# Load game
	session = load_session(filename)
	loadedlj = WorldObject.get_object_by_id(worldid)

	# Make sure it really is not active
	producer = loadedlj.get_component(Producer)
	assert not producer.is_active()

	# Trigger bug #1359
	ToggleActive(producer).execute(session)

	session.end()
예제 #3
0
def test_load_inactive_production():
    """
	create a savegame with a inactive production, load it
	"""
    session, player = new_session()
    settlement, island = settle(session)

    lj = Build(BUILDINGS.LUMBERJACK, 30, 30, island,
               settlement=settlement)(player)
    # Set lumberjack to inactive
    lj.get_component(Producer).set_active(active=False)
    worldid = lj.worldid

    session.run(seconds=1)

    fd, filename = tempfile.mkstemp()
    os.close(fd)

    assert session.save(savegamename=filename)

    session.end(keep_map=True)

    # Load game
    session = load_session(filename)
    loadedlj = WorldObject.get_object_by_id(worldid)

    # Make sure it really is not active
    producer = loadedlj.get_component(Producer)
    assert not producer.is_active()

    # Trigger bug #1359
    ToggleActive(producer).execute(session)

    session.end()
	def saveload(session):
		fd, filename = tempfile.mkstemp()
		os.close(fd)
		assert session.save(savegamename=filename)
		session.end(keep_map=True)
		session =  load_session(filename)
		Scheduler().before_ticking() # late init finish (not ticking already)
		return session
예제 #5
0
def test_ticket_1427():
	"""Boatbuilder production progress should be saved properly"""

	session, player = new_session()
	settlement, island = settle(session)

	boat_builder = Build(BUILDINGS.BOATBUILDER_CLASS, 35, 20, island, settlement=settlement)(player)
	worldid = boat_builder.worldid

	# Make sure no boards are available
	settlement.get_component(StorageComponent).inventory.alter(RES.BOARDS_ID, -1000)

	bb_storage = boat_builder.get_component(StorageComponent)

	# Add production to use resources
	bb_producer =  boat_builder.get_component(Producer)
	bb_producer.add_production_by_id(PRODUCTIONLINES.HUKER)
	production = bb_producer._productions[PRODUCTIONLINES.HUKER]

	assert production.progress == 0.0

	bb_storage.inventory.alter(RES.TEXTILE_ID, 10)
	bb_storage.inventory.alter(RES.BOARDS_ID, 6)

	production_line = production._prod_line

	# Make sure the boatbuilder consumes everything in his inventory
	session.run(seconds=10)

	# Check if correctly consumed wood
	assert production_line.consumed_res[RES.BOARDS_ID] == -2

	# Save all production process for later
	expected_consumed_res = production_line.consumed_res
	expected_produced_res = production_line.produced_res
	expected_production = production_line.production
	expected_progress = production.progress

	# Make sure the producer used the boards
	assert bb_storage.inventory[RES.BOARDS_ID] == 0

	fd, filename = tempfile.mkstemp()
	os.close(fd)
	assert session.save(savegamename=filename)
	session.end(keep_map=True)

	# Load game
	session = load_session(filename)
	loadedbb = WorldObject.get_object_by_id(worldid)

	production_loaded = loadedbb.get_component(Producer)._productions[PRODUCTIONLINES.HUKER]
	production_line_loaded = production_loaded._prod_line

	# Make sure everything is loaded correctly
	assert expected_consumed_res == production_line_loaded.consumed_res
	assert expected_produced_res == production_line_loaded.produced_res
	assert expected_production == production_line_loaded.production
	assert expected_progress == production_loaded.progress
예제 #6
0
def saveload(session):
    """Use like this:
	session = saveload(session)
	"""
    fd, filename = tempfile.mkstemp()
    os.close(fd)
    assert session.save(savegamename=filename)
    session.end(keep_map=True)
    session = load_session(filename)
    Scheduler().before_ticking()  # late init finish (not ticking already)
    return session
def test_combat_save_load():
    """
	create a savegame with combat units and actual combat, then save/load it
	"""

    session, player = new_session()
    (p0, s0), (p1, s1) = setup_combat(session, UNITS.FRIGATE)

    s0_worldid, s1_worldid = s0.worldid, s1.worldid

    session.run(seconds=1)

    # saveload
    fd, filename = tempfile.mkstemp()
    os.close(fd)
    assert session.save(savegamename=filename)
    session.end(keep_map=True)
    session = load_session(filename)

    s0 = WorldObject.get_object_by_id(s0_worldid)
    s1 = WorldObject.get_object_by_id(s1_worldid)

    # fight

    AddEnemyPair(p0, p1).execute(session)

    Attack(s0, s1).execute(session)
    Attack(s1, s0).execute(session)

    session.run(seconds=20)

    # saveload
    fd, filename = tempfile.mkstemp()
    os.close(fd)
    assert session.save(savegamename=filename)
    session.end(keep_map=True)
    session = load_session(filename)

    assert one_dead(s0_worldid, s1_worldid)

    session.end()
예제 #8
0
def test_combat_save_load():
	"""
	create a savegame with combat units and actual combat, then save/load it
	"""

	session, player = new_session()
	(p0, s0), (p1, s1) = setup_combat(session, UNITS.FRIGATE)

	s0_worldid, s1_worldid = s0.worldid, s1.worldid

	session.run(seconds=1)

	# saveload
	fd, filename = tempfile.mkstemp()
	os.close(fd)
	assert session.save(savegamename=filename)
	session.end(keep_map=True)
	session = load_session(filename)

	s0 = WorldObject.get_object_by_id(s0_worldid)
	s1 = WorldObject.get_object_by_id(s1_worldid)

	# fight

	AddEnemyPair(p0, p1).execute(session)

	Attack(s0, s1).execute(session)
	Attack(s1, s0).execute(session)

	session.run(seconds=20)

	# saveload
	fd, filename = tempfile.mkstemp()
	os.close(fd)
	assert session.save(savegamename=filename)
	session.end(keep_map=True)
	session = load_session(filename)

	assert one_dead(s0_worldid, s1_worldid)

	session.end()
예제 #9
0
def test_savegame_upgrade():
	"""Loads an old savegame and keeps it running for a while"""
	fd, filename = tempfile.mkstemp()
	os.close(fd)

	path = os.path.join(TEST_FIXTURES_DIR, 'large.sqlite.bz2')
	compressed_data = open(path, "r").read()
	data = bz2.decompress( compressed_data )
	f = open(filename, "w")
	f.write(data)
	f.close()

	# check if loading and running fails
	session = load_session(filename)
	session.run(seconds=30)
예제 #10
0
def test_savegame_upgrade():
    """Loads an old savegame and keeps it running for a while"""
    fd, filename = tempfile.mkstemp()
    os.close(fd)

    path = os.path.join(TEST_FIXTURES_DIR, 'large.sqlite.bz2')
    compressed_data = open(path, "rb").read()
    data = bz2.decompress(compressed_data)
    f = open(filename, "wb")
    f.write(data)
    f.close()

    # check if loading and running fails
    session = load_session(filename)
    session.run(seconds=30)
    session.end(keep_map=True)
예제 #11
0
def create_lumberjack_production_session():
	"""Create a saved game with a producing production and then load it."""
	session, player = new_session()
	settlement, island = settle(session)

	for x in [29, 30, 31, 32]:
		Build(BUILDINGS.TREE, x, 29, island, settlement=settlement,)(player)
	building = Build(BUILDINGS.LUMBERJACK, 30, 30, island, settlement=settlement)(player)
	production = building.get_component(Producer).get_productions()[0]

	# wait for the lumberjack to start producing
	while True:
		if production.get_state() is PRODUCTION.STATES.producing:
			break
		session.run(ticks=1)

	fd1, filename1 = tempfile.mkstemp()
	os.close(fd1)
	assert session.save(savegamename=filename1)
	session.end(keep_map=True)

	# load the game
	session = load_session(filename1)
	return session
예제 #12
0
def test_ticket_1427():
	"""Boatbuilder production progress should be saved properly"""

	session, player = new_session()
	settlement, island = settle(session)

	boat_builder = Build(BUILDINGS.BOAT_BUILDER, 35, 20, island, settlement=settlement)(player)
	worldid = boat_builder.worldid

	# Make sure no boards are available
	settlement.get_component(StorageComponent).inventory.alter(RES.BOARDS, -1000)

	bb_storage = boat_builder.get_component(StorageComponent)

	# Add production to use resources
	bb_producer = boat_builder.get_component(Producer)
	bb_producer.add_production_by_id(PRODUCTIONLINES.HUKER)
	production = bb_producer._productions[PRODUCTIONLINES.HUKER]

	assert production.progress == 0.0

	bb_storage.inventory.alter(RES.TEXTILE, 10)
	bb_storage.inventory.alter(RES.BOARDS, 6)

	production_line = production._prod_line

	# Make sure the boatbuilder consumes everything in its inventory
	session.run(seconds=10)

	# Check if correctly consumed wood
	assert production_line.consumed_res[RES.BOARDS] == -2

	# Save all production process for later
	expected_consumed_res = production_line.consumed_res
	expected_produced_res = production_line.produced_res
	expected_production = production_line.production
	expected_progress = production.progress

	# Make sure the producer used the boards
	assert bb_storage.inventory[RES.BOARDS] == 0

	fd, filename = tempfile.mkstemp()
	os.close(fd)
	assert session.save(savegamename=filename)
	session.end(keep_map=True)

	# Load game
	session = load_session(filename)
	loadedbb = WorldObject.get_object_by_id(worldid)

	production_loaded = loadedbb.get_component(Producer)._productions[PRODUCTIONLINES.HUKER]
	production_line_loaded = production_loaded._prod_line

	# Make sure everything is loaded correctly
	assert expected_consumed_res == production_line_loaded.consumed_res
	assert expected_produced_res == production_line_loaded.produced_res
	assert expected_production == production_line_loaded.production
	assert expected_progress == production_loaded.progress

	# if you don't let the session run for a bit then collectors won't be fully initialized and can't be killed => another test will fail in session.end()
	session.run(seconds=1)
	session.end()