Skip to content

Commit c4ec529

Browse files
committed
0.7.2 cleanup and tests
1 parent e47d9d1 commit c4ec529

File tree

3 files changed

+140
-82
lines changed

3 files changed

+140
-82
lines changed

src/lib.rs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,11 @@ impl fmt::Display for JsonValue {
246246
}
247247
}
248248

249+
/// Convenience for `JsonValue::from(value)`
250+
pub fn from<T>(value: T) -> JsonValue where T: Into<JsonValue> {
251+
value.into()
252+
}
253+
249254
#[deprecated(since="0.5.0", note="Use `value.dump(0)` instead")]
250255
pub fn stringify_ref(root: &JsonValue) -> String {
251256
root.dump()
@@ -264,6 +269,7 @@ pub fn stringify_pretty<T>(root: T, spaces: u16) -> String where T: Into<JsonVal
264269
root.pretty(spaces)
265270
}
266271

272+
267273
#[macro_export]
268274
macro_rules! array {
269275
[] => ($crate::JsonValue::new_array());
@@ -296,27 +302,27 @@ macro_rules! object {
296302
})
297303
}
298304

299-
macro_rules! partial_eq {
300-
($to:ident, $from:ty, $self_cast:expr => $from_cast:expr) => {
301-
impl PartialEq<$from> for JsonValue {
302-
fn eq(&self, other: &$from) -> bool {
303-
match *self {
304-
JsonValue::$to(ref value) => value == $from_cast,
305-
_ => false
306-
}
307-
}
308-
}
309-
310-
impl<'a> PartialEq<JsonValue> for $from {
311-
fn eq(&self, other: &JsonValue) -> bool {
312-
match *other {
313-
JsonValue::$to(ref value) => value == $self_cast,
314-
_ => false
315-
}
316-
}
317-
}
318-
}
319-
}
305+
// macro_rules! partial_eq {
306+
// ($to:ident, $from:ty, $self_cast:expr => $from_cast:expr) => {
307+
// impl PartialEq<$from> for JsonValue {
308+
// fn eq(&self, other: &$from) -> bool {
309+
// match *self {
310+
// JsonValue::$to(ref value) => value == $from_cast,
311+
// _ => false
312+
// }
313+
// }
314+
// }
315+
316+
// impl<'a> PartialEq<JsonValue> for $from {
317+
// fn eq(&self, other: &JsonValue) -> bool {
318+
// match *other {
319+
// JsonValue::$to(ref value) => value == $self_cast,
320+
// _ => false
321+
// }
322+
// }
323+
// }
324+
// }
325+
// }
320326

