Пример #1
0
 void test_create_from_string()
 {
   std::string json("[]");
   saru_assert( fastjson::dom::parse_string(json, &token, &chunk, 0, &ErrorGetter::on_error, &error_getter ) );
   saru_assert( ! error_getter.ec );
   saru_assert( token.type == fastjson::Token::ArrayToken );
 }
Пример #2
0
 void test_create_from_string_bad()
 {
   std::string json("[");
   saru_assert( ! fastjson::dom::parse_string(json, &token, &chunk, 0, &ErrorGetter::on_error, &error_getter ) );
   saru_assert( error_getter.ec );
   saru_assert_equal("Input ended while in non-root state", error_getter.ec->mesg );
 }
Пример #3
0
 void test_create_from_string_mega()
 {
   std::string json("{\"hello\":[\"world\",123,4.5],\"say\":{\"moo\":\"cow\",\"eep\":null},\"say\":{\"moo\":\"cow\",\"eep\":null},\"say2\":{\"moo\":\"cow\",\"eep\":null},\"say3\":{\"moo\":\"cow\",\"eep\":null},\"say4\":{\"moo\":\"cow\",\"eep\":null},\"say5\":{\"moo\":\"cow\",\"eep\":null},\"say6\":{\"moo\":\"cow\",\"eep\":null}}");
   saru_assert( fastjson::dom::parse_string(json, &token, &chunk, 0, &ErrorGetter::on_error, &error_getter ) );
   saru_assert( ! error_getter.ec );
   saru_assert( token.type == fastjson::Token::DictToken );
   saru_assert_equal( json, fastjson::as_string( &token ) ); 
 }
    void read_tab()
    {
      std::string in_str("\"xx\\txx\"");

      saru_assert( fastjson::dom::parse_string(in_str, &token, &chunk, 0, &ErrorGetter::on_error, &error_getter ) );
      saru_assert_equal( fastjson::Token::ValueToken, token.type );
      saru_assert_equal( 5u, token.value.size );
      saru_assert( token.value.ptr );
      saru_assert_equal( "xx\txx", std::string( token.value.ptr, token.value.size ) );
    }
Пример #5
0
 void test_empty_dict_root()
 {
   fastjson::Document doc;
   bool ok = fastjson::parse_doc( "{}", &doc );
   saru_assert( ok );
   
   //Now we should have a root array element with no children.
   saru_assert( doc.root.type == fastjson::Token::DictToken );
   saru_assert( doc.root.dict.ptr == NULL ); 
 }
    void test_get()
    {
      fastjson::dom::Chunk chunk;
      fastjson::Token token;
      saru_assert( fastjson::dom::parse_string("{\"key\":\"value\"}", &token, &chunk, 0, NULL, NULL ) );

      fastjson::dom::Dictionary_const dict = fastjson::dom::Dictionary_const::as_dict(&token);

      std::string value;
      saru_assert( dict.get<std::string>("key", &value ) );
      saru_assert_equal("value", value );
    }
    void read_tab()
    {
      std::string in_str("\"xx\\txx\"");
      fastjson::dom::Chunk chunk;
      fastjson::Token token;

      std::string error_message;

      saru_assert( fastjson::dom::parse_string(in_str, &token, &chunk, &error_message ) );
      saru_assert_equal( fastjson::Token::ValueToken, token.type );
      saru_assert_equal( 5u, token.data.value.size );
      saru_assert( token.data.value.ptr );
      saru_assert_equal( "xx\txx", std::string( token.data.value.ptr, token.data.value.size ) );
    }
