You've already forked Zygisk-Assistant
mirror of
https://github.com/snake-4/Zygisk-Assistant.git
synced 2025-09-06 06:37:02 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: !stdlib=libc++ && c++14
|
||||
|
||||
// <iomanip>
|
||||
|
||||
// quoted
|
||||
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <string_view>
|
||||
#include <cassert>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
bool is_skipws ( const std::istream *is ) {
|
||||
return ( is->flags() & std::ios_base::skipws ) != 0;
|
||||
}
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
bool is_skipws ( const std::wistream *is ) {
|
||||
return ( is->flags() & std::ios_base::skipws ) != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void round_trip ( const char *p ) {
|
||||
std::stringstream ss;
|
||||
bool skippingws = is_skipws ( &ss );
|
||||
std::string_view sv {p};
|
||||
|
||||
ss << std::quoted(sv);
|
||||
std::string s;
|
||||
ss >> std::quoted(s);
|
||||
assert ( s == sv );
|
||||
assert ( skippingws == is_skipws ( &ss ));
|
||||
}
|
||||
|
||||
void round_trip_ws ( const char *p ) {
|
||||
std::stringstream ss;
|
||||
std::noskipws ( ss );
|
||||
bool skippingws = is_skipws ( &ss );
|
||||
std::string_view sv {p};
|
||||
|
||||
ss << std::quoted(sv);
|
||||
std::string s;
|
||||
ss >> std::quoted(s);
|
||||
assert ( s == sv );
|
||||
assert ( skippingws == is_skipws ( &ss ));
|
||||
}
|
||||
|
||||
void round_trip_d ( const char *p, char delim ) {
|
||||
std::stringstream ss;
|
||||
std::string_view sv {p};
|
||||
|
||||
ss << std::quoted(sv, delim);
|
||||
std::string s;
|
||||
ss >> std::quoted(s, delim);
|
||||
assert ( s == sv );
|
||||
}
|
||||
|
||||
void round_trip_e ( const char *p, char escape ) {
|
||||
std::stringstream ss;
|
||||
std::string_view sv {p};
|
||||
|
||||
ss << std::quoted(sv, '"', escape );
|
||||
std::string s;
|
||||
ss >> std::quoted(s, '"', escape );
|
||||
assert ( s == sv );
|
||||
}
|
||||
|
||||
|
||||
|
||||
std::string quote ( const char *p, char delim='"', char escape='\\' ) {
|
||||
std::stringstream ss;
|
||||
ss << std::quoted(p, delim, escape);
|
||||
std::string s;
|
||||
ss >> s; // no quote
|
||||
return s;
|
||||
}
|
||||
|
||||
std::string unquote ( const char *p, char delim='"', char escape='\\' ) {
|
||||
std::stringstream ss;
|
||||
ss << p;
|
||||
std::string s;
|
||||
ss >> std::quoted(s, delim, escape);
|
||||
return s;
|
||||
}
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
void round_trip ( const wchar_t *p ) {
|
||||
std::wstringstream ss;
|
||||
bool skippingws = is_skipws ( &ss );
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << std::quoted(sv);
|
||||
std::wstring s;
|
||||
ss >> std::quoted(s);
|
||||
assert ( s == sv );
|
||||
assert ( skippingws == is_skipws ( &ss ));
|
||||
}
|
||||
|
||||
|
||||
void round_trip_ws ( const wchar_t *p ) {
|
||||
std::wstringstream ss;
|
||||
std::noskipws ( ss );
|
||||
bool skippingws = is_skipws ( &ss );
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << std::quoted(sv);
|
||||
std::wstring s;
|
||||
ss >> std::quoted(s);
|
||||
assert ( s == sv );
|
||||
assert ( skippingws == is_skipws ( &ss ));
|
||||
}
|
||||
|
||||
void round_trip_d ( const wchar_t *p, wchar_t delim ) {
|
||||
std::wstringstream ss;
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << std::quoted(sv, delim);
|
||||
std::wstring s;
|
||||
ss >> std::quoted(s, delim);
|
||||
assert ( s == sv );
|
||||
}
|
||||
|
||||
void round_trip_e ( const wchar_t *p, wchar_t escape ) {
|
||||
std::wstringstream ss;
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << std::quoted(sv, wchar_t('"'), escape );
|
||||
std::wstring s;
|
||||
ss >> std::quoted(s, wchar_t('"'), escape );
|
||||
assert ( s == sv );
|
||||
}
|
||||
|
||||
|
||||
std::wstring quote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
|
||||
std::wstringstream ss;
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << std::quoted(sv, delim, escape);
|
||||
std::wstring s;
|
||||
ss >> s; // no quote
|
||||
return s;
|
||||
}
|
||||
|
||||
std::wstring unquote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
|
||||
std::wstringstream ss;
|
||||
std::wstring_view sv {p};
|
||||
|
||||
ss << sv;
|
||||
std::wstring s;
|
||||
ss >> std::quoted(s, delim, escape);
|
||||
return s;
|
||||
}
|
||||
#endif // TEST_HAS_NO_WIDE_CHARACTERS
|
||||
|
||||
int main(int, char**)
|
||||
{
|
||||
round_trip ( "" );
|
||||
round_trip_ws ( "" );
|
||||
round_trip_d ( "", 'q' );
|
||||
round_trip_e ( "", 'q' );
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
round_trip ( L"" );
|
||||
round_trip_ws ( L"" );
|
||||
round_trip_d ( L"", 'q' );
|
||||
round_trip_e ( L"", 'q' );
|
||||
#endif
|
||||
|
||||
round_trip ( "Hi" );
|
||||
round_trip_ws ( "Hi" );
|
||||
round_trip_d ( "Hi", '!' );
|
||||
round_trip_e ( "Hi", '!' );
|
||||
assert ( quote ( "Hi", '!' ) == "!Hi!" );
|
||||
assert ( quote ( "Hi!", '!' ) == R"(!Hi\!!)" );
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
round_trip ( L"Hi" );
|
||||
round_trip_ws ( L"Hi" );
|
||||
round_trip_d ( L"Hi", '!' );
|
||||
round_trip_e ( L"Hi", '!' );
|
||||
assert ( quote ( L"Hi", '!' ) == L"!Hi!" );
|
||||
assert ( quote ( L"Hi!", '!' ) == LR"(!Hi\!!)" );
|
||||
#endif
|
||||
|
||||
round_trip ( "Hi Mom" );
|
||||
round_trip_ws ( "Hi Mom" );
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
round_trip ( L"Hi Mom" );
|
||||
round_trip_ws ( L"Hi Mom" );
|
||||
#endif
|
||||
|
||||
assert ( quote ( "" ) == "\"\"" );
|
||||
assert ( quote ( "a" ) == "\"a\"" );
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
assert ( quote ( L"" ) == L"\"\"" );
|
||||
assert ( quote ( L"a" ) == L"\"a\"" );
|
||||
#endif
|
||||
|
||||
// missing end quote - must not hang
|
||||
assert ( unquote ( "\"abc" ) == "abc" );
|
||||
assert ( unquote ( "abc" ) == "abc" ); // no delimiter
|
||||
assert ( unquote ( "abc def" ) == "abc" ); // no delimiter
|
||||
assert ( unquote ( "" ) == "" ); // nothing there
|
||||
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
assert ( unquote ( L"\"abc" ) == L"abc" );
|
||||
assert ( unquote ( L"abc" ) == L"abc" ); // no delimiter
|
||||
assert ( unquote ( L"abc def" ) == L"abc" ); // no delimiter
|
||||
assert ( unquote ( L"" ) == L"" ); // nothing there
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user