1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00
emacs/test/lisp/legacy/font-parse-tests.el
Phillip Lord 22bbf7ca22 Rename all test files to reflect source layout.
* CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
   test directory moves.
 * test/file-organisation.org: New file.
 * test/automated/Makefile.in
   test/automated/data/decompress/foo.gz
   test/automated/data/epg/pubkey.asc
   test/automated/data/epg/seckey.asc
   test/automated/data/files-bug18141.el.gz
   test/automated/data/flymake/test.c
   test/automated/data/flymake/test.pl
   test/automated/data/package/archive-contents
   test/automated/data/package/key.pub
   test/automated/data/package/key.sec
   test/automated/data/package/multi-file-0.2.3.tar
   test/automated/data/package/multi-file-readme.txt
   test/automated/data/package/newer-versions/archive-contents
   test/automated/data/package/newer-versions/new-pkg-1.0.el
   test/automated/data/package/newer-versions/simple-single-1.4.el
   test/automated/data/package/package-test-server.py
   test/automated/data/package/signed/archive-contents
   test/automated/data/package/signed/archive-contents.sig
   test/automated/data/package/signed/signed-bad-1.0.el
   test/automated/data/package/signed/signed-bad-1.0.el.sig
   test/automated/data/package/signed/signed-good-1.0.el
   test/automated/data/package/signed/signed-good-1.0.el.sig
   test/automated/data/package/simple-depend-1.0.el
   test/automated/data/package/simple-single-1.3.el
   test/automated/data/package/simple-single-readme.txt
   test/automated/data/package/simple-two-depend-1.1.el
   test/automated/abbrev-tests.el
   test/automated/auto-revert-tests.el
   test/automated/calc-tests.el
   test/automated/icalendar-tests.el
   test/automated/character-fold-tests.el
   test/automated/comint-testsuite.el
   test/automated/descr-text-test.el
   test/automated/electric-tests.el
   test/automated/cl-generic-tests.el
   test/automated/cl-lib-tests.el
   test/automated/eieio-test-methodinvoke.el
   test/automated/eieio-test-persist.el
   test/automated/eieio-tests.el
   test/automated/ert-tests.el
   test/automated/ert-x-tests.el
   test/automated/generator-tests.el
   test/automated/let-alist.el
   test/automated/map-tests.el
   test/automated/advice-tests.el
   test/automated/package-test.el
   test/automated/pcase-tests.el
   test/automated/regexp-tests.el
   test/automated/seq-tests.el
   test/automated/subr-x-tests.el
   test/automated/tabulated-list-test.el
   test/automated/thunk-tests.el
   test/automated/timer-tests.el
   test/automated/epg-tests.el
   test/automated/eshell.el
   test/automated/faces-tests.el
   test/automated/file-notify-tests.el
   test/automated/auth-source-tests.el
   test/automated/gnus-tests.el
   test/automated/message-mode-tests.el
   test/automated/help-fns.el
   test/automated/imenu-test.el
   test/automated/info-xref.el
   test/automated/mule-util.el
   test/automated/isearch-tests.el
   test/automated/json-tests.el
   test/automated/bytecomp-tests.el
   test/automated/coding-tests.el
   test/automated/core-elisp-tests.el
   test/automated/decoder-tests.el
   test/automated/files.el
   test/automated/font-parse-tests.el
   test/automated/lexbind-tests.el
   test/automated/occur-tests.el
   test/automated/process-tests.el
   test/automated/syntax-tests.el
   test/automated/textprop-tests.el
   test/automated/undo-tests.el
   test/automated/man-tests.el
   test/automated/completion-tests.el
   test/automated/dbus-tests.el
   test/automated/newsticker-tests.el
   test/automated/sasl-scram-rfc-tests.el
   test/automated/tramp-tests.el
   test/automated/obarray-tests.el
   test/automated/compile-tests.el
   test/automated/elisp-mode-tests.el
   test/automated/f90.el
   test/automated/flymake-tests.el
   test/automated/python-tests.el
   test/automated/ruby-mode-tests.el
   test/automated/subword-tests.el
   test/automated/replace-tests.el
   test/automated/simple-test.el
   test/automated/sort-tests.el
   test/automated/subr-tests.el
   test/automated/reftex-tests.el
   test/automated/sgml-mode-tests.el
   test/automated/tildify-tests.el
   test/automated/thingatpt.el
   test/automated/url-future-tests.el
   test/automated/url-util-tests.el
   test/automated/add-log-tests.el
   test/automated/vc-bzr.el
   test/automated/vc-tests.el
   test/automated/xml-parse-tests.el
   test/BidiCharacterTest.txt
   test/biditest.el
   test/cedet/cedet-utests.el
   test/cedet/ede-tests.el
   test/cedet/semantic-ia-utest.el
   test/cedet/semantic-tests.el
   test/cedet/semantic-utest-c.el
   test/cedet/semantic-utest.el
   test/cedet/srecode-tests.el
   test/cedet/tests/test.c
   test/cedet/tests/test.el
   test/cedet/tests/test.make
   test/cedet/tests/testdoublens.cpp
   test/cedet/tests/testdoublens.hpp
   test/cedet/tests/testfriends.cpp
   test/cedet/tests/testjavacomp.java
   test/cedet/tests/testnsp.cpp
   test/cedet/tests/testpolymorph.cpp
   test/cedet/tests/testspp.c
   test/cedet/tests/testsppcomplete.c
   test/cedet/tests/testsppreplace.c
   test/cedet/tests/testsppreplaced.c
   test/cedet/tests/testsubclass.cpp
   test/cedet/tests/testsubclass.hh
   test/cedet/tests/testtypedefs.cpp
   test/cedet/tests/testvarnames.c
   test/etags/CTAGS.good
   test/etags/ETAGS.good_1
   test/etags/ETAGS.good_2
   test/etags/ETAGS.good_3
   test/etags/ETAGS.good_4
   test/etags/ETAGS.good_5
   test/etags/ETAGS.good_6
   test/etags/a-src/empty.zz
   test/etags/a-src/empty.zz.gz
   test/etags/ada-src/2ataspri.adb
   test/etags/ada-src/2ataspri.ads
   test/etags/ada-src/etags-test-for.ada
   test/etags/ada-src/waroquiers.ada
   test/etags/c-src/a/b/b.c
   test/etags/c-src/abbrev.c
   test/etags/c-src/c.c
   test/etags/c-src/dostorture.c
   test/etags/c-src/emacs/src/gmalloc.c
   test/etags/c-src/emacs/src/keyboard.c
   test/etags/c-src/emacs/src/lisp.h
   test/etags/c-src/emacs/src/regex.h
   test/etags/c-src/etags.c
   test/etags/c-src/exit.c
   test/etags/c-src/exit.strange_suffix
   test/etags/c-src/fail.c
   test/etags/c-src/getopt.h
   test/etags/c-src/h.h
   test/etags/c-src/machsyscalls.c
   test/etags/c-src/machsyscalls.h
   test/etags/c-src/sysdep.h
   test/etags/c-src/tab.c
   test/etags/c-src/torture.c
   test/etags/cp-src/MDiagArray2.h
   test/etags/cp-src/Range.h
   test/etags/cp-src/burton.cpp
   test/etags/cp-src/c.C
   test/etags/cp-src/clheir.cpp.gz
   test/etags/cp-src/clheir.hpp
   test/etags/cp-src/conway.cpp
   test/etags/cp-src/conway.hpp
   test/etags/cp-src/fail.C
   test/etags/cp-src/functions.cpp
   test/etags/cp-src/screen.cpp
   test/etags/cp-src/screen.hpp
   test/etags/cp-src/x.cc
   test/etags/el-src/TAGTEST.EL
   test/etags/el-src/emacs/lisp/progmodes/etags.el
   test/etags/erl-src/gs_dialog.erl
   test/etags/f-src/entry.for
   test/etags/f-src/entry.strange.gz
   test/etags/f-src/entry.strange_suffix
   test/etags/forth-src/test-forth.fth
   test/etags/html-src/algrthms.html
   test/etags/html-src/index.shtml
   test/etags/html-src/software.html
   test/etags/html-src/softwarelibero.html
   test/etags/lua-src/allegro.lua
   test/etags/objc-src/PackInsp.h
   test/etags/objc-src/PackInsp.m
   test/etags/objc-src/Subprocess.h
   test/etags/objc-src/Subprocess.m
   test/etags/objcpp-src/SimpleCalc.H
   test/etags/objcpp-src/SimpleCalc.M
   test/etags/pas-src/common.pas
   test/etags/perl-src/htlmify-cystic
   test/etags/perl-src/kai-test.pl
   test/etags/perl-src/yagrip.pl
   test/etags/php-src/lce_functions.php
   test/etags/php-src/ptest.php
   test/etags/php-src/sendmail.php
   test/etags/prol-src/natded.prolog
   test/etags/prol-src/ordsets.prolog
   test/etags/ps-src/rfc1245.ps
   test/etags/pyt-src/server.py
   test/etags/tex-src/gzip.texi
   test/etags/tex-src/nonewline.tex
   test/etags/tex-src/testenv.tex
   test/etags/tex-src/texinfo.tex
   test/etags/y-src/atest.y
   test/etags/y-src/cccp.c
   test/etags/y-src/cccp.y
   test/etags/y-src/parse.c
   test/etags/y-src/parse.y
   test/indent/css-mode.css
   test/indent/js-indent-init-dynamic.js
   test/indent/js-indent-init-t.js
   test/indent/js-jsx.js
   test/indent/js.js
   test/indent/latex-mode.tex
   test/indent/modula2.mod
   test/indent/nxml.xml
   test/indent/octave.m
   test/indent/pascal.pas
   test/indent/perl.perl
   test/indent/prolog.prolog
   test/indent/ps-mode.ps
   test/indent/ruby.rb
   test/indent/scheme.scm
   test/indent/scss-mode.scss
   test/indent/sgml-mode-attribute.html
   test/indent/shell.rc
   test/indent/shell.sh
   test/redisplay-testsuite.el
   test/rmailmm.el
   test/automated/buffer-tests.el
   test/automated/cmds-tests.el
   test/automated/data-tests.el
   test/automated/finalizer-tests.el
   test/automated/fns-tests.el
   test/automated/inotify-test.el
   test/automated/keymap-tests.el
   test/automated/print-tests.el
   test/automated/libxml-tests.el
   test/automated/zlib-tests.el: Files Moved.
