mirror of
https://github.com/worldforge/cyphesis
synced 2026-08-13 12:26:04 -04:00
88 lines
3.8 KiB
Python
88 lines
3.8 KiB
Python
# This file is distributed under the terms of the GNU General Public license.
|
|
# Copyright (C) 2009 Alistair Riddoch
|
|
|
|
from atlas import *
|
|
from cyphesis.editor import create_editor
|
|
|
|
ALL_CLASSES = ["acorn", "annelid", "apple", "appletree", "region", "arm", "armory", "arrow", "axe", "barrel", "birch", "block_house", "blueprint", "board", "boat", "boots", "bottle", "boulder",
|
|
"boundary", "bow", "bowl", "bucksaw", "rabbit", "butcher_house", "campfire", "carrot", "chicken", "cleaver", "cloak", "coin", "construction", "cow", "crab", "deed", "deer", "dog",
|
|
"castle_don_jon", "door", "feature", "fern", "fir", "fircone", "fire", "fish", "fishingrod", "bobber", "flower", "forest", "gallows", "garment", "gateway", "goblin", "grass",
|
|
"gravestone", "hall", "ham", "hammer", "hat", "hook", "horse", "house", "jetty", "keep", "knife", "larva", "leaf", "loaf", "longtable", "lumber", "lych", "maggot", "marshall",
|
|
"material", "mausoleum", "mercenary", "merchant", "mobile", "mushroom", "oak", "ocean", "path", "pelvis", "pickaxe", "pig", "pile", "ploughed_field", "pole", "poplar", "ribcage",
|
|
"rope", "scythe", "seed", "settler", "shin", "shirt", "shovel", "sieve", "skeleton", "skull", "spider", "squirrel", "stake", "stall", "statue", "stone", "stonehouse", "structure",
|
|
"sty", "sword", "tent", "theodolite", "thigh", "tinderbox", "torch", "tower", "tree", "pants", "trowel", "tuber", "turnip", "twobyfour", "venison", "wall", "weather", "willow", "wolf",
|
|
"wood"]
|
|
|
|
|
|
class RegressionTester:
|
|
def __init__(self, editor, sx=0, sy=0, width=64):
|
|
self.editor = editor
|
|
self.x = sx
|
|
self.y = sy
|
|
self.width = width
|
|
|
|
def get_pos(self):
|
|
"Get the next position on a spaced out grid"
|
|
pos = (self.x, self.y, 0)
|
|
self.x += 2
|
|
if self.x > self.width:
|
|
self.x = 0
|
|
self.y += 2
|
|
return pos
|
|
|
|
def create_all(self, types):
|
|
"Create an instance of every type given"
|
|
for type in types:
|
|
self.editor.make(type, pos=self.get_pos())
|
|
|
|
def create_character(self, type, pos):
|
|
"Create a character entity"
|
|
return self.editor.make(type, pos=pos)
|
|
|
|
def test_task(self, task, target, tool, op, avatar='settler'):
|
|
"Test activating a task using a tool on a target"
|
|
if type(avatar) == str:
|
|
c = self.create_character(avatar, self.get_pos())
|
|
else:
|
|
c = avatar
|
|
|
|
if type(tool) == str:
|
|
t = self.editor.make(tool, pos=(0, 0, 0), parent=c.id)
|
|
else:
|
|
t = tool
|
|
|
|
if type(target) == str:
|
|
o = self.editor.make(target, pos=self.get_pos())
|
|
else:
|
|
o = target
|
|
|
|
self.editor.avatar.send(Operation('wield', Entity(t.id), to=c))
|
|
self.editor.avatar.send(Operation('use', Operation(op, Entity(o.id)), to=c))
|
|
|
|
c = self.editor.look(c.id)
|
|
|
|
if not hasattr(c, 'tasks') or len(c.tasks) < 1:
|
|
raise AssertionError('Task \'%s\' failed to start' % task)
|
|
|
|
if c.tasks[0].name != task:
|
|
raise AssertionError('Task \'%s\' started instead of ' \
|
|
'expected \"%s\"' % (c.tasks[0].name, task))
|
|
|
|
|
|
def default(host='', account='', password='', **args):
|
|
m = create_editor(host, account, password)
|
|
|
|
world = m.look()
|
|
|
|
p = RegressionTester(m)
|
|
|
|
p.create_all(ALL_CLASSES)
|
|
|
|
# p.test_task('cultivate', 'acorn', 'trowel', 'sow')
|
|
p.test_task('delve', world, 'pickaxe', 'cut')
|
|
p.test_task('dig', world, 'shovel', 'cut')
|
|
# p.test_task(m, 'fishing', 'ocean', 'fishingrod', 'sow')
|
|
p.test_task('logging', 'oak', 'axe', 'cut')
|
|
p.test_task('raise', 'stake', 'pole', 'lever')
|
|
p.test_task('reap', world, 'scythe', 'cut')
|
|
p.test_task('ram', 'stake', 'hammer', 'strike')
|