readme и проверка склонений

This commit is contained in:
Alexander Yakovlev 2021-01-14 13:57:59 +07:00
parent 5c4f27936b
commit 82426731c6
Signed by: oreolek
GPG Key ID: 1CDC4B7820C93BD3
3 changed files with 26 additions and 1 deletions

17
README.md Normal file
View File

@ -0,0 +1,17 @@
## Юниттесты для INSTEAD
Здесь я пытаюсь сделать юнит-тест простой игры. Чтобы его запустить, откройте папку `unittest` как игру в SDL-INSTEAD.
Тестовая игра содержит простой пазл "ключ-замок", но приближенный к реальным паззлам:
##### Несколько вариантов решений
К замку должно подходить два разных ключа двумя разными способами. (В идеале каждый из этих ключей должен использоваться ещё где-то, но это уже усложнение.)
Это же не даёт использовать свойство `with_key`.
##### Замок нельзя закрыть
Замок нельзя закрыть, после того как вы его открыли. Игрок не сможет случайно вернуть загадку после того, как её решил.
##### Единственный способ автотестов - это юнит-тест
Два пункта выше делают стандартный автоскрипт инстеда неприменимым: он может проверить только одно решение за раз и не сможет закрыть замок, чтобы попытаться по-другому. Нужно сооружать юнит-тесты.

View File

@ -35,7 +35,8 @@ obj {
description = 'Карандаш, которым нельзя открывать замки.';
found_in = 'main';
}
-- действие "писать карандашом на бумажке" не входит в тестируемые
-- и требует нового глагола, но оно было бы в реальной игре
obj {
-"замок/мр";
@ -45,6 +46,7 @@ obj {
-- замок можно открыть двумя вещами, поэтому with_key не уместен
-- вместо этого надо перехватывать before_Unlock
-- кроме того, его хочется сразу открывать, потому что зачем ещё мы его отпираем
before_Lock = 'Замок полезнее открытым.';
before_Unlock = function(self, what)
if (what == nil) then
return false

View File

@ -40,6 +40,12 @@ game.timer = function(s)
expect(lock:has('locked')).to.be(true)
end)
it('склонения', function()
expect(mp.fmt('{#me}')).to.be('ты')
expect(mp.fmt('{#me/вн}')).to.be('тебя')
expect(_('lock'):noun('дт')).to.be('замку')
end);
it('открывание', function()
std.call(mp, 'input:text', 'открыть замок')
local lock = _('lock');