surrealdb-core 3.2.2

A scalable, distributed, collaborative, document-graph database, for the realtime web
Documentation
use crate::syn::{self, ParserSettings};
use crate::types::PublicValue;

#[test]
fn object_with_negative() {
	syn::parse_with(r#"{"foo": -1 }"#.as_bytes(), async |parser, stk| parser.parse_json(stk).await)
		.unwrap();
}

#[test]
fn object_with_trailing_whitespace() {
	syn::parse_with(r#"{"foo": -1 }\n"#.as_bytes(), async |parser, stk| {
		parser.parse_json(stk).await
	})
	.unwrap();
}

#[test]
fn array_with_negative() {
	syn::parse_with(r#"[-1]"#.as_bytes(), async |parser, stk| parser.parse_json(stk).await)
		.unwrap();
}

#[test]
fn not_record_id() {
	let res = syn::parse_with(r#" 'foo:bar-baz'  "#.as_bytes(), async |parser, stk| {
		parser.parse_json(stk).await
	})
	.unwrap();
	assert_eq!(res, PublicValue::String("foo:bar-baz".to_owned()))
}

#[test]
fn not_a_record_id_in_object() {
	let res =
		syn::parse_with(r#"{ "data":"focus:outline-none"}"#.as_bytes(), async |parser, stk| {
			parser.parse_json(stk).await
		})
		.unwrap();

	let object = res.into_object().unwrap();
	let data = object.get("data").unwrap();
	assert_eq!(*data, PublicValue::String("focus:outline-none".to_owned()))
}

#[test]
fn legacy_uuid() {
	let v = syn::parse_with_settings(
		r#" "11111111-1111-1111-1111-111111111111" "#.as_bytes(),
		ParserSettings {
			legacy_strands: true,
			..Default::default()
		},
		async |parser, stk| parser.parse_json(stk).await,
	)
	.unwrap();

	let surrealdb_types::Value::Uuid(_) = v else {
		panic!()
	};
}

#[test]
fn legacy_datetime() {
	let v = syn::parse_with_settings(
		r#" "2024-01-01T00:00:00Z" "#.as_bytes(),
		ParserSettings {
			legacy_strands: true,
			..Default::default()
		},
		async |parser, stk| parser.parse_json(stk).await,
	)
	.unwrap();

	let surrealdb_types::Value::Datetime(_) = v else {
		panic!()
	};
}

#[test]
fn json_surrogate_pair() {
	let res = syn::json(r#""\uD83D\uDE00""#).unwrap();
	assert_eq!(res, PublicValue::String("\u{1F600}".to_owned()));
}

#[test]
fn json_surrogate_pair_in_object() {
	let res = syn::json(r#"{"emoji": "\uD83D\uDE00"}"#).unwrap();
	let object = res.into_object().unwrap();
	let emoji = object.get("emoji").unwrap();
	assert_eq!(*emoji, PublicValue::String("\u{1F600}".to_owned()));
}

#[test]
fn surrealql_rejects_surrogate_pair() {
	let res = syn::value(r#""\uD83D\uDE00""#);
	assert!(res.is_err(), "SurrealQL should reject surrogate pairs");
}