@@ -3,11 +3,11 @@ use std::collections::HashMap;
33
44use anathema_state:: { Color , Hex , PendingValue , SubTo , Subscriber , Type } ;
55use anathema_store:: slab:: Key ;
6- use anathema_templates:: Primitive ;
76use anathema_templates:: expressions:: { Equality , LogicalOp , Op } ;
7+ use anathema_templates:: Primitive ;
88
9- use crate :: AttributeStorage ;
109use crate :: value:: ValueKind ;
10+ use crate :: AttributeStorage ;
1111
1212macro_rules! or_null {
1313 ( $val: expr) => {
@@ -442,89 +442,72 @@ fn float_op(lhs: f64, rhs: f64, op: Op) -> f64 {
442442
443443#[ cfg( test) ]
444444mod test {
445- use anathema_state:: { Changes , States } ;
445+ use anathema_state:: { drain_changes, Changes , States } ;
446+ use anathema_templates:: expressions:: { ident, index, num, strlit} ;
446447
447448 use crate :: testing:: setup;
448449
449450 #[ test]
450451 fn subscribe_if_not_exist ( ) {
451- // // TODO: finish this test.
452- // // The test runner should take a custom state.
453- // // Right now it uses a Map<Box<dyn AnyState>> and that
454- // // is just annoying
452+ // In this case the list is empty but it exists
455453
456- // // In this case the list is empty but it exists
454+ let mut changes = Changes :: empty ( ) ;
455+ drain_changes ( & mut changes) ;
456+ assert ! ( changes. is_empty( ) ) ;
457457
458- // let mut changes = Changes::empty();
459- // drain_changes(&mut changes);
460- // assert!(changes.is_empty());
461-
462- // let mut states = States::new();
463- // setup(&mut states, Default::default(), |test| {
464- // let expr = index(index(ident("state"), strlit("list")), num(0));
465-
466- // let mut list = List::<u32>::empty();
467- // test.set_state("list", list);
458+ let mut states = States :: new ( ) ;
459+ setup ( & mut states, Default :: default ( ) , |test| {
460+ let expr = index ( index ( ident ( "state" ) , strlit ( "list" ) ) , num ( 0 ) ) ;
468461
469- // let mut value = test.eval(&expr);
462+ let mut value = test. eval ( & expr) ;
470463
471- // assert_eq!(value.as_int(), None);
464+ assert_eq ! ( value. as_int( ) , None ) ;
472465
473- // test.with_state(|state| {
474- // let list = state.get_mut("list").unwrap();
475- // let mut list = list.to_mut_cast::<List<u32>>();
476- // // list.push(1);
477- // });
466+ test. with_state ( |state| state. list . push ( "a" ) ) ;
478467
479- // drain_changes(&mut changes);
480- // for (subs, change ) in changes.drain() {
481- // for sub in subs.iter() {
482- // if sub == value.sub {
483- // value.reload(&test.attributes);
484- // }
485- // }
486- // }
468+ drain_changes ( & mut changes) ;
469+ for ( subs, _ ) in changes. drain ( ) {
470+ for sub in subs. iter ( ) {
471+ if sub == value. sub {
472+ value. reload ( & test. attributes ) ;
473+ }
474+ }
475+ }
487476
488- // assert_eq!(value.as_int ().unwrap(), 1 );
489- // });
477+ assert_eq ! ( value. as_str ( ) . unwrap( ) , "a" ) ;
478+ } ) ;
490479 }
491480
492481 #[ test]
493482 fn list_preceding_value_removed ( ) {
494- // TODO: finish this test.
495- // The test runner should take a custom state.
496- // Right now it uses a Map<Box<dyn AnyState>> and that
497- // is just annoying
498- let changes = Changes :: empty ( ) ;
483+ let mut changes = Changes :: empty ( ) ;
499484
500485 let mut states = States :: new ( ) ;
501486 setup ( & mut states, Default :: default ( ) , |test| {
502- // let expr = index(index(ident("state"), strlit("list")), num(1));
487+ let expr = index ( index ( ident ( "state" ) , strlit ( "list" ) ) , num ( 1 ) ) ;
503488
504- // let mut list = List::from_iter([0u32, 1, 2]);
505- // test.set_state("list", list);
489+ test. with_state ( |state| {
490+ state. list . push ( "a" ) ;
491+ state. list . push ( "b" ) ;
492+ state. list . push ( "c" ) ;
493+ } ) ;
506494
507- // let mut value = test.eval(&expr);
495+ let mut value = test. eval ( & expr) ;
508496
509- // assert_eq!(value.as_int ().unwrap(), 1 );
497+ assert_eq ! ( value. as_str ( ) . unwrap( ) , "b" ) ;
510498
511- // test.with_state(|state| {
512- // // let list = state.get_mut("list".into()).unwrap();
513- // // let mut list = list.to_mut_cast::<List<u32>>();
514- // // list.remove(0);
515- // // panic!()
516- // });
499+ test. with_state ( |state| state. list . remove ( 0 ) ) ;
517500
518- // drain_changes(&mut changes);
519- // for (subs, change ) in changes.drain() {
520- // for sub in subs.iter() {
521- // if sub == value.sub {
522- // value.reload(&test.attributes);
523- // }
524- // }
525- // }
501+ drain_changes ( & mut changes) ;
502+ for ( subs, _ ) in changes. drain ( ) {
503+ for sub in subs. iter ( ) {
504+ if sub == value. sub {
505+ value. reload ( & test. attributes ) ;
506+ }
507+ }
508+ }
526509
527- // assert_eq!(value.as_int ().unwrap(), 2 );
510+ assert_eq ! ( value. as_str ( ) . unwrap( ) , "c" ) ;
528511 } ) ;
529512 }
530513}
0 commit comments