# HG changeset patch # User Wuzzy # Date 1507123712 -7200 # Node ID 36a650c0a885ae4c3bced0069bad6f5a05d6e750 # Parent 2473b03629c8f544b667e13ca943c2e4a566497a Add test case to test if cake explodes in time when stuck in tight space See also: bug 194 diff -r 2473b03629c8 -r 36a650c0a885 tests/lua/stuckcake.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/lua/stuckcake.lua Wed Oct 04 15:28:32 2017 +0200 @@ -0,0 +1,118 @@ +--[[ Stuck Cake Test + +In this test, 2 hedgehogs are placed very close to each other, tightly +crammed between girders. The first hog (Cake Hog) launches a cake. Now +the test waits until the cake explodes due to time. + +The cake must not take too long or forever to explode. The test succeeds +if the cake explodes before CAKE_MAX_EXPLOSION_TIME ticks (rough estimate) +after the cake spawned and fails otherwise. + +This test case has been written in response to bug 194. + +]] + +-- Cake must explode before this many ticks for the test to succeed +local CAKE_MAX_EXPLOSION_TIME = 15000 + +-- Give up if cake is still running after this many ticks +local CAKE_GIVE_UP_TIME = 20000 + +local hhs = {} + +function onGameInit() + + ClearGameFlags() + EnableGameFlags(gfDisableWind, gfPerHogAmmo, gfOneClanMode, gfInvulnerable, gfSolidLand) + Map = "" + Seed = "{84f5e62e-6a12-4444-b53c-2bc62cfd9c62}" + Theme = "Cave" + MapGen = mgDrawn + MapFeatureSize = 12 + TemplateFilter = 3 + TemplateNumber = 0 + TurnTime = 9999000 + Explosives = 0 + MinesNum = 0 + CaseFreq = 0 + WaterRise = 0 + HealthDecrease = 0 + Ready = 0 + + ------ TEAM LIST ------ + + AddTeam("Test Team", 0xFFFF02, "Statue", "Tank", "Default", "cm_test") + + hhs[1] = AddHog("Cake Hog", 0, 100, "NoHat") + SetGearPosition(hhs[1], 771, 1344) + + hhs[2] = AddHog("Passive Hog", 0, 100, "NoHat") + SetGearPosition(hhs[2], 772, 1344) + HogTurnLeft(hhs[2], true) + +end + +function onAmmoStoreInit() + SetAmmo(amCake, 9, 0, 0, 0) + SetAmmo(amSkip, 9, 0, 0, 0) +end + +function onGameStart() + + PlaceSprite(784, 1361, sprAmGirder, 4, 0xFFFFFFFF, nil, nil, nil, lfNormal) + PlaceSprite(730, 1271, sprAmGirder, 6, 0xFFFFFFFF, nil, nil, nil, lfNormal) + PlaceSprite(753, 1270, sprAmGirder, 6, 0xFFFFFFFF, nil, nil, nil, lfNormal) + PlaceSprite(798, 1271, sprAmGirder, 6, 0xFFFFFFFF, nil, nil, nil, lfNormal) + PlaceSprite(777, 1243, sprAmGirder, 6, 0xFFFFFFFF, nil, nil, nil, lfNormal) + +end + +local cakeTestPhase = 0 +--[[ Test phases: + 0: Waiting for turn start + 1: Cake selected, waiting for attack + 2: Cake gear added + 3: Cake gead destroyed ]] + +function onNewTurn() + if cakeTestPhase == 0 then + SetWeapon(amCake) + cakeTestPhase = 1 + end +end + +local cakeTicks = 0 + +function onGearAdd(gear) + if GetGearType(gear) == gtCake then + cakeTestPhase = 2 + end +end + +function onGearDelete(gear) + if GetGearType(gear) == gtCake and cakeTestPhase == 2 then + WriteLnToConsole(string.format("TEST: The cake exploded after %d ticks.", cakeTicks)) + cakeTestPhase = 3 + if cakeTicks > CAKE_MAX_EXPLOSION_TIME then + WriteLnToConsole("TEST RESULT: Failed because cake took too long to explode.") + EndLuaTest(TEST_FAILED) + else + WriteLnToConsole("TEST RESULT: Succeeded because cake exploded in time.") + EndLuaTest(TEST_SUCCESSFUL) + end + + end +end + +function onGameTick() + if cakeTestPhase == 1 then + ParseCommand("+attack") + elseif cakeTestPhase == 2 then + cakeTicks = cakeTicks + 1 + if cakeTicks > CAKE_GIVE_UP_TIME then + WriteLnToConsole(string.format("TEST RESULT: Failed because the cake still didn't explode after %d ticks.", CAKE_GIVE_UP_TIME)) + cakeTestPhase = 3 + EndLuaTest(TEST_FAILED) + end + end +end