6 "github.com/bytom/blockchain/txbuilder"
7 "github.com/bytom/protocol/bc"
10 func TestMergeSpendAction(t *testing.T) {
11 testBTM := &bc.AssetID{}
12 if err := testBTM.UnmarshalText([]byte("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); err != nil {
16 testAssetID1 := &bc.AssetID{}
17 if err := testAssetID1.UnmarshalText([]byte("50ec80b6bc48073f6aa8fa045131a71213c33f3681203b15ddc2e4b81f1f4730")); err != nil {
21 testAssetID2 := &bc.AssetID{}
22 if err := testAssetID2.UnmarshalText([]byte("43c6946d092b2959c1a82e90b282c68fca63e66de289048f6acd6cea9383c79c")); err != nil {
27 testActions []txbuilder.Action
28 wantActions []txbuilder.Action
33 testActions: []txbuilder.Action{
34 txbuilder.Action(&spendAction{
35 AssetAmount: bc.AssetAmount{
39 AccountID: "test_account",
41 txbuilder.Action(&spendAction{
42 AssetAmount: bc.AssetAmount{
46 AccountID: "test_account",
48 txbuilder.Action(&spendAction{
49 AssetAmount: bc.AssetAmount{
53 AccountID: "test_account",
55 txbuilder.Action(&spendAction{
56 AssetAmount: bc.AssetAmount{
57 AssetId: testAssetID1,
60 AccountID: "test_account",
63 wantActions: []txbuilder.Action{
64 txbuilder.Action(&spendAction{
65 AssetAmount: bc.AssetAmount{
69 AccountID: "test_account",
71 txbuilder.Action(&spendAction{
72 AssetAmount: bc.AssetAmount{
73 AssetId: testAssetID1,
76 AccountID: "test_account",
83 testActions: []txbuilder.Action{
84 txbuilder.Action(&spendAction{
85 AssetAmount: bc.AssetAmount{
89 AccountID: "test_account",
91 txbuilder.Action(&spendAction{
92 AssetAmount: bc.AssetAmount{
93 AssetId: testAssetID1,
96 AccountID: "test_account",
98 txbuilder.Action(&spendAction{
99 AssetAmount: bc.AssetAmount{
103 AccountID: "test_account",
105 txbuilder.Action(&spendAction{
106 AssetAmount: bc.AssetAmount{
107 AssetId: testAssetID1,
110 AccountID: "test_account",
113 wantActions: []txbuilder.Action{
114 txbuilder.Action(&spendAction{
115 AssetAmount: bc.AssetAmount{
119 AccountID: "test_account",
121 txbuilder.Action(&spendAction{
122 AssetAmount: bc.AssetAmount{
123 AssetId: testAssetID1,
126 AccountID: "test_account",
133 testActions: []txbuilder.Action{
134 txbuilder.Action(&spendAction{
135 AssetAmount: bc.AssetAmount{
139 AccountID: "test_account",
141 txbuilder.Action(&spendAction{
142 AssetAmount: bc.AssetAmount{
143 AssetId: testAssetID1,
146 AccountID: "test_account",
148 txbuilder.Action(&spendAction{
149 AssetAmount: bc.AssetAmount{
150 AssetId: testAssetID2,
153 AccountID: "test_account",
155 txbuilder.Action(&spendAction{
156 AssetAmount: bc.AssetAmount{
157 AssetId: testAssetID1,
160 AccountID: "test_account",
162 txbuilder.Action(&spendAction{
163 AssetAmount: bc.AssetAmount{
164 AssetId: testAssetID2,
167 AccountID: "test_account",
170 wantActions: []txbuilder.Action{
171 txbuilder.Action(&spendAction{
172 AssetAmount: bc.AssetAmount{
176 AccountID: "test_account",
178 txbuilder.Action(&spendAction{
179 AssetAmount: bc.AssetAmount{
180 AssetId: testAssetID1,
183 AccountID: "test_account",
185 txbuilder.Action(&spendAction{
186 AssetAmount: bc.AssetAmount{
187 AssetId: testAssetID2,
190 AccountID: "test_account",
197 testActions: []txbuilder.Action{
198 txbuilder.Action(&spendAction{
199 AssetAmount: bc.AssetAmount{
203 AccountID: "test_account",
205 txbuilder.Action(&spendAction{
206 AssetAmount: bc.AssetAmount{
210 AccountID: "test_account1",
212 txbuilder.Action(&spendAction{
213 AssetAmount: bc.AssetAmount{
217 AccountID: "test_account",
219 txbuilder.Action(&spendAction{
220 AssetAmount: bc.AssetAmount{
221 AssetId: testAssetID1,
224 AccountID: "test_account1",
227 wantActions: []txbuilder.Action{
228 txbuilder.Action(&spendAction{
229 AssetAmount: bc.AssetAmount{
233 AccountID: "test_account",
235 txbuilder.Action(&spendAction{
236 AssetAmount: bc.AssetAmount{
240 AccountID: "test_account1",
242 txbuilder.Action(&spendAction{
243 AssetAmount: bc.AssetAmount{
244 AssetId: testAssetID1,
247 AccountID: "test_account1",
254 testActions: []txbuilder.Action{
255 txbuilder.Action(&spendUTXOAction{
256 OutputID: &bc.Hash{V0: 128},
258 txbuilder.Action(&spendAction{
259 AssetAmount: bc.AssetAmount{
263 AccountID: "test_account",
265 txbuilder.Action(&spendAction{
266 AssetAmount: bc.AssetAmount{
267 AssetId: testAssetID1,
270 AccountID: "test_account1",
272 txbuilder.Action(&spendUTXOAction{
273 OutputID: &bc.Hash{V0: 256},
275 txbuilder.Action(&spendAction{
276 AssetAmount: bc.AssetAmount{
277 AssetId: testAssetID2,
280 AccountID: "test_account2",
283 wantActions: []txbuilder.Action{
284 txbuilder.Action(&spendUTXOAction{
285 OutputID: &bc.Hash{V0: 128},
287 txbuilder.Action(&spendAction{
288 AssetAmount: bc.AssetAmount{
292 AccountID: "test_account",
294 txbuilder.Action(&spendAction{
295 AssetAmount: bc.AssetAmount{
296 AssetId: testAssetID1,
299 AccountID: "test_account1",
301 txbuilder.Action(&spendUTXOAction{
302 OutputID: &bc.Hash{V0: 256},
304 txbuilder.Action(&spendAction{
305 AssetAmount: bc.AssetAmount{
306 AssetId: testAssetID2,
309 AccountID: "test_account2",
317 for _, c := range cases {
318 gotActions := MergeSpendAction(c.testActions)
320 gotMap := make(map[string]uint64)
321 wantMap := make(map[string]uint64)
322 for _, got := range gotActions {
323 switch got := got.(type) {
325 gotKey := got.AssetId.String() + got.AccountID
326 gotMap[gotKey] = got.Amount
332 for _, want := range c.wantActions {
333 switch want := want.(type) {
335 wantKey := want.AssetId.String() + want.AccountID
336 wantMap[wantKey] = want.Amount
342 for key := range gotMap {
343 if gotMap[key] != wantMap[key] {
344 t.Fatalf("gotMap[%s]=%v, wantMap[%s]=%v", key, gotMap[key], key, wantMap[key])
348 if len(gotActions) != c.wantActionCount {
349 t.Fatalf("number of gotActions=%d, wantActions=%d", len(gotActions), c.wantActionCount)