/**
 *  Set of tests for `Command` class.
 *      Copyright 2023 Anton Tarasenko
 *------------------------------------------------------------------------------
 * This file is part of Acedia.
 *
 * Acedia is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3 of the License, or
 * (at your option) any later version.
 *
 * Acedia is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Acedia.  If not, see <https://www.gnu.org/licenses/>.
 */
class TEST_VoiceMessages extends TestCase
    abstract
    dependsOn(ChatApi);

private static function ChatApi.NativeVoiceMessage Make(name type, int index) {
    local ChatApi.NativeVoiceMessage result;

    result.type = type;
    result.index = index;
    return result;
}

private static function TestEquality(name type, int index, ChatApi.BuiltInVoiceMessage builtIn) {
    local ChatApi.NativeVoiceMessage nativeMessage;

    nativeMessage.type = type;
    nativeMessage.index = index;

    Issue("Native voice messages are incorrectly converted into `BuiltInVoiceMessage`.");
    TEST_ExpectTrue(__().chat._nativeVoiceMessageIntoEnum(nativeMessage) == builtIn);

    Issue("`BuiltInVoiceMessage`s are incorrectly converted into native voice messages.");
    TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(builtIn).type == type);
    TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(builtIn).index == index);
}

protected static function TESTS() {
    Context("Testing internal conversion methods between voice messages.");
    Test_VoiceMessageConversion();
}
protected static function Test_VoiceMessageConversion() {
    local ChatApi.NativeVoiceMessage nothingMessage;

    nothingMessage.type = 'TRADER';
    nothingMessage.index = 5;

    TestEquality('SUPPORT', 2, BIVM_SupportAskForMoney);
    TestEquality('ACK', 0, BIVM_AckYes);
    TestEquality('ALERT', 5, BIVM_AlretFollowMe);
    TestEquality('DIRECTION', 2, BIVM_DirectionGoDownstairs);
    TestEquality('INSULT', 1, BIVM_InsultPlayers);
    TestEquality('TRADER', 2, BIVM_TraderShopOpen);
    TestEquality('TRADER', 4, BIVM_Trader30SecondsUntilShopCloses);
    TestEquality('TRADER', 6, BIVM_TraderShopClosed);
    TestEquality('TRADER', 7, BIVM_TraderCompliment);
    TestEquality('TRADER', 11, BIVM_TraderHurryUp2);
    TestEquality('AUTO', 0, BIVM_AutoWelding);
    TestEquality('AUTO', 16, BIVM_AutoSirenScream);
    TestEquality('AUTO', 24, BIVM_AutoEquipFireaxe);

    // Test unknown separately
    Issue("Native voice messages are incorrectly converted into `BuiltInVoiceMessage`.");
    TEST_ExpectTrue(__().chat._nativeVoiceMessageIntoEnum(nothingMessage) == BIVM_Unknown);

    Issue("`BuiltInVoiceMessage`s are incorrectly converted into native voice messages.");
    TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(BIVM_Unknown).type == '');
    TEST_ExpectTrue(__().chat._enumIntoNativeVoiceMessage(BIVM_Unknown).index == 0);
}
defaultproperties {
    caseName = "Voice messages"
    caseGroup = "ChatAPI"
}