@@ -504,6 +504,26 @@ mod tests {
504
504
505
505
use wasm_bindgen_test:: * ;
506
506
507
+ macro_rules! array {
508
+ ( $( $value: expr) ,* $( , ) ?) => { {
509
+ let array = Array :: new( ) ;
510
+
511
+ $( array. push( & JsValue :: from( $value) ) ; ) *
512
+
513
+ array
514
+ } } ;
515
+ }
516
+
517
+ macro_rules! object {
518
+ ( $( $key: literal: $value: expr, ) * ) => { {
519
+ let object = Object :: new( ) ;
520
+
521
+ $( Reflect :: set( & object, & JsValue :: from_str( $key) , & JsValue :: from( $value) ) . unwrap( ) ; ) *
522
+
523
+ object
524
+ } } ;
525
+ }
526
+
507
527
const TOKEN_ISSUE : & str = r#"program token_issue.aleo;
508
528
509
529
struct token_metadata:
@@ -553,33 +573,46 @@ function add_and_double:
553
573
let program = Program :: get_credits_program ( ) ;
554
574
let mappings = program. get_mappings ( ) . unwrap ( ) ;
555
575
556
- // Create the expected mappings
557
- let account = Object :: new ( ) ;
558
- let array = Array :: new ( ) ;
559
- let bonded = Object :: new ( ) ;
560
- let committee = Object :: new ( ) ;
561
- let unbonding = Object :: new ( ) ;
562
-
563
- Reflect :: set ( & account, & JsValue :: from_str ( "name" ) , & JsValue :: from_str ( "account" ) ) . unwrap ( ) ;
564
- Reflect :: set ( & account, & JsValue :: from_str ( "key_type" ) , & JsValue :: from_str ( "address" ) ) . unwrap ( ) ;
565
- Reflect :: set ( & account, & JsValue :: from_str ( "value_type" ) , & JsValue :: from_str ( "u64" ) ) . unwrap ( ) ;
566
- Reflect :: set ( & bonded, & JsValue :: from_str ( "name" ) , & JsValue :: from_str ( "bonded" ) ) . unwrap ( ) ;
567
- Reflect :: set ( & bonded, & JsValue :: from_str ( "key_type" ) , & JsValue :: from_str ( "address" ) ) . unwrap ( ) ;
568
- Reflect :: set ( & bonded, & JsValue :: from_str ( "value_type" ) , & JsValue :: from_str ( "bond_state" ) ) . unwrap ( ) ;
569
- Reflect :: set ( & committee, & JsValue :: from_str ( "name" ) , & JsValue :: from_str ( "committee" ) ) . unwrap ( ) ;
570
- Reflect :: set ( & committee, & JsValue :: from_str ( "key_type" ) , & JsValue :: from_str ( "address" ) ) . unwrap ( ) ;
571
- Reflect :: set ( & committee, & JsValue :: from_str ( "value_type" ) , & JsValue :: from_str ( "committee_state" ) ) . unwrap ( ) ;
572
- Reflect :: set ( & unbonding, & JsValue :: from_str ( "name" ) , & JsValue :: from_str ( "unbonding" ) ) . unwrap ( ) ;
573
- Reflect :: set ( & unbonding, & JsValue :: from_str ( "key_type" ) , & JsValue :: from_str ( "address" ) ) . unwrap ( ) ;
574
- Reflect :: set ( & unbonding, & JsValue :: from_str ( "value_type" ) , & JsValue :: from_str ( "unbond_state" ) ) . unwrap ( ) ;
575
-
576
- array. push ( & committee) ;
577
- array. push ( & bonded) ;
578
- array. push ( & unbonding) ;
579
- array. push ( & account) ;
576
+ let expected = array ! [
577
+ object! {
578
+ "name" : "committee" ,
579
+ "key_type" : "address" ,
580
+ "value_type" : "committee_state" ,
581
+ } ,
582
+
583
+ object! {
584
+ "name" : "metadata" ,
585
+ "key_type" : "address" ,
586
+ "value_type" : "u32" ,
587
+ } ,
588
+
589
+ object! {
590
+ "name" : "bonded" ,
591
+ "key_type" : "address" ,
592
+ "value_type" : "bond_state" ,
593
+ } ,
594
+
595
+ object! {
596
+ "name" : "unbonding" ,
597
+ "key_type" : "address" ,
598
+ "value_type" : "unbond_state" ,
599
+ } ,
600
+
601
+ object! {
602
+ "name" : "account" ,
603
+ "key_type" : "address" ,
604
+ "value_type" : "u64" ,
605
+ } ,
606
+
607
+ object! {
608
+ "name" : "withdraw" ,
609
+ "key_type" : "address" ,
610
+ "value_type" : "address" ,
611
+ } ,
612
+ ] ;
580
613
581
614
// Assert that the mappings are equal
582
- assert_eq ! ( format!( "{:?}" , mappings. to_vec( ) ) , format!( "{:?}" , array . to_vec( ) ) ) ;
615
+ assert_eq ! ( format!( "{:?}" , mappings. to_vec( ) ) , format!( "{:?}" , expected . to_vec( ) ) ) ;
583
616
584
617
// Assert a program with no mappings providers an empty array
585
618
let program = Program :: from_string ( TOKEN_ISSUE ) . unwrap ( ) ;
@@ -600,34 +633,196 @@ function add_and_double:
600
633
fn test_get_inputs ( ) {
601
634
let credits = Program :: from ( ProgramNative :: credits ( ) . unwrap ( ) ) ;
602
635
let inputs = credits. get_function_inputs ( "transfer_private" . to_string ( ) ) . unwrap ( ) ;
603
- let expected = r#"Array { obj: Object { obj: JsValue([Object({"type":"record","record":"credits","members":[{"name":"microcredits","type":"u64","visibility":"private"},{"name":"_nonce","type":"group","visibility":"public"}],"register":"r0"}), Object({"type":"address","visibility":"private","register":"r1"}), Object({"type":"u64","visibility":"private","register":"r2"})]) } }"# . to_string ( ) ;
604
- assert_eq ! ( format!( "{:?}" , inputs) , expected) ;
636
+
637
+ let expected = array ! [
638
+ object! {
639
+ "type" : "record" ,
640
+ "record" : "credits" ,
641
+ "members" : array![
642
+ object! {
643
+ "name" : "microcredits" ,
644
+ "type" : "u64" ,
645
+ "visibility" : "private" ,
646
+ } ,
647
+ object! {
648
+ "name" : "_nonce" ,
649
+ "type" : "group" ,
650
+ "visibility" : "public" ,
651
+ } ,
652
+ ] ,
653
+ "register" : "r0" ,
654
+ } ,
655
+
656
+ object! {
657
+ "type" : "address" ,
658
+ "visibility" : "private" ,
659
+ "register" : "r1" ,
660
+ } ,
661
+
662
+ object! {
663
+ "type" : "u64" ,
664
+ "visibility" : "private" ,
665
+ "register" : "r2" ,
666
+ } ,
667
+ ] ;
668
+
669
+ assert_eq ! ( format!( "{:?}" , inputs) , format!( "{:?}" , expected) ) ;
605
670
606
671
let token_issue = Program :: from_string ( TOKEN_ISSUE ) . unwrap ( ) ;
607
672
let inputs = token_issue. get_function_inputs ( "bump_token_version" . to_string ( ) ) . unwrap ( ) ;
608
- let expected = r#"Array { obj: Object { obj: JsValue([Object({"type":"address","visibility":"private","register":"r0"}), Object({"type":"record","record":"Token","members":[{"name":"microcredits","type":"u64","visibility":"private"},{"name":"amount","type":"u64","visibility":"private"},{"name":"token_data","type":"struct","struct_id":"token_metadata","members":[{"name":"token_id","type":"u32"},{"name":"version","type":"u32"}],"visibility":"private"},{"name":"_nonce","type":"group","visibility":"public"}],"register":"r1"}), Object({"type":"struct","struct_id":"token_metadata","members":[{"name":"token_id","type":"u32"},{"name":"version","type":"u32"}],"visibility":"private","register":"r2"})]) } }"# ;
609
- assert_eq ! ( format!( "{:?}" , inputs) , expected) ;
673
+
674
+ let expected = array ! [
675
+ object! {
676
+ "type" : "address" ,
677
+ "visibility" : "private" ,
678
+ "register" : "r0" ,
679
+ } ,
680
+
681
+ object! {
682
+ "type" : "record" ,
683
+ "record" : "Token" ,
684
+ "members" : array![
685
+ object! {
686
+ "name" : "microcredits" ,
687
+ "type" : "u64" ,
688
+ "visibility" : "private" ,
689
+ } ,
690
+ object! {
691
+ "name" : "amount" ,
692
+ "type" : "u64" ,
693
+ "visibility" : "private" ,
694
+ } ,
695
+ object! {
696
+ "name" : "token_data" ,
697
+ "type" : "struct" ,
698
+ "struct_id" : "token_metadata" ,
699
+ "members" : array![
700
+ object!{
701
+ "name" : "token_id" ,
702
+ "type" : "u32" ,
703
+ } ,
704
+ object! {
705
+ "name" : "version" ,
706
+ "type" : "u32" ,
707
+ } ,
708
+ ] ,
709
+ "visibility" : "private" ,
710
+ } ,
711
+ object! {
712
+ "name" : "_nonce" ,
713
+ "type" : "group" ,
714
+ "visibility" : "public" ,
715
+ } ,
716
+ ] ,
717
+ "register" : "r1" ,
718
+ } ,
719
+
720
+ object! {
721
+ "type" : "struct" ,
722
+ "struct_id" : "token_metadata" ,
723
+ "members" : array![
724
+ object! {
725
+ "name" : "token_id" ,
726
+ "type" : "u32" ,
727
+ } ,
728
+ object! {
729
+ "name" : "version" ,
730
+ "type" : "u32" ,
731
+ } ,
732
+ ] ,
733
+ "visibility" : "private" ,
734
+ "register" : "r2" ,
735
+ } ,
736
+ ] ;
737
+
738
+ assert_eq ! ( format!( "{:?}" , inputs) , format!( "{:?}" , expected) ) ;
610
739
}
611
740
612
741
#[ wasm_bindgen_test]
613
742
fn test_get_record ( ) {
614
743
let credits = Program :: from ( ProgramNative :: credits ( ) . unwrap ( ) ) ;
615
744
let members = credits. get_record_members ( "credits" . to_string ( ) ) . unwrap ( ) ;
616
- let expected = r#"Object { obj: JsValue(Object({"type":"record","record":"credits","members":[{"name":"microcredits","type":"u64","visibility":"private"},{"name":"_nonce","type":"group","visibility":"public"}]})) }"# . to_string ( ) ;
617
- assert_eq ! ( format!( "{:?}" , members) , expected) ;
745
+
746
+ let expected = object ! {
747
+ "type" : "record" ,
748
+ "record" : "credits" ,
749
+ "members" : array![
750
+ object! {
751
+ "name" : "microcredits" ,
752
+ "type" : "u64" ,
753
+ "visibility" : "private" ,
754
+ } ,
755
+ object! {
756
+ "name" : "_nonce" ,
757
+ "type" : "group" ,
758
+ "visibility" : "public" ,
759
+ } ,
760
+ ] ,
761
+ } ;
762
+
763
+ assert_eq ! ( format!( "{:?}" , members) , format!( "{:?}" , expected) ) ;
618
764
619
765
let token_issue = Program :: from_string ( TOKEN_ISSUE ) . unwrap ( ) ;
620
766
let members = token_issue. get_record_members ( "Token" . to_string ( ) ) . unwrap ( ) ;
621
- let expected = r#"Object { obj: JsValue(Object({"type":"record","record":"Token","members":[{"name":"microcredits","type":"u64","visibility":"private"},{"name":"amount","type":"u64","visibility":"private"},{"name":"token_data","type":"struct","struct_id":"token_metadata","members":[{"name":"token_id","type":"u32"},{"name":"version","type":"u32"}],"visibility":"private"},{"name":"_nonce","type":"group","visibility":"public"}]})) }"# ;
622
- assert_eq ! ( format!( "{:?}" , members) , expected) ;
767
+
768
+ let expected = object ! {
769
+ "type" : "record" ,
770
+ "record" : "Token" ,
771
+ "members" : array![
772
+ object! {
773
+ "name" : "microcredits" ,
774
+ "type" : "u64" ,
775
+ "visibility" : "private" ,
776
+ } ,
777
+ object! {
778
+ "name" : "amount" ,
779
+ "type" : "u64" ,
780
+ "visibility" : "private" ,
781
+ } ,
782
+ object! {
783
+ "name" : "token_data" ,
784
+ "type" : "struct" ,
785
+ "struct_id" : "token_metadata" ,
786
+ "members" : array![
787
+ object! {
788
+ "name" : "token_id" ,
789
+ "type" : "u32" ,
790
+ } ,
791
+ object! {
792
+ "name" : "version" ,
793
+ "type" : "u32" ,
794
+ } ,
795
+ ] ,
796
+ "visibility" : "private" ,
797
+ } ,
798
+ object! {
799
+ "name" : "_nonce" ,
800
+ "type" : "group" ,
801
+ "visibility" : "public" ,
802
+ } ,
803
+ ] ,
804
+ } ;
805
+
806
+ assert_eq ! ( format!( "{:?}" , members) , format!( "{:?}" , expected) ) ;
623
807
}
624
808
625
809
#[ wasm_bindgen_test]
626
810
fn test_get_struct ( ) {
627
811
let program = Program :: from_string ( TOKEN_ISSUE ) . unwrap ( ) ;
628
812
let members = program. get_struct_members ( "token_metadata" . to_string ( ) ) . unwrap ( ) ;
629
- let expected = r#"Array { obj: Object { obj: JsValue([Object({"name":"token_id","type":"u32"}), Object({"name":"version","type":"u32"})]) } }"# ;
630
- assert_eq ! ( format!( "{:?}" , members) , expected) ;
813
+
814
+ let expected = array ! [
815
+ object! {
816
+ "name" : "token_id" ,
817
+ "type" : "u32" ,
818
+ } ,
819
+ object! {
820
+ "name" : "version" ,
821
+ "type" : "u32" ,
822
+ } ,
823
+ ] ;
824
+
825
+ assert_eq ! ( format!( "{:?}" , members) , format!( "{:?}" , expected) ) ;
631
826
}
632
827
633
828
#[ wasm_bindgen_test]
0 commit comments