Skip to content

Commit ae42edc

Browse files
committed
Updating program unit tests
1 parent 02699e7 commit ae42edc

File tree

1 file changed

+230
-35
lines changed

1 file changed

+230
-35
lines changed

wasm/src/programs/program.rs

+230-35
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,26 @@ mod tests {
504504

505505
use wasm_bindgen_test::*;
506506

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+
507527
const TOKEN_ISSUE: &str = r#"program token_issue.aleo;
508528
509529
struct token_metadata:
@@ -553,33 +573,46 @@ function add_and_double:
553573
let program = Program::get_credits_program();
554574
let mappings = program.get_mappings().unwrap();
555575

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+
];
580613

581614
// 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()));
583616

584617
// Assert a program with no mappings providers an empty array
585618
let program = Program::from_string(TOKEN_ISSUE).unwrap();
@@ -600,34 +633,196 @@ function add_and_double:
600633
fn test_get_inputs() {
601634
let credits = Program::from(ProgramNative::credits().unwrap());
602635
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));
605670

606671
let token_issue = Program::from_string(TOKEN_ISSUE).unwrap();
607672
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));
610739
}
611740

612741
#[wasm_bindgen_test]
613742
fn test_get_record() {
614743
let credits = Program::from(ProgramNative::credits().unwrap());
615744
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));
618764

619765
let token_issue = Program::from_string(TOKEN_ISSUE).unwrap();
620766
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));
623807
}
624808

625809
#[wasm_bindgen_test]
626810
fn test_get_struct() {
627811
let program = Program::from_string(TOKEN_ISSUE).unwrap();
628812
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));
631826
}
632827

633828
#[wasm_bindgen_test]

0 commit comments

Comments
 (0)