568
615
#define TEST_NAMED_SUB_PATTERN(_pattern, _string, _start_position, _sub_name, \
569
616
_expected_sub, _expected_start, _expected_end) { \
570
TestNamedSubData *data; \
572
data = g_new0 (TestNamedSubData, 1); \
573
data->pattern = _pattern; \
574
data->string = _string; \
576
data->start_position = _start_position; \
577
data->sub_name = _sub_name; \
578
data->expected_sub = _expected_sub; \
579
data->expected_start = _expected_start; \
580
data->expected_end = _expected_end; \
581
path = g_strdup_printf ("/regex/match/named/subpattern/%d", ++total); \
582
g_test_add_data_func (path, data, test_named_sub_pattern); \
617
TestNamedSubData *data; \
619
data = g_new0 (TestNamedSubData, 1); \
620
data->pattern = _pattern; \
621
data->string = _string; \
623
data->start_position = _start_position; \
624
data->sub_name = _sub_name; \
625
data->expected_sub = _expected_sub; \
626
data->expected_start = _expected_start; \
627
data->expected_end = _expected_end; \
628
path = g_strdup_printf ("/regex/match/named/subpattern/%d", ++total); \
629
g_test_add_data_func_full (path, data, test_named_sub_pattern, g_free); \
586
633
#define TEST_NAMED_SUB_PATTERN_DUPNAMES(_pattern, _string, _start_position, _sub_name, \
587
634
_expected_sub, _expected_start, _expected_end) { \
588
TestNamedSubData *data; \
590
data = g_new0 (TestNamedSubData, 1); \
591
data->pattern = _pattern; \
592
data->string = _string; \
593
data->flags = G_REGEX_DUPNAMES; \
594
data->start_position = _start_position; \
595
data->sub_name = _sub_name; \
596
data->expected_sub = _expected_sub; \
597
data->expected_start = _expected_start; \
598
data->expected_end = _expected_end; \
635
TestNamedSubData *data; \
637
data = g_new0 (TestNamedSubData, 1); \
638
data->pattern = _pattern; \
639
data->string = _string; \
640
data->flags = G_REGEX_DUPNAMES; \
641
data->start_position = _start_position; \
642
data->sub_name = _sub_name; \
643
data->expected_sub = _expected_sub; \
644
data->expected_start = _expected_start; \
645
data->expected_end = _expected_end; \
599
646
path = g_strdup_printf ("/regex/match/subpattern/named/dupnames/%d", ++total); \
600
g_test_add_data_func (path, data, test_named_sub_pattern); \
647
g_test_add_data_func_full (path, data, test_named_sub_pattern, g_free); \
644
691
g_strfreev (matches);
647
#define TEST_FETCH_ALL0(_pattern, _string) { \
648
TestFetchAllData *data; \
650
data = g_new0 (TestFetchAllData, 1); \
651
data->pattern = _pattern; \
652
data->string = _string; \
653
data->expected = NULL; \
654
path = g_strdup_printf ("/regex/fetch-all0/%d", ++total); \
655
g_test_add_data_func (path, data, test_fetch_all); \
659
#define TEST_FETCH_ALL1(_pattern, _string, e1) { \
660
TestFetchAllData *data; \
662
data = g_new0 (TestFetchAllData, 1); \
663
data->pattern = _pattern; \
664
data->string = _string; \
665
data->expected = g_slist_append (NULL, e1); \
666
path = g_strdup_printf ("/regex/fetch-all1/%d", ++total); \
667
g_test_add_data_func (path, data, test_fetch_all); \
671
#define TEST_FETCH_ALL2(_pattern, _string, e1, e2) { \
672
TestFetchAllData *data; \
674
data = g_new0 (TestFetchAllData, 1); \
675
data->pattern = _pattern; \
676
data->string = _string; \
677
data->expected = g_slist_append (NULL, e1); \
678
data->expected = g_slist_append (data->expected, e2); \
679
path = g_strdup_printf ("/regex/fetch-all2/%d", ++total); \
680
g_test_add_data_func (path, data, test_fetch_all); \
684
#define TEST_FETCH_ALL3(_pattern, _string, e1, e2, e3) { \
685
TestFetchAllData *data; \
687
data = g_new0 (TestFetchAllData, 1); \
688
data->pattern = _pattern; \
689
data->string = _string; \
690
data->expected = g_slist_append (NULL, e1); \
691
data->expected = g_slist_append (data->expected, e2); \
692
data->expected = g_slist_append (data->expected, e3); \
693
path = g_strdup_printf ("/regex/fetch-all3/%d", ++total); \
694
g_test_add_data_func (path, data, test_fetch_all); \
695
free_fetch_all_data (gpointer _data)
697
TestFetchAllData *data = _data;
699
g_slist_free (data->expected);
703
#define TEST_FETCH_ALL0(_pattern, _string) { \
704
TestFetchAllData *data; \
706
data = g_new0 (TestFetchAllData, 1); \
707
data->pattern = _pattern; \
708
data->string = _string; \
709
data->expected = NULL; \
710
path = g_strdup_printf ("/regex/fetch-all0/%d", ++total); \
711
g_test_add_data_func_full (path, data, test_fetch_all, free_fetch_all_data); \
715
#define TEST_FETCH_ALL1(_pattern, _string, e1) { \
716
TestFetchAllData *data; \
718
data = g_new0 (TestFetchAllData, 1); \
719
data->pattern = _pattern; \
720
data->string = _string; \
721
data->expected = g_slist_append (NULL, e1); \
722
path = g_strdup_printf ("/regex/fetch-all1/%d", ++total); \
723
g_test_add_data_func_full (path, data, test_fetch_all, free_fetch_all_data); \
727
#define TEST_FETCH_ALL2(_pattern, _string, e1, e2) { \
728
TestFetchAllData *data; \
730
data = g_new0 (TestFetchAllData, 1); \
731
data->pattern = _pattern; \
732
data->string = _string; \
733
data->expected = g_slist_append (NULL, e1); \
734
data->expected = g_slist_append (data->expected, e2); \
735
path = g_strdup_printf ("/regex/fetch-all2/%d", ++total); \
736
g_test_add_data_func_full (path, data, test_fetch_all, free_fetch_all_data); \
740
#define TEST_FETCH_ALL3(_pattern, _string, e1, e2, e3) { \
741
TestFetchAllData *data; \
743
data = g_new0 (TestFetchAllData, 1); \
744
data->pattern = _pattern; \
745
data->string = _string; \
746
data->expected = g_slist_append (NULL, e1); \
747
data->expected = g_slist_append (data->expected, e2); \
748
data->expected = g_slist_append (data->expected, e3); \
749
path = g_strdup_printf ("/regex/fetch-all3/%d", ++total); \
750
g_test_add_data_func_full (path, data, test_fetch_all, free_fetch_all_data); \
721
777
g_strfreev (tokens);
724
#define TEST_SPLIT_SIMPLE0(_pattern, _string) { \
725
TestFetchAllData *data; \
727
data = g_new0 (TestFetchAllData, 1); \
728
data->pattern = _pattern; \
729
data->string = _string; \
730
data->expected = NULL; \
731
path = g_strdup_printf ("/regex/split/simple0/%d", ++total); \
732
g_test_add_data_func (path, data, test_split_simple); \
736
#define TEST_SPLIT_SIMPLE1(_pattern, _string, e1) { \
737
TestFetchAllData *data; \
739
data = g_new0 (TestFetchAllData, 1); \
740
data->pattern = _pattern; \
741
data->string = _string; \
742
data->expected = g_slist_append (NULL, e1); \
743
path = g_strdup_printf ("/regex/split/simple1/%d", ++total); \
744
g_test_add_data_func (path, data, test_split_simple); \
748
#define TEST_SPLIT_SIMPLE2(_pattern, _string, e1, e2) { \
749
TestFetchAllData *data; \
751
data = g_new0 (TestFetchAllData, 1); \
752
data->pattern = _pattern; \
753
data->string = _string; \
754
data->expected = g_slist_append (NULL, e1); \
755
data->expected = g_slist_append (data->expected, e2); \
756
path = g_strdup_printf ("/regex/split/simple2/%d", ++total); \
757
g_test_add_data_func (path, data, test_split_simple); \
761
#define TEST_SPLIT_SIMPLE3(_pattern, _string, e1, e2, e3) { \
762
TestFetchAllData *data; \
764
data = g_new0 (TestFetchAllData, 1); \
765
data->pattern = _pattern; \
766
data->string = _string; \
767
data->expected = g_slist_append (NULL, e1); \
768
data->expected = g_slist_append (data->expected, e2); \
769
data->expected = g_slist_append (data->expected, e3); \
770
path = g_strdup_printf ("/regex/split/simple3/%d", ++total); \
771
g_test_add_data_func (path, data, test_split_simple); \
780
#define TEST_SPLIT_SIMPLE0(_pattern, _string) { \
781
TestFetchAllData *data; \
783
data = g_new0 (TestFetchAllData, 1); \
784
data->pattern = _pattern; \
785
data->string = _string; \
786
data->expected = NULL; \
787
path = g_strdup_printf ("/regex/split/simple0/%d", ++total); \
788
g_test_add_data_func_full (path, data, test_split_simple, free_fetch_all_data); \
792
#define TEST_SPLIT_SIMPLE1(_pattern, _string, e1) { \
793
TestFetchAllData *data; \
795
data = g_new0 (TestFetchAllData, 1); \
796
data->pattern = _pattern; \
797
data->string = _string; \
798
data->expected = g_slist_append (NULL, e1); \
799
path = g_strdup_printf ("/regex/split/simple1/%d", ++total); \
800
g_test_add_data_func_full (path, data, test_split_simple, free_fetch_all_data); \
804
#define TEST_SPLIT_SIMPLE2(_pattern, _string, e1, e2) { \
805
TestFetchAllData *data; \
807
data = g_new0 (TestFetchAllData, 1); \
808
data->pattern = _pattern; \
809
data->string = _string; \
810
data->expected = g_slist_append (NULL, e1); \
811
data->expected = g_slist_append (data->expected, e2); \
812
path = g_strdup_printf ("/regex/split/simple2/%d", ++total); \
813
g_test_add_data_func_full (path, data, test_split_simple, free_fetch_all_data); \
817
#define TEST_SPLIT_SIMPLE3(_pattern, _string, e1, e2, e3) { \
818
TestFetchAllData *data; \
820
data = g_new0 (TestFetchAllData, 1); \
821
data->pattern = _pattern; \
822
data->string = _string; \
823
data->expected = g_slist_append (NULL, e1); \
824
data->expected = g_slist_append (data->expected, e2); \
825
data->expected = g_slist_append (data->expected, e3); \
826
path = g_strdup_printf ("/regex/split/simple3/%d", ++total); \
827
g_test_add_data_func_full (path, data, test_split_simple, free_fetch_all_data); \
837
893
g_strfreev (tokens);
840
#define TEST_SPLIT0(_pattern, _string, _start_position, _max_tokens) { \
841
TestFetchAllData *data; \
843
data = g_new0 (TestFetchAllData, 1); \
844
data->pattern = _pattern; \
845
data->string = _string; \
846
data->start_position = _start_position; \
847
data->max_tokens = _max_tokens; \
848
data->expected = NULL; \
849
path = g_strdup_printf ("/regex/full-split0/%d", ++total); \
850
g_test_add_data_func (path, data, test_split_full); \
852
if (_start_position == 0 && _max_tokens <= 0) { \
853
path = g_strdup_printf ("/regex/split0/%d", ++total); \
854
g_test_add_data_func (path, data, test_split); \
859
#define TEST_SPLIT1(_pattern, _string, _start_position, _max_tokens, e1) { \
860
TestFetchAllData *data; \
862
data = g_new0 (TestFetchAllData, 1); \
863
data->pattern = _pattern; \
864
data->string = _string; \
865
data->start_position = _start_position; \
866
data->max_tokens = _max_tokens; \
867
data->expected = NULL; \
868
data->expected = g_slist_append (data->expected, e1); \
869
path = g_strdup_printf ("/regex/full-split1/%d", ++total); \
870
g_test_add_data_func (path, data, test_split_full); \
872
if (_start_position == 0 && _max_tokens <= 0) { \
873
path = g_strdup_printf ("/regex/split1/%d", ++total); \
874
g_test_add_data_func (path, data, test_split); \
879
#define TEST_SPLIT2(_pattern, _string, _start_position, _max_tokens, e1, e2) { \
880
TestFetchAllData *data; \
882
data = g_new0 (TestFetchAllData, 1); \
883
data->pattern = _pattern; \
884
data->string = _string; \
885
data->start_position = _start_position; \
886
data->max_tokens = _max_tokens; \
887
data->expected = NULL; \
888
data->expected = g_slist_append (data->expected, e1); \
889
data->expected = g_slist_append (data->expected, e2); \
890
path = g_strdup_printf ("/regex/full-split2/%d", ++total); \
891
g_test_add_data_func (path, data, test_split_full); \
893
if (_start_position == 0 && _max_tokens <= 0) { \
894
path = g_strdup_printf ("/regex/split2/%d", ++total); \
895
g_test_add_data_func (path, data, test_split); \
896
#define TEST_SPLIT0(_pattern, _string, _start_position, _max_tokens) { \
897
TestFetchAllData *data; \
899
data = g_new0 (TestFetchAllData, 1); \
900
data->pattern = _pattern; \
901
data->string = _string; \
902
data->start_position = _start_position; \
903
data->max_tokens = _max_tokens; \
904
data->expected = NULL; \
905
if (_start_position == 0 && _max_tokens <= 0) { \
906
path = g_strdup_printf ("/regex/split0/%d", ++total); \
907
g_test_add_data_func (path, data, test_split); \
910
path = g_strdup_printf ("/regex/full-split0/%d", ++total); \
911
g_test_add_data_func_full (path, data, test_split_full, free_fetch_all_data); \
915
#define TEST_SPLIT1(_pattern, _string, _start_position, _max_tokens, e1) { \
916
TestFetchAllData *data; \
918
data = g_new0 (TestFetchAllData, 1); \
919
data->pattern = _pattern; \
920
data->string = _string; \
921
data->start_position = _start_position; \
922
data->max_tokens = _max_tokens; \
923
data->expected = NULL; \
924
data->expected = g_slist_append (data->expected, e1); \
925
if (_start_position == 0 && _max_tokens <= 0) { \
926
path = g_strdup_printf ("/regex/split1/%d", ++total); \
927
g_test_add_data_func (path, data, test_split); \
930
path = g_strdup_printf ("/regex/full-split1/%d", ++total); \
931
g_test_add_data_func_full (path, data, test_split_full, free_fetch_all_data); \
935
#define TEST_SPLIT2(_pattern, _string, _start_position, _max_tokens, e1, e2) { \
936
TestFetchAllData *data; \
938
data = g_new0 (TestFetchAllData, 1); \
939
data->pattern = _pattern; \
940
data->string = _string; \
941
data->start_position = _start_position; \
942
data->max_tokens = _max_tokens; \
943
data->expected = NULL; \
944
data->expected = g_slist_append (data->expected, e1); \
945
data->expected = g_slist_append (data->expected, e2); \
946
if (_start_position == 0 && _max_tokens <= 0) { \
947
path = g_strdup_printf ("/regex/split2/%d", ++total); \
948
g_test_add_data_func (path, data, test_split); \
951
path = g_strdup_printf ("/regex/full-split2/%d", ++total); \
952
g_test_add_data_func_full (path, data, test_split_full, free_fetch_all_data); \
900
956
#define TEST_SPLIT3(_pattern, _string, _start_position, _max_tokens, e1, e2, e3) { \
901
TestFetchAllData *data; \
903
data = g_new0 (TestFetchAllData, 1); \
904
data->pattern = _pattern; \
905
data->string = _string; \
906
data->start_position = _start_position; \
907
data->max_tokens = _max_tokens; \
908
data->expected = NULL; \
909
data->expected = g_slist_append (data->expected, e1); \
910
data->expected = g_slist_append (data->expected, e2); \
911
data->expected = g_slist_append (data->expected, e3); \
912
path = g_strdup_printf ("/regex/full-split3/%d", ++total); \
913
g_test_add_data_func (path, data, test_split_full); \
915
if (_start_position == 0 && _max_tokens <= 0) { \
916
path = g_strdup_printf ("/regex/split3/%d", ++total); \
917
g_test_add_data_func (path, data, test_split); \
957
TestFetchAllData *data; \
959
data = g_new0 (TestFetchAllData, 1); \
960
data->pattern = _pattern; \
961
data->string = _string; \
962
data->start_position = _start_position; \
963
data->max_tokens = _max_tokens; \
964
data->expected = NULL; \
965
data->expected = g_slist_append (data->expected, e1); \
966
data->expected = g_slist_append (data->expected, e2); \
967
data->expected = g_slist_append (data->expected, e3); \
968
if (_start_position == 0 && _max_tokens <= 0) { \
969
path = g_strdup_printf ("/regex/split3/%d", ++total); \
970
g_test_add_data_func (path, data, test_split); \
973
path = g_strdup_printf ("/regex/full-split3/%d", ++total); \
974
g_test_add_data_func_full (path, data, test_split_full, free_fetch_all_data); \
1250
1306
g_regex_unref (regex);
1253
#define TEST_MATCH_ALL0(_pattern, _string, _string_len, _start_position) { \
1254
TestMatchAllData *data; \
1256
data = g_new0 (TestMatchAllData, 1); \
1257
data->pattern = _pattern; \
1258
data->string = _string; \
1259
data->string_len = _string_len; \
1260
data->start_position = _start_position; \
1261
data->expected = NULL; \
1262
path = g_strdup_printf ("/regex/match-all-full0/%d", ++total); \
1263
g_test_add_data_func (path, data, test_match_all_full); \
1265
if (_string_len == -1 && _start_position == 0) { \
1266
path = g_strdup_printf ("/regex/match-all0/%d", ++total); \
1267
g_test_add_data_func (path, data, test_match_all); \
1272
#define TEST_MATCH_ALL1(_pattern, _string, _string_len, _start_position, \
1274
TestMatchAllData *data; \
1277
data = g_new0 (TestMatchAllData, 1); \
1278
data->pattern = _pattern; \
1279
data->string = _string; \
1280
data->string_len = _string_len; \
1281
data->start_position = _start_position; \
1282
data->expected = NULL; \
1283
match = g_new0 (Match, 1); \
1284
match->string = t1; \
1285
match->start = s1; \
1287
data->expected = g_slist_append (data->expected, match); \
1288
path = g_strdup_printf ("/regex/match-all-full1/%d", ++total); \
1289
g_test_add_data_func (path, data, test_match_all_full); \
1291
if (_string_len == -1 && _start_position == 0) { \
1292
path = g_strdup_printf ("/regex/match-all1/%d", ++total); \
1293
g_test_add_data_func (path, data, test_match_all); \
1298
#define TEST_MATCH_ALL2(_pattern, _string, _string_len, _start_position, \
1299
t1, s1, e1, t2, s2, e2) { \
1300
TestMatchAllData *data; \
1303
data = g_new0 (TestMatchAllData, 1); \
1304
data->pattern = _pattern; \
1305
data->string = _string; \
1306
data->string_len = _string_len; \
1307
data->start_position = _start_position; \
1308
data->expected = NULL; \
1309
match = g_new0 (Match, 1); \
1310
match->string = t1; \
1311
match->start = s1; \
1313
data->expected = g_slist_append (data->expected, match); \
1314
match = g_new0 (Match, 1); \
1315
match->string = t2; \
1316
match->start = s2; \
1318
data->expected = g_slist_append (data->expected, match); \
1319
path = g_strdup_printf ("/regex/match-all-full2/%d", ++total); \
1320
g_test_add_data_func (path, data, test_match_all_full); \
1322
if (_string_len == -1 && _start_position == 0) { \
1323
path = g_strdup_printf ("/regex/match-all2/%d", ++total); \
1324
g_test_add_data_func (path, data, test_match_all); \
1329
#define TEST_MATCH_ALL3(_pattern, _string, _string_len, _start_position, \
1330
t1, s1, e1, t2, s2, e2, t3, s3, e3) { \
1331
TestMatchAllData *data; \
1334
data = g_new0 (TestMatchAllData, 1); \
1335
data->pattern = _pattern; \
1336
data->string = _string; \
1337
data->string_len = _string_len; \
1338
data->start_position = _start_position; \
1339
data->expected = NULL; \
1340
match = g_new0 (Match, 1); \
1341
match->string = t1; \
1342
match->start = s1; \
1344
data->expected = g_slist_append (data->expected, match); \
1345
match = g_new0 (Match, 1); \
1346
match->string = t2; \
1347
match->start = s2; \
1349
data->expected = g_slist_append (data->expected, match); \
1350
match = g_new0 (Match, 1); \
1351
match->string = t3; \
1352
match->start = s3; \
1354
data->expected = g_slist_append (data->expected, match); \
1355
path = g_strdup_printf ("/regex/match-all-full3/%d", ++total); \
1356
g_test_add_data_func (path, data, test_match_all_full); \
1358
if (_string_len == -1 && _start_position == 0) { \
1359
path = g_strdup_printf ("/regex/match-all3/%d", ++total); \
1360
g_test_add_data_func (path, data, test_match_all); \
1365
#define PCRE_UTF8 0x00000800
1366
#define PCRE_NO_UTF8_CHECK 0x00002000
1367
#define PCRE_NEWLINE_ANY 0x00400000
1368
#define PCRE_UCP 0x20000000
1373
GRegexCompileFlags cflags = G_REGEX_CASELESS | G_REGEX_EXTENDED | G_REGEX_OPTIMIZE;
1374
GRegexMatchFlags mflags = G_REGEX_MATCH_NOTBOL | G_REGEX_MATCH_PARTIAL;
1377
regex = g_regex_new ("[A-Z]+", cflags, mflags, NULL);
1379
g_assert (regex != NULL);
1380
g_assert_cmpint (g_regex_get_compile_flags (regex), ==, cflags|PCRE_UTF8|PCRE_NO_UTF8_CHECK|PCRE_NEWLINE_ANY|PCRE_UCP );
1381
g_assert_cmpint (g_regex_get_match_flags (regex), ==, mflags|PCRE_NO_UTF8_CHECK);
1383
g_regex_unref (regex);
1393
regex = g_regex_new ("a\\", 0, 0, &error);
1394
g_assert (regex == NULL);
1395
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_STRAY_BACKSLASH);
1396
g_clear_error (&error);
1397
regex = g_regex_new ("a\\c", 0, 0, &error);
1398
g_assert (regex == NULL);
1399
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_MISSING_CONTROL_CHAR);
1400
g_clear_error (&error);
1401
regex = g_regex_new ("a\\l", 0, 0, &error);
1402
g_assert (regex == NULL);
1403
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNRECOGNIZED_ESCAPE);
1404
g_clear_error (&error);
1405
regex = g_regex_new ("a{4,2}", 0, 0, &error);
1406
g_assert (regex == NULL);
1407
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER);
1408
g_clear_error (&error);
1409
regex = g_regex_new ("a{999999,}", 0, 0, &error);
1410
g_assert (regex == NULL);
1411
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_QUANTIFIER_TOO_BIG);
1412
g_clear_error (&error);
1413
regex = g_regex_new ("[a-z", 0, 0, &error);
1414
g_assert (regex == NULL);
1415
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS);
1416
g_clear_error (&error);
1418
regex = g_regex_new ("[\\b]", 0, 0, &error);
1419
g_assert (regex == NULL);
1420
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS);
1421
g_clear_error (&error);
1423
regex = g_regex_new ("[z-a]", 0, 0, &error);
1424
g_assert (regex == NULL);
1425
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_RANGE_OUT_OF_ORDER);
1426
g_clear_error (&error);
1427
regex = g_regex_new ("{2,4}", 0, 0, &error);
1428
g_assert (regex == NULL);
1429
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_NOTHING_TO_REPEAT);
1430
g_clear_error (&error);
1431
regex = g_regex_new ("a(?u)", 0, 0, &error);
1432
g_assert (regex == NULL);
1433
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNRECOGNIZED_CHARACTER);
1434
g_clear_error (&error);
1435
regex = g_regex_new ("a(?<$foo)bar", 0, 0, &error);
1436
g_assert (regex == NULL);
1437
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNRECOGNIZED_CHARACTER);
1438
g_clear_error (&error);
1439
regex = g_regex_new ("a[:alpha:]b", 0, 0, &error);
1440
g_assert (regex == NULL);
1441
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS);
1442
g_clear_error (&error);
1443
regex = g_regex_new ("a(b", 0, 0, &error);
1444
g_assert (regex == NULL);
1445
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
1446
g_clear_error (&error);
1447
regex = g_regex_new ("a)b", 0, 0, &error);
1448
g_assert (regex == NULL);
1449
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
1450
g_clear_error (&error);
1451
regex = g_regex_new ("a(?R", 0, 0, &error);
1452
g_assert (regex == NULL);
1453
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
1454
g_clear_error (&error);
1455
regex = g_regex_new ("a(?-54", 0, 0, &error);
1456
g_assert (regex == NULL);
1457
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
1458
g_clear_error (&error);
1459
regex = g_regex_new ("a(?#abc", 0, 0, &error);
1460
g_assert (regex == NULL);
1461
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNTERMINATED_COMMENT);
1462
g_clear_error (&error);
1463
regex = g_regex_new ("a[[:fubar:]]b", 0, 0, &error);
1464
g_assert (regex == NULL);
1465
g_assert_error (error, G_REGEX_ERROR, G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME);
1466
g_clear_error (&error);
1310
free_match_all_data (gpointer _data)
1312
TestMatchAllData *data = _data;
1314
g_slist_free_full (data->expected, g_free);
1318
#define TEST_MATCH_ALL0(_pattern, _string, _string_len, _start_position) { \
1319
TestMatchAllData *data; \
1321
data = g_new0 (TestMatchAllData, 1); \
1322
data->pattern = _pattern; \
1323
data->string = _string; \
1324
data->string_len = _string_len; \
1325
data->start_position = _start_position; \
1326
data->expected = NULL; \
1327
if (_string_len == -1 && _start_position == 0) { \
1328
path = g_strdup_printf ("/regex/match-all0/%d", ++total); \
1329
g_test_add_data_func (path, data, test_match_all); \
1332
path = g_strdup_printf ("/regex/match-all-full0/%d", ++total); \
1333
g_test_add_data_func_full (path, data, test_match_all_full, free_match_all_data); \
1337
#define TEST_MATCH_ALL1(_pattern, _string, _string_len, _start_position, \
1339
TestMatchAllData *data; \
1342
data = g_new0 (TestMatchAllData, 1); \
1343
data->pattern = _pattern; \
1344
data->string = _string; \
1345
data->string_len = _string_len; \
1346
data->start_position = _start_position; \
1347
data->expected = NULL; \
1348
match = g_new0 (Match, 1); \
1349
match->string = t1; \
1350
match->start = s1; \
1352
data->expected = g_slist_append (data->expected, match); \
1353
if (_string_len == -1 && _start_position == 0) { \
1354
path = g_strdup_printf ("/regex/match-all1/%d", ++total); \
1355
g_test_add_data_func (path, data, test_match_all); \
1358
path = g_strdup_printf ("/regex/match-all-full1/%d", ++total); \
1359
g_test_add_data_func_full (path, data, test_match_all_full, free_match_all_data); \
1363
#define TEST_MATCH_ALL2(_pattern, _string, _string_len, _start_position, \
1364
t1, s1, e1, t2, s2, e2) { \
1365
TestMatchAllData *data; \
1368
data = g_new0 (TestMatchAllData, 1); \
1369
data->pattern = _pattern; \
1370
data->string = _string; \
1371
data->string_len = _string_len; \
1372
data->start_position = _start_position; \
1373
data->expected = NULL; \
1374
match = g_new0 (Match, 1); \
1375
match->string = t1; \
1376
match->start = s1; \
1378
data->expected = g_slist_append (data->expected, match); \
1379
match = g_new0 (Match, 1); \
1380
match->string = t2; \
1381
match->start = s2; \
1383
data->expected = g_slist_append (data->expected, match); \
1384
if (_string_len == -1 && _start_position == 0) { \
1385
path = g_strdup_printf ("/regex/match-all2/%d", ++total); \
1386
g_test_add_data_func (path, data, test_match_all); \
1389
path = g_strdup_printf ("/regex/match-all-full2/%d", ++total); \
1390
g_test_add_data_func_full (path, data, test_match_all_full, free_match_all_data); \
1394
#define TEST_MATCH_ALL3(_pattern, _string, _string_len, _start_position, \
1395
t1, s1, e1, t2, s2, e2, t3, s3, e3) { \
1396
TestMatchAllData *data; \
1399
data = g_new0 (TestMatchAllData, 1); \
1400
data->pattern = _pattern; \
1401
data->string = _string; \
1402
data->string_len = _string_len; \
1403
data->start_position = _start_position; \
1404
data->expected = NULL; \
1405
match = g_new0 (Match, 1); \
1406
match->string = t1; \
1407
match->start = s1; \
1409
data->expected = g_slist_append (data->expected, match); \
1410
match = g_new0 (Match, 1); \
1411
match->string = t2; \
1412
match->start = s2; \
1414
data->expected = g_slist_append (data->expected, match); \
1415
match = g_new0 (Match, 1); \
1416
match->string = t3; \
1417
match->start = s3; \
1419
data->expected = g_slist_append (data->expected, match); \
1420
if (_string_len == -1 && _start_position == 0) { \
1421
path = g_strdup_printf ("/regex/match-all3/%d", ++total); \
1422
g_test_add_data_func (path, data, test_match_all); \
1425
path = g_strdup_printf ("/regex/match-all-full3/%d", ++total); \
1426
g_test_add_data_func_full (path, data, test_match_all_full, free_match_all_data); \
2141
2119
/* This gives "internal error: code overflow" with pcre 6.0 */
2142
2120
TEST_NEW("(?i)(?-i)", 0, 0);
2122
/* Check that flags are correct if the pattern modifies them */
2123
/* TEST_NEW_CHECK_FLAGS(pattern, compile_opts, match_ops, real_compile_opts, real_match_opts) */
2124
TEST_NEW_CHECK_FLAGS ("a", G_REGEX_OPTIMIZE, 0, G_REGEX_OPTIMIZE, 0);
2125
TEST_NEW_CHECK_FLAGS ("a", G_REGEX_RAW, 0, G_REGEX_RAW, 0);
2126
TEST_NEW_CHECK_FLAGS ("(?i)a", 0, 0, G_REGEX_CASELESS, 0);
2127
TEST_NEW_CHECK_FLAGS ("(?m)a", 0, 0, G_REGEX_MULTILINE, 0);
2128
TEST_NEW_CHECK_FLAGS ("(?s)a", 0, 0, G_REGEX_DOTALL, 0);
2129
TEST_NEW_CHECK_FLAGS ("(?x)a", 0, 0, G_REGEX_EXTENDED, 0);
2130
TEST_NEW_CHECK_FLAGS ("(?J)a", 0, 0, G_REGEX_DUPNAMES, 0);
2131
TEST_NEW_CHECK_FLAGS ("(?U)[a-z]+", 0, 0, G_REGEX_UNGREEDY, 0);
2132
TEST_NEW_CHECK_FLAGS ("(?X)a", 0, 0, 0 /* not exposed by GRegex */, 0);
2133
TEST_NEW_CHECK_FLAGS ("^.*", 0, 0, G_REGEX_ANCHORED, 0);
2134
TEST_NEW_CHECK_FLAGS ("(*UTF8)a", 0, 0, 0 /* this is the default in GRegex */, 0);
2135
TEST_NEW_CHECK_FLAGS ("(*UCP)a", 0, 0, 0 /* this always on in GRegex */, 0);
2136
TEST_NEW_CHECK_FLAGS ("(*CR)a", 0, 0, G_REGEX_NEWLINE_CR, 0);
2137
TEST_NEW_CHECK_FLAGS ("(*LF)a", 0, 0, G_REGEX_NEWLINE_LF, 0);
2138
TEST_NEW_CHECK_FLAGS ("(*CRLF)a", 0, 0, G_REGEX_NEWLINE_CRLF, 0);
2139
TEST_NEW_CHECK_FLAGS ("(*ANY)a", 0, 0, 0 /* this is the default in GRegex */, 0);
2140
TEST_NEW_CHECK_FLAGS ("(*ANYCRLF)a", 0, 0, G_REGEX_NEWLINE_ANYCRLF, 0);
2141
TEST_NEW_CHECK_FLAGS ("(*BSR_ANYCRLF)a", 0, 0, G_REGEX_BSR_ANYCRLF, 0);
2142
TEST_NEW_CHECK_FLAGS ("(*BSR_UNICODE)a", 0, 0, 0 /* this is the default in GRegex */, 0);
2143
TEST_NEW_CHECK_FLAGS ("(*NO_START_OPT)a", 0, 0, 0 /* not exposed in GRegex */, 0);
2144
2145
/* TEST_NEW_FAIL(pattern, compile_opts, expected_error) */
2145
2146
TEST_NEW_FAIL("(", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2146
2147
TEST_NEW_FAIL(")", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2149
2150
TEST_NEW_FAIL("?", 0, G_REGEX_ERROR_NOTHING_TO_REPEAT);
2150
2151
TEST_NEW_FAIL("(?P<A>x)|(?P<A>y)", 0, G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME);
2153
/* Check all GRegexError codes */
2154
TEST_NEW_FAIL ("a\\", 0, G_REGEX_ERROR_STRAY_BACKSLASH);
2155
TEST_NEW_FAIL ("a\\c", 0, G_REGEX_ERROR_MISSING_CONTROL_CHAR);
2156
TEST_NEW_FAIL ("a\\l", 0, G_REGEX_ERROR_UNRECOGNIZED_ESCAPE);
2157
TEST_NEW_FAIL ("a{4,2}", 0, G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER);
2158
TEST_NEW_FAIL ("a{999999,}", 0, G_REGEX_ERROR_QUANTIFIER_TOO_BIG);
2159
TEST_NEW_FAIL ("[a-z", 0, G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS);
2160
TEST_NEW_FAIL ("(?X)[\\B]", 0, G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS);
2161
TEST_NEW_FAIL ("[z-a]", 0, G_REGEX_ERROR_RANGE_OUT_OF_ORDER);
2162
TEST_NEW_FAIL ("{2,4}", 0, G_REGEX_ERROR_NOTHING_TO_REPEAT);
2163
TEST_NEW_FAIL ("a(?u)", 0, G_REGEX_ERROR_UNRECOGNIZED_CHARACTER);
2164
TEST_NEW_FAIL ("a(?<$foo)bar", 0, G_REGEX_ERROR_UNRECOGNIZED_CHARACTER);
2165
TEST_NEW_FAIL ("a[:alpha:]b", 0, G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS);
2166
TEST_NEW_FAIL ("a(b", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2167
TEST_NEW_FAIL ("a)b", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2168
TEST_NEW_FAIL ("a(?R", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2169
TEST_NEW_FAIL ("a(?-54", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
2170
TEST_NEW_FAIL ("(ab\\2)", 0, G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE);
2171
TEST_NEW_FAIL ("a(?#abc", 0, G_REGEX_ERROR_UNTERMINATED_COMMENT);
2172
TEST_NEW_FAIL ("(?<=a+)b", 0, G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND);
2173
TEST_NEW_FAIL ("(?(1?)a|b)", 0, G_REGEX_ERROR_MALFORMED_CONDITION);
2174
TEST_NEW_FAIL ("(a)(?(1)a|b|c)", 0, G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES);
2175
TEST_NEW_FAIL ("(?(?i))", 0, G_REGEX_ERROR_ASSERTION_EXPECTED);
2176
TEST_NEW_FAIL ("a[[:fubar:]]b", 0, G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME);
2177
TEST_NEW_FAIL ("[[.ch.]]", 0, G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED);
2178
TEST_NEW_FAIL ("\\x{110000}", 0, G_REGEX_ERROR_HEX_CODE_TOO_LARGE);
2179
TEST_NEW_FAIL ("^(?(0)f|b)oo", 0, G_REGEX_ERROR_INVALID_CONDITION);
2180
TEST_NEW_FAIL ("(?<=\\C)X", 0, G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND);
2181
TEST_NEW_FAIL ("(?!\\w)(?R)", 0, G_REGEX_ERROR_INFINITE_LOOP);
2182
TEST_NEW_FAIL ("(?(?<ab))", 0, G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR);
2183
TEST_NEW_FAIL ("(?P<x>eks)(?P<x>eccs)", 0, G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME);
2185
TEST_NEW_FAIL (?, 0, G_REGEX_ERROR_MALFORMED_PROPERTY);
2186
TEST_NEW_FAIL (?, 0, G_REGEX_ERROR_UNKNOWN_PROPERTY);
2188
TEST_NEW_FAIL ("\\666", G_REGEX_RAW, G_REGEX_ERROR_INVALID_OCTAL_VALUE);
2189
TEST_NEW_FAIL ("^(?(DEFINE) abc | xyz ) ", 0, G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE);
2190
TEST_NEW_FAIL ("a", G_REGEX_NEWLINE_CRLF | G_REGEX_NEWLINE_ANYCRLF, G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS);
2191
TEST_NEW_FAIL ("^(a)\\g{3", 0, G_REGEX_ERROR_MISSING_BACK_REFERENCE);
2192
TEST_NEW_FAIL ("^(a)\\g{0}", 0, G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE);
2193
TEST_NEW_FAIL ("abc(*FAIL:123)xyz", 0, G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN);
2194
TEST_NEW_FAIL ("a(*FOOBAR)b", 0, G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB);
2195
TEST_NEW_FAIL ("(?i:A{1,}\\6666666666)", 0, G_REGEX_ERROR_NUMBER_TOO_BIG);
2196
TEST_NEW_FAIL ("(?<a>)(?&)", 0, G_REGEX_ERROR_MISSING_SUBPATTERN_NAME);
2197
TEST_NEW_FAIL ("(?+-a)", 0, G_REGEX_ERROR_MISSING_DIGIT);
2198
TEST_NEW_FAIL ("TA]", G_REGEX_JAVASCRIPT_COMPAT, G_REGEX_ERROR_INVALID_DATA_CHARACTER);
2199
TEST_NEW_FAIL ("(?|(?<a>A)|(?<b>B))", 0, G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME);
2200
TEST_NEW_FAIL ("a(*MARK)b", 0, G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED);
2201
TEST_NEW_FAIL ("^\\c€", 0, G_REGEX_ERROR_INVALID_CONTROL_CHAR);
2202
TEST_NEW_FAIL ("\\k", 0, G_REGEX_ERROR_MISSING_NAME);
2203
TEST_NEW_FAIL ("a[\\NB]c", 0, G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS);
2204
TEST_NEW_FAIL ("(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEFG)XX", 0, G_REGEX_ERROR_NAME_TOO_LONG);
2205
TEST_NEW_FAIL ("\\u0100", G_REGEX_RAW | G_REGEX_JAVASCRIPT_COMPAT, G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE);
2207
/* These errors can't really be tested sanely:
2208
* G_REGEX_ERROR_EXPRESSION_TOO_LARGE
2209
* G_REGEX_ERROR_MEMORY_ERROR
2210
* G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG
2211
* G_REGEX_ERROR_TOO_MANY_SUBPATTERNS
2212
* G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES
2214
* These errors are obsolete and never raised by PCRE:
2215
* G_REGEX_ERROR_DEFINE_REPETION
2152
2218
/* TEST_MATCH_SIMPLE(pattern, string, compile_opts, match_opts, expected) */
2153
2219
TEST_MATCH_SIMPLE("a", "", 0, 0, FALSE);
2154
2220
TEST_MATCH_SIMPLE("a", "a", 0, 0, TRUE);