comparison tests/automated/regexp-tests.el @ 5647:1d9f603e9125

Turn on character classes in regex.c by default; test them in regexp-tests.el 2012-04-21 Aidan Kehoe <kehoea@parhasard.net> * regex.h (RE_SYNTAX_EMACS): Turn on character classes ([:alnum:] and friends) by default. This implementation is incomplete, am working on a version that handles non-ASCII characters correctly. tests/ChangeLog addition: 2012-04-21 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el: * automated/regexp-tests.el (Assert-char-class): Test the character classes functionality that was always in regex.c but that has only just been turned on. These tests pass on GNU Emacs 24.0.94.2.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 21 Apr 2012 09:41:27 +0100
parents 308d34e9f07d
children 3f4a234f4672
comparison
equal deleted inserted replaced
5646:7aa144d1404b 5647:1d9f603e9125
594 (Assert (eql (string-match "[\x7f\x80-\x9e]" "\x80") 0)) 594 (Assert (eql (string-match "[\x7f\x80-\x9e]" "\x80") 0))
595 ;; Used to succeed even with the bug. 595 ;; Used to succeed even with the bug.
596 (Assert (eql (string-match "[\x7f\x80\x9f]" "\x80") 0)) 596 (Assert (eql (string-match "[\x7f\x80\x9f]" "\x80") 0))
597 (Assert (eql (string-match "[\x7e\x80-\x9f]" "\x80") 0)) 597 (Assert (eql (string-match "[\x7e\x80-\x9f]" "\x80") 0))
598 (Assert (eql (string-match "[\x7f\x81-\x9f]" "\x81") 0)) 598 (Assert (eql (string-match "[\x7f\x81-\x9f]" "\x81") 0))
599
600 ;; Test character classes
601 (macrolet
602 ((Assert-char-class (class matching-char non-matching-char)
603 (if (and (not (featurep 'mule))
604 (or (eq (car-safe matching-char) 'decode-char)
605 (eq (car-safe non-matching-char) 'decode-char)))
606 ;; Don't attempt expansion if these clauses require Mule and we
607 ;; don't have it.
608 (return-from Assert-char-class nil)
609 (setq matching-char (eval matching-char)
610 non-matching-char (eval non-matching-char)))
611 `(progn
612 (Assert (eql (string-match ,(concat "[" class "]")
613 ,(concat (string matching-char)
614 (string non-matching-char)))
615 0))
616 (Assert (eql (string-match ,(concat "[" class class class "]")
617 ,(concat (string matching-char)
618 (string non-matching-char)))
619 0))
620 (Assert (eql (string-match ,(concat "[^" class "]")
621 ,(concat (string non-matching-char)
622 (string matching-char)))
623 0))
624 (Assert (eql (string-match ,(concat "[^" class class class "]")
625 ,(concat (string non-matching-char)
626 (string matching-char)))
627 0))
628 (Assert (eql (string-match ,(concat "[" class "]")
629 ,(concat (string non-matching-char)
630 (string matching-char)))
631 1))
632 (Assert (eql (string-match ,(concat "[" class class class "]")
633 ,(concat (string non-matching-char)
634 (string matching-char)))
635 1))
636 (Assert (eql (string-match ,(concat "[^" class "]")
637 ,(concat (string matching-char)
638 (string non-matching-char)))
639 1))
640 (Assert (eql (string-match ,(concat "[^" class class class "]")
641 ,(concat (string matching-char)
642 (string non-matching-char)))
643 1))
644 (Assert (null (string-match ,(concat "[" class "]")
645 ,(string non-matching-char))))
646 (Assert (null (string-match ,(concat "[^" class "]")
647 ,(string matching-char))))
648 (Assert (null (string-match ,(concat "[^" class
649 (string non-matching-char) "]")
650 ,(concat (string matching-char)
651 (string non-matching-char))))))))
652 (Assert-char-class "[:alpha:]" ?a ?0)
653 (Assert-char-class "[:alpha:]" ?z ?9)
654 (Assert-char-class "[:alpha:]" ?A ?0)
655 (Assert-char-class "[:alpha:]" ?Z ?9)
656 (Assert-char-class "[:alpha:]" ?b ?\x00)
657 (Assert-char-class "[:alpha:]" ?c ?\x09)
658 (Assert-char-class "[:alpha:]" ?d ?\ )
659 (Assert-char-class "[:alpha:]" ?e ?\x7f)
660
661 (Assert-char-class "[:alnum:]" ?a ?.)
662 (Assert-char-class "[:alnum:]" ?z ?')
663 (Assert-char-class "[:alnum:]" ?A ?/)
664 (Assert-char-class "[:alnum:]" ?Z ?!)
665 (Assert-char-class "[:alnum:]" ?0 ?,)
666 (Assert-char-class "[:alnum:]" ?9 ?$)
667
668 (Assert-char-class "[:alnum:]" ?b ?\x00)
669 (Assert-char-class "[:alnum:]" ?c ?\x09)
670 (Assert-char-class "[:alnum:]" ?d ?\ )
671 (Assert-char-class "[:alnum:]" ?e ?\x7f)
672
673 (let ((case-fold-search nil))
674 (Assert-char-class "[:upper:]" ?A ?a)
675 (Assert-char-class "[:upper:]" ?Z ?z)
676 (Assert-char-class "[:upper:]" ?B ?0)
677 (Assert-char-class "[:upper:]" ?C ?9)
678 (Assert-char-class "[:upper:]" ?D ?\x00)
679 (Assert-char-class "[:upper:]" ?E ?\x09)
680 (Assert-char-class "[:upper:]" ?F ?\ )
681 (Assert-char-class "[:upper:]" ?G ?\x7f)
682
683 (Assert-char-class "[:lower:]" ?a ?A)
684 (Assert-char-class "[:lower:]" ?z ?Z)
685 (Assert-char-class "[:lower:]" ?b ?0)
686 (Assert-char-class "[:lower:]" ?c ?9)
687 (Assert-char-class "[:lower:]" ?d ?\x00)
688 (Assert-char-class "[:lower:]" ?e ?\x09)
689 (Assert-char-class "[:lower:]" ?f ? )
690 (Assert-char-class "[:lower:]" ?g ?\x7f))
691
692 (let ((case-fold-search t))
693 ;; These currently fail, because we don't take into account the buffer's
694 ;; case table.
695 (Assert-char-class "[:upper:]" ?a ?\x00)
696 (Assert-char-class "[:upper:]" ?z ?\x01)
697 (Assert-char-class "[:upper:]" ?b ?{)
698 (Assert-char-class "[:upper:]" ?c ?})
699 (Assert-char-class "[:upper:]" ?d ?<)
700 (Assert-char-class "[:upper:]" ?e ?>)
701 (Assert-char-class "[:upper:]" ?f ?\ )
702 (Assert-char-class "[:upper:]" ?g ?\x7f)
703
704 (Assert-char-class "[:lower:]" ?A ?\x00)
705 (Assert-char-class "[:lower:]" ?Z ?\x01)
706 (Assert-char-class "[:lower:]" ?B ?{)
707 (Assert-char-class "[:lower:]" ?C ?})
708 (Assert-char-class "[:lower:]" ?D ?<)
709 (Assert-char-class "[:lower:]" ?E ?>)
710 (Assert-char-class "[:lower:]" ?F ?\ )
711 (Assert-char-class "[:lower:]" ?G ?\x7F))
712
713 (Assert-char-class "[:digit:]" ?0 ?a)
714 (Assert-char-class "[:digit:]" ?9 ?z)
715 (Assert-char-class "[:digit:]" ?1 ?A)
716 (Assert-char-class "[:digit:]" ?2 ?Z)
717 (Assert-char-class "[:digit:]" ?3 ?\x00)
718 (Assert-char-class "[:digit:]" ?4 ?\x09)
719 (Assert-char-class "[:digit:]" ?5 ? )
720 (Assert-char-class "[:digit:]" ?6 ?\x7f)
721
722 (Assert-char-class "[:xdigit:]" ?0 ?g)
723 (Assert-char-class "[:xdigit:]" ?9 ?G)
724 (Assert-char-class "[:xdigit:]" ?A ?{)
725 (Assert-char-class "[:xdigit:]" ?a ?})
726 (Assert-char-class "[:xdigit:]" ?1 ? )
727 (Assert-char-class "[:xdigit:]" ?2 ?Z)
728 (Assert-char-class "[:xdigit:]" ?3 ?\x00)
729 (Assert-char-class "[:xdigit:]" ?4 ?\x09)
730 (Assert-char-class "[:xdigit:]" ?5 ?\x7f)
731 (Assert-char-class "[:xdigit:]" ?6 ?z)
732
733 (Assert-char-class "[:space:]" ?\ ?0)
734 (Assert-char-class "[:space:]" ?\t ?9)
735 (Assert-char-class "[:space:]" ?\ ?A)
736 (Assert-char-class "[:space:]" ?\t ?Z)
737 (Assert-char-class "[:space:]" ?\ ?\x00)
738 (Assert-char-class "[:space:]" ?\ ?\x7f)
739 (Assert-char-class "[:space:]" ?\t ?a)
740 (Assert-char-class "[:space:]" ?\ ?z)
741
742 (Assert-char-class "[:print:]" ?\ ?\x00)
743 (Assert-char-class "[:print:]" ?0 ?\x09)
744 (Assert-char-class "[:print:]" ?9 ?\x7f)
745 (Assert-char-class "[:print:]" ?A ?\x01)
746 (Assert-char-class "[:print:]" ?Z ?\x02)
747 (Assert-char-class "[:print:]" ?B ?\t)
748 (Assert-char-class "[:print:]" ?a ?\x03)
749 (Assert-char-class "[:print:]" ?z ?\x04)
750
751 (Assert-char-class "[:punct:]" ?\( ?0)
752 (Assert-char-class "[:punct:]" ?. ?9)
753 (Assert-char-class "[:punct:]" ?{ ?A)
754 (Assert-char-class "[:punct:]" ?} ?Z)
755 (Assert-char-class "[:punct:]" ?: ?\t)
756 (Assert-char-class "[:punct:]" ?\; ?\x00)
757 (Assert-char-class "[:punct:]" ?< ?\x09)
758 (Assert-char-class "[:punct:]" ?> ?\x7f)
759 (Assert-char-class "[:punct:]" ?= ?a)
760 (Assert-char-class "[:punct:]" ?\? ?z))