astreams
: Mostly implement StreamsObject
This commit is contained in:
parent
4389ace574
commit
55fc252981
4 changed files with 769 additions and 398 deletions
|
@ -21,6 +21,7 @@ thiserror = "2.0.3"
|
|||
mediatype = { version = "0.19.18", features = ["serde"] }
|
||||
language-tags = { version = "0.3.2", features = ["serde"] }
|
||||
chrono = { version = "0.4.39", features = ["serde"] }
|
||||
speedate = "0.15.0"
|
||||
|
||||
[dev-dependencies]
|
||||
tokio = { version = "1.41.1", features = ["macros", "rt-multi-thread"] }
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
use anyhow::{anyhow, Error};
|
||||
use static_iref::iri;
|
||||
use anyhow::Result as AResult;
|
||||
use chrono::{DateTime, FixedOffset, Local, TimeDelta};
|
||||
use iref::Iri;
|
||||
use json_ld::Direction;
|
||||
use json_ld::object::Any;
|
||||
use json_ld::{BlankIdBuf, Direction, Id, IndexedObject, IriBuf, Node, Object, ValidId};
|
||||
use json_ld::object::{Any};
|
||||
use json_ld::syntax::LangTagBuf;
|
||||
use mediatype::MediaType;
|
||||
use crate::activitystreams::{StreamsEntity, StreamsLink};
|
||||
use crate::activitystreams::{StreamsCollection, StreamsEntity, StreamsImage, StreamsLink, StreamsObject};
|
||||
|
||||
pub type LangTriple = (String, Option<LangTagBuf>, Option<Direction>);
|
||||
|
||||
pub trait StreamsJsonLD<Entity> {
|
||||
pub trait ProcessableJsonLD<Entity, Link> {
|
||||
fn jsonld_any_value_string(&self, id: &Iri) -> Option<AResult<String>>;
|
||||
fn jsonld_iter_value_string(&self, id: &Iri) -> impl Iterator<Item = AResult<String>>;
|
||||
fn jsonld_iter_value_langstring(&self, id: &Iri) -> impl Iterator<Item = AResult<LangTriple>>;
|
||||
|
@ -19,10 +20,13 @@ pub trait StreamsJsonLD<Entity> {
|
|||
fn jsonld_any_value_langtag(&self, id: &Iri) -> Option<AResult<LangTagBuf>>;
|
||||
fn jsonld_any_value_u32(&self, id: &Iri) -> Option<AResult<u32>>;
|
||||
fn jsonld_any_value_u64(&self, id: &Iri) -> Option<AResult<u64>>;
|
||||
fn jsonld_any_value_timedelta(&self, id: &Iri) -> Option<AResult<TimeDelta>>;
|
||||
fn jsonld_any_value_datetime_local(&self, id: &Iri) -> Option<AResult<DateTime<Local>>>;
|
||||
fn jsonld_iter_node_entity(&self, id: &Iri) -> impl Iterator<Item = AResult<Entity>>;
|
||||
fn jsonld_iter_node_url(&self, id: &Iri) -> impl Iterator<Item = AResult<Link>>;
|
||||
}
|
||||
|
||||
impl StreamsJsonLD<json_ld::Node> for json_ld::Node {
|
||||
impl ProcessableJsonLD<Node, Node> for Node {
|
||||
fn jsonld_any_value_string(&self, id: &Iri) -> Option<AResult<String>> {
|
||||
let property = match self.properties.get_any(&id) {
|
||||
None => return None,
|
||||
|
@ -224,7 +228,65 @@ impl StreamsJsonLD<json_ld::Node> for json_ld::Node {
|
|||
Some(Ok(r#u64))
|
||||
}
|
||||
|
||||
fn jsonld_iter_node_entity(&self, id: &Iri) -> impl Iterator<Item = AResult<json_ld::Node>> {
|
||||
fn jsonld_any_value_timedelta(&self, id: &Iri) -> Option<AResult<TimeDelta>> {
|
||||
let property = match self.properties.get_any(&id) {
|
||||
None => return None,
|
||||
Some(property) => property,
|
||||
};
|
||||
|
||||
let value = match property.as_value() {
|
||||
None => return Some(Err(anyhow!("Couldn't process property as JSON-LD value"))),
|
||||
Some(value) => value,
|
||||
};
|
||||
|
||||
let r#str = match value.as_str() {
|
||||
None => return Some(Err(anyhow!("Couldn't process property as JSON-LD string"))),
|
||||
Some(r#str) => r#str
|
||||
};
|
||||
|
||||
let duration_sd = match speedate::Duration::parse_str(r#str) {
|
||||
Err(e) => return Some(Err(anyhow!("Couldn't process property as JSON-LD duration: {e:?}"))),
|
||||
Ok(duration_sd) => duration_sd,
|
||||
};
|
||||
|
||||
let duration_s = duration_sd.signed_total_seconds();
|
||||
let duration_us = duration_sd.microsecond;
|
||||
|
||||
let duration_chrono = match TimeDelta::new(duration_s, duration_us) {
|
||||
None => return Some(Err(anyhow!("Couldn't convert speedate duration to chrono duration because chrono considers the duration to be out-of-bounds"))),
|
||||
Some(duration_chrono) => duration_chrono
|
||||
};
|
||||
|
||||
Some(Ok(duration_chrono))
|
||||
}
|
||||
|
||||
fn jsonld_any_value_datetime_local(&self, id: &Iri) -> Option<AResult<DateTime<Local>>> {
|
||||
let property = match self.properties.get_any(&id) {
|
||||
None => return None,
|
||||
Some(property) => property,
|
||||
};
|
||||
|
||||
let value = match property.as_value() {
|
||||
None => return Some(Err(anyhow!("Couldn't process property as JSON-LD value"))),
|
||||
Some(value) => value,
|
||||
};
|
||||
|
||||
let r#str = match value.as_str() {
|
||||
None => return Some(Err(anyhow!("Couldn't process property as JSON-LD string"))),
|
||||
Some(r#str) => r#str
|
||||
};
|
||||
|
||||
let datetime_fixed = match DateTime::<FixedOffset>::parse_from_rfc3339(r#str) {
|
||||
Err(e) => return Some(Err(anyhow!("Couldn't process property as JSON-LD dateTime: {e:?}"))),
|
||||
Ok(datetime_fixed) => datetime_fixed
|
||||
};
|
||||
|
||||
let datetime_local: DateTime<Local> = datetime_fixed.into();
|
||||
|
||||
Some(Ok(datetime_local))
|
||||
}
|
||||
|
||||
fn jsonld_iter_node_entity(&self, id: &Iri) -> impl Iterator<Item = AResult<Node>> {
|
||||
let properties = self.properties.get(&id);
|
||||
|
||||
let nodes = properties.map(|v| v
|
||||
|
@ -237,16 +299,67 @@ impl StreamsJsonLD<json_ld::Node> for json_ld::Node {
|
|||
|
||||
nodes
|
||||
}
|
||||
|
||||
fn jsonld_iter_node_url(&self, id: &Iri) -> impl Iterator<Item = AResult<Node>> {
|
||||
let properties = self.properties.get(&id);
|
||||
|
||||
let nodes = properties.map(|v| {
|
||||
if let Some(value) = v.as_value() {
|
||||
let mut node = Node::<IriBuf, BlankIdBuf>::new();
|
||||
|
||||
let r#type = Id::Valid(
|
||||
ValidId::Iri(
|
||||
IriBuf::new(
|
||||
String::from("https://www.w3.org/ns/activitystreams#Link")
|
||||
).unwrap()
|
||||
)
|
||||
);
|
||||
|
||||
let _ = node.types_mut_or_insert(vec![
|
||||
r#type
|
||||
]);
|
||||
|
||||
let properties = node.properties_mut();
|
||||
|
||||
let key = Id::Valid(
|
||||
ValidId::Iri(
|
||||
IriBuf::new(
|
||||
String::from("https://www.w3.org/ns/activitystreams#href")
|
||||
).unwrap()
|
||||
)
|
||||
);
|
||||
|
||||
properties.insert(
|
||||
key,
|
||||
IndexedObject::none(
|
||||
Object::Value(
|
||||
value.clone()
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
Ok(node)
|
||||
}
|
||||
else if let Some(node) = v.as_node() {
|
||||
Ok(node.clone())
|
||||
}
|
||||
else {
|
||||
Err(anyhow!("Couldn't process property not as JSON-LD url nor as JSON-LD node"))
|
||||
}
|
||||
});
|
||||
|
||||
nodes
|
||||
}
|
||||
}
|
||||
|
||||
impl StreamsEntity<json_ld::Node> for json_ld::Node {
|
||||
impl StreamsEntity<Node> for Node {
|
||||
fn activitystreams_names(&self) -> impl Iterator<Item = AResult<LangTriple>> {
|
||||
self.jsonld_iter_value_langstring(
|
||||
iri!("https://www.w3.org/ns/activitystreams#name")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_previews(&self) -> impl Iterator<Item = AResult<json_ld::Node>> {
|
||||
fn activitystreams_previews(&self) -> impl Iterator<Item = AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#preview")
|
||||
)
|
||||
|
@ -259,7 +372,133 @@ impl StreamsEntity<json_ld::Node> for json_ld::Node {
|
|||
}
|
||||
}
|
||||
|
||||
impl StreamsLink<json_ld::Node> for json_ld::Node {
|
||||
impl StreamsObject<Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node> for Node {
|
||||
fn activitystreams_attachments(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#attachment")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_attributedto(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#attributedTo")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_audiences(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#audience")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_content(&self) -> impl Iterator<Item=AResult<LangTriple>> {
|
||||
self.jsonld_iter_value_langstring(
|
||||
iri!("https://www.w3.org/ns/activitystreams#content")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_context(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#context")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_endtime(&self) -> Option<AResult<DateTime<Local>>> {
|
||||
self.jsonld_any_value_datetime_local(
|
||||
iri!("https://www.w3.org/ns/activitystreams#endTime")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_published(&self) -> Option<AResult<DateTime<Local>>> {
|
||||
self.jsonld_any_value_datetime_local(
|
||||
iri!("https://www.w3.org/ns/activitystreams#published")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_replies(&self) -> Option<AResult<Node>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn activitystreams_generators(&self) -> impl Iterator<Item = AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#generator")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_icons(&self) -> impl Iterator<Item = AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#icon")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_images(&self) -> impl Iterator<Item = AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#image")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_starttime(&self) -> Option<AResult<DateTime<Local>>> {
|
||||
self.jsonld_any_value_datetime_local(
|
||||
iri!("https://www.w3.org/ns/activitystreams#startTime")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_summary(&self) -> impl Iterator<Item=AResult<LangTriple>> {
|
||||
self.jsonld_iter_value_langstring(
|
||||
iri!("https://www.w3.org/ns/activitystreams#summary")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_tags(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#tag")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_updated(&self) -> Option<AResult<DateTime<Local>>> {
|
||||
self.jsonld_any_value_datetime_local(
|
||||
iri!("https://www.w3.org/ns/activitystreams#updated")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_urls(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_url(
|
||||
iri!("https://www.w3.org/ns/activitystreams#url")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_to(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#to")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_bto(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#bto")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_cc(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#cc")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_bcc(&self) -> impl Iterator<Item=AResult<Node>> {
|
||||
self.jsonld_iter_node_entity(
|
||||
iri!("https://www.w3.org/ns/activitystreams#bcc")
|
||||
)
|
||||
}
|
||||
|
||||
fn activitystreams_duration(&self) -> Option<AResult<TimeDelta>> {
|
||||
self.jsonld_any_value_timedelta(
|
||||
iri!("https://www.w3.org/ns/activitystreams#duration")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl StreamsLink<Node> for Node {
|
||||
fn activitystreams_href(&self) -> Option<AResult<String>> {
|
||||
self.jsonld_any_node_string(
|
||||
iri!("https://www.w3.org/ns/activitystreams#href")
|
||||
|
@ -290,3 +529,7 @@ impl StreamsLink<json_ld::Node> for json_ld::Node {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl StreamsImage<Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node> for Node {}
|
||||
|
||||
impl StreamsCollection<Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node, Node> for Node {}
|
||||
|
|
|
@ -31,12 +31,17 @@ pub trait StreamsEntity<Preview> where
|
|||
}
|
||||
|
||||
/// Something that can be considered a `https://www.w3.org/ns/activitystreams#Object`.
|
||||
pub trait StreamsObject<Preview, Attachment, Attribution, Audience, Context, Tag, Link, Target> where
|
||||
pub trait StreamsObject<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target> where
|
||||
Self: StreamsEntity<Preview>,
|
||||
Preview: StreamsEntity<Preview>,
|
||||
Attachment: StreamsEntity<Preview>,
|
||||
Audience: StreamsEntity<Preview>,
|
||||
Context: StreamsEntity<Preview>,
|
||||
Collection: StreamsCollection<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>,
|
||||
Generator: StreamsEntity<Preview>,
|
||||
Image: StreamsImage<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>, // TODO: IMAGE OR LINK!!
|
||||
InReplyTo: StreamsEntity<Preview>,
|
||||
Location: StreamsEntity<Preview>,
|
||||
Tag: StreamsEntity<Preview>,
|
||||
Link: StreamsLink<Preview>,
|
||||
Target: StreamsEntity<Preview>,
|
||||
|
@ -48,8 +53,12 @@ pub trait StreamsObject<Preview, Attachment, Attribution, Audience, Context, Tag
|
|||
fn activitystreams_context(&self) -> impl Iterator<Item = AResult<Context>>;
|
||||
fn activitystreams_endtime(&self) -> Option<AResult<DateTime<Local>>>;
|
||||
fn activitystreams_published(&self) -> Option<AResult<DateTime<Local>>>;
|
||||
fn activitystreams_replies(&self) -> Option<AResult<Collection>>;
|
||||
fn activitystreams_generators(&self) -> impl Iterator<Item = AResult<Generator>>;
|
||||
fn activitystreams_icons(&self) -> impl Iterator<Item = AResult<Image>>;
|
||||
fn activitystreams_images(&self) -> impl Iterator<Item = AResult<Image>>;
|
||||
fn activitystreams_starttime(&self) -> Option<AResult<DateTime<Local>>>;
|
||||
fn activitystreams_summaries(&self) -> impl Iterator<Item = AResult<(String, Option<LangTagBuf>, Option<Direction>)>>;
|
||||
fn activitystreams_summary(&self) -> impl Iterator<Item = AResult<(String, Option<LangTagBuf>, Option<Direction>)>>;
|
||||
fn activitystreams_tags(&self) -> impl Iterator<Item = AResult<Audience>>;
|
||||
fn activitystreams_updated(&self) -> Option<AResult<DateTime<Local>>>;
|
||||
fn activitystreams_urls(&self) -> impl Iterator<Item = AResult<Link>>;
|
||||
|
@ -78,3 +87,35 @@ pub trait StreamsLink<Preview> where
|
|||
// FIXME: This doesn't accept numbers greater than u64
|
||||
fn activitystreams_width(&self) -> Option<AResult<u64>>;
|
||||
}
|
||||
|
||||
pub trait StreamsCollection<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target> where
|
||||
Self: StreamsObject<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>,
|
||||
Preview: StreamsEntity<Preview>,
|
||||
Attachment: StreamsEntity<Preview>,
|
||||
Audience: StreamsEntity<Preview>,
|
||||
Context: StreamsEntity<Preview>,
|
||||
Collection: StreamsCollection<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>,
|
||||
Generator: StreamsEntity<Preview>,
|
||||
Image: StreamsImage<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>, // TODO: IMAGE OR LINK!!
|
||||
InReplyTo: StreamsEntity<Preview>,
|
||||
Location: StreamsEntity<Preview>,
|
||||
Tag: StreamsEntity<Preview>,
|
||||
Link: StreamsLink<Preview>,
|
||||
Target: StreamsEntity<Preview>,
|
||||
{}
|
||||
|
||||
pub trait StreamsImage<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target> where
|
||||
Self: StreamsObject<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>,
|
||||
Preview: StreamsEntity<Preview>,
|
||||
Attachment: StreamsEntity<Preview>,
|
||||
Audience: StreamsEntity<Preview>,
|
||||
Context: StreamsEntity<Preview>,
|
||||
Collection: StreamsCollection<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>,
|
||||
Generator: StreamsEntity<Preview>,
|
||||
Image: StreamsImage<Preview, Attachment, Attribution, Audience, Context, Collection, Generator, Image, InReplyTo, Location, Tag, Link, Target>, // TODO: IMAGE OR LINK!!
|
||||
InReplyTo: StreamsEntity<Preview>,
|
||||
Location: StreamsEntity<Preview>,
|
||||
Tag: StreamsEntity<Preview>,
|
||||
Link: StreamsLink<Preview>,
|
||||
Target: StreamsEntity<Preview>,
|
||||
{}
|
||||
|
|
|
@ -1,408 +1,494 @@
|
|||
use json_ld::syntax::LangTagBuf;
|
||||
use acrate_astreams::activitystreams::jsonld::LangTriple;
|
||||
|
||||
macro_rules! test_example {
|
||||
($modname:ident, $filename:literal) => {
|
||||
mod $modname {
|
||||
use json_ld::syntax::Parse;
|
||||
use json_ld::Expand;
|
||||
macro_rules! fixture_example {
|
||||
($filename:literal) => {
|
||||
use json_ld::syntax::Parse;
|
||||
use json_ld::Expand;
|
||||
|
||||
pub const DATA: &'static str = include_str!($filename);
|
||||
|
||||
pub fn get_parsed_document() -> json_ld::RemoteDocument {
|
||||
let (value, _codemap) = json_ld::syntax::Value::parse_str(DATA).expect("Failed to parse example");
|
||||
|
||||
pub const DATA: &'static str = include_str!($filename);
|
||||
let document = json_ld::RemoteDocument::new(
|
||||
None,
|
||||
None,
|
||||
value,
|
||||
);
|
||||
|
||||
pub fn parse() -> json_ld::syntax::Value {
|
||||
let (value, _codemap) = json_ld::syntax::Value::parse_str(DATA)
|
||||
.expect("Failed to parse example");
|
||||
|
||||
value
|
||||
}
|
||||
document
|
||||
}
|
||||
|
||||
pub async fn get_expanded_document() -> json_ld::ExpandedDocument {
|
||||
let mut loader = json_ld::ReqwestLoader::new();
|
||||
let doc = get_parsed_document();
|
||||
let expanded = doc.expand(&mut loader)
|
||||
.await
|
||||
.expect("Failed to expand JSON-LD document");
|
||||
|
||||
pub fn document() -> json_ld::RemoteDocument {
|
||||
let document = json_ld::RemoteDocument::new(
|
||||
None,
|
||||
None,
|
||||
parse(),
|
||||
);
|
||||
|
||||
document
|
||||
}
|
||||
|
||||
pub async fn expand() -> json_ld::ExpandedDocument {
|
||||
let mut loader = json_ld::ReqwestLoader::new();
|
||||
let doc = document();
|
||||
let expanded = doc.expand(&mut loader)
|
||||
.await
|
||||
.expect("Failed to expand JSON-LD document");
|
||||
|
||||
expanded
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_expand() {
|
||||
let doc = expand().await;
|
||||
println!("{doc:#?}");
|
||||
}
|
||||
expanded
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse() {
|
||||
let doc = get_parsed_document();
|
||||
println!("{doc:#?}");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn expand() {
|
||||
let doc = get_expanded_document().await;
|
||||
println!("{doc:#?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test_example!(e001, "./activitystreams/examples/1.json");
|
||||
test_example!(e002, "./activitystreams/examples/2.json");
|
||||
test_example!(e003, "./activitystreams/examples/3.json");
|
||||
test_example!(e004, "./activitystreams/examples/4.json");
|
||||
test_example!(e005, "./activitystreams/examples/5.json");
|
||||
test_example!(e006, "./activitystreams/examples/6.json");
|
||||
test_example!(e007, "./activitystreams/examples/7.json");
|
||||
test_example!(e008, "./activitystreams/examples/8.json");
|
||||
test_example!(e009, "./activitystreams/examples/9.json");
|
||||
test_example!(e010, "./activitystreams/examples/10.json");
|
||||
test_example!(e011, "./activitystreams/examples/11.json");
|
||||
test_example!(e012, "./activitystreams/examples/12.json");
|
||||
test_example!(e013, "./activitystreams/examples/13.json");
|
||||
test_example!(e014, "./activitystreams/examples/14.json");
|
||||
test_example!(e015, "./activitystreams/examples/15.json");
|
||||
test_example!(e016, "./activitystreams/examples/16.json");
|
||||
test_example!(e017, "./activitystreams/examples/17.json");
|
||||
test_example!(e018, "./activitystreams/examples/18.json");
|
||||
test_example!(e019, "./activitystreams/examples/19.json");
|
||||
test_example!(e020, "./activitystreams/examples/20.json");
|
||||
test_example!(e021, "./activitystreams/examples/21.json");
|
||||
test_example!(e022, "./activitystreams/examples/22.json");
|
||||
test_example!(e023, "./activitystreams/examples/23.json");
|
||||
test_example!(e024, "./activitystreams/examples/24.json");
|
||||
test_example!(e025, "./activitystreams/examples/25.json");
|
||||
test_example!(e026, "./activitystreams/examples/26.json");
|
||||
test_example!(e027, "./activitystreams/examples/27.json");
|
||||
test_example!(e028, "./activitystreams/examples/28.json");
|
||||
test_example!(e029, "./activitystreams/examples/29.json");
|
||||
test_example!(e030, "./activitystreams/examples/30.json");
|
||||
test_example!(e031, "./activitystreams/examples/31.json");
|
||||
test_example!(e032, "./activitystreams/examples/32.json");
|
||||
test_example!(e033, "./activitystreams/examples/33.json");
|
||||
test_example!(e034, "./activitystreams/examples/34.json");
|
||||
test_example!(e035, "./activitystreams/examples/35.json");
|
||||
test_example!(e036, "./activitystreams/examples/36.json");
|
||||
test_example!(e037, "./activitystreams/examples/37.json");
|
||||
test_example!(e038, "./activitystreams/examples/38.json");
|
||||
test_example!(e039, "./activitystreams/examples/39.json");
|
||||
test_example!(e040, "./activitystreams/examples/40.json");
|
||||
test_example!(e041, "./activitystreams/examples/41.json");
|
||||
test_example!(e042, "./activitystreams/examples/42.json");
|
||||
test_example!(e043, "./activitystreams/examples/43.json");
|
||||
test_example!(e044, "./activitystreams/examples/44.json");
|
||||
test_example!(e045, "./activitystreams/examples/45.json");
|
||||
test_example!(e046, "./activitystreams/examples/46.json");
|
||||
test_example!(e047, "./activitystreams/examples/47.json");
|
||||
test_example!(e048, "./activitystreams/examples/48.json");
|
||||
test_example!(e049, "./activitystreams/examples/49.json");
|
||||
test_example!(e050, "./activitystreams/examples/50.json");
|
||||
test_example!(e051, "./activitystreams/examples/51.json");
|
||||
test_example!(e052, "./activitystreams/examples/52.json");
|
||||
test_example!(e053, "./activitystreams/examples/53.json");
|
||||
test_example!(e054, "./activitystreams/examples/54.json");
|
||||
test_example!(e055, "./activitystreams/examples/55.json");
|
||||
test_example!(e056, "./activitystreams/examples/56.json");
|
||||
test_example!(e057, "./activitystreams/examples/57.json");
|
||||
test_example!(e058, "./activitystreams/examples/58.json");
|
||||
test_example!(e059, "./activitystreams/examples/59.json");
|
||||
test_example!(e060, "./activitystreams/examples/60.json");
|
||||
test_example!(e061, "./activitystreams/examples/61.json");
|
||||
test_example!(e062, "./activitystreams/examples/62.json");
|
||||
test_example!(e063, "./activitystreams/examples/63.json");
|
||||
test_example!(e064, "./activitystreams/examples/64.json");
|
||||
test_example!(e065, "./activitystreams/examples/65.json");
|
||||
test_example!(e066, "./activitystreams/examples/66.json");
|
||||
test_example!(e067, "./activitystreams/examples/67.json");
|
||||
test_example!(e068, "./activitystreams/examples/68.json");
|
||||
test_example!(e069, "./activitystreams/examples/69.json");
|
||||
test_example!(e070, "./activitystreams/examples/70.json");
|
||||
test_example!(e071, "./activitystreams/examples/71.json");
|
||||
test_example!(e072, "./activitystreams/examples/72.json");
|
||||
test_example!(e073, "./activitystreams/examples/73.json");
|
||||
test_example!(e074, "./activitystreams/examples/74.json");
|
||||
test_example!(e075, "./activitystreams/examples/75.json");
|
||||
test_example!(e076, "./activitystreams/examples/76.json");
|
||||
test_example!(e077, "./activitystreams/examples/77.json");
|
||||
test_example!(e078, "./activitystreams/examples/78.json");
|
||||
test_example!(e079, "./activitystreams/examples/79.json");
|
||||
test_example!(e080, "./activitystreams/examples/80.json");
|
||||
test_example!(e081, "./activitystreams/examples/81.json");
|
||||
test_example!(e082, "./activitystreams/examples/82.json");
|
||||
test_example!(e083, "./activitystreams/examples/83.json");
|
||||
test_example!(e084, "./activitystreams/examples/84.json");
|
||||
test_example!(e085, "./activitystreams/examples/85.json");
|
||||
test_example!(e086, "./activitystreams/examples/86.json");
|
||||
test_example!(e087, "./activitystreams/examples/87.json");
|
||||
test_example!(e088, "./activitystreams/examples/88.json");
|
||||
test_example!(e089, "./activitystreams/examples/89.json");
|
||||
test_example!(e090, "./activitystreams/examples/90.json");
|
||||
test_example!(e091, "./activitystreams/examples/91.json");
|
||||
test_example!(e092, "./activitystreams/examples/92.json");
|
||||
test_example!(e093, "./activitystreams/examples/93.json");
|
||||
test_example!(e094, "./activitystreams/examples/94.json");
|
||||
test_example!(e095, "./activitystreams/examples/95.json");
|
||||
test_example!(e096, "./activitystreams/examples/96.json");
|
||||
test_example!(e097, "./activitystreams/examples/97.json");
|
||||
test_example!(e098, "./activitystreams/examples/98.json");
|
||||
test_example!(e099, "./activitystreams/examples/99.json");
|
||||
test_example!(e100, "./activitystreams/examples/100.json");
|
||||
test_example!(e101, "./activitystreams/examples/101.json");
|
||||
test_example!(e102, "./activitystreams/examples/102.json");
|
||||
test_example!(e103, "./activitystreams/examples/103.json");
|
||||
test_example!(e104, "./activitystreams/examples/104.json");
|
||||
test_example!(e105, "./activitystreams/examples/105.json");
|
||||
test_example!(e106, "./activitystreams/examples/106.json");
|
||||
test_example!(e107, "./activitystreams/examples/107.json");
|
||||
test_example!(e108, "./activitystreams/examples/108.json");
|
||||
test_example!(e109, "./activitystreams/examples/109.json");
|
||||
test_example!(e110, "./activitystreams/examples/110.json");
|
||||
test_example!(e111, "./activitystreams/examples/111.json");
|
||||
test_example!(e112, "./activitystreams/examples/112.json");
|
||||
test_example!(e113, "./activitystreams/examples/113.json");
|
||||
test_example!(e114, "./activitystreams/examples/114.json");
|
||||
test_example!(e115, "./activitystreams/examples/115.json");
|
||||
test_example!(e116, "./activitystreams/examples/116.json");
|
||||
test_example!(e117, "./activitystreams/examples/117.json");
|
||||
test_example!(e118, "./activitystreams/examples/118.json");
|
||||
test_example!(e119, "./activitystreams/examples/119.json");
|
||||
test_example!(e120, "./activitystreams/examples/120.json");
|
||||
test_example!(e121, "./activitystreams/examples/121.json");
|
||||
test_example!(e122, "./activitystreams/examples/122.json");
|
||||
test_example!(e123, "./activitystreams/examples/123.json");
|
||||
test_example!(e124, "./activitystreams/examples/124.json");
|
||||
test_example!(e125, "./activitystreams/examples/125.json");
|
||||
test_example!(e126, "./activitystreams/examples/126.json");
|
||||
test_example!(e127, "./activitystreams/examples/127.json");
|
||||
test_example!(e128, "./activitystreams/examples/128.json");
|
||||
test_example!(e129, "./activitystreams/examples/129.json");
|
||||
test_example!(e130, "./activitystreams/examples/130.json");
|
||||
test_example!(e131, "./activitystreams/examples/131.json");
|
||||
test_example!(e132, "./activitystreams/examples/132.json");
|
||||
test_example!(e133, "./activitystreams/examples/133.json");
|
||||
test_example!(e134, "./activitystreams/examples/134.json");
|
||||
test_example!(e135, "./activitystreams/examples/135.json");
|
||||
test_example!(e136, "./activitystreams/examples/136.json");
|
||||
test_example!(e137, "./activitystreams/examples/137.json");
|
||||
test_example!(e138, "./activitystreams/examples/138.json");
|
||||
test_example!(e139, "./activitystreams/examples/139.json");
|
||||
test_example!(e140, "./activitystreams/examples/140.json");
|
||||
test_example!(e141, "./activitystreams/examples/141.json");
|
||||
test_example!(e142, "./activitystreams/examples/142.json");
|
||||
test_example!(e143, "./activitystreams/examples/143.json");
|
||||
test_example!(e144, "./activitystreams/examples/144.json");
|
||||
test_example!(e145, "./activitystreams/examples/145.json");
|
||||
test_example!(e146, "./activitystreams/examples/146.json");
|
||||
test_example!(e147, "./activitystreams/examples/147.json");
|
||||
test_example!(e148, "./activitystreams/examples/148.json");
|
||||
test_example!(e149, "./activitystreams/examples/149.json");
|
||||
test_example!(e150, "./activitystreams/examples/150.json");
|
||||
test_example!(e151, "./activitystreams/examples/151.json");
|
||||
test_example!(e152, "./activitystreams/examples/152.json");
|
||||
test_example!(e153, "./activitystreams/examples/153.json");
|
||||
test_example!(e154, "./activitystreams/examples/154.json");
|
||||
test_example!(e155, "./activitystreams/examples/155.json");
|
||||
test_example!(e156, "./activitystreams/examples/156.json");
|
||||
test_example!(e157, "./activitystreams/examples/157.json");
|
||||
test_example!(e158, "./activitystreams/examples/158.json");
|
||||
test_example!(e159, "./activitystreams/examples/159.json");
|
||||
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_href() {
|
||||
let doc = e121::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let href = {
|
||||
use acrate_astreams::activitystreams::StreamsLink;
|
||||
|
||||
node.activitystreams_href()
|
||||
.expect("Property `href` was not found")
|
||||
.expect("Property `href` failed to process")
|
||||
macro_rules! test_example {
|
||||
($modname:ident: $filename:literal) => {
|
||||
mod $modname {
|
||||
fixture_example!($filename);
|
||||
}
|
||||
};
|
||||
|
||||
assert_eq!(href, "http://example.org/abc");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_rel() {
|
||||
let doc = e131::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let mut rels = {
|
||||
use acrate_astreams::activitystreams::StreamsLink;
|
||||
|
||||
node.activitystreams_rels_lenient()
|
||||
.map(|v| v
|
||||
.expect("Property `rel` failed to process")
|
||||
)
|
||||
macro_rules! test_example_property_any {
|
||||
($modname:ident: $filename:literal, $entity:path, $meth:ident == $value:expr) => {
|
||||
mod $modname {
|
||||
fixture_example!($filename);
|
||||
|
||||
#[tokio::test]
|
||||
async fn $meth() {
|
||||
let doc = get_expanded_document().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let property = {
|
||||
use $entity;
|
||||
|
||||
node.$meth()
|
||||
.expect("Property was not found")
|
||||
.expect("Property failed to process")
|
||||
};
|
||||
|
||||
println!("{property:#?}");
|
||||
|
||||
assert_eq!(property, $value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let rel = rels.next()
|
||||
.expect("Expected `rel` [0] to be present");
|
||||
|
||||
assert_eq!(rel, "canonical");
|
||||
|
||||
let rel = rels.next()
|
||||
.expect("Expected `rel` [1] to be present");
|
||||
|
||||
assert_eq!(rel, "preview");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_media_type() {
|
||||
let doc = e126::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let mediatype = {
|
||||
use acrate_astreams::activitystreams::StreamsEntity;
|
||||
|
||||
node.activitystreams_mediatype()
|
||||
.expect("Property `mediaType` was not found")
|
||||
.expect("Property `mediaType` failed to process")
|
||||
macro_rules! test_example_property_iter {
|
||||
($modname:ident: $filename:literal, $entity:path, $meth:ident == $value:expr) => {
|
||||
mod $modname {
|
||||
fixture_example!($filename);
|
||||
|
||||
#[tokio::test]
|
||||
async fn $meth() {
|
||||
let doc = get_expanded_document().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let mut vec = vec![];
|
||||
|
||||
{
|
||||
use $entity;
|
||||
|
||||
vec.extend(
|
||||
node.$meth()
|
||||
.map(|v| v
|
||||
.expect("Property failed to process")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
println!("{vec:#?}");
|
||||
|
||||
assert_eq!(vec, $value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
assert_eq!(mediatype, mediatype::media_type!(TEXT/HTML));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_name_value() {
|
||||
let doc = e117::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let names: Vec<LangTriple> = {
|
||||
use acrate_astreams::activitystreams::StreamsEntity;
|
||||
|
||||
node.activitystreams_names()
|
||||
.map(|v| v
|
||||
.expect("Property `name` failed to process")
|
||||
)
|
||||
.collect()
|
||||
};
|
||||
|
||||
let mut names = names.into_iter();
|
||||
|
||||
let (name, language, direction) = names.next().expect("Expected `name` [0] to be present");
|
||||
assert_eq!(name, "A simple note");
|
||||
assert_eq!(language, None);
|
||||
assert_eq!(direction, None);
|
||||
}
|
||||
test_example!(e001: "./activitystreams/examples/1.json");
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_name_lang() {
|
||||
let doc = e118::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let names: Vec<LangTriple> = {
|
||||
use acrate_astreams::activitystreams::StreamsEntity;
|
||||
|
||||
node.activitystreams_names()
|
||||
.map(|v| v
|
||||
.expect("Property `name` failed to process")
|
||||
)
|
||||
.collect()
|
||||
};
|
||||
|
||||
let mut names = names.into_iter();
|
||||
|
||||
let (name, language, direction) = names.next().expect("Expected `name` [0] to be present");
|
||||
assert_eq!(name, "A simple note");
|
||||
assert_eq!(language, Some(LangTagBuf::new("en".to_string()).unwrap()));
|
||||
assert_eq!(direction, None);
|
||||
|
||||
let (name, language, direction) = names.next().expect("Expected `name` [1] to be present");
|
||||
assert_eq!(name, "Una nota sencilla");
|
||||
assert_eq!(language, Some(LangTagBuf::new("es".to_string()).unwrap()));
|
||||
assert_eq!(direction, None);
|
||||
|
||||
let (name, language, direction) = names.next().expect("Expected `name` [2] to be present");
|
||||
assert_eq!(name, "一段简单的笔记");
|
||||
assert_eq!(language, Some(LangTagBuf::new("zh-Hans".to_string()).unwrap()));
|
||||
assert_eq!(direction, None);
|
||||
}
|
||||
test_example!(e002: "./activitystreams/examples/2.json");
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_hreflang() {
|
||||
let doc = e122::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let hreflang = {
|
||||
use acrate_astreams::activitystreams::StreamsLink;
|
||||
|
||||
node.activitystreams_hreflang()
|
||||
.expect("Property `hreflang` was not found")
|
||||
.expect("Property `hreflang` failed to process")
|
||||
};
|
||||
|
||||
assert_eq!(hreflang, "en")
|
||||
}
|
||||
test_example!(e003: "./activitystreams/examples/3.json");
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_height() {
|
||||
let doc = e120::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let height = {
|
||||
use acrate_astreams::activitystreams::StreamsLink;
|
||||
|
||||
node.activitystreams_width()
|
||||
.expect("Property `height` was not found")
|
||||
.expect("Property `height` failed to process")
|
||||
};
|
||||
|
||||
assert_eq!(height, 100u64)
|
||||
}
|
||||
test_example!(e004: "./activitystreams/examples/4.json");
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_width() {
|
||||
let doc = e138::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let width = {
|
||||
use acrate_astreams::activitystreams::StreamsLink;
|
||||
|
||||
node.activitystreams_width()
|
||||
.expect("Property `width` was not found")
|
||||
.expect("Property `width` failed to process")
|
||||
};
|
||||
|
||||
assert_eq!(width, 100u64)
|
||||
}
|
||||
test_example!(e005: "./activitystreams/examples/5.json");
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_link_preview() {
|
||||
let doc = e102::expand().await;
|
||||
|
||||
let node = doc.main_node()
|
||||
.expect("Main node was not found");
|
||||
|
||||
let previews: Vec<json_ld::Node> = {
|
||||
use acrate_astreams::activitystreams::StreamsEntity;
|
||||
|
||||
node.activitystreams_previews()
|
||||
.map(|v| v
|
||||
.expect("Property `preview` failed to process")
|
||||
)
|
||||
.collect()
|
||||
};
|
||||
|
||||
let mut previews = previews.into_iter();
|
||||
|
||||
let _preview = previews.next().expect("Expected `preview` [0] to be present");
|
||||
|
||||
// TODO: More tests when StreamsObject is implemented
|
||||
}
|
||||
test_example!(e006: "./activitystreams/examples/6.json");
|
||||
|
||||
test_example!(e007: "./activitystreams/examples/7.json");
|
||||
|
||||
test_example!(e008: "./activitystreams/examples/8.json");
|
||||
|
||||
test_example!(e009: "./activitystreams/examples/9.json");
|
||||
|
||||
test_example!(e010: "./activitystreams/examples/10.json");
|
||||
|
||||
test_example!(e011: "./activitystreams/examples/11.json");
|
||||
|
||||
test_example!(e012: "./activitystreams/examples/12.json");
|
||||
|
||||
test_example!(e013: "./activitystreams/examples/13.json");
|
||||
|
||||
test_example!(e014: "./activitystreams/examples/14.json");
|
||||
|
||||
test_example!(e015: "./activitystreams/examples/15.json");
|
||||
|
||||
test_example!(e016: "./activitystreams/examples/16.json");
|
||||
|
||||
test_example!(e017: "./activitystreams/examples/17.json");
|
||||
|
||||
test_example!(e018: "./activitystreams/examples/18.json");
|
||||
|
||||
test_example!(e019: "./activitystreams/examples/19.json");
|
||||
|
||||
test_example!(e020: "./activitystreams/examples/20.json");
|
||||
|
||||
test_example!(e021: "./activitystreams/examples/21.json");
|
||||
|
||||
test_example!(e022: "./activitystreams/examples/22.json");
|
||||
|
||||
test_example!(e023: "./activitystreams/examples/23.json");
|
||||
|
||||
test_example!(e024: "./activitystreams/examples/24.json");
|
||||
|
||||
test_example!(e025: "./activitystreams/examples/25.json");
|
||||
|
||||
test_example!(e026: "./activitystreams/examples/26.json");
|
||||
|
||||
test_example!(e027: "./activitystreams/examples/27.json");
|
||||
|
||||
test_example!(e028: "./activitystreams/examples/28.json");
|
||||
|
||||
test_example!(e029: "./activitystreams/examples/29.json");
|
||||
|
||||
test_example!(e030: "./activitystreams/examples/30.json");
|
||||
|
||||
test_example!(e031: "./activitystreams/examples/31.json");
|
||||
|
||||
test_example!(e032: "./activitystreams/examples/32.json");
|
||||
|
||||
test_example!(e033: "./activitystreams/examples/33.json");
|
||||
|
||||
test_example!(e034: "./activitystreams/examples/34.json");
|
||||
|
||||
test_example!(e035: "./activitystreams/examples/35.json");
|
||||
|
||||
test_example!(e036: "./activitystreams/examples/36.json");
|
||||
|
||||
test_example!(e037: "./activitystreams/examples/37.json");
|
||||
|
||||
test_example!(e038: "./activitystreams/examples/38.json");
|
||||
|
||||
test_example!(e039: "./activitystreams/examples/39.json");
|
||||
|
||||
test_example!(e040: "./activitystreams/examples/40.json");
|
||||
|
||||
test_example!(e041: "./activitystreams/examples/41.json");
|
||||
|
||||
test_example!(e042: "./activitystreams/examples/42.json");
|
||||
|
||||
test_example!(e043: "./activitystreams/examples/43.json");
|
||||
|
||||
test_example!(e044: "./activitystreams/examples/44.json");
|
||||
|
||||
test_example!(e045: "./activitystreams/examples/45.json");
|
||||
|
||||
test_example!(e046: "./activitystreams/examples/46.json");
|
||||
|
||||
test_example!(e047: "./activitystreams/examples/47.json");
|
||||
|
||||
test_example!(e048: "./activitystreams/examples/48.json");
|
||||
|
||||
test_example!(e049: "./activitystreams/examples/49.json");
|
||||
|
||||
test_example!(e050: "./activitystreams/examples/50.json");
|
||||
|
||||
test_example!(e051: "./activitystreams/examples/51.json");
|
||||
|
||||
test_example!(e052: "./activitystreams/examples/52.json");
|
||||
|
||||
test_example!(e053: "./activitystreams/examples/53.json");
|
||||
|
||||
test_example!(e054: "./activitystreams/examples/54.json");
|
||||
|
||||
test_example!(e055: "./activitystreams/examples/55.json");
|
||||
|
||||
test_example!(e056: "./activitystreams/examples/56.json");
|
||||
|
||||
test_example!(e057: "./activitystreams/examples/57.json");
|
||||
|
||||
test_example!(e058: "./activitystreams/examples/58.json");
|
||||
|
||||
test_example!(e059: "./activitystreams/examples/59.json");
|
||||
|
||||
test_example!(e060: "./activitystreams/examples/60.json");
|
||||
|
||||
test_example!(e061: "./activitystreams/examples/61.json");
|
||||
|
||||
test_example!(e062: "./activitystreams/examples/62.json");
|
||||
|
||||
test_example!(e063: "./activitystreams/examples/63.json");
|
||||
|
||||
test_example!(e064: "./activitystreams/examples/64.json");
|
||||
|
||||
test_example!(e065: "./activitystreams/examples/65.json");
|
||||
|
||||
test_example!(e066: "./activitystreams/examples/66.json");
|
||||
|
||||
test_example!(e067: "./activitystreams/examples/67.json");
|
||||
|
||||
test_example!(e068: "./activitystreams/examples/68.json");
|
||||
|
||||
test_example!(e069: "./activitystreams/examples/69.json");
|
||||
|
||||
test_example!(e070: "./activitystreams/examples/70.json");
|
||||
|
||||
test_example!(e071: "./activitystreams/examples/71.json");
|
||||
|
||||
test_example!(e072: "./activitystreams/examples/72.json");
|
||||
|
||||
test_example!(e073: "./activitystreams/examples/73.json");
|
||||
|
||||
test_example!(e074: "./activitystreams/examples/74.json");
|
||||
|
||||
test_example!(e075: "./activitystreams/examples/75.json");
|
||||
|
||||
test_example!(e076: "./activitystreams/examples/76.json");
|
||||
|
||||
test_example!(e077: "./activitystreams/examples/77.json");
|
||||
|
||||
test_example!(e078: "./activitystreams/examples/78.json");
|
||||
|
||||
test_example!(e079: "./activitystreams/examples/79.json");
|
||||
|
||||
test_example!(e080: "./activitystreams/examples/80.json");
|
||||
|
||||
test_example!(e081: "./activitystreams/examples/81.json");
|
||||
|
||||
test_example!(e082: "./activitystreams/examples/82.json");
|
||||
|
||||
test_example!(e083: "./activitystreams/examples/83.json");
|
||||
|
||||
test_example!(e084: "./activitystreams/examples/84.json");
|
||||
|
||||
test_example!(e085: "./activitystreams/examples/85.json");
|
||||
|
||||
test_example!(e086: "./activitystreams/examples/86.json");
|
||||
|
||||
test_example!(e087: "./activitystreams/examples/87.json");
|
||||
|
||||
test_example!(e088: "./activitystreams/examples/88.json");
|
||||
|
||||
test_example!(e089: "./activitystreams/examples/89.json");
|
||||
|
||||
test_example!(e090: "./activitystreams/examples/90.json");
|
||||
|
||||
test_example!(e091: "./activitystreams/examples/91.json");
|
||||
|
||||
test_example!(e092: "./activitystreams/examples/92.json");
|
||||
|
||||
test_example!(e093: "./activitystreams/examples/93.json");
|
||||
|
||||
test_example!(e094: "./activitystreams/examples/94.json");
|
||||
|
||||
test_example!(e095: "./activitystreams/examples/95.json");
|
||||
|
||||
test_example!(e096: "./activitystreams/examples/96.json");
|
||||
|
||||
test_example!(e097: "./activitystreams/examples/97.json");
|
||||
|
||||
test_example!(e098: "./activitystreams/examples/98.json");
|
||||
|
||||
test_example!(e099: "./activitystreams/examples/99.json");
|
||||
|
||||
test_example!(e100: "./activitystreams/examples/100.json");
|
||||
|
||||
test_example!(e101: "./activitystreams/examples/101.json");
|
||||
|
||||
test_example!(e102: "./activitystreams/examples/102.json");
|
||||
|
||||
test_example!(e103: "./activitystreams/examples/103.json");
|
||||
|
||||
test_example!(e104: "./activitystreams/examples/104.json");
|
||||
|
||||
test_example!(e105: "./activitystreams/examples/105.json");
|
||||
|
||||
test_example!(e106: "./activitystreams/examples/106.json");
|
||||
|
||||
test_example!(e107: "./activitystreams/examples/107.json");
|
||||
|
||||
test_example!(e108: "./activitystreams/examples/108.json");
|
||||
|
||||
test_example!(e109: "./activitystreams/examples/109.json");
|
||||
|
||||
test_example!(e110: "./activitystreams/examples/110.json");
|
||||
|
||||
test_example!(e111: "./activitystreams/examples/111.json");
|
||||
|
||||
test_example!(e112: "./activitystreams/examples/112.json");
|
||||
|
||||
test_example!(e113: "./activitystreams/examples/113.json");
|
||||
|
||||
test_example_property_iter!(e114: "./activitystreams/examples/114.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_content == &[
|
||||
("A <em>simple</em> note".to_string(), None, None)
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_iter!(e115: "./activitystreams/examples/115.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_content == &[
|
||||
("A <em>simple</em> note".to_string(), Some(json_ld::syntax::LangTagBuf::new("en".to_string()).unwrap()), None),
|
||||
("Una nota <em>sencilla</em>".to_string(), Some(json_ld::syntax::LangTagBuf::new("es".to_string()).unwrap()), None),
|
||||
("一段<em>简单的</em>笔记".to_string(), Some(json_ld::syntax::LangTagBuf::new("zh-Hans".to_string()).unwrap()), None),
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_iter!(e116: "./activitystreams/examples/116.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_content == &[
|
||||
("## A simple note\nA simple markdown `note`".to_string(), None, None)
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_iter!(e117: "./activitystreams/examples/117.json",
|
||||
acrate_astreams::activitystreams::StreamsEntity,
|
||||
activitystreams_names == &[
|
||||
("A simple note".to_string(), None, None)
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_iter!(e118: "./activitystreams/examples/118.json",
|
||||
acrate_astreams::activitystreams::StreamsEntity,
|
||||
activitystreams_names == &[
|
||||
("A simple note".to_string(), Some(json_ld::syntax::LangTagBuf::new("en".to_string()).unwrap()), None),
|
||||
("Una nota sencilla".to_string(), Some(json_ld::syntax::LangTagBuf::new("es".to_string()).unwrap()), None),
|
||||
("一段简单的笔记".to_string(), Some(json_ld::syntax::LangTagBuf::new("zh-Hans".to_string()).unwrap()), None),
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_any!(e119: "./activitystreams/examples/119.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_duration == chrono::TimeDelta::new(2 * 60 * 60, 0).unwrap()
|
||||
);
|
||||
|
||||
test_example_property_any!(e120: "./activitystreams/examples/120.json",
|
||||
acrate_astreams::activitystreams::StreamsLink,
|
||||
activitystreams_width == 100u64
|
||||
);
|
||||
|
||||
test_example_property_any!(e121: "./activitystreams/examples/121.json",
|
||||
acrate_astreams::activitystreams::StreamsLink,
|
||||
activitystreams_href == "http://example.org/abc"
|
||||
);
|
||||
|
||||
test_example_property_any!(e122: "./activitystreams/examples/122.json",
|
||||
acrate_astreams::activitystreams::StreamsLink,
|
||||
activitystreams_hreflang == "en"
|
||||
);
|
||||
|
||||
test_example!(e123: "./activitystreams/examples/123.json");
|
||||
|
||||
test_example!(e124: "./activitystreams/examples/124.json");
|
||||
|
||||
test_example!(e125: "./activitystreams/examples/125.json");
|
||||
|
||||
test_example_property_any!(e126: "./activitystreams/examples/126.json",
|
||||
acrate_astreams::activitystreams::StreamsEntity,
|
||||
activitystreams_mediatype == mediatype::media_type!(TEXT/HTML)
|
||||
);
|
||||
|
||||
test_example!(e127: "./activitystreams/examples/127.json");
|
||||
|
||||
test_example!(e128: "./activitystreams/examples/128.json");
|
||||
|
||||
test_example!(e129: "./activitystreams/examples/129.json");
|
||||
|
||||
test_example!(e130: "./activitystreams/examples/130.json");
|
||||
|
||||
test_example_property_iter!(e131: "./activitystreams/examples/131.json",
|
||||
acrate_astreams::activitystreams::StreamsLink,
|
||||
activitystreams_rels_lenient == &[
|
||||
"canonical",
|
||||
"preview",
|
||||
]
|
||||
);
|
||||
|
||||
test_example!(e132: "./activitystreams/examples/132.json");
|
||||
|
||||
test_example_property_iter!(e133: "./activitystreams/examples/133.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_summary == &[
|
||||
("A simple <em>note</em>".to_string(), None, None)
|
||||
]
|
||||
);
|
||||
|
||||
test_example_property_iter!(e134: "./activitystreams/examples/134.json",
|
||||
acrate_astreams::activitystreams::StreamsObject,
|
||||
activitystreams_summary == &[
|
||||
("A simple <em>note</em>".to_string(), Some(json_ld::syntax::LangTagBuf::new("en".to_string()).unwrap()), None),
|
||||
("Una <em>nota</em> sencilla".to_string(), Some(json_ld::syntax::LangTagBuf::new("es".to_string()).unwrap()), None),
|
||||
("一段<em>简单的</em>笔记".to_string(), Some(json_ld::syntax::LangTagBuf::new("zh-Hans".to_string()).unwrap()), None),
|
||||
]
|
||||
);
|
||||
|
||||
test_example!(e135: "./activitystreams/examples/135.json");
|
||||
|
||||
test_example!(e136: "./activitystreams/examples/136.json");
|
||||
|
||||
test_example!(e137: "./activitystreams/examples/137.json");
|
||||
|
||||
test_example_property_any!(e138: "./activitystreams/examples/138.json",
|
||||
acrate_astreams::activitystreams::StreamsLink,
|
||||
activitystreams_width == 100u64
|
||||
);
|
||||
|
||||
test_example!(e139: "./activitystreams/examples/139.json");
|
||||
|
||||
test_example!(e140: "./activitystreams/examples/140.json");
|
||||
|
||||
test_example!(e141: "./activitystreams/examples/141.json");
|
||||
|
||||
test_example!(e142: "./activitystreams/examples/142.json");
|
||||
|
||||
test_example!(e143: "./activitystreams/examples/143.json");
|
||||
|
||||
test_example!(e144: "./activitystreams/examples/144.json");
|
||||
|
||||
test_example!(e145: "./activitystreams/examples/145.json");
|
||||
|
||||
test_example!(e146: "./activitystreams/examples/146.json");
|
||||
|
||||
test_example!(e147: "./activitystreams/examples/147.json");
|
||||
|
||||
test_example!(e148: "./activitystreams/examples/148.json");
|
||||
|
||||
test_example!(e149: "./activitystreams/examples/149.json");
|
||||
|
||||
test_example!(e150: "./activitystreams/examples/150.json");
|
||||
|
||||
test_example!(e151: "./activitystreams/examples/151.json");
|
||||
|
||||
test_example!(e152: "./activitystreams/examples/152.json");
|
||||
|
||||
test_example!(e153: "./activitystreams/examples/153.json");
|
||||
|
||||
test_example!(e154: "./activitystreams/examples/154.json");
|
||||
|
||||
test_example!(e155: "./activitystreams/examples/155.json");
|
||||
|
||||
test_example!(e156: "./activitystreams/examples/156.json");
|
||||
|
||||
test_example!(e157: "./activitystreams/examples/157.json");
|
||||
|
||||
test_example!(e158: "./activitystreams/examples/158.json");
|
||||
|
||||
test_example!(e159: "./activitystreams/examples/159.json");
|
||||
|
|
Loading…
Add table
Reference in a new issue