~aleteoryx/muditaos

c275480fa5447588b979052e04855cbd35263829 — Kuba 5 years ago ab28f10
[EGD-4990] Add UT for at+ccfc parser

It adds Unit tests for at+ccfc command parser.
2 files changed, 148 insertions(+), 0 deletions(-)

M module-cellular/at/response.cpp
M module-cellular/test/unittest_response.cpp
M module-cellular/at/response.cpp => module-cellular/at/response.cpp +11 -0
@@ 447,6 447,11 @@ namespace at
                        return true;
                    }

                    if (el.find(toRemove) == std::string::npos) {
                        parsed.clear();
                        return false;
                    }

                    utils::findAndReplaceAll(el, toRemove, emptyString);
                    auto tokens = utils::split(el, ",");



@@ 459,6 464,7 @@ namespace at

                        if (!utils::toNumeric(tokens[Tokens::Status], statusToken) ||
                            !utils::toNumeric(tokens[Tokens::Class], connectionClassToken)) {
                            parsed.clear();
                            return false;
                        }
                        auto status          = static_cast<ForwardingStatus>(statusToken);


@@ 466,12 472,17 @@ namespace at

                        if (magic_enum::enum_contains<ForwardingStatus>(status) &&
                            magic_enum::enum_contains<ConnectionClass>(connectionClass)) {
                            if (tokens[Tokens::Number].find(quote) == std::string::npos) {
                                parsed.clear();
                                return false;
                            }
                            auto number = tokens[Tokens::Number];
                            utils::findAndReplaceAll(number, quote, emptyString);
                            utils::trim(number);
                            parsed.push_back(ParsedCcfc(connectionClass, status, number));
                        }
                        else {
                            parsed.clear();
                            return false;
                        }
                    }

M module-cellular/test/unittest_response.cpp => module-cellular/test/unittest_response.cpp +137 -0
@@ 549,3 549,140 @@ TEST_CASE("Response CCWA?")
        REQUIRE(ret.size() == 0);
    }
}

TEST_CASE("Response CCFC")
{
    SECTION("OK CCFC? - all disabled")
    {

        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 0,255");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == true);
        REQUIRE(ret.size() == 1);
        REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::NotActive);
        REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::None);
    }

    SECTION("OK CCFC? - voice enabled")
    {

        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == true);
        REQUIRE(ret.size() == 1);
        REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::Active);
        REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::Voice);
        REQUIRE(ret[0].number == "+48111222333");
    }

    SECTION("OK CCFC? - voice, fax, sync, async enabled")
    {

        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,");
        resp.response.push_back("+CCFC: 1,4,\"+48111222333\",145,,,");
        resp.response.push_back("+CCFC: 1,16,\"+48111222333\",145,,,");
        resp.response.push_back("+CCFC: 1,32,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == true);
        REQUIRE(ret.size() == 4);
        REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::Active);
        REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::Voice);
        REQUIRE(ret[0].number == "+48111222333");

        REQUIRE(ret[1].status == at::response::ccfc::ForwardingStatus::Active);
        REQUIRE(ret[1].connectionClass == at::response::ccfc::ConnectionClass::Fax);
        REQUIRE(ret[1].number == "+48111222333");

        REQUIRE(ret[2].status == at::response::ccfc::ForwardingStatus::Active);
        REQUIRE(ret[2].connectionClass == at::response::ccfc::ConnectionClass::DataAsync);
        REQUIRE(ret[2].number == "+48111222333");

        REQUIRE(ret[3].status == at::response::ccfc::ForwardingStatus::Active);
        REQUIRE(ret[3].connectionClass == at::response::ccfc::ConnectionClass::DataSync);
        REQUIRE(ret[3].number == "+48111222333");
    }

    SECTION("WRONG CCFC? - invalid status")
    {

        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 7,1,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == false);
        REQUIRE(ret.size() == 0);
    }

    SECTION("WRONG CCFC? - invalid class")
    {

        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 1,99,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == false);
        REQUIRE(ret.size() == 0);
    }

    SECTION("WRONG CCFC? - to little tokens")
    {
        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,");
        resp.response.push_back("+CCFC: 1,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == false);
        REQUIRE(ret.size() == 0);
    }

    SECTION("WRONG CCFC? - to many tokens")
    {
        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,");
        resp.response.push_back("+CCFC: 1,1,23,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == false);
        REQUIRE(ret.size() == 0);
    }

    SECTION("WRONG CCFC? - invalid token")
    {
        at::Result resp;
        resp.code = at::Result::Code::OK;
        std::vector<at::response::ccfc::ParsedCcfc> ret;
        resp.response.push_back("+CFCC: 1,1,\"+48111222333\",145,,,");
        resp.response.push_back("OK");

        REQUIRE(resp.code == at::Result::Code::OK);
        REQUIRE(at::response::ccfc::parse(resp.response, ret) == false);
        REQUIRE(ret.size() == 0);
    }
}