321327
macro_rules! implement_extras {
322328
($from:ty) => {

src/value.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ impl JsonValue {
9797
}
9898
}
9999

100+
/// Checks whether the value is empty. Returns true for:
101+
///
102+
/// - empty string (`""`)
103+
/// - number `0`
104+
/// - boolean `false`
105+
/// - null
106+
/// - empty array (`array![]`)
107+
/// - empty object (`object!{}`)
100108
pub fn is_empty(&self) -> bool {
101109
match *self {
102110
JsonValue::String(ref string) => string.is_empty(),

tests/lib.rs

Lines changed: 105 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,28 @@ fn is_false() {
7676
}
7777

7878
#[test]
79-
fn is_nul() {
79+
fn is_null() {
8080
let null = JsonValue::Null;
8181

8282
assert!(null.is_null());
8383
}
8484

85+
#[test]
86+
fn is_empty() {
87+
assert!(Null.is_empty());
88+
assert!(json::from(0).is_empty());
89+
assert!(json::from("").is_empty());
90+
assert!(json::from(false).is_empty());
91+
assert!(array![].is_empty());
92+
assert!(object!{}.is_empty());
93+
94+
assert!(!json::from(1).is_empty());
95+
assert!(!json::from("foo").is_empty());
96+
assert!(!json::from(true).is_empty());
97+
assert!(!array![0].is_empty());
98+
assert!(!object!{ "foo" => false }.is_empty());
99+
}
100+
85101
#[test]
86102
fn stringify_null() {
87103
assert_eq!(stringify(Null), "null");
@@ -238,34 +254,6 @@ fn stringify_pretty_object() {
238254
\"Brutus\",\n \"mother\": \"Helga\"\n }\n}");
239255
}
240256

241-
#[test]
242-
fn object_dump_minified() {
243-
let object = object!{
244-
"name" => "Maciej",
245-
"age" => 30
246-
};
247-
248-
assert_eq!(object.dump(), "{\"age\":30,\"name\":\"Maciej\"}");
249-
}
250-
251-
#[test]
252-
fn object_dump_pretty() {
253-
let object = object!{
254-
"name" => "Urlich",
255-
"age" => 50,
256-
"parents" => object!{
257-
"mother" => "Helga",
258-
"father" => "Brutus"
259-
},
260-
"cars" => array![ "Golf", "Mercedes", "Porsche" ]
261-
};
262-
263-
assert_eq!(object.pretty(2),
264-
"{\n \"age\": 50,\n \"cars\": [\n \"Golf\",\n \"Mercedes\",\n \
265-
\"Porsche\"\n ],\n \"name\": \"Urlich\",\n \"parents\": {\n \"father\": \
266-
\"Brutus\",\n \"mother\": \"Helga\"\n }\n}");
267-
}
268-
269257
#[test]
270258
fn parse_true() {
271259
assert_eq!(parse("true").unwrap(), true);
@@ -473,16 +461,6 @@ fn parse_error() {
473461
assert!(parse("10 20").is_err());
474462
}
475463

476-
#[test]
477-
fn object_len() {
478-
let data = object!{
479-
"a" => true,
480-
"b" => false
481-
};
482-
483-
assert_eq!(data.len(), 2);
484-
}
485-
486464
#[test]
487465
fn array_len() {
488466
let data = array![0, 1, 2, 3];
@@ -505,14 +483,72 @@ fn array_contains() {
505483
}
506484

507485
#[test]
508-
fn null_len() {
509-
let data = json::Null;
486+
fn array_push() {
487+
let mut data = array![1, 2];
510488

511-
assert_eq!(data.len(), 0);
489+
data.push(3).unwrap();
490+
491+
assert_eq!(data, array![1, 2, 3]);
492+
}
493+
494+
#[test]
495+
fn array_pop() {
496+
let mut data = array![1, 2, 3];
497+
498+
assert_eq!(data.pop(), 3);
499+
assert_eq!(data, array![1, 2]);
512500
}
513501

514502
#[test]
515-
fn iter_entries() {
503+
fn array_members() {
504+
let data = array![1, "foo"];
505+
506+
for member in data.members() {
507+
assert!(!member.is_null());
508+
}
509+
510+
let mut members = data.members();
511+
512+
assert_eq!(members.next().unwrap(), 1);
513+
assert_eq!(members.next().unwrap(), "foo");
514+
assert!(members.next().is_none());
515+
}
516+
517+
#[test]
518+
fn array_members_mut() {
519+
let mut data = array![Null, Null];
520+
521+
for member in data.members_mut() {
522+
assert!(member.is_null());
523+
*member = 100.into();
524+
}
525+
526+
assert_eq!(data, array![100, 100]);
527+
}
528+
529+
#[test]
530+
fn object_len() {
531+
let data = object!{
532+
"a" => true,
533+
"b" => false
534+
};
535+
536+
assert_eq!(data.len(), 2);
537+
}
538+
539+
#[test]
540+
fn object_remove() {
541+
let mut data = object!{
542+
"foo" => "bar",
543+
"answer" => 42
544+
};
545+
546+
assert_eq!(data.remove("foo"), "bar");
547+
assert_eq!(data, object!{ "answer" => 42 });
548+
}
549+
550+
#[test]
551+
fn object_entries() {
516552
let data = object!{
517553
"a" => 1,
518554
"b" => "foo"
@@ -536,7 +572,7 @@ fn iter_entries() {
536572
}
537573

538574
#[test]
539-
fn iter_entries_mut() {
575+
fn object_entries_mut() {
540576
let mut data = object!{
541577
"a" => Null,
542578
"b" => Null
@@ -554,30 +590,38 @@ fn iter_entries_mut() {
554590
}
555591

556592
#[test]
557-
fn iter_members() {
558-
let data = array![1, "foo"];
593+
fn object_dump_minified() {
594+
let object = object!{
595+
"name" => "Maciej",
596+
"age" => 30
597+
};
559598

560-
for member in data.members() {
561-
assert!(!member.is_null());
562-
}
599+
assert_eq!(object.dump(), "{\"age\":30,\"name\":\"Maciej\"}");
600+
}
563601

564-
let mut members = data.members();
602+
#[test]
603+
fn object_dump_pretty() {
604+
let object = object!{
605+
"name" => "Urlich",
606+
"age" => 50,
607+
"parents" => object!{
608+
"mother" => "Helga",
609+
"father" => "Brutus"
610+
},
611+
"cars" => array![ "Golf", "Mercedes", "Porsche" ]
612+
};
565613

566-
assert_eq!(members.next().unwrap(), 1);
567-
assert_eq!(members.next().unwrap(), "foo");
568-
assert!(members.next().is_none());
614+
assert_eq!(object.pretty(2),
615+
"{\n \"age\": 50,\n \"cars\": [\n \"Golf\",\n \"Mercedes\",\n \
616+
\"Porsche\"\n ],\n \"name\": \"Urlich\",\n \"parents\": {\n \"father\": \
617+
\"Brutus\",\n \"mother\": \"Helga\"\n }\n}");
569618
}
570619

571620
#[test]
572-
fn iter_members_mut() {
573-
let mut data = array![Null, Null];
574-
575-
for member in data.members_mut() {
576-
assert!(member.is_null());
577-
*member = 100.into();
578-
}
621+
fn null_len() {
622+
let data = json::Null;
579623

580-
assert_eq!(data, array![100, 100]);
624+
assert_eq!(data.len(), 0);
581625
}
582626

583627
#[test]

0 commit comments

Comments
 (0)