Example #1
0
 def assertMove(self, x, y, orientation, direction, expX, expY):
     self.p.setPosition(c.Coordinate(x, y))
     self.p.setMovementDirection(direction)
     self.p.setOrientation(orientation)
     expectedPos = c.Coordinate(expX, expY)
     self.p.move()
     self.assertEqual(expectedPos, self.p.getPosition())
Example #2
0
	def testStep_setsFinishedStateToTrueWhenNextPosIsFirstCollisionPos(self):
		setupFakes(self, ori = self.b.ORIENTATION_RIGHT, collision = False, direction = self.b.DIRECTION_FOREWARD)
		b = theseusBrain.TheseusBrain(self.inputs, self.outputs)
		b.mObj.expandMap(6, 6, True, True)
		b.firstCollision = c.Coordinate(3, 4)
		b.pos = c.Coordinate(2, 4)
		b.step()
		self.assertEqual(True, b.finished)
Example #3
0
 def setUp(self):
     self.brainClass = dullBrain.DullBrain
     self.mapFile = "maps/test-room1-box.txt"
     self.mObj = gameMap.GameMap()
     self.mObj.loadMapFile(self.mapFile)
     self.pos = c.Coordinate(3, 3)
     self.p = player.Player(self.brainClass, self.mObj, self.pos)
Example #4
0
 def testGetNextPosition_raisesExceptionWhenCalledWithNoneValueAsDirection(
         self):
     e = baseBrain.ArgumentIsNoneException
     msg = "Direction can't be None!"
     with self.assertRaises(e) as ex:
         self.b.getNextPosition(c.Coordinate(1, 1), 3, None)
     self.assertEqual(msg, ex.exception.message)
Example #5
0
	def testStep_setsPosToNextPositionValue(self):
		global getNextPositionValue
		getNextPositionValue = c.Coordinate(66, 88)
		self.b.getNextPosition = fakeGetNextPosition
		self.inputs["getOrientation"] = fakeGetOrientation
		self.b.step()
		self.assertEqual(getNextPositionValue, self.b._getPosition())
Example #6
0
 def getNonCollisionFields(self):
     fields = []
     for y in range(1, len(self.mArr) + 1):
         for x in range(1, len(self.mArr[y - 1]) + 1):
             if self.getLocation(x, y) == self.COLLISION_FIELD_VALUE:
                 continue
             fields.append(c.Coordinate(x, y))
     return fields
Example #7
0
 def testInit_startPosition_raisesExceptionWhenStartPositonIsNotANonCollisionField(
         self):
     with self.assertRaises(Exception) as ex:
         s1 = sim.Sim(self.gameMapFile, self.brainClass,
                      sim.Sim.DEFAULT_TIMEOUT, 0, False, c.Coordinate(2, 1))
     self.assertEqual(
         "startPosition is not a non-collision field (in this map)!",
         ex.exception.message)
Example #8
0
	def testStep_translatesFirstCollisionPosWhenPrependingVertically(self):
		global getOrientationValue
		global isCollisionValue
		setupFakes(self, ori = self.b.ORIENTATION_RIGHT, collision = True, direction = self.b.DIRECTION_FOREWARD)
		b = theseusBrain.TheseusBrain(self.inputs, self.outputs)
		b.step()
		getOrientationValue = setOrientationValue
		isCollisionValue = False
		b.step()
		getOrientationValue = setOrientationValue
		isCollisionValue = False
		b.step()
		self.assertEqual(c.Coordinate(1, 3), b._getFirstCollisionPos())
Example #9
0
def positionStrToValue(positionStr):
    if positionStr in slCls.RAND_STRINGS:
        position = None
    elif len(positionStr.split(",")) == 2:
        xyArr = positionStr.split(",")
        # TODO Move string to coordinate parsing into Coordinate class
        x = int(xyArr[0])
        y = int(xyArr[1])
        position = coord.Coordinate(x, y)
        # TODO might check if coordinate is within game map (requires creating a game map obj)
    else:
        sys.stderr.write("ERROR: Failed to parse coordinate \"%s\"!\n" %
                         positionStr)
        sys.exit(1)
    return position
Example #10
0
    def testDrawPlayerMap_drawsGameMapWithPlayerPositionAndOrientation(self):
        global playerGetMapValue
        setLoc = gameMap.GameMap.setLocationInArray
        ori = self.s.player.getOrientation()
        playerSymbol = gameMap.GameMap.PLAYER_POSITION_VALUE_ARR
        pos = c.Coordinate(2, 2)
        simMapObj = self.s.getSimMap()
        simMapArray = simMapObj.getMapArray()
        setLoc(simMapArray, pos.y, pos.x, playerSymbol[ori])
        playerGetMapValue = gameMap.GameMap()
        playerGetMapValue.mArr = simMapArray
        txtMap = gameMap.GameMap.arrayToText(simMapArray)

        self.s.player.getPlayerMap = fakePlayerGetMap
        self.assertEqual(txtMap, self.s.drawPlayerMap())