Пример #8
0
 void test_number_root()
 {
   unsigned char buffer[] = "xxxxxxxxxxxx";
   fastjson::Document doc;
   doc.string_store = buffer;
   bool ok = fastjson::parse_doc( "123", &doc );
   saru_assert( ok );
   
   //Now we should have a root array element with no children.
   saru_assert( doc.root.type == fastjson::Token::ValueToken );
   saru_assert( doc.root.value.ptr == reinterpret_cast<char*>(buffer) ); 
   saru_assert_equal(3u, doc.root.value.size);
   saru_assert_equal( fastjson::ValueType::NumberHint, doc.root.value.type_hint);
 }
  void number_as_key_ok2()
  {
        fastjson::JsonElementCount jse;

        ErrorHelper eh;
        jse.user_error_callback = &ErrorHelper::on_error;
        jse.user_data = &eh;
        jse.mode = fastjson::mode::ext_any_as_key;

        bool ok = fastjson::count_elements( "{\"a\":\"y\",2:\"y\"}" , &jse );

        saru_assert(ok);
        saru_assert( !eh.ec_ );
  }
  void number_as_key_bad()
  {
        fastjson::JsonElementCount jse;

        ErrorHelper eh;
        jse.user_error_callback = &ErrorHelper::on_error;
        jse.user_data = &eh;
        jse.mode = 0;

        bool ok = fastjson::count_elements( "{2:\"y\"}" , &jse );

        saru_assert(!ok);
        saru_assert( eh.ec_ );
        saru_assert_equal("Unexpected character while parsing dict start", eh.ec_->mesg );
  }
  void number_as_key_bad2()
  {
        fastjson::JsonElementCount jse;

        ErrorHelper eh;
        jse.user_error_callback = &ErrorHelper::on_error;
        jse.user_data = &eh;
        jse.mode = 0;

        bool ok = fastjson::count_elements( "{\"a\":\"y\",2:\"y\"}" , &jse );

        saru_assert(!ok);
        saru_assert( eh.ec_ );
        saru_assert_equal("Unexpected character when looking for dict key", eh.ec_->mesg );
  }
    void round_trip_tab()
    {
      std::string in_str("\"xx\\txx\"");

      saru_assert( fastjson::dom::parse_string(in_str, &token, &chunk, 0, &ErrorGetter::on_error, &error_getter ) );
      saru_assert_equal( in_str, fastjson::as_string( &token ) ); 
    }
Пример #13
0
    void naked_literal_null()
    {
      fastjson::Document doc;
      bool ok = fastjson::parse_doc( "null" , &doc );
      saru_assert(ok);

      saru_assert_equal( fastjson::Token::LiteralNullToken, doc.root.type );
    }
Пример #14
0
    void naked_literal_false()
    {
      fastjson::Document doc;
      bool ok = fastjson::parse_doc( "false" , &doc );
      saru_assert(ok);

      saru_assert_equal( fastjson::Token::LiteralFalseToken, doc.root.type );
    }
    void round_trip_tab()
    {
      std::string in_str("\"xx\\txx\"");
      fastjson::dom::Chunk chunk;
      fastjson::Token token;

      std::string error_message;

      saru_assert( fastjson::dom::parse_string(in_str, &token, &chunk, &error_message ) );
      saru_assert_equal( in_str, fastjson::as_string( &token ) ); 
    }
Пример #16
0
 void complex2()
 {
   fastjson::ArrayEntry array_entries[2];
   fastjson::DictEntry  dict_entries[4];
   unsigned char buffer[] = "xxxxxxxx"; //Eight characters
   fastjson::Document doc;
   doc.string_store = buffer;
   doc.array_store = array_entries;
   doc.dict_store  = dict_entries;
   bool ok = fastjson::parse_doc( "{\"f\":[\"g\",\"h\"],\"i\":{\"j\":\"k\"},\"l\":\"m\"}" , &doc );
   saru_assert(ok);
 }
Пример #17
0
    void test_array_of_strings()
    {
      fastjson::ArrayEntry array_entries[2];
      unsigned char buffer[] = "xxxxxxxxxxxx";
      fastjson::Document doc;
      doc.string_store = buffer;
      doc.array_store  = array_entries;
      bool ok = fastjson::parse_doc( "[\"hello\",\"world\"]" , &doc );
      saru_assert(ok);
      
      //We should have go the root element as the array
      saru_assert( doc.root.type == fastjson::Token::ArrayToken );
      saru_assert_equal( &array_entries[0], doc.root.array.ptr );

      //Now we should have got two strings in the array
      saru_assert( array_entries[0].tok.type == fastjson::Token::ValueToken );
      saru_assert_equal( 5u, array_entries[0].tok.value.size );
      saru_assert( buffer == reinterpret_cast<unsigned char*>(array_entries[0].tok.value.ptr) ); 
      saru_assert_equal( &array_entries[1], array_entries[0].next );

      saru_assert( array_entries[1].tok.type == fastjson::Token::ValueToken );
      saru_assert_equal( 5u, array_entries[1].tok.value.size );
      saru_assert( buffer+5 == reinterpret_cast<unsigned char*>(array_entries[1].tok.value.ptr) ); 
      saru_assert_equal( (void*)NULL, array_entries[1].next );
    }
Пример #18
0
    void test_string_buffer()
    {
      fastjson::ArrayEntry array_entries[2];
      unsigned char buffer[] = "xxxxxxxxxxxx"; 
      fastjson::Document doc;
      doc.string_store = buffer+1;
      doc.array_store = array_entries;

      bool ok = fastjson::parse_doc( "[\"hello\",\"world\"]", & doc );
      saru_assert(ok);

      saru_assert_equal( std::string("xhelloworldx"), std::string( reinterpret_cast<const char*>(buffer) ) );
    }
