示例#1
0
END_TEST

START_TEST (missing_dot)
{
    char *expression = "$x";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 2);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_failure(expression, context, path, ERR_UNEXPECTED_VALUE, 1);
    parser_free(context);
    path_free(path);
}
示例#2
0
END_TEST

START_TEST (bogus_context_length)
{
    jsonpath bogus_path;
    uint8_t bogus_input = 64;
    
    parser_context context;
    context.path = &bogus_path;
    context.input = &bogus_input;
    context.length = 0;

    reset_errno();
    assert_null(parse(&context));
    assert_errno(EINVAL);
}
示例#3
0
END_TEST

START_TEST (missing_recursive_step_test)
{
    char *expression = "$..";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 3);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_failure(expression, context, path, ERR_PREMATURE_END_OF_INPUT, 3);
    parser_free(context);
    path_free(path);
}
示例#4
0
END_TEST

START_TEST (eof_file_input)
{
    FILE *input = tmpfile();
    fseek(input, 0, SEEK_END);

    reset_errno();
    loader_context *loader = make_file_loader(input);
    assert_not_null(loader);
    assert_errno(EINVAL);

    assert_loader_failure(loader, ERR_INPUT_SIZE_IS_ZERO);    

    fclose(input);
    loader_free(loader);
}
示例#5
0
END_TEST

START_TEST (quoted_empty_step)
{
    char *expression = "$.foo.''.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_failure(expression, context, path, ERR_EXPECTED_NAME_CHAR, 7);
    
    parser_free(context);
    path_free(path);
}
示例#6
0
END_TEST

START_TEST (negative_subscript_predicate)
{
    char *expression = "$.foo[ -3].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    // xxx - fixme! this should be ERR_EXPECTED_INTEGER instead!
    assert_parser_failure(expression, context, path, ERR_UNSUPPORTED_PRED_TYPE, 7);
    path_free(path);
    parser_free(context);
}
示例#7
0
END_TEST

START_TEST (dollar_only)
{
    char *expression = "$";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 1);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 1);
    assert_root_step(path);

    path_free(path);
    parser_free(context);
}
示例#8
0
END_TEST

START_TEST (zero_step_slice_predicate)
{
    char *expression = "$.foo[::0].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    // xxx - fix me! this should be ERR_STEP_CANNOT_BE_ZERO instead
    // xxx - fix me! this should be position 8 instead, need a non-zero signed int parser
    assert_parser_failure(expression, context, path, ERR_UNSUPPORTED_PRED_TYPE, 9);

    path_free(path);
    parser_free(context);
}
示例#9
0
void tag_setup(void)
{
    size_t yaml_size = strlen((char *)TAGGED_YAML);

    loader_context *loader = make_string_loader(TAGGED_YAML, yaml_size);
    assert_not_null(loader);
    tagged_model = load(loader);
    assert_not_null(tagged_model);
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));

    reset_errno();
    tagged_mapping_root = model_document_root(tagged_model, 0);
    assert_noerr();
    assert_not_null(tagged_mapping_root);
    
    assert_node_kind(tagged_mapping_root, MAPPING);
    assert_node_size(tagged_mapping_root, 7);

    loader_free(loader);
}
示例#10
0
END_TEST

document_model *anchor_setup(const unsigned char *yaml)
{
    loader_context *loader = make_string_loader(yaml, strlen((const char *)yaml));
    assert_not_null(loader);
    document_model *result = load(loader);
    assert_not_null(result);
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));

    reset_errno();
    node *root = model_document_root(result, 0);
    assert_noerr();
    assert_not_null(root);
    
    assert_node_kind(root, MAPPING);

    loader_free(loader);
    return result;
}
示例#11
0
END_TEST

START_TEST (absolute_recursive_step)
{
    char *expression = "$..foo";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 6);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 2);
    assert_root_step(path);
    assert_recursive_name_step(path, 1, "foo");
    assert_no_predicate(path, 0);

    path_free(path);    
    parser_free(context);
}
示例#12
0
END_TEST

START_TEST (iteration)
{
    char *expression = "$.foo.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);

    unsigned long counter = 0;
    assert_true(path_iterate(path, count, &counter));
    assert_uint_eq(3, counter);

    path_free(path);
    parser_free(context);
}
示例#13
0
END_TEST

