| /*============================================================================= |
| Copyright (c) 2001-2010 Joel de Guzman |
| Copyright (c) 2001-2010 Hartmut Kaiser |
| |
| 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) |
| =============================================================================*/ |
| |
| #define BOOST_SPIRIT_UNICODE |
| |
| #include <boost/detail/lightweight_test.hpp> |
| #include <boost/spirit/include/qi_char.hpp> |
| #include <boost/spirit/include/qi_action.hpp> |
| #include <boost/spirit/include/support_argument.hpp> |
| #include <boost/spirit/include/support_attributes.hpp> |
| #include <boost/spirit/include/phoenix_core.hpp> |
| #include <boost/spirit/include/phoenix_operator.hpp> |
| #include <boost/type_traits/is_same.hpp> |
| #include <boost/static_assert.hpp> |
| |
| #include <iostream> |
| #include "test.hpp" |
| |
| int |
| main() |
| { |
| using spirit_test::test; |
| using spirit_test::test_attr; |
| |
| { |
| using namespace boost::spirit::ascii; |
| BOOST_TEST(test("1", alnum)); |
| BOOST_TEST(!test(" ", alnum)); |
| BOOST_TEST(!test("1", alpha)); |
| BOOST_TEST(test("x", alpha)); |
| BOOST_TEST(test(" ", blank)); |
| BOOST_TEST(!test("x", blank)); |
| BOOST_TEST(test("1", digit)); |
| BOOST_TEST(!test("x", digit)); |
| BOOST_TEST(test("a", lower)); |
| BOOST_TEST(!test("A", lower)); |
| BOOST_TEST(test("!", punct)); |
| BOOST_TEST(!test("x", punct)); |
| BOOST_TEST(test(" ", space)); |
| BOOST_TEST(test("\n", space)); |
| BOOST_TEST(test("\r", space)); |
| BOOST_TEST(test("\t", space)); |
| BOOST_TEST(test("A", upper)); |
| BOOST_TEST(!test("a", upper)); |
| BOOST_TEST(test("A", xdigit)); |
| BOOST_TEST(test("0", xdigit)); |
| BOOST_TEST(test("f", xdigit)); |
| BOOST_TEST(!test("g", xdigit)); |
| |
| // should fail, not assert! |
| // $$$ Removing this test for now $$$ |
| // BOOST_TEST(!test("\265", space)); |
| } |
| |
| { |
| using namespace boost::spirit::ascii; |
| BOOST_TEST(!test("1", ~alnum)); |
| BOOST_TEST(test(" ", ~alnum)); |
| BOOST_TEST(test("1", ~alpha)); |
| BOOST_TEST(!test("x", ~alpha)); |
| BOOST_TEST(!test(" ", ~blank)); |
| BOOST_TEST(test("x", ~blank)); |
| BOOST_TEST(!test("1", ~digit)); |
| BOOST_TEST(test("x", ~digit)); |
| BOOST_TEST(!test("a", ~lower)); |
| BOOST_TEST(test("A", ~lower)); |
| BOOST_TEST(!test("!", ~punct)); |
| BOOST_TEST(test("x", ~punct)); |
| BOOST_TEST(!test(" ", ~space)); |
| BOOST_TEST(!test("\n", ~space)); |
| BOOST_TEST(!test("\r", ~space)); |
| BOOST_TEST(!test("\t", ~space)); |
| BOOST_TEST(!test("A", ~upper)); |
| BOOST_TEST(test("a", ~upper)); |
| BOOST_TEST(!test("A", ~xdigit)); |
| BOOST_TEST(!test("0", ~xdigit)); |
| BOOST_TEST(!test("f", ~xdigit)); |
| BOOST_TEST(test("g", ~xdigit)); |
| } |
| |
| { |
| // we use the hoisted qi namespace this time |
| using namespace boost::spirit::qi::iso8859_1; |
| BOOST_TEST(test("1", alnum)); |
| BOOST_TEST(!test(" ", alnum)); |
| BOOST_TEST(!test("1", alpha)); |
| BOOST_TEST(test("x", alpha)); |
| BOOST_TEST(test(" ", blank)); |
| BOOST_TEST(!test("x", blank)); |
| BOOST_TEST(test("1", digit)); |
| BOOST_TEST(!test("x", digit)); |
| BOOST_TEST(test("a", lower)); |
| BOOST_TEST(!test("A", lower)); |
| BOOST_TEST(test("!", punct)); |
| BOOST_TEST(!test("x", punct)); |
| BOOST_TEST(test(" ", space)); |
| BOOST_TEST(test("\n", space)); |
| BOOST_TEST(test("\r", space)); |
| BOOST_TEST(test("\t", space)); |
| BOOST_TEST(test("A", upper)); |
| BOOST_TEST(!test("a", upper)); |
| BOOST_TEST(test("A", xdigit)); |
| BOOST_TEST(test("0", xdigit)); |
| BOOST_TEST(test("f", xdigit)); |
| BOOST_TEST(!test("g", xdigit)); |
| |
| // test extended ASCII characters |
| BOOST_TEST(test("\xE9", alpha)); |
| BOOST_TEST(test("\xE9", lower)); |
| BOOST_TEST(!test("\xE9", upper)); |
| } |
| |
| { |
| using namespace boost::spirit::standard; |
| BOOST_TEST(test("1", alnum)); |
| BOOST_TEST(!test(" ", alnum)); |
| BOOST_TEST(!test("1", alpha)); |
| BOOST_TEST(test("x", alpha)); |
| BOOST_TEST(test(" ", blank)); |
| BOOST_TEST(!test("x", blank)); |
| BOOST_TEST(test("1", digit)); |
| BOOST_TEST(!test("x", digit)); |
| BOOST_TEST(test("a", lower)); |
| BOOST_TEST(!test("A", lower)); |
| BOOST_TEST(test("!", punct)); |
| BOOST_TEST(!test("x", punct)); |
| BOOST_TEST(test(" ", space)); |
| BOOST_TEST(test("\n", space)); |
| BOOST_TEST(test("\r", space)); |
| BOOST_TEST(test("\t", space)); |
| BOOST_TEST(test("A", upper)); |
| BOOST_TEST(!test("a", upper)); |
| BOOST_TEST(test("A", xdigit)); |
| BOOST_TEST(test("0", xdigit)); |
| BOOST_TEST(test("f", xdigit)); |
| BOOST_TEST(!test("g", xdigit)); |
| BOOST_TEST(!test("\xF1", print)); |
| } |
| |
| { |
| using namespace boost::spirit::standard_wide; |
| BOOST_TEST(test(L"1", alnum)); |
| BOOST_TEST(!test(L" ", alnum)); |
| BOOST_TEST(!test(L"1", alpha)); |
| BOOST_TEST(test(L"x", alpha)); |
| BOOST_TEST(test(L" ", blank)); |
| BOOST_TEST(!test(L"x", blank)); |
| BOOST_TEST(test(L"1", digit)); |
| BOOST_TEST(!test(L"x", digit)); |
| BOOST_TEST(test(L"a", lower)); |
| BOOST_TEST(!test(L"A", lower)); |
| BOOST_TEST(test(L"!", punct)); |
| BOOST_TEST(!test(L"x", punct)); |
| BOOST_TEST(test(L" ", space)); |
| BOOST_TEST(test(L"\n", space)); |
| BOOST_TEST(test(L"\r", space)); |
| BOOST_TEST(test(L"\t", space)); |
| BOOST_TEST(test(L"A", upper)); |
| BOOST_TEST(!test(L"a", upper)); |
| BOOST_TEST(test(L"A", xdigit)); |
| BOOST_TEST(test(L"0", xdigit)); |
| BOOST_TEST(test(L"f", xdigit)); |
| BOOST_TEST(!test(L"g", xdigit)); |
| } |
| |
| { |
| using namespace boost::spirit::unicode; |
| BOOST_TEST(test(L"1", alnum)); |
| BOOST_TEST(!test(L" ", alnum)); |
| BOOST_TEST(!test(L"1", alpha)); |
| BOOST_TEST(test(L"x", alpha)); |
| BOOST_TEST(test(L" ", blank)); |
| BOOST_TEST(!test(L"x", blank)); |
| BOOST_TEST(test(L"1", digit)); |
| BOOST_TEST(!test(L"x", digit)); |
| BOOST_TEST(test(L"a", lower)); |
| BOOST_TEST(!test(L"A", lower)); |
| BOOST_TEST(test(L"!", punct)); |
| BOOST_TEST(!test(L"x", punct)); |
| BOOST_TEST(test(L" ", space)); |
| BOOST_TEST(test(L"\n", space)); |
| BOOST_TEST(test(L"\r", space)); |
| BOOST_TEST(test(L"\t", space)); |
| BOOST_TEST(test(L"A", upper)); |
| BOOST_TEST(!test(L"a", upper)); |
| BOOST_TEST(test(L"A", xdigit)); |
| BOOST_TEST(test(L"0", xdigit)); |
| BOOST_TEST(test(L"f", xdigit)); |
| BOOST_TEST(!test(L"g", xdigit)); |
| } |
| |
| { // test attribute extraction |
| using boost::spirit::qi::domain; |
| using boost::spirit::traits::attribute_of; |
| using boost::spirit::iso8859_1::alpha; |
| using boost::spirit::iso8859_1::alpha_type; |
| using boost::spirit::result_of::compile; |
| |
| BOOST_STATIC_ASSERT(( |
| boost::is_same< |
| attribute_of<compile<domain, alpha_type>::type>::type |
| , unsigned char>::value)); |
| |
| int attr = 0; |
| BOOST_TEST(test_attr("a", alpha, attr)); |
| BOOST_TEST(attr == 'a'); |
| } |
| |
| { // test attribute extraction |
| using boost::spirit::iso8859_1::alpha; |
| using boost::spirit::iso8859_1::space; |
| char attr = 0; |
| BOOST_TEST(test_attr(" a", alpha, attr, space)); |
| BOOST_TEST(attr == 'a'); |
| } |
| |
| { // test action |
| |
| using namespace boost::spirit::ascii; |
| using boost::phoenix::ref; |
| using boost::spirit::_1; |
| char ch; |
| |
| BOOST_TEST(test("x", alnum[ref(ch) = _1])); |
| BOOST_TEST(ch == 'x'); |
| BOOST_TEST(test(" A", alnum[ref(ch) = _1], space)); |
| BOOST_TEST(ch == 'A'); |
| } |
| |
| return boost::report_errors(); |
| } |