aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/providers/common/structured_token/ut/yql_structured_token_ut.cpp
blob: c22b74b515f8d6912f3a6d53cb0abd0064c419e3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <yql/essentials/providers/common/structured_token/yql_structured_token.h>

#include <library/cpp/testing/unittest/registar.h>

namespace NYql {

Y_UNIT_TEST_SUITE(StructuredTokenTest) {
    Y_UNIT_TEST(EmptyToken) {
        const TStructuredToken t1;
        UNIT_ASSERT_VALUES_EQUAL("{}", t1.ToJson());
        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("key", "xyz"));

        auto t2 = ParseStructuredToken("{}");
        UNIT_ASSERT_VALUES_EQUAL("{}", t2.ToJson());
    }

    Y_UNIT_TEST(IsStructuredTokenJson) {
        UNIT_ASSERT(!IsStructuredTokenJson(""));
        UNIT_ASSERT(!IsStructuredTokenJson("my_token"));
        UNIT_ASSERT(IsStructuredTokenJson("{}"));
        UNIT_ASSERT(IsStructuredTokenJson(R"({"f1":"my_token"})"));
    }

    Y_UNIT_TEST(SetField) {
        TStructuredToken t1;
        t1.SetField("f1", "xxx");
        t1.SetField("f2", "yyy");
        t1.SetField("oops", "zzzzzzzzzzzzz");

        UNIT_ASSERT_VALUES_EQUAL("xxx", t1.GetFieldOrDefault("f1", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("f3", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("yyy", t1.GetField("f2"));
        UNIT_ASSERT_VALUES_EQUAL(R"({"f1":"xxx","f2":"yyy","oops":"zzzzzzzzzzzzz"})", t1.ToJson());

        const TStructuredToken t2 = ParseStructuredToken(t1.ToJson());
        UNIT_ASSERT_VALUES_EQUAL("xxx", t2.GetFieldOrDefault("f1", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t2.GetFieldOrDefault("f3", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("yyy", t2.GetField("f2"));
        UNIT_ASSERT_VALUES_EQUAL(t1.ToJson(), t2.ToJson());
    }

    Y_UNIT_TEST(SetNonUtf8Field) {
        TStructuredToken t1;
        TString nonUtf8(TStringBuf("\xF0\x9F\x94"));
        t1.SetField("f1", nonUtf8);
        UNIT_ASSERT_VALUES_EQUAL(R"foo({"f1(base64)":"8J+U"})foo", t1.ToJson());
        UNIT_ASSERT_VALUES_EQUAL(nonUtf8, t1.GetField("f1"));
        UNIT_ASSERT_VALUES_EQUAL("empty", t1.GetFieldOrDefault("f1(base64)", "empty"));

        const TStructuredToken t2 = ParseStructuredToken(t1.ToJson());
        UNIT_ASSERT_VALUES_EQUAL(nonUtf8, t2.GetField("f1"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t2.GetFieldOrDefault("f2", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL(t1.ToJson(), t2.ToJson());
    }

    Y_UNIT_TEST(Move) {
        TStructuredToken t1;
        t1
            .SetField("f1", "xxx")
            .SetField("f2", "yyy");

        UNIT_ASSERT_VALUES_EQUAL("xxx", t1.GetFieldOrDefault("f1", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("yyy", t1.GetFieldOrDefault("f2", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("f3", "xyz"));

        const TStructuredToken t2(std::move(t1));
        UNIT_ASSERT_VALUES_EQUAL("xxx", t2.GetFieldOrDefault("f1", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("yyy", t2.GetFieldOrDefault("f2", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t2.GetFieldOrDefault("f3", "xyz"));

        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("f1", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("f2", "xyz"));
        UNIT_ASSERT_VALUES_EQUAL("xyz", t1.GetFieldOrDefault("f3", "xyz"));
    }
}

}