START_TEST (recursive_wildcard)
{
    char *expression = "$.foo..*";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_recursive_wildcard_step(path, 2);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
示例#14
0
END_TEST

START_TEST (negative_step_slice_predicate)
{
    char *expression = "$.foo[1:3:-3].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_slice_predicate(path, 1, 1, 3, -3);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
示例#15
0
END_TEST

START_TEST (slice_predicate_form2_with_step)
{
    char *expression = "$.foo[-1::2].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_slice_predicate(path, 1, -1, INT_FAST32_MAX, 2);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
示例#16
0
END_TEST

START_TEST (boolean_type_test)
{
    char *expression = "$.foo.boolean()";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_single_type_step(path, 2, BOOLEAN_TEST);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
示例#17
0
END_TEST

START_TEST (type_test_with_subscript_predicate)
{
    char *expression = "$.foo.array()[0]";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_no_predicate(path, 1);
    assert_single_type_step(path, 2, ARRAY_TEST);
    assert_subscript_predicate(path, 2, 0);

    path_free(path);
    parser_free(context);
}
示例#18
0
END_TEST

START_TEST (subscript_predicate_with_whitespace)
{
    char *expression = "$.foo  [\t42\r]\n.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_subscript_predicate(path, 1, 42);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
示例#19
0
END_TEST

START_TEST (relative_multi_step)
{
    char *expression = "foo.bar..baz";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, RELATIVE_PATH, 3);
    assert_single_name_step(path, 0, "foo");
    assert_single_name_step(path, 1, "bar");
    assert_recursive_name_step(path, 2, "baz");
    assert_no_predicate(path, 0);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);    
    parser_free(context);
}
示例#20
0
文件: buffers.c 项目: gnutls/gnutls
/* @total: The sum of the data in giovec
 */
static ssize_t
_gnutls_writev(gnutls_session_t session, const giovec_t * giovec,
	       unsigned giovec_cnt, unsigned total)
{
	int i;
	bool is_dtls = IS_DTLS(session);
	unsigned no_writev = 0;
	gnutls_transport_ptr_t fd = session->internals.transport_send_ptr;

	reset_errno(session);

	if (session->internals.vec_push_func != NULL) {
		if (is_dtls && giovec_cnt > 1) {
			if (total > session->internals.dtls.mtu) {
				no_writev = 1;
			}
		}

		if (no_writev == 0) {
			i = session->internals.vec_push_func(fd, giovec, giovec_cnt);
		} else {
			i = _gnutls_writev_emu(session, fd, giovec, giovec_cnt, 1);
		}
	} else if (session->internals.push_func != NULL) {
		i = _gnutls_writev_emu(session, fd, giovec, giovec_cnt, 0);
	} else
		return gnutls_assert_val(GNUTLS_E_PUSH_ERROR);

	if (i == -1) {
		int err = get_errno(session);
		_gnutls_debug_log("WRITE: %d returned from %p, errno: %d\n",
				  i, fd, err);

		return errno_to_gerr(err, is_dtls);
	}
	return i;
}
示例#21
0
文件: fat.c 项目: giuse88/nucleo
BOOL delete_all_rw_fat (const VOL_PTR volume, const dword chain) { 
  
  dword t=0, prec=0; 
  
  
  if(!(volume) || chain <= 2 ) {
    set_errno(EINVAL,"Volume errato (%s-line%d)", __FILE__, __LINE__); 
    return FALSE; 
  }
  
  sem_wait(volume->sem_fat); 
  
  t=chain; 
  prec=chain; 
  
    do {
	prec=t; 
	if(!(t=get_next_fat(volume->fat, t))) {
	  perror("Errore lettura ");
	  sem_signal(volume->sem_fat); 
	  return FALSE; 
	}
	
	if (!scrivi_fat(volume,prec, FREE_32)) {
	  perror("Errore scrittura");
	  sem_signal(volume->sem_fat); 
	  return FALSE;  
	}
    } while(!isLast_fat(t)); 
    
   sem_signal(volume->sem_fat); 
  
    
  reset_errno(); 
  return TRUE; 
  
}
示例#22
0
END_TEST

document_model *duplicate_setup(enum loader_duplicate_key_strategy value)
{
    size_t yaml_size = strlen((char *)DUPLICATE_KEY_YAML);

    loader_context *loader = make_string_loader(DUPLICATE_KEY_YAML, yaml_size);
    assert_not_null(loader);
    loader_set_dupe_strategy(loader, value);

    document_model *result = load(loader);
    assert_not_null(result);
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));

    reset_errno();
    node *root = model_document_root(result, 0);
    assert_noerr();
    assert_not_null(root);
    
    assert_node_kind(root, MAPPING);
    loader_free(loader);

    return result;
}
示例#23
0
END_TEST

START_TEST (quoted_multi_step)
{
    char *expression = "$.foo.'happy fun ball'.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_single_name_step(path, 2, "happy fun ball");
    assert_single_name_step(path, 3, "bar");
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);
    assert_no_predicate(path, 3);

    path_free(path);    
    parser_free(context);
}
示例#24
0
END_TEST

