OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_wstring.cpp
Go to the documentation of this file.
1
// OpenVPN -- An application to securely tunnel IP networks
2
// over a single port, with support for SSL/TLS-based
3
// session authentication and key exchange,
4
// packet encryption, packet authentication, and
5
// packet compression.
6
//
7
// Copyright (C) 2024- OpenVPN Inc.
8
//
9
// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10
//
11
12
13
#include "
test_common.hpp
"
14
15
#include <
openvpn/common/wstring.hpp
>
16
17
using namespace
openvpn
;
18
19
// Fixture for the tests below
20
class
WStringTest
:
public
testing::Test
21
{
22
protected
:
23
const
std::string
jojo
=
"Jürgen Wößner"
;
24
const
std::string
lev
=
"Лев Толстой"
;
25
const
std::string
shigeru
=
"宮本茂"
;
26
27
const
std::array<std::wstring::value_type, 14>
raw_jojo
= {
28
0x004a, 0x00fc, 0x0072, 0x0067, 0x0065, 0x006e, 0x0020, 0x0057, 0x00f6, 0x00df, 0x006e, 0x0065, 0x0072, 0x0000};
29
const
std::array<std::wstring::value_type, 12>
raw_lev
= {
30
0x041b, 0x0435, 0x0432, 0x0020, 0x0422, 0x043e, 0x043b, 0x0441, 0x0442, 0x043e, 0x0439, 0x0000};
31
const
std::array<std::wstring::value_type, 4>
raw_shigeru
= {
32
0x5bae, 0x672c, 0x8302, 0x0000};
33
34
const
std::wstring
wide_jojo
=
raw_jojo
.data();
35
const
std::wstring
wide_lev
=
raw_lev
.data();
36
const
std::wstring
wide_shigeru
=
raw_shigeru
.data();
37
};
38
39
TEST_F
(
WStringTest
, FromUtf8)
40
{
41
std::wstring utf16_jojo = wstring::from_utf8(jojo);
42
EXPECT_EQ(utf16_jojo.size(), wide_jojo.size());
43
EXPECT_TRUE(utf16_jojo == wide_jojo);
44
45
std::wstring utf16_lev = wstring::from_utf8(lev);
46
EXPECT_EQ(utf16_lev.size(), wide_lev.size());
47
EXPECT_TRUE(utf16_lev == wide_lev);
48
49
std::wstring utf16_shigeru = wstring::from_utf8(shigeru);
50
EXPECT_EQ(utf16_shigeru.size(), wide_shigeru.size());
51
EXPECT_TRUE(utf16_shigeru == wide_shigeru);
52
}
53
54
TEST_F
(
WStringTest
, ToUtf8)
55
{
56
std::string utf8_jojo = wstring::to_utf8(wide_jojo);
57
EXPECT_EQ(utf8_jojo.size(), jojo.size());
58
EXPECT_TRUE(utf8_jojo == jojo);
59
60
std::string utf8_lev = wstring::to_utf8(wide_lev);
61
EXPECT_EQ(utf8_lev.size(), lev.size());
62
EXPECT_TRUE(utf8_lev == lev);
63
64
std::string utf8_shigeru = wstring::to_utf8(wide_shigeru);
65
EXPECT_EQ(utf8_shigeru.size(), shigeru.size());
66
EXPECT_TRUE(utf8_shigeru == shigeru);
67
}
68
69
TEST_F
(
WStringTest
, MultiSzFromVector)
70
{
71
std::vector<std::string> names{jojo, lev, shigeru};
72
std::wstring multi_names = wstring::pack_string_vector(names);
73
const
auto
jojo_ptr = multi_names.data();
74
const
auto
lev_ptr = multi_names.data() + raw_jojo.size();
75
const
auto
shigeru_ptr = multi_names.data() + raw_jojo.size() + raw_lev.size();
76
EXPECT_EQ(multi_names.size(), raw_jojo.size() + raw_lev.size() + raw_shigeru.size() + 1);
77
EXPECT_TRUE(std::memcmp(jojo_ptr, wide_jojo.c_str(), raw_jojo.size()) == 0);
78
EXPECT_TRUE(std::memcmp(lev_ptr, wide_lev.c_str(), raw_lev.size()) == 0);
79
EXPECT_TRUE(std::memcmp(shigeru_ptr, wide_shigeru.c_str(), raw_shigeru.size()) == 0);
80
}
WStringTest
Definition
test_wstring.cpp:21
WStringTest::wide_lev
const std::wstring wide_lev
Definition
test_wstring.cpp:35
WStringTest::raw_jojo
const std::array< std::wstring::value_type, 14 > raw_jojo
Definition
test_wstring.cpp:27
WStringTest::shigeru
const std::string shigeru
Definition
test_wstring.cpp:25
WStringTest::wide_shigeru
const std::wstring wide_shigeru
Definition
test_wstring.cpp:36
WStringTest::wide_jojo
const std::wstring wide_jojo
Definition
test_wstring.cpp:34
WStringTest::raw_shigeru
const std::array< std::wstring::value_type, 4 > raw_shigeru
Definition
test_wstring.cpp:31
WStringTest::jojo
const std::string jojo
Definition
test_wstring.cpp:23
WStringTest::lev
const std::string lev
Definition
test_wstring.cpp:24
WStringTest::raw_lev
const std::array< std::wstring::value_type, 12 > raw_lev
Definition
test_wstring.cpp:29
openvpn
Definition
ovpncli.cpp:97
test_common.hpp
TEST_F
TEST_F(WStringTest, FromUtf8)
Definition
test_wstring.cpp:39
wstring.hpp
test
unittests
test_wstring.cpp
Generated by
1.9.8