@@ -209,7 +209,7 @@ class Freeze_test : public beast::unit_test::suite
209
209
// transaction
210
210
env (trust (G1, A1[" USD" ](0 ), tfSetFreeze | tfSetDeepFreeze));
211
211
{
212
- auto const flags = modifiedTrustlineFlags (env);
212
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
213
213
BEAST_EXPECT (flags & (lsfLowFreeze | lsfLowDeepFreeze));
214
214
BEAST_EXPECT (!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
215
215
env.close ();
@@ -219,7 +219,7 @@ class Freeze_test : public beast::unit_test::suite
219
219
// transaction
220
220
env (trust (G1, A1[" USD" ](0 ), tfClearFreeze | tfClearDeepFreeze));
221
221
{
222
- auto const flags = modifiedTrustlineFlags (env);
222
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
223
223
BEAST_EXPECT (!(flags & (lsfLowFreeze | lsfLowDeepFreeze)));
224
224
BEAST_EXPECT (!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
225
225
env.close ();
@@ -235,7 +235,7 @@ class Freeze_test : public beast::unit_test::suite
235
235
// test: Issuer deep freezing already frozen trust line
236
236
env (trust (G1, A1[" USD" ](0 ), tfSetDeepFreeze));
237
237
{
238
- auto const flags = modifiedTrustlineFlags (env);
238
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
239
239
BEAST_EXPECT (flags & (lsfLowFreeze | lsfLowDeepFreeze));
240
240
BEAST_EXPECT (!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
241
241
env.close ();
@@ -248,7 +248,7 @@ class Freeze_test : public beast::unit_test::suite
248
248
// effect
249
249
env (trust (G1, A1[" USD" ](0 ), tfClearDeepFreeze));
250
250
{
251
- auto const flags = modifiedTrustlineFlags (env);
251
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
252
252
BEAST_EXPECT (flags & lsfLowFreeze);
253
253
BEAST_EXPECT (
254
254
!(flags &
@@ -267,6 +267,55 @@ class Freeze_test : public beast::unit_test::suite
267
267
}
268
268
}
269
269
270
+ void
271
+ testCreateFrozenTrustline (FeatureBitset features)
272
+ {
273
+ testcase (" Create Frozen Trustline" );
274
+
275
+ using namespace test ::jtx;
276
+ Env env (*this , features);
277
+
278
+ Account G1{" G1" };
279
+ Account A1{" A1" };
280
+
281
+ env.fund (XRP (10000 ), G1, A1);
282
+ env.close ();
283
+
284
+ // // test: can create frozen trustline
285
+ // {
286
+ // env(trust(G1, A1["USD"](1000), tfSetFreeze));
287
+ // auto const flags = getTrustlineFlags(env, 5u, 3u, false);
288
+ // BEAST_EXPECT(flags & lsfLowFreeze);
289
+ // env.close();
290
+ // env.require(lines(A1, 1));
291
+ // }
292
+
293
+ // // Cleanup
294
+ // env(trust(G1, A1["USD"](0), tfClearFreeze));
295
+ // env.close();
296
+ // env.require(lines(G1, 0));
297
+ // env.require(lines(A1, 0));
298
+
299
+ // // test: cannot create deep frozen trustline without normal freeze
300
+ // if (features[featureDeepFreeze])
301
+ // {
302
+ // env(trust(G1, A1["USD"](1000), tfSetDeepFreeze),
303
+ // ter(tecNO_PERMISSION));
304
+ // env.close();
305
+ // env.require(lines(A1, 0));
306
+ // }
307
+
308
+ // test: can create deep frozen trustline together with normal freeze
309
+ if (features[featureDeepFreeze])
310
+ {
311
+ env (trust (G1, A1[" USD" ](1000 ), tfSetFreeze | tfSetDeepFreeze));
312
+ auto const flags = getTrustlineFlags (env, 5u , 3u , false );
313
+ BEAST_EXPECT (flags & (lsfLowFreeze | lsfLowDeepFreeze));
314
+ env.close ();
315
+ env.require (lines (A1, 1 ));
316
+ }
317
+ }
318
+
270
319
void
271
320
testSetAndClear (FeatureBitset features)
272
321
{
@@ -501,7 +550,7 @@ class Freeze_test : public beast::unit_test::suite
501
550
// freeze and clearing of freeze separately
502
551
env (trust (G1, frozenAcc[" USD" ](0 ), tfSetFreeze));
503
552
{
504
- auto const flags = modifiedTrustlineFlags (env);
553
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
505
554
BEAST_EXPECT (flags & lsfLowFreeze);
506
555
BEAST_EXPECT (!(flags & lsfHighFreeze));
507
556
}
@@ -510,7 +559,7 @@ class Freeze_test : public beast::unit_test::suite
510
559
env (trust (
511
560
G1, deepFrozenAcc[" USD" ](0 ), tfSetFreeze | tfSetDeepFreeze));
512
561
{
513
- auto const flags = modifiedTrustlineFlags (env);
562
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
514
563
BEAST_EXPECT (!(flags & (lsfLowFreeze | lsfLowDeepFreeze)));
515
564
BEAST_EXPECT (flags & (lsfHighFreeze | lsfHighDeepFreeze));
516
565
}
@@ -566,7 +615,7 @@ class Freeze_test : public beast::unit_test::suite
566
615
// test: can clear freeze on account
567
616
env (trust (G1, frozenAcc[" USD" ](0 ), tfClearFreeze));
568
617
{
569
- auto const flags = modifiedTrustlineFlags (env);
618
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
570
619
BEAST_EXPECT (!(flags & lsfLowFreeze));
571
620
}
572
621
@@ -575,7 +624,7 @@ class Freeze_test : public beast::unit_test::suite
575
624
// test: can clear deep freeze on account
576
625
env (trust (G1, deepFrozenAcc[" USD" ](0 ), tfClearDeepFreeze));
577
626
{
578
- auto const flags = modifiedTrustlineFlags (env);
627
+ auto const flags = getTrustlineFlags (env, 2u , 1u );
579
628
BEAST_EXPECT (flags & lsfHighFreeze);
580
629
BEAST_EXPECT (!(flags & lsfHighDeepFreeze));
581
630
}
@@ -998,16 +1047,28 @@ class Freeze_test : public beast::unit_test::suite
998
1047
}
999
1048
1000
1049
uint32_t
1001
- modifiedTrustlineFlags (test::jtx::Env& env)
1050
+ getTrustlineFlags (
1051
+ test::jtx::Env& env,
1052
+ size_t expectedArraySize,
1053
+ size_t expectedArrayIndex,
1054
+ bool modified = true )
1002
1055
{
1003
1056
using namespace test ::jtx;
1004
1057
auto const affected =
1005
1058
env.meta ()->getJson (JsonOptions::none)[sfAffectedNodes.fieldName ];
1006
- if (!BEAST_EXPECT (checkArraySize (affected, 2u )))
1059
+ if (!BEAST_EXPECT (checkArraySize (affected, expectedArraySize )))
1007
1060
return 0 ;
1008
- auto const ff =
1009
- affected[1u ][sfModifiedNode.fieldName ][sfFinalFields.fieldName ];
1010
- return ff[jss::Flags].asUInt ();
1061
+
1062
+ if (modified)
1063
+ {
1064
+ return affected[expectedArrayIndex][sfModifiedNode.fieldName ]
1065
+ [sfFinalFields.fieldName ][jss::Flags]
1066
+ .asUInt ();
1067
+ }
1068
+
1069
+ return affected[expectedArrayIndex][sfCreatedNode.fieldName ]
1070
+ [sfNewFields.fieldName ][jss::Flags]
1071
+ .asUInt ();
1011
1072
}
1012
1073
1013
1074
public:
@@ -1017,6 +1078,7 @@ class Freeze_test : public beast::unit_test::suite
1017
1078
auto testAll = [this ](FeatureBitset features) {
1018
1079
testRippleState (features);
1019
1080
testDeepFreeze (features);
1081
+ testCreateFrozenTrustline (features);
1020
1082
testSetAndClear (features);
1021
1083
testGlobalFreeze (features);
1022
1084
testNoFreeze (features);
0 commit comments