START_TEST (whitespace)
{
    char *expression = "  $ \r\n. foo \n.\n. \t'happy fun ball' . \t string()";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_recursive_name_step(path, 2, "happy fun ball");
    assert_single_type_step(path, 3, STRING_TEST);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);
    assert_no_predicate(path, 3);

    path_free(path);    
    parser_free(context);
}
示例#25
0
END_TEST

START_TEST (wildcard_predicate)
{
    char *expression = "$.store.book[*].author";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "store");
    assert_no_predicate(path, 1);
    assert_single_name_step(path, 2, "book");
    assert_wildcard_predicate(path, 2);
    assert_single_name_step(path, 3, "author");
    assert_no_predicate(path, 3);

    path_free(path);
    parser_free(context);
}
示例#26
0
文件: buffers.c 项目: gnutls/gnutls
static ssize_t
_gnutls_stream_read(gnutls_session_t session, mbuffer_st ** bufel,
		    size_t size, gnutls_pull_func pull_func,
		    unsigned int *ms)
{
	size_t left;
	ssize_t i = 0;
	size_t max_size = max_record_recv_size(session);
	uint8_t *ptr;
	gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr;
	int ret;
	struct timespec t1, t2;
	unsigned int diff;

	session->internals.direction = 0;

	*bufel = _mbuffer_alloc_align16(MAX(max_size, size), get_total_headers(session));
	if (!*bufel) {
		gnutls_assert();
		return GNUTLS_E_MEMORY_ERROR;
	}
	ptr = (*bufel)->msg.data;

	left = size;
	while (left > 0) {
		if (ms && *ms > 0) {
			ret = _gnutls_io_check_recv(session, *ms);
			if (ret < 0) {
				gnutls_assert();
				goto cleanup;
			}

			gnutls_gettime(&t1);
		}

		reset_errno(session);

		i = pull_func(fd, &ptr[size - left], left);

		if (i < 0) {
			int err = get_errno(session);

			_gnutls_read_log
			    ("READ: %d returned from %p, errno=%d gerrno=%d\n",
			     (int) i, fd, errno,
			     session->internals.errnum);

			if (err == EAGAIN || err == EINTR) {
				if (size - left > 0) {

					_gnutls_read_log
					    ("READ: returning %d bytes from %p\n",
					     (int) (size - left), fd);

					goto finish;
				}

				ret = errno_to_gerr(err, 0);
				goto cleanup;
			} else {
				gnutls_assert();
				ret = GNUTLS_E_PULL_ERROR;
				goto cleanup;
			}
		} else {

			_gnutls_read_log("READ: Got %d bytes from %p\n",
					 (int) i, fd);

			if (i == 0)
				break;	/* EOF */
		}

		left -= i;
		(*bufel)->msg.size += i;

		if (ms && *ms > 0 && *ms != GNUTLS_INDEFINITE_TIMEOUT) {
			gnutls_gettime(&t2);
			diff = timespec_sub_ms(&t2, &t1);
			if (diff < *ms)
				*ms -= diff;
			else {
				ret = gnutls_assert_val(GNUTLS_E_TIMEDOUT);
				goto cleanup;
			}
		}
	}

      finish:

	_gnutls_read_log("READ: read %d bytes from %p\n",
			 (int) (size - left), fd);

	if (size - left == 0)
		_mbuffer_xfree(bufel);

	return (size - left);

      cleanup:
	_mbuffer_xfree(bufel);
	return ret;
}
示例#27
0
文件: buffers.c 项目: gnutls/gnutls
static ssize_t
_gnutls_dgram_read(gnutls_session_t session, mbuffer_st ** bufel,
		   gnutls_pull_func pull_func, unsigned int *ms)
{
	ssize_t i, ret;
	uint8_t *ptr;
	struct timespec t1, t2;
	size_t max_size, recv_size;
	gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr;
	unsigned int diff;

	max_size = max_record_recv_size(session);
	recv_size = max_size;

	session->internals.direction = 0;

	if (ms && *ms > 0) {
		ret = _gnutls_io_check_recv(session, *ms);
		if (ret < 0)
			return gnutls_assert_val(ret);
		gnutls_gettime(&t1);
	}

	*bufel = _mbuffer_alloc_align16(max_size, get_total_headers(session));
	if (*bufel == NULL)
		return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);

	ptr = (*bufel)->msg.data;

	reset_errno(session);
	i = pull_func(fd, ptr, recv_size);

	if (i < 0) {
		int err = get_errno(session);

		_gnutls_read_log("READ: %d returned from %p, errno=%d\n",
				 (int) i, fd, err);

		ret = errno_to_gerr(err, 1);
		goto cleanup;
	} else {
		_gnutls_read_log("READ: Got %d bytes from %p\n", (int) i,
				 fd);
		if (i == 0) {
			/* If we get here, we likely have a stream socket.
			 * That assumption may not work on DCCP. */
			gnutls_assert();
			ret = 0;
			goto cleanup;
		}

		_mbuffer_set_udata_size(*bufel, i);
	}

	if (ms && *ms > 0) {
		gnutls_gettime(&t2);
		diff = timespec_sub_ms(&t2, &t1);
		if (diff < *ms)
			*ms -= diff;
		else {
			ret = gnutls_assert_val(GNUTLS_E_TIMEDOUT);
			goto cleanup;
		}
	}

	_gnutls_read_log("READ: read %d bytes from %p\n", (int) i, fd);

	return i;

      cleanup:
	_mbuffer_xfree(bufel);
	return ret;
}
示例#28
0
END_TEST