Example #11
0
 def testGetNonCollisionFields_forLShapeMap(self):
     self.maxDiff = None
     mObj = gameMap.GameMap()
     mObj.loadMapFile("maps/test-room2-l-shape.txt")
     fields = []
     mapArray = mObj.getMapArray()
     maxY = mObj.getHeight()
     for y in range(1, maxY + 1):
         if y == 1 or y == maxY:
             continue
         maxX = len(mapArray[y - 1])
         for x in range(1, maxX + 1):
             if x == 1 or x == maxX:
                 continue
             # verify that the map location is really a non-collision field
             if mObj.getLocation(x, y) == 1:
                 continue
             fields.append(c.Coordinate(x, y))
     self.assertEqual(fields, mObj.getNonCollisionFields())
Example #12
0
 def testGetNonCollisionFields_forBoxMap(self):
     mObj = gameMap.GameMap()
     mObj.loadMapFile("maps/test-room1-box.txt")
     # construct the array of non-collision fields (that matches test-room1-box.txt)
     # calculate all coordinates while skipping all collision fields (result is all non-collision fields)
     # - skip line with y=1 completely
     # - skip line with y=7 comletely
     # - subtract first and last x coordinate in every line in between line y=1 and y=7
     fields = []
     mapArray = mObj.getMapArray()
     maxY = mObj.getHeight()
     for y in range(1, maxY + 1):
         if y == 1 or y == maxY:
             continue
         maxX = len(mapArray[y - 1])
         for x in range(1, maxX + 1):
             if x == 1 or x == maxX:
                 continue
             # verify that the map location is really a non-collision field
             if mObj.getLocation(x, y) == 1:
                 continue
             fields.append(c.Coordinate(x, y))
     self.assertEqual(fields, mObj.getNonCollisionFields())
Example #13
0
	def testStep_storesFirstCollision(self):
		setupFakes(self, ori = self.b.ORIENTATION_UP, collision = True, direction = self.b.DIRECTION_FOREWARD)
		b = theseusBrain.TheseusBrain(self.inputs, self.outputs)
		b.step()
		self.assertEqual(c.Coordinate(1, 1), b._getFirstCollisionPos())
Example #14
0
	def testStep_translatesStartPositionWhenPrependingBrainMapHorizontally(self):
		setupFakes(self, ori = self.b.ORIENTATION_LEFT, collision = True, direction = self.b.DIRECTION_FOREWARD)
		b = theseusBrain.TheseusBrain(self.inputs, self.outputs)
		b.step()
		self.assertEqual(c.Coordinate(2, 1), b._getStartPosition())
Example #15
0
 def testInit_startPosition_isUserSpecified(self):
     s1 = sim.Sim(self.gameMapFile, self.brainClass,
                  sim.Sim.DEFAULT_TIMEOUT, 0, False, c.Coordinate(2, 2))
     self.assertEqual(c.Coordinate(2, 2), s1.getStartPosition())
Example #16
0
	def __init__(self, inputs, outputs):
		
		self.inputs = None
		self.outputs = None
		
		y = lambda element: element.startswith("is") and element.endswith("Collision")

		arg = "inputs"
		if not isinstance(inputs, dict):
			raise NotADictException(arg)
		arg = "outputs"
		if not isinstance(outputs, dict):
			raise NotADictException(arg)
		arg = "inputs"
		if len(inputs) == 0:
			raise IsEmptyException(arg)
		arg = "outputs"
		if len(outputs) == 0:
			raise IsEmptyException(arg)


	# test keys in inputs argument exists

		arg = "inputs"
		field = "isCollision"
		if not self._isInList(inputs.keys(), y):
			raise IsNotAKeyException("%s: %s" % (arg, field))
		field = "getOrientation"
		if not field in inputs.keys():
			raise IsNotAKeyException("%s: %s" % (arg, field))
		field = "getMovementDirection"
		if not field in inputs.keys():
			raise IsNotAKeyException("%s: %s" % (arg, field))


	# test keys in outputs argument exist

		arg = "outputs"
		field = "setOrientation"
		if not field in outputs.keys():
			raise IsNotAKeyException("%s: %s" % (arg, field))
		field = "setMovementDirection"
		if not field in outputs.keys():
			raise IsNotAKeyException("%s: %s" % (arg, field))
		field = "move"
		if not field in outputs.keys():
			raise IsNotAKeyException("%s: %s" % (arg, field))


	# test values of inputs argument dict are callable

		arg = "inputs"
		field = "isCollision"
		if not self._isCallable(inputs, y):
			raise NotAFunctionException("%s: %s" % (arg, field))
		field = "getOrientation"
		if not callable(inputs[field]):
			raise NotAFunctionException("%s: %s" % (arg, field))
		field = "getMovementDirection"
		if not callable(inputs[field]):
			raise NotAFunctionException("%s: %s" % (arg, field))


	# test values of outputs argument dict are callable

		arg = "outputs"
		field = "setOrientation"
		if not callable(outputs[field]):
			raise NotAFunctionException("%s: %s" % (arg, field))
		field = "setMovementDirection"
		if not callable(outputs[field]):
			raise NotAFunctionException("%s: %s" % (arg, field))
		field = "move"
		if not callable(outputs[field]):
			raise NotAFunctionException("%s: %s" % (arg, field))
			
		self.inputs = inputs
		self.outputs = outputs
		
		self.mObj = gameMap.GameMap()
		self.mObj.mArr.append([0])
		
		self.startPos = c.Coordinate(1, 1)
		
		self.pos = c.Coordinate(1, 1)
		self.lastPos = None
		
		self.firstCollision = None
		
		self.stepLog = []
		
		self.finished = False
