@@ -635,3 +635,85 @@ func TestConvertWasmCoinToSdkCoin(t *testing.T) {
635
635
})
636
636
}
637
637
}
638
+
639
+ func TestConvertWasmCoinsToSdkCoins (t * testing.T ) {
640
+ specs := map [string ]struct {
641
+ src []wasmvmtypes.Coin
642
+ exp sdk.Coins
643
+ expErr bool
644
+ }{
645
+ "empty" : {
646
+ src : []wasmvmtypes.Coin {},
647
+ exp : nil ,
648
+ },
649
+ "single coin" : {
650
+ src : []wasmvmtypes.Coin {{Denom : "foo" , Amount : "1" }},
651
+ exp : sdk .NewCoins (sdk .NewCoin ("foo" , sdk .NewInt (1 ))),
652
+ },
653
+ "multiple coins" : {
654
+ src : []wasmvmtypes.Coin {
655
+ {Denom : "foo" , Amount : "1" },
656
+ {Denom : "bar" , Amount : "2" },
657
+ },
658
+ exp : sdk .NewCoins (
659
+ sdk .NewCoin ("bar" , sdk .NewInt (2 )),
660
+ sdk .NewCoin ("foo" , sdk .NewInt (1 )),
661
+ ),
662
+ },
663
+ "sorted" : {
664
+ src : []wasmvmtypes.Coin {
665
+ {Denom : "foo" , Amount : "1" },
666
+ {Denom : "other" , Amount : "1" },
667
+ {Denom : "bar" , Amount : "1" },
668
+ },
669
+ exp : []sdk.Coin {
670
+ sdk .NewCoin ("bar" , sdk .NewInt (1 )),
671
+ sdk .NewCoin ("foo" , sdk .NewInt (1 )),
672
+ sdk .NewCoin ("other" , sdk .NewInt (1 )),
673
+ },
674
+ },
675
+ "zero amounts dropped" : {
676
+ src : []wasmvmtypes.Coin {
677
+ {Denom : "foo" , Amount : "1" },
678
+ {Denom : "bar" , Amount : "0" },
679
+ },
680
+ exp : sdk .NewCoins (
681
+ sdk .NewCoin ("foo" , sdk .NewInt (1 )),
682
+ ),
683
+ },
684
+ "duplicate denoms merged" : {
685
+ src : []wasmvmtypes.Coin {
686
+ {Denom : "foo" , Amount : "1" },
687
+ {Denom : "foo" , Amount : "1" },
688
+ },
689
+ exp : []sdk.Coin {sdk .NewCoin ("foo" , sdk .NewInt (2 ))},
690
+ },
691
+ "duplicate denoms with one 0 amount does not fail" : {
692
+ src : []wasmvmtypes.Coin {
693
+ {Denom : "foo" , Amount : "0" },
694
+ {Denom : "foo" , Amount : "1" },
695
+ },
696
+ exp : []sdk.Coin {sdk .NewCoin ("foo" , sdk .NewInt (1 ))},
697
+ },
698
+ "empty denom rejected" : {
699
+ src : []wasmvmtypes.Coin {{Denom : "" , Amount : "1" }},
700
+ expErr : true ,
701
+ },
702
+ "invalid denom rejected" : {
703
+ src : []wasmvmtypes.Coin {{Denom : "!%&" , Amount : "1" }},
704
+ expErr : true ,
705
+ },
706
+ }
707
+ for name , spec := range specs {
708
+ t .Run (name , func (t * testing.T ) {
709
+ gotCoins , gotErr := ConvertWasmCoinsToSdkCoins (spec .src )
710
+ if spec .expErr {
711
+ require .Error (t , gotErr )
712
+ return
713
+ }
714
+ require .NoError (t , gotErr )
715
+ assert .Equal (t , spec .exp , gotCoins )
716
+ assert .NoError (t , gotCoins .Validate ())
717
+ })
718
+ }
719
+ }
0 commit comments