static void assert_model_state(loader_context *loader, document_model *model)
{
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));
    assert_not_null(model);
    assert_uint_eq(1, model_document_count(model));

    reset_errno();
    node *root = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(root);
    
    assert_node_kind(root, MAPPING);
    assert_node_size(root, 5);

    reset_errno();
    node *one = mapping_get(root, (uint8_t *)"one", 3ul);
    assert_noerr();
    assert_not_null(one);
    assert_node_kind(one, SEQUENCE);
    assert_node_size(one, 2);

    reset_errno();
    node *one_0 = sequence_get(one, 0);
    assert_noerr();
    assert_node_kind(one_0, SCALAR);
    assert_scalar_value(one_0, "foo1");
    assert_scalar_kind(one_0, SCALAR_STRING);
    reset_errno();
    node *one_1 = sequence_get(one, 1);
    assert_noerr();
    assert_node_kind(one_1, SCALAR);
    assert_scalar_value(one_1, "bar1");
    assert_scalar_kind(one_1, SCALAR_STRING);

    reset_errno();
    node *two = mapping_get(root, (uint8_t *)"two", 3ul);
    assert_noerr();
    assert_not_null(two);
    assert_node_kind(two, SCALAR);
    assert_scalar_value(two, "foo2");
    assert_scalar_kind(two, SCALAR_STRING);

    reset_errno();
    node *three = mapping_get(root, (uint8_t *)"three", 5ul);
    assert_noerr();
    assert_not_null(three);
    assert_node_kind(three, SCALAR);
    assert_scalar_value(three, "null");
    assert_scalar_kind(three, SCALAR_NULL);

    reset_errno();
    node *four = mapping_get(root, (uint8_t *)"four", 4ul);
    assert_noerr();
    assert_not_null(four);
    assert_node_kind(four, SEQUENCE);

    reset_errno();
    node *four_0 = sequence_get(four, 0);
    assert_noerr();
    assert_node_kind(four_0, SCALAR);
    assert_scalar_value(four_0, "true");
    assert_scalar_kind(four_0, SCALAR_BOOLEAN);
    assert_true(scalar_boolean_is_true(four_0));
    assert_false(scalar_boolean_is_false(four_0));
    reset_errno();
    node *four_1 = sequence_get(four, 1);
    assert_noerr();
    assert_node_kind(four_0, SCALAR);
    assert_scalar_value(four_1, "false");
    assert_scalar_kind(four_1, SCALAR_BOOLEAN);
    assert_true(scalar_boolean_is_false(four_1));
    assert_false(scalar_boolean_is_true(four_1));

    reset_errno();
    node *five = mapping_get(root, (uint8_t *)"five", 4ul);
    assert_noerr();
    assert_not_null(five);
    assert_node_kind(five, SEQUENCE);
    node *five_0 = sequence_get(five, 0);
    assert_noerr();
    assert_node_kind(five_0, SCALAR);
    assert_scalar_value(five_0, "1.5");
    assert_scalar_kind(five_0, SCALAR_REAL);
    reset_errno();
    node *five_1 = sequence_get(five, 1);
    assert_noerr();
    assert_node_kind(five_1, SCALAR);
    assert_scalar_value(five_1, "42");
    assert_scalar_kind(five_1, SCALAR_INTEGER);
    reset_errno();
    node *five_2 = sequence_get(five, 2);
    assert_noerr();
    assert_node_kind(five_2, SCALAR);
    assert_scalar_value(five_2, "1978-07-26 10:15");
    assert_scalar_kind(five_2, SCALAR_TIMESTAMP);
    reset_errno();
}
示例#29
0
END_TEST

