@@ -577,3 +577,181 @@ void test_adopt__parse_oneshot_missing_value(void)
577
577
578
578
cl_assert_equal_i (ADOPT_STATUS_MISSING_VALUE , adopt_parse (& result , specs , args , 2 ));
579
579
}
580
+
581
+ void test_adopt__parse_arg (void )
582
+ {
583
+ int foo = 0 ;
584
+ char * bar = NULL , * arg1 = NULL , * arg2 = NULL ;
585
+ adopt_opt result ;
586
+
587
+ adopt_spec specs [] = {
588
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
589
+ { ADOPT_VALUE , "bar" , 0 , & bar , 'b' },
590
+ { ADOPT_ARG , "arg1" , 0 , & arg1 , 0 },
591
+ { ADOPT_ARG , "arg2" , 0 , & arg2 , 0 },
592
+ { 0 },
593
+ };
594
+
595
+ char * args [] = { "-f" , "bar" , "baz" };
596
+
597
+ cl_must_pass (adopt_parse (& result , specs , args , 3 ));
598
+
599
+ cl_assert_equal_i ('f' , foo );
600
+ cl_assert_equal_p (NULL , bar );
601
+ cl_assert_equal_s ("bar" , arg1 );
602
+ cl_assert_equal_p ("baz" , arg2 );
603
+
604
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
605
+ cl_assert_equal_p (NULL , result .arg );
606
+ cl_assert_equal_p (NULL , result .value );
607
+ }
608
+
609
+ void test_adopt__parse_arg_mixed_with_switches (void )
610
+ {
611
+ int foo = 0 ;
612
+ char * bar = NULL , * arg1 = NULL , * arg2 = NULL ;
613
+ adopt_opt result ;
614
+
615
+ adopt_spec specs [] = {
616
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
617
+ { ADOPT_ARG , "arg1" , 0 , & arg1 , 0 },
618
+ { ADOPT_SWITCH , "bar" , 0 , & bar , 'b' },
619
+ { ADOPT_ARG , "arg2" , 0 , & arg2 , 0 },
620
+ { 0 },
621
+ };
622
+
623
+ char * args [] = { "-f" , "bar" , "baz" , "--bar" };
624
+
625
+ cl_must_pass (adopt_parse (& result , specs , args , 4 ));
626
+
627
+ cl_assert_equal_i ('f' , foo );
628
+ cl_assert_equal_p ('b' , bar );
629
+ cl_assert_equal_s ("bar" , arg1 );
630
+ cl_assert_equal_p ("baz" , arg2 );
631
+
632
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
633
+ cl_assert_equal_p (NULL , result .arg );
634
+ cl_assert_equal_p (NULL , result .value );
635
+ }
636
+
637
+ void test_adopt__parse_arg_with_literal (void )
638
+ {
639
+ int foo = 0 ;
640
+ char * bar = NULL , * arg1 = NULL , * arg2 = NULL ;
641
+ adopt_opt result ;
642
+
643
+ adopt_spec specs [] = {
644
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
645
+ { ADOPT_VALUE , "bar" , 0 , & bar , 'b' },
646
+ { ADOPT_LITERAL },
647
+ { ADOPT_ARG , "arg1" , 0 , & arg1 , 0 },
648
+ { ADOPT_ARG , "arg2" , 0 , & arg2 , 0 },
649
+ { 0 },
650
+ };
651
+
652
+ char * args [] = { "-f" , "--" , "--bar" };
653
+
654
+ cl_must_pass (adopt_parse (& result , specs , args , 3 ));
655
+
656
+ cl_assert_equal_i ('f' , foo );
657
+ cl_assert_equal_p (NULL , bar );
658
+ cl_assert_equal_s ("--bar" , arg1 );
659
+ cl_assert_equal_p (NULL , arg2 );
660
+
661
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
662
+ cl_assert_equal_p (NULL , result .arg );
663
+ cl_assert_equal_p (NULL , result .value );
664
+ }
665
+
666
+ void test_adopt__parse_args (void )
667
+ {
668
+ int foo = 0 ;
669
+ char * bar = NULL , * * argz = NULL ;
670
+ adopt_opt result ;
671
+
672
+ adopt_spec specs [] = {
673
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
674
+ { ADOPT_VALUE , "bar" , 0 , & bar , 'b' },
675
+ { ADOPT_ARGS , "argz" , 0 , & argz , 0 },
676
+ { 0 },
677
+ };
678
+
679
+ char * args [] = { "-f" , "--bar" , "BRR" , "one" , "two" , "three" , "four" };
680
+
681
+ cl_must_pass (adopt_parse (& result , specs , args , 7 ));
682
+
683
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
684
+ cl_assert_equal_p (NULL , result .arg );
685
+ cl_assert_equal_p (NULL , result .value );
686
+ cl_assert_equal_i (4 , result .args_len );
687
+
688
+ cl_assert_equal_i ('f' , foo );
689
+ cl_assert_equal_s ("BRR" , bar );
690
+ cl_assert (argz );
691
+ cl_assert_equal_s ("one" , argz [0 ]);
692
+ cl_assert_equal_s ("two" , argz [1 ]);
693
+ cl_assert_equal_s ("three" , argz [2 ]);
694
+ cl_assert_equal_s ("four" , argz [3 ]);
695
+ }
696
+
697
+ void test_adopt__parse_args_with_literal (void )
698
+ {
699
+ int foo = 0 ;
700
+ char * bar = NULL , * * argz = NULL ;
701
+ adopt_opt result ;
702
+
703
+ adopt_spec specs [] = {
704
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
705
+ { ADOPT_VALUE , "bar" , 0 , & bar , 'b' },
706
+ { ADOPT_LITERAL },
707
+ { ADOPT_ARGS , "argz" , 0 , & argz , 0 },
708
+ { 0 },
709
+ };
710
+
711
+ char * args [] = { "-f" , "--" , "--bar" , "asdf" , "--baz" };
712
+
713
+ cl_must_pass (adopt_parse (& result , specs , args , 5 ));
714
+
715
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
716
+ cl_assert_equal_p (NULL , result .arg );
717
+ cl_assert_equal_p (NULL , result .value );
718
+ cl_assert_equal_i (3 , result .args_len );
719
+
720
+ cl_assert_equal_i ('f' , foo );
721
+ cl_assert_equal_p (NULL , bar );
722
+ cl_assert (argz );
723
+ cl_assert_equal_s ("--bar" , argz [0 ]);
724
+ cl_assert_equal_s ("asdf" , argz [1 ]);
725
+ cl_assert_equal_s ("--baz" , argz [2 ]);
726
+ }
727
+
728
+ void test_adopt__parse_args_implies_literal (void )
729
+ {
730
+ int foo = 0 ;
731
+ char * bar = NULL , * * argz = NULL ;
732
+ adopt_opt result ;
733
+
734
+ adopt_spec specs [] = {
735
+ { ADOPT_SWITCH , "foo" , 'f' , & foo , 'f' },
736
+ { ADOPT_VALUE , "bar" , 0 , & bar , 'b' },
737
+ { ADOPT_ARGS , "argz" , 0 , & argz , 0 },
738
+ { 0 },
739
+ };
740
+
741
+ char * args [] = { "-f" , "foo" , "bar" , "--bar" };
742
+
743
+ cl_must_pass (adopt_parse (& result , specs , args , 4 ));
744
+
745
+ cl_assert_equal_i (ADOPT_STATUS_DONE , result .status );
746
+ cl_assert_equal_p (NULL , result .arg );
747
+ cl_assert_equal_p (NULL , result .value );
748
+ cl_assert_equal_i (3 , result .args_len );
749
+
750
+ cl_assert_equal_i ('f' , foo );
751
+ cl_assert_equal_p (NULL , bar );
752
+ cl_assert (argz );
753
+ cl_assert_equal_s ("foo" , argz [0 ]);
754
+ cl_assert_equal_s ("bar" , argz [1 ]);
755
+ cl_assert_equal_s ("--bar" , argz [2 ]);
756
+ }
757
+
0 commit comments