Example #17
0
 def testTranslate_translatesXAccordingToFirstArgument(self):
     self.c.x = 2
     self.c.y = 5
     self.c.translate(1, 0)
     self.assertEqual(coord.Coordinate(3, 5), self.c)
Example #18
0
 def testFromStr_parsesStringAndSetsXY(self):
     self.c.fromStr("<23, 42>")
     self.assertEqual(coord.Coordinate(23, 42), self.c)
Example #19
0
 def testCompare_returnsTrueWhenDataIsEqual(self):
     self.c.x = 111
     self.c.y = 222
     c2 = coord.Coordinate(111, 222)
     self.assertEqual(c2, self.c)
Example #20
0
 def setUp(self):
     self.c = coord.Coordinate()
Example #21
0
 def testGetNextPosition_doesNotChangePosArg(self):
     pos = c.Coordinate(7, 7)
     self.b.getNextPosition(pos, 1, 1)
     self.assertEqual(c.Coordinate(7, 7), pos)
Example #22
0
 def testInit_startOrientation_isUserSpecified(self):
     s1 = sim.Sim(self.gameMapFile,
                  self.brainClass, sim.Sim.DEFAULT_TIMEOUT, 0, False,
                  c.Coordinate(2, 2), bb.BaseBrain.ORIENTATION_LEFT)
     self.assertEqual(3, s1.getStartOrientation())
Example #23
0
 def testTranslate_translatesYAccordingToSecondArgument(self):
     self.c.x = 2
     self.c.y = 5
     self.c.translate(0, 1)
     self.assertEqual(coord.Coordinate(2, 6), self.c)
Example #24
0
 def testInit_startOrientation_raisesExceptionWhenValueIsInvalid(self):
     with self.assertRaises(Exception) as ex:
         s1 = sim.Sim(self.gameMapFile,
                      self.brainClass, sim.Sim.DEFAULT_TIMEOUT, 0, False,
                      c.Coordinate(2, 2), 19)
     self.assertEqual("startOrientation is invalid!", ex.exception.message)
Example #25
0
 def testTranslate_translatesXAccordingToFirstArgumentSubtraction(self):
     self.c.x = 4
     self.c.y = 5
     self.c.translate(-2, 0)
     self.assertEqual(coord.Coordinate(2, 5), self.c)
Example #26
0
	def testStep_translatesStepLogWhenPrependingMapOnOrientationLeft(self):
		setupFakes(self, ori = self.b.ORIENTATION_LEFT, collision = True, direction = self.b.DIRECTION_FOREWARD)
		expected = {"pos": c.Coordinate(2, 1), "ori": getOrientationValue, "direction": getMovementDirectionValue}
		self.b.step()
		self.assertEqual(expected, self.b.stepLog[0])
Example #27
0
	def testStep_appendsStepLogWithCurrentPosOriAndDirection(self):
		setupFakes(self, ori = self.b.ORIENTATION_UP, collision = False, direction = self.b.DIRECTION_FOREWARD)
		expected = {"pos": c.Coordinate(1, 1), "ori": getOrientationValue, "direction": getMovementDirectionValue}
		self.b.step()
		self.assertEqual(expected, self.b._getStepLog()[0])
Example #28
0
 def testInit_xIsUserSpecified(self):
     c = coord.Coordinate(9, None)
     self.assertEqual(9, c.x)
Example #29
0
	def testGetLastPosition_returnsPreviousPositionAfterMoving(self):
		setupFakes(self, ori = self.b.ORIENTATION_UP, collision = False, direction = self.b.DIRECTION_FOREWARD)
		self.b.step()
 		self.assertEqual(c.Coordinate(1, 1), self.b._getLastPosition())
Example #30
0
 def testInit_yIsUserSpecified(self):
     c = coord.Coordinate(None, 32)
     self.assertEqual(32, c.y)