readme и проверка склонений
This commit is contained in:
parent
5c4f27936b
commit
82426731c6
17
README.md
Normal file
17
README.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
## Юниттесты для INSTEAD
|
||||||
|
|
||||||
|
Здесь я пытаюсь сделать юнит-тест простой игры. Чтобы его запустить, откройте папку `unittest` как игру в SDL-INSTEAD.
|
||||||
|
|
||||||
|
Тестовая игра содержит простой пазл "ключ-замок", но приближенный к реальным паззлам:
|
||||||
|
|
||||||
|
##### Несколько вариантов решений
|
||||||
|
К замку должно подходить два разных ключа двумя разными способами. (В идеале каждый из этих ключей должен использоваться ещё где-то, но это уже усложнение.)
|
||||||
|
|
||||||
|
Это же не даёт использовать свойство `with_key`.
|
||||||
|
|
||||||
|
##### Замок нельзя закрыть
|
||||||
|
Замок нельзя закрыть, после того как вы его открыли. Игрок не сможет случайно вернуть загадку после того, как её решил.
|
||||||
|
|
||||||
|
##### Единственный способ автотестов - это юнит-тест
|
||||||
|
|
||||||
|
Два пункта выше делают стандартный автоскрипт инстеда неприменимым: он может проверить только одно решение за раз и не сможет закрыть замок, чтобы попытаться по-другому. Нужно сооружать юнит-тесты.
|
|
@ -35,7 +35,8 @@ obj {
|
||||||
description = 'Карандаш, которым нельзя открывать замки.';
|
description = 'Карандаш, которым нельзя открывать замки.';
|
||||||
found_in = 'main';
|
found_in = 'main';
|
||||||
}
|
}
|
||||||
|
-- действие "писать карандашом на бумажке" не входит в тестируемые
|
||||||
|
-- и требует нового глагола, но оно было бы в реальной игре
|
||||||
|
|
||||||
obj {
|
obj {
|
||||||
-"замок/мр";
|
-"замок/мр";
|
||||||
|
@ -45,6 +46,7 @@ obj {
|
||||||
-- замок можно открыть двумя вещами, поэтому with_key не уместен
|
-- замок можно открыть двумя вещами, поэтому with_key не уместен
|
||||||
-- вместо этого надо перехватывать before_Unlock
|
-- вместо этого надо перехватывать before_Unlock
|
||||||
-- кроме того, его хочется сразу открывать, потому что зачем ещё мы его отпираем
|
-- кроме того, его хочется сразу открывать, потому что зачем ещё мы его отпираем
|
||||||
|
before_Lock = 'Замок полезнее открытым.';
|
||||||
before_Unlock = function(self, what)
|
before_Unlock = function(self, what)
|
||||||
if (what == nil) then
|
if (what == nil) then
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -40,6 +40,12 @@ game.timer = function(s)
|
||||||
expect(lock:has('locked')).to.be(true)
|
expect(lock:has('locked')).to.be(true)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('склонения', function()
|
||||||
|
expect(mp.fmt('{#me}')).to.be('ты')
|
||||||
|
expect(mp.fmt('{#me/вн}')).to.be('тебя')
|
||||||
|
expect(_('lock'):noun('дт')).to.be('замку')
|
||||||
|
end);
|
||||||
|
|
||||||
it('открывание', function()
|
it('открывание', function()
|
||||||
std.call(mp, 'input:text', 'открыть замок')
|
std.call(mp, 'input:text', 'открыть замок')
|
||||||
local lock = _('lock');
|
local lock = _('lock');
|
||||||
|
|
Loading…
Reference in a new issue