@@ -13,7 +13,7 @@ void Test(const TString& input) {
13
13
UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (builder.GetResult ()), NYT::NodeToCanonicalYsonString (node));
14
14
}
15
15
16
- Y_UNIT_TEST_SUITE (TParseType ) {
16
+ Y_UNIT_TEST_SUITE (ParseType ) {
17
17
Y_UNIT_TEST (Throwing) {
18
18
TThrowingTypeVisitor v;
19
19
UNIT_ASSERT_EXCEPTION (v.OnNull (), TUnsupportedException);
@@ -287,4 +287,330 @@ Y_UNIT_TEST_SUITE(TParseType) {
287
287
}
288
288
}
289
289
290
+ Y_UNIT_TEST_SUITE (ParseResponse) {
291
+ Y_UNIT_TEST (Empty) {
292
+ auto response = NYT::NodeFromYsonString (" []" );
293
+ auto resList = ParseResponse (response);
294
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 0 );
295
+ }
296
+
297
+ Y_UNIT_TEST (One) {
298
+ auto response = NYT::NodeFromYsonString (R"( [
299
+ {
300
+ Write = [
301
+ ]
302
+ };
303
+ ])" );
304
+
305
+ auto resList = ParseResponse (response);
306
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
307
+ }
308
+
309
+ Y_UNIT_TEST (Two) {
310
+ auto response = NYT::NodeFromYsonString (R"( [
311
+ {
312
+ Write = [
313
+ ]
314
+ };
315
+ {
316
+ Write = [
317
+ ]
318
+ };
319
+ ])" );
320
+
321
+ auto resList = ParseResponse (response);
322
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 2 );
323
+ }
324
+
325
+ Y_UNIT_TEST (Label) {
326
+ auto response = NYT::NodeFromYsonString (R"( [
327
+ {
328
+ Label = foo;
329
+ Write = [
330
+ ]
331
+ };
332
+ ])" );
333
+
334
+ auto resList = ParseResponse (response);
335
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
336
+ const auto & res = resList[0 ];
337
+ UNIT_ASSERT (res.Label .Defined ());
338
+ UNIT_ASSERT_VALUES_EQUAL (*res.Label , " foo" );
339
+ }
340
+
341
+ Y_UNIT_TEST (Position) {
342
+ auto response = NYT::NodeFromYsonString (R"( [
343
+ {
344
+ Position = {
345
+ File = "<main>";
346
+ Row = 1;
347
+ Column = 7;
348
+ };
349
+ Write = [
350
+ ]
351
+ };
352
+ ])" );
353
+
354
+ auto resList = ParseResponse (response);
355
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
356
+ const auto & res = resList[0 ];
357
+ UNIT_ASSERT (res.Position .Defined ());
358
+ UNIT_ASSERT_VALUES_EQUAL (res.Position ->File , " <main>" );
359
+ UNIT_ASSERT_VALUES_EQUAL (res.Position ->Row , 1 );
360
+ UNIT_ASSERT_VALUES_EQUAL (res.Position ->Column , 7 );
361
+ }
362
+
363
+ Y_UNIT_TEST (Truncated) {
364
+ auto response = NYT::NodeFromYsonString (R"( [
365
+ {
366
+ Truncated = %true;
367
+ Write = [
368
+ ]
369
+ };
370
+ ])" );
371
+
372
+ auto resList = ParseResponse (response);
373
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
374
+ const auto & res = resList[0 ];
375
+ UNIT_ASSERT (res.IsTruncated );
376
+ }
377
+
378
+ Y_UNIT_TEST (Unordered) {
379
+ auto response = NYT::NodeFromYsonString (R"( [
380
+ {
381
+ Unordered = %true;
382
+ Write = [
383
+ ]
384
+ };
385
+ ])" );
386
+
387
+ auto resList = ParseResponse (response);
388
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
389
+ const auto & res = resList[0 ];
390
+ UNIT_ASSERT (res.IsUnordered );
391
+ }
392
+
393
+ Y_UNIT_TEST (WriteOne) {
394
+ auto response = NYT::NodeFromYsonString (R"( [
395
+ {
396
+ Write = [
397
+ {
398
+ Data = data;
399
+ Type = type;
400
+ }
401
+ ]
402
+ };
403
+ ])" );
404
+
405
+ auto resList = ParseResponse (response);
406
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
407
+ const auto & res = resList[0 ];
408
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
409
+ const auto & write = res.Writes [0 ];
410
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write.Data ), " \" data\" " );
411
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write.Type ), " \" type\" " );
412
+ }
413
+
414
+ Y_UNIT_TEST (WriteTwo) {
415
+ auto response = NYT::NodeFromYsonString (R"( [
416
+ {
417
+ Write = [
418
+ {
419
+ Data = data1;
420
+ Type = type1;
421
+ };
422
+ {
423
+ Data = data2;
424
+ Type = type2;
425
+ }
426
+ ]
427
+ };
428
+ ])" );
429
+
430
+ auto resList = ParseResponse (response);
431
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
432
+ const auto & res = resList[0 ];
433
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 2 );
434
+ const auto & write1 = res.Writes [0 ];
435
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write1.Data ), " \" data1\" " );
436
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write1.Type ), " \" type1\" " );
437
+ const auto & write2 = res.Writes [1 ];
438
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write2.Data ), " \" data2\" " );
439
+ UNIT_ASSERT_VALUES_EQUAL (NYT::NodeToCanonicalYsonString (*write2.Type ), " \" type2\" " );
440
+ }
441
+
442
+ Y_UNIT_TEST (WriteTruncated) {
443
+ auto response = NYT::NodeFromYsonString (R"( [
444
+ {
445
+ Write = [
446
+ {
447
+ Data = data;
448
+ Type = type;
449
+ Truncated = %true;
450
+ }
451
+ ]
452
+ };
453
+ ])" );
454
+
455
+ auto resList = ParseResponse (response);
456
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
457
+ const auto & res = resList[0 ];
458
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
459
+ const auto & write = res.Writes [0 ];
460
+ UNIT_ASSERT (write.IsTruncated );
461
+ UNIT_ASSERT (!res.IsTruncated );
462
+ }
463
+
464
+ Y_UNIT_TEST (RefsEmpty) {
465
+ auto response = NYT::NodeFromYsonString (R"( [
466
+ {
467
+ Write = [
468
+ {
469
+ Data = data;
470
+ Type = type;
471
+ Refs = [];
472
+ }
473
+ ]
474
+ };
475
+ ])" );
476
+
477
+ auto resList = ParseResponse (response);
478
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
479
+ const auto & res = resList[0 ];
480
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
481
+ const auto & write = res.Writes [0 ];
482
+ UNIT_ASSERT_VALUES_EQUAL (write.Refs .size (), 0 );
483
+ }
484
+
485
+ Y_UNIT_TEST (RefsOne) {
486
+ auto response = NYT::NodeFromYsonString (R"( [
487
+ {
488
+ Write = [
489
+ {
490
+ Data = data;
491
+ Type = type;
492
+ Refs = [
493
+ {
494
+ "Reference" = [];
495
+ "Remove" = %true;
496
+ }
497
+ ];
498
+ }
499
+ ]
500
+ };
501
+ ])" );
502
+
503
+ auto resList = ParseResponse (response);
504
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
505
+ const auto & res = resList[0 ];
506
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
507
+ const auto & write = res.Writes [0 ];
508
+ UNIT_ASSERT_VALUES_EQUAL (write.Refs .size (), 1 );
509
+ const auto & ref = write.Refs [0 ];
510
+ UNIT_ASSERT_VALUES_EQUAL (ref.Reference .size (), 0 );
511
+ UNIT_ASSERT (ref.Remove );
512
+ }
513
+
514
+ Y_UNIT_TEST (RefsTwo) {
515
+ auto response = NYT::NodeFromYsonString (R"( [
516
+ {
517
+ Write = [
518
+ {
519
+ Data = data;
520
+ Type = type;
521
+ Refs = [
522
+ {
523
+ "Reference" = [];
524
+ "Remove" = %true;
525
+ };
526
+ {
527
+ "Reference" = [];
528
+ "Remove" = %true;
529
+ }
530
+ ];
531
+ }
532
+ ]
533
+ };
534
+ ])" );
535
+
536
+ auto resList = ParseResponse (response);
537
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
538
+ const auto & res = resList[0 ];
539
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
540
+ const auto & write = res.Writes [0 ];
541
+ UNIT_ASSERT_VALUES_EQUAL (write.Refs .size (), 2 );
542
+ const auto & ref1 = write.Refs [0 ];
543
+ UNIT_ASSERT_VALUES_EQUAL (ref1.Reference .size (), 0 );
544
+ UNIT_ASSERT (ref1.Remove );
545
+ const auto & ref2 = write.Refs [1 ];
546
+ UNIT_ASSERT_VALUES_EQUAL (ref2.Reference .size (), 0 );
547
+ UNIT_ASSERT (ref2.Remove );
548
+ }
549
+
550
+ Y_UNIT_TEST (RefsComponents) {
551
+ auto response = NYT::NodeFromYsonString (R"( [
552
+ {
553
+ Write = [
554
+ {
555
+ Data = data;
556
+ Type = type;
557
+ Refs = [
558
+ {
559
+ "Reference" = ["foo";"bar"];
560
+ "Remove" = %false;
561
+ }
562
+ ];
563
+ }
564
+ ]
565
+ };
566
+ ])" );
567
+
568
+ auto resList = ParseResponse (response);
569
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
570
+ const auto & res = resList[0 ];
571
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
572
+ const auto & write = res.Writes [0 ];
573
+ UNIT_ASSERT_VALUES_EQUAL (write.Refs .size (), 1 );
574
+ const auto & ref = write.Refs [0 ];
575
+ UNIT_ASSERT_VALUES_EQUAL (ref.Reference .size (), 2 );
576
+ UNIT_ASSERT_VALUES_EQUAL (ref.Reference [0 ], " foo" );
577
+ UNIT_ASSERT_VALUES_EQUAL (ref.Reference [1 ], " bar" );
578
+ UNIT_ASSERT (!ref.Remove );
579
+ }
580
+
581
+ Y_UNIT_TEST (RefsColumns) {
582
+ auto response = NYT::NodeFromYsonString (R"( [
583
+ {
584
+ Write = [
585
+ {
586
+ Data = data;
587
+ Type = type;
588
+ Refs = [
589
+ {
590
+ "Columns" = ["col1";"col2"];
591
+ "Reference" = [];
592
+ "Remove" = %false;
593
+ }
594
+ ];
595
+ }
596
+ ]
597
+ };
598
+ ])" );
599
+
600
+ auto resList = ParseResponse (response);
601
+ UNIT_ASSERT_VALUES_EQUAL (resList.size (), 1 );
602
+ const auto & res = resList[0 ];
603
+ UNIT_ASSERT_VALUES_EQUAL (res.Writes .size (), 1 );
604
+ const auto & write = res.Writes [0 ];
605
+ UNIT_ASSERT_VALUES_EQUAL (write.Refs .size (), 1 );
606
+ const auto & ref = write.Refs [0 ];
607
+ UNIT_ASSERT (ref.Columns .Defined ());
608
+ UNIT_ASSERT_VALUES_EQUAL (ref.Columns ->size (), 2 );
609
+ UNIT_ASSERT_VALUES_EQUAL ((*ref.Columns )[0 ], " col1" );
610
+ UNIT_ASSERT_VALUES_EQUAL ((*ref.Columns )[1 ], " col2" );
611
+ }
612
+ }
613
+
290
614
}
615
+
616
+
0 commit comments