Пример #19
0
    void test_number_buffer()
    {
      fastjson::ArrayEntry array_entries[2];
      unsigned char buffer[] = "xxxxxxxxxxxx";
      fastjson::Document doc;
      doc.string_store = buffer+1;
      doc.array_store = array_entries;

      bool ok = fastjson::parse_doc( "[12345,67890]", & doc );
      saru_assert(ok);

      saru_assert_equal( std::string("x1234567890x"), std::string( reinterpret_cast<const char*>(buffer) ) );
    }
Пример #20
0
    void test_complex_dict()
    {
        fastjson::ArrayEntry array_entries[4];
        fastjson::DictEntry  dict_entries[2];
        unsigned char buffer[] = "xxxxxxx";
        fastjson::Document doc;
        doc.string_store = buffer;
        doc.array_store = array_entries;
        doc.dict_store  = dict_entries;

        bool ok = fastjson::parse_doc( "{\"f\":[\"g\",\"h\"],\"i\":[\"j\",\"k\"]}" , &doc );
        saru_assert(ok);

        //We should have go the root element as the array
        saru_assert_equal( fastjson::Token::DictToken, doc.root.type );
        saru_assert_equal( &dict_entries[0], doc.root.dict.ptr );

        //The first entry in the dictionary
        saru_assert_equal( &dict_entries[1],            dict_entries[0].next );
        //  First Key
        saru_assert_equal( fastjson::Token::ValueToken, dict_entries[0].key_tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint,  dict_entries[0].key_tok.value.type_hint );
        saru_assert_equal( 1u,                          dict_entries[0].key_tok.value.size );
        saru_assert_equal( (void*)buffer,               (void*)dict_entries[0].key_tok.value.ptr );
        saru_assert_equal( 'f',                         buffer[0] );
        //  First Value
        saru_assert_equal( fastjson::Token::ArrayToken, dict_entries[0].value_tok.type );
        saru_assert_equal( array_entries,               dict_entries[0].value_tok.array.ptr );
        
        //The second entry in the dictionary
        saru_assert_equal( (void*)NULL,                 dict_entries[1].next);
        //  Second Key
        saru_assert_equal( fastjson::Token::ValueToken, dict_entries[1].key_tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint,  dict_entries[1].key_tok.value.type_hint );
        saru_assert_equal( 1u,                          dict_entries[1].key_tok.value.size );
        saru_assert_equal( (void*)(buffer+3),           (void*)dict_entries[1].key_tok.value.ptr );
        saru_assert_equal( 'i',                         buffer[3] );

        //  Second Value
        saru_assert_equal( fastjson::Token::ArrayToken, dict_entries[1].value_tok.type );
        saru_assert_equal( array_entries+2,             dict_entries[1].value_tok.array.ptr );

        //Check the array entries.
        saru_assert_equal( array_entries+1,                 array_entries[0].next );
        saru_assert_equal( fastjson::Token::ValueToken,     array_entries[0].tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint, array_entries[0].tok.value.type_hint );
        saru_assert_equal( 1u,                              array_entries[0].tok.value.size );
        saru_assert_equal( (void*)(buffer+1),        (void*)array_entries[0].tok.value.ptr );
        saru_assert_equal( 'g',                             buffer[1] );

        saru_assert_equal( (void*)0,                        array_entries[1].next );
        saru_assert_equal( fastjson::Token::ValueToken,     array_entries[1].tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint, array_entries[1].tok.value.type_hint );
        saru_assert_equal( 1u,                              array_entries[1].tok.value.size );
        saru_assert_equal( (void*)(buffer+2),        (void*)array_entries[1].tok.value.ptr );
        saru_assert_equal( 'h',                             buffer[2] );

        saru_assert_equal( array_entries+3,                 array_entries[2].next );
        saru_assert_equal( fastjson::Token::ValueToken,     array_entries[2].tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint, array_entries[2].tok.value.type_hint );
        saru_assert_equal( 1u,                              array_entries[2].tok.value.size );
        saru_assert_equal( (void*)(buffer+4),        (void*)array_entries[2].tok.value.ptr );
        saru_assert_equal( 'j',                             buffer[4] );

        saru_assert_equal( (void*)0,                        array_entries[3].next );
        saru_assert_equal( fastjson::Token::ValueToken,     array_entries[3].tok.type );
        saru_assert_equal( fastjson::ValueType::StringHint, array_entries[3].tok.value.type_hint );
        saru_assert_equal( 1u,                              array_entries[3].tok.value.size );
        saru_assert_equal( (void*)(buffer+5),        (void*)array_entries[3].tok.value.ptr );
        saru_assert_equal( 'k',                             buffer[5] );

    }
Пример #21
0
void testB()
{
    saru_assert(!"intentional fail");
}