2015-11-24 17:04:22 +00:00

165 lines
6.3 KiB
EmacsLisp

;;; font-parse-tests.el --- Test suite for font parsing.
;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
;; Author: Chong Yidong <cyd@stupidchicken.com>
;; Keywords: internal
;; Human-Keywords: internal
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Type M-x test-font-parse RET to generate the test buffer.
;;; Code:
(require 'ert)
(defvar font-parse-tests--data
`((" " ,(intern " ") nil nil nil nil)
("Monospace" Monospace nil nil nil nil)
("Foo1" Foo1 nil nil nil nil)
("12" nil 12.0 nil nil nil)
("12 " ,(intern "12 ") nil nil nil nil)
;; Fontconfig format
("Foo:" Foo nil nil nil nil)
("Foo-8" Foo 8.0 nil nil nil)
("Foo-18:" Foo 18.0 nil nil nil)
("Foo-18:light" Foo 18.0 light nil nil)
("Foo 10:weight=bold" ,(intern "Foo 10") nil bold nil nil)
("Foo-12:weight=bold" Foo 12.0 bold nil nil)
("Foo 8-20:slant=oblique" ,(intern "Foo 8") 20.0 nil oblique nil)
("Foo:light:roman" Foo nil light roman nil)
("Foo:italic:roman" Foo nil nil roman nil)
("Foo 12:light:oblique" ,(intern "Foo 12") nil light oblique nil)
("Foo-12:demibold:oblique" Foo 12.0 demibold oblique nil)
("Foo:black:proportional" Foo nil black nil 0)
("Foo-10:black:proportional" Foo 10.0 black nil 0)
("Foo:weight=normal" Foo nil normal nil nil)
("Foo:weight=bold" Foo nil bold nil nil)
("Foo:weight=bold:slant=italic" Foo nil bold italic)
("Foo:weight=bold:slant=italic:mono" Foo nil bold italic 100)
("Foo-10:demibold:slant=normal" Foo 10.0 demibold normal nil)
("Foo 11-16:oblique:weight=bold" ,(intern "Foo 11") 16.0 bold oblique nil)
("Foo:oblique:randomprop=randomtag:weight=bold" Foo nil bold oblique nil)
("Foo:randomprop=randomtag:bar=baz" Foo nil nil nil nil)
("Foo Book Light:bar=baz" ,(intern "Foo Book Light") nil nil nil nil)
("Foo Book Light 10:bar=baz" ,(intern "Foo Book Light 10") nil nil nil nil)
("Foo Book Light-10:bar=baz" ,(intern "Foo Book Light") 10.0 nil nil nil)
;; GTK format
("Oblique" nil nil nil oblique nil)
("Bold 17" nil 17.0 bold nil nil)
("17 Bold" ,(intern "17") nil bold nil nil)
("Book Oblique 2" nil 2.0 book oblique nil)
("Bar 7" Bar 7.0 nil nil nil)
("Bar Ultra-Light" Bar nil ultra-light nil nil)
("Bar Light 8" Bar 8.0 light nil nil)
("Bar Book Medium 9" Bar 9.0 medium nil nil)
("Bar Semi-Bold Italic 10" Bar 10.0 semi-bold italic nil)
("Bar Semi-Condensed Bold Italic 11" Bar 11.0 bold italic nil)
("Foo 10 11" ,(intern "Foo 10") 11.0 nil nil nil)
("Foo 1985 Book" ,(intern "Foo 1985") nil book nil nil)
("Foo 1985 A Book" ,(intern "Foo 1985 A") nil book nil nil)
("Foo 1 Book 12" ,(intern "Foo 1") 12.0 book nil nil)
("Foo A Book 12 A" ,(intern "Foo A Book 12 A") nil nil nil nil)
("Foo 1985 Book 12 Oblique" ,(intern "Foo 1985 Book 12") nil nil oblique nil)
("Foo 1985 Book 12 Italic 10" ,(intern "Foo 1985 Book 12") 10.0 nil italic nil)
("Foo Book Bar 6 Italic" ,(intern "Foo Book Bar 6") nil nil italic nil)
("Foo Book Bar Bold" ,(intern "Foo Book Bar") nil bold nil nil))
"List of font names parse data.
Each element should have the form
(NAME FAMILY SIZE WEIGHT SLANT SPACING)
where NAME is the name to parse, and the remainder are the
expected font properties from parsing NAME.")
(defun font-parse-check (name prop expected)
(let ((result (font-get (font-spec :name name) prop)))
(if (and (symbolp result) (symbolp expected))
(eq result expected)
(equal result expected))))
(put 'font-parse-check 'ert-explainer 'font-parse-explain)
(defun font-parse-explain (name prop expected)
(let ((result (font-get (font-spec :name name) prop))
(propname (symbol-name prop)))
(format "Parsing `%s': expected %s `%s', got `%s'."
name (substring propname 1) expected
(font-get (font-spec :name name) prop))))
(ert-deftest font-parse-tests ()
"Test parsing of Fontconfig-style and GTK-style font names."
(dolist (test font-parse-tests--data)
(let* ((name (nth 0 test)))
(should (font-parse-check name :family (nth 1 test)))
(should (font-parse-check name :size (nth 2 test)))
(should (font-parse-check name :weight (nth 3 test)))
(should (font-parse-check name :slant (nth 4 test)))
(should (font-parse-check name :spacing (nth 5 test))))))
(defun test-font-parse ()
"Test font name parsing."
(interactive)
(switch-to-buffer (generate-new-buffer "*Font Pase Test*"))
(setq show-trailing-whitespace nil)
(let ((pass-face '((t :foreground "green")))
(fail-face '((t :foreground "red"))))
(dolist (test font-parse-tests--data)
(let* ((name (nth 0 test))
(fs (font-spec :name name))
(family (font-get fs :family))
(size (font-get fs :size))
(weight (font-get fs :weight))
(slant (font-get fs :slant))
(spacing (font-get fs :spacing)))
(insert name)
(if (> (current-column) 20)
(insert "\n"))
(indent-to-column 21)
(insert (propertize (symbol-name family)
'face (if (eq family (nth 1 test))
pass-face
fail-face)))
(indent-to-column 40)
(insert (propertize (format "%s" size)
'face (if (equal size (nth 2 test))
pass-face
fail-face)))
(indent-to-column 48)
(insert (propertize (format "%s" weight)
'face (if (eq weight (nth 3 test))
pass-face
fail-face)))
(indent-to-column 60)
(insert (propertize (format "%s" slant)
'face (if (eq slant (nth 4 test))
pass-face
fail-face)))
(indent-to-column 69)
(insert (propertize (format "%s" spacing)
'face (if (eq spacing (nth 5 test))
pass-face
fail-face)))
(insert "\n"))))
(goto-char (point-min)))
;; Local Variables:
;; no-byte-compile: t
;; End:
;;; font-parse-tests.el ends here.