//
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// Official repository: https://github.com/boostorg/url
//

// Test that header file is self-contained.
#include <boost/url/rfc/reserved_chars.hpp>

#include <boost/url/grammar/parse.hpp>
#include <boost/url/rfc/pct_encoded_rule.hpp>

#include "test_rule.hpp"

namespace boost {
namespace urls {

struct reserved_chars_test
{
    void
    run()
    {
        // javadoc
        {
            system::result< pct_string_view > rv = grammar::parse( "Program%20Files", pct_encoded_rule( reserved_chars ) );
            (void)rv;
        }

        // Need to construct this core::string_view
        // manually because of the leading null
        char const res[] =
            "\x00\x01\x02\x03\x04\x05\x06\x07" "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
            "\x10\x11\x12\x13\x14\x15\x16\x17" "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
            "\x20\x21\x22\x23\x24\x25\x26\x27" "\x28\x29\x2a\x2b\x2c"      "\x2f"
                                                        "\x3a\x3b\x3c\x3d\x3e\x3f"
            "\x40"
                                                            "\x5b\x5c\x5d\x5e"
            "\x60"
                                                            "\x7b\x7c\x7d"  "\x7f"
            "\x80\x81\x82\x83\x84\x85\x86\x87" "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
            "\x90\x91\x92\x93\x94\x95\x96\x97" "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
            "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7" "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
            "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7" "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
            "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7" "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
            "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7" "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
            "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7" "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
            "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7" "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
        test_char_set(
            reserved_chars,
            core::string_view(res, sizeof(res) - 1));
    }
};

TEST_SUITE(
    reserved_chars_test,
    "boost.url.reserved_chars");

} // urls
} // boost
