Files
AnyPS5/core/libs/tests/GuestNKWebKitUrlHelpers.cpp
T

101 lines
3.6 KiB
C++

#include "prx/libSceNKWebKit/include/UrlHelpers.hpp"
#include <cstddef>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <string>
namespace {
using NKWebKit::UrlAbi::StringView;
void Check(bool result, int line) {
if (result) return;
std::fprintf(stderr, "WTF URL helper check failed at line %d\n", line);
std::abort();
}
#define Require(condition) Check((condition), __LINE__)
StringView View(const std::string& value) {
return {value.data(), static_cast<std::uint32_t>(value.size()), true};
}
StringView View(const std::u16string& value) {
return {value.data(), static_cast<std::uint32_t>(value.size()), false};
}
bool Uuid(const std::string& value) {
return _ZN3WTF14isVersion4UUIDENS_10StringViewE(View(value));
}
void TestUuid() {
const std::string valid = "123e4567-e89b-42d3-a456-426614174000";
Require(Uuid(valid));
Require(Uuid("123E4567-E89B-42D3-B456-426614174000"));
Require(Uuid("123e4567-e89b-42d3-8456-426614174000"));
Require(Uuid("123e4567-e89b-42d3-9456-426614174000"));
Require(Uuid(" 23e4567-e89b-42d3-a456-426614174000"));
Require(Uuid("123e4567-e89b-42d3-a456-42661417400 "));
Require(!Uuid(""));
Require(!Uuid("123e4567-e89b-42d3-a456-42661417400"));
Require(!Uuid("123e4567-e89b-42d3-a456-4266141740000"));
Require(!Uuid("123e4567-e89b-12d3-a456-426614174000"));
Require(!Uuid("123e4567-e89b-52d3-a456-426614174000"));
Require(!Uuid("123e4567-e89b-42d3-7456-426614174000"));
Require(!Uuid("123e4567-e89b-42d3-c456-426614174000"));
Require(!Uuid("123e4567-e89b-42d3-a456-42661417400g"));
Require(!Uuid("123e4567+e89b-42d3-a456-426614174000"));
Require(!Uuid("123e4567-+89b-42d3-a456-426614174000"));
Require(!Uuid("123e4567-e89b-42d3-a456-+26614174000"));
Require(!Uuid("123e4567-e89b-42d3-a456-4266141740-0"));
auto embeddedNull = valid;
embeddedNull[5] = '\0';
Require(!Uuid(embeddedNull));
Require(_ZN3WTF14isVersion4UUIDENS_10StringViewE(View(std::u16string(valid.begin(), valid.end()))));
auto wide = std::u16string(valid.begin(), valid.end());
wide[0] = u'\u20AC';
Require(!_ZN3WTF14isVersion4UUIDENS_10StringViewE(View(wide)));
Require(!_ZN3WTF14isVersion4UUIDENS_10StringViewE({nullptr, 0, true}));
Require(!_ZN3WTF14isVersion4UUIDENS_10StringViewE({nullptr, 0, false}));
Require(valid == "123e4567-e89b-42d3-a456-426614174000");
}
bool Port(std::uint16_t port, const std::string& protocol) {
return _ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(port, View(protocol));
}
void TestPorts() {
Require(Port(21, "ftp"));
Require(Port(80, "http"));
Require(Port(80, "ws"));
Require(Port(443, "https"));
Require(Port(443, "wss"));
Require(!Port(0, "http"));
Require(!Port(443, "http"));
Require(!Port(80, "https"));
Require(!Port(65535, "wss"));
Require(!Port(21, "FTp"));
Require(!Port(80, "HTTP"));
Require(!Port(80, "htt"));
Require(!Port(80, "http:"));
Require(!Port(21, "file"));
Require(!Port(22, "ssh"));
Require(!Port(0, ""));
Require(!Port(80, std::string("http\0extra", 10)));
Require(_ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(443, View(std::u16string(u"https"))));
Require(!_ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(443, View(std::u16string(u"HTTPS"))));
Require(!_ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(443, View(std::u16string(u"h\u00E9tps"))));
Require(!_ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(0, {nullptr, 0, true}));
Require(!_ZN3WTF24isDefaultPortForProtocolEtNS_10StringViewE(80, {nullptr, 0, false}));
}
}
int main() {
TestUuid();
TestPorts();
return 0;
}