START_TEST (sequence_type)
{
    reset_errno();
    Node *r = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(r);
    assert_node_kind(r, MAPPING);

    reset_errno();
    Node *s = mapping_get(mapping(r), (uint8_t *)"one", 3ul);
    assert_noerr();
    assert_not_null(s);
    assert_node_kind(s, SEQUENCE);
    assert_node_size(s, 2);
    
    reset_errno();
    Node *zero = sequence_get(sequence(s), 0);
    assert_noerr();
    assert_not_null(zero);
    assert_node_kind(zero, SCALAR);
    
    reset_errno();
    Node *one = sequence_get(sequence(s), 1);
    assert_noerr();
    assert_not_null(one);
    assert_node_kind(one, SCALAR);

    reset_errno();
    Scalar *x = make_scalar_node((uint8_t *)"x", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(x);
    reset_errno();
    Scalar *y = make_scalar_node((uint8_t *)"y", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(y);
    reset_errno();
    Scalar *z = make_scalar_node((uint8_t *)"z", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(z);
    reset_errno();
    Sequence *xyz = make_sequence_node();
    assert_noerr();
    assert_not_null(xyz);

    reset_errno();
    sequence_add(xyz, node(x));
    assert_noerr();
    reset_errno();
    sequence_add(xyz, node(y));
    assert_noerr();
    reset_errno();
    sequence_add(xyz, node(z));
    assert_noerr();
    assert_uint_eq(3, node_size(node(xyz)));
    assert_ptr_eq(node(x), sequence_get(xyz, 0));
    assert_ptr_eq(node(y), sequence_get(xyz, 1));
    assert_ptr_eq(node(z), sequence_get(xyz, 2));
    node_free(node(xyz));
}
示例#30
0
END_TEST

void model_setup(void)
{
    reset_errno();
    model = make_model();
    assert_not_null(model);
    assert_noerr();

    reset_errno();
    Mapping *root = make_mapping_node();
    assert_noerr();
    assert_not_null(root);

    reset_errno();
    Scalar *foo1 = make_scalar_node((uint8_t *)"foo1", 4, SCALAR_STRING);
    assert_noerr();
    assert_not_null(foo1);
    reset_errno();
    Scalar *one_point_five = make_scalar_node((uint8_t *)"1.5", 4, SCALAR_REAL);
    assert_noerr();
    assert_not_null(one_point_five);
    reset_errno();
    Sequence *one_value = make_sequence_node();
    assert_noerr();
    assert_not_null(one_value);
    reset_errno();
    sequence_add(one_value, node(foo1));
    assert_noerr();
    reset_errno();
    sequence_add(one_value, node(one_point_five));
    assert_noerr();
    reset_errno();
    mapping_put(root, (uint8_t *)"one", 3, node(one_value));
    assert_noerr();
    
    reset_errno();
    Scalar *two_value = make_scalar_node((uint8_t *)"foo2", 4, SCALAR_STRING);
    assert_noerr();
    assert_not_null(two_value);
    reset_errno();
    mapping_put(root, (uint8_t *)"two", 3, node(two_value));
    assert_noerr();
    
    reset_errno();
    Scalar *three_value = make_scalar_node((uint8_t *)"false", 5, SCALAR_BOOLEAN);
    assert_noerr();
    assert_not_null(three_value);
    reset_errno();
    mapping_put(root, (uint8_t *)"three", 5, node(three_value));
    assert_noerr();

    reset_errno();
    Scalar *four_value = make_scalar_node((uint8_t *)"true", 4, SCALAR_BOOLEAN);
    assert_noerr();
    assert_not_null(four_value);
    reset_errno();
    mapping_put(root, (uint8_t *)"four", 4, node(four_value));
    assert_noerr();

    reset_errno();
    Document *doc = make_document_node();
    document_set_root(doc, node(root));
    assert_noerr();
    assert_not_null(doc);
    reset_errno();
    model_add(model, doc);
    assert_noerr();
}