diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..4a1c38a --- /dev/null +++ b/gating.yaml @@ -0,0 +1,7 @@ +--- !Policy +product_versions: + - fedora-* +decision_context: bodhi_update_push_testing +rules: + - !PassingTestCaseRule {test_case_name: dist.depcheck} + - !PassingTestCaseRule {test_case_name: dist.abicheck} diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..5826238 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,12 @@ +--- +# Run tests in all contexts +- hosts: localhost + tags: + - classic + roles: + - role: standard-test-beakerlib + tests: + - upstream-test-suite + required_packages: + - doxygen + - python3 diff --git a/tests/upstream-test-suite/001/indexpage.xml b/tests/upstream-test-suite/001/indexpage.xml new file mode 100644 index 0000000..0d567f5 --- /dev/null +++ b/tests/upstream-test-suite/001/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Text argument more text. + + + diff --git a/tests/upstream-test-suite/001_a.dox b/tests/upstream-test-suite/001_a.dox new file mode 100644 index 0000000..c37136b --- /dev/null +++ b/tests/upstream-test-suite/001_a.dox @@ -0,0 +1,5 @@ +// objective: test the \a and \mainpage commands +// check: indexpage.xml +/** \mainpage + * Text \a argument more text. + */ diff --git a/tests/upstream-test-suite/002/indexpage.xml b/tests/upstream-test-suite/002/indexpage.xml new file mode 100644 index 0000000..25a731b --- /dev/null +++ b/tests/upstream-test-suite/002/indexpage.xml @@ -0,0 +1,17 @@ + + + + index + My Project + + + + + + keyword + + + + + + diff --git a/tests/upstream-test-suite/002_addindex.dox b/tests/upstream-test-suite/002_addindex.dox new file mode 100644 index 0000000..b1c941f --- /dev/null +++ b/tests/upstream-test-suite/002_addindex.dox @@ -0,0 +1,5 @@ +// objective: test \addindex command +// check: indexpage.xml +/** \mainpage + * \addindex keyword + */ diff --git a/tests/upstream-test-suite/003/indexpage.xml b/tests/upstream-test-suite/003/indexpage.xml new file mode 100644 index 0000000..dbd1559 --- /dev/null +++ b/tests/upstream-test-suite/003/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + See Anchor Some text. More text. + + + diff --git a/tests/upstream-test-suite/003_anchor.dox b/tests/upstream-test-suite/003_anchor.dox new file mode 100644 index 0000000..b28fc5e --- /dev/null +++ b/tests/upstream-test-suite/003_anchor.dox @@ -0,0 +1,8 @@ +// objective: test \anchor command +// check: indexpage.xml +/** \mainpage + * \ref myanchor "See Anchor" + * Some text. + * \anchor myanchor + * More text. + */ diff --git a/tests/upstream-test-suite/004/indexpage.xml b/tests/upstream-test-suite/004/indexpage.xml new file mode 100644 index 0000000..fdaea0d --- /dev/null +++ b/tests/upstream-test-suite/004/indexpage.xml @@ -0,0 +1,15 @@ + + + + index + My Project + + + + AlignLeft left alignment. AlignCenter center alignment. AlignRight right alignment +No other types of alignment are supported. + AlignLeft left alignment. AlignCenter center alignment. AlignRight right alignment +No other types of alignment are supported. + + + diff --git a/tests/upstream-test-suite/004_arg.dox b/tests/upstream-test-suite/004_arg.dox new file mode 100644 index 0000000..c6ea8e5 --- /dev/null +++ b/tests/upstream-test-suite/004_arg.dox @@ -0,0 +1,15 @@ +// objective: test \arg and \li commands +// check: indexpage.xml +/** \mainpage + \arg \c AlignLeft left alignment. + \arg \c AlignCenter center alignment. + \arg \c AlignRight right alignment + + No other types of alignment are supported. + + \li \c AlignLeft left alignment. + \li \c AlignCenter center alignment. + \li \c AlignRight right alignment + + No other types of alignment are supported. +*/ diff --git a/tests/upstream-test-suite/005/indexpage.xml b/tests/upstream-test-suite/005/indexpage.xml new file mode 100644 index 0000000..4a12dfd --- /dev/null +++ b/tests/upstream-test-suite/005/indexpage.xml @@ -0,0 +1,37 @@ + + + + index + My Project + + + + + + Attention message. + + + Something to note. + + + A remark. + + + A warning message. + + + + <para>Second paragraph </para> + </simplesect> + <simplesect kind="par"> + <title>User defined paragraph. + Contents of paragraph. + + + + <para>More text in a new paragraph. </para> + </simplesect> + </para> + </detaileddescription> + </compounddef> +</doxygen> diff --git a/tests/upstream-test-suite/005_attention.dox b/tests/upstream-test-suite/005_attention.dox new file mode 100644 index 0000000..90f67f5 --- /dev/null +++ b/tests/upstream-test-suite/005_attention.dox @@ -0,0 +1,14 @@ +// objective: test \attention, \note, \remark, \warning, and \par commands +// check: indexpage.xml +/** \mainpage + * \attention Attention message. + * \note Something to note. + * \remark A remark. + * \warning A warning message. + * \par + * Second paragraph + * \par User defined paragraph. + * Contents of paragraph. + * \par + * More text in a new paragraph. + */ diff --git a/tests/upstream-test-suite/006/indexpage.xml b/tests/upstream-test-suite/006/indexpage.xml new file mode 100644 index 0000000..162aac0 --- /dev/null +++ b/tests/upstream-test-suite/006/indexpage.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="indexpage" kind="page"> + <compoundname>index</compoundname> + <title>My Project + + + + + + John Doe + + + Jane Doe + + + David, Steven + + + version 1.2 + + + 1.8-beta2 + + + + + diff --git a/tests/upstream-test-suite/006_author.dox b/tests/upstream-test-suite/006_author.dox new file mode 100644 index 0000000..ba07c1e --- /dev/null +++ b/tests/upstream-test-suite/006_author.dox @@ -0,0 +1,9 @@ +// objective: test the \author, \since, and \version command +// check: indexpage.xml +/** \mainpage + * \author John Doe + * \author Jane Doe + * \authors David, Steven + * \since version 1.2 + * \version 1.8-beta2 + */ diff --git a/tests/upstream-test-suite/007/indexpage.xml b/tests/upstream-test-suite/007/indexpage.xml new file mode 100644 index 0000000..8e85063 --- /dev/null +++ b/tests/upstream-test-suite/007/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Text bold normal text. + + + diff --git a/tests/upstream-test-suite/007_b.dox b/tests/upstream-test-suite/007_b.dox new file mode 100644 index 0000000..887c19f --- /dev/null +++ b/tests/upstream-test-suite/007_b.dox @@ -0,0 +1,5 @@ +// objective: test the \b command +// check: indexpage.xml +/** \mainpage + * Text \b bold normal text. + */ diff --git a/tests/upstream-test-suite/008/008__brief_8c.xml b/tests/upstream-test-suite/008/008__brief_8c.xml new file mode 100644 index 0000000..4fcf6a6 --- /dev/null +++ b/tests/upstream-test-suite/008/008__brief_8c.xml @@ -0,0 +1,13 @@ + + + + 008_brief.c + + A brief description. + + + More details. + + + + diff --git a/tests/upstream-test-suite/008_brief.c b/tests/upstream-test-suite/008_brief.c new file mode 100644 index 0000000..773eaf1 --- /dev/null +++ b/tests/upstream-test-suite/008_brief.c @@ -0,0 +1,7 @@ +// objective: test \brief and \file command +// check: 008__brief_8c.xml +/** \file + * \brief A brief description. + * + * More details. + */ diff --git a/tests/upstream-test-suite/009/bug.xml b/tests/upstream-test-suite/009/bug.xml new file mode 100644 index 0000000..34a411b --- /dev/null +++ b/tests/upstream-test-suite/009/bug.xml @@ -0,0 +1,27 @@ + + + + bug + Bug List + + + + + + + Class Bug + + + Class bug. + + + Member Bug::foo () + + + Function buglist item 1 in buglist item 2 in bug + + + + + + diff --git a/tests/upstream-test-suite/009/class_bug.xml b/tests/upstream-test-suite/009/class_bug.xml new file mode 100644 index 0000000..5a770bb --- /dev/null +++ b/tests/upstream-test-suite/009/class_bug.xml @@ -0,0 +1,43 @@ + + + + Bug + + + void + void Bug::foo + () + foo + + + + Description BugFunction buglist item 1 in buglist item 2 in bug + + More text. + + + + + + + + + + + + Bug + + Class bug. + + + + + + + + Bug + foo + + + + diff --git a/tests/upstream-test-suite/009/class_deprecated.xml b/tests/upstream-test-suite/009/class_deprecated.xml new file mode 100644 index 0000000..5d44aaf --- /dev/null +++ b/tests/upstream-test-suite/009/class_deprecated.xml @@ -0,0 +1,41 @@ + + + + Deprecated + + + void + void Deprecated::deprecated + () + deprecated + + + + Do deprecated things. DeprecatedNo not use this function anymore. + + + + + + + + + + + + Deprecated + + This class is deprecated + + + + + + + + Deprecated + deprecated + + + + diff --git a/tests/upstream-test-suite/009/class_reminder.xml b/tests/upstream-test-suite/009/class_reminder.xml new file mode 100644 index 0000000..379b3e7 --- /dev/null +++ b/tests/upstream-test-suite/009/class_reminder.xml @@ -0,0 +1,48 @@ + + + + Reminder + + + void + void Reminder::reminder + () + reminder + + + + + + Reminder + + Need to rework this before the next release. + + + + + + + + + + + + + + + Reminder + + A reminder + + + + + + + + Reminder + reminder + + + + diff --git a/tests/upstream-test-suite/009/class_test.xml b/tests/upstream-test-suite/009/class_test.xml new file mode 100644 index 0000000..9f1b126 --- /dev/null +++ b/tests/upstream-test-suite/009/class_test.xml @@ -0,0 +1,48 @@ + + + + Test + + + void + void Test::test + () + test + + + + + + Test + + more things to test. + + + + + + + + + + + + + + + Test + + This is part of testing + + + + + + + + Test + test + + + + diff --git a/tests/upstream-test-suite/009/class_todo.xml b/tests/upstream-test-suite/009/class_todo.xml new file mode 100644 index 0000000..8657d60 --- /dev/null +++ b/tests/upstream-test-suite/009/class_todo.xml @@ -0,0 +1,48 @@ + + + + Todo + + + void + void Todo::todo + () + todo + + + + + + Todo + + more things to do here + + + + + + + + + + + + + + + Todo + + This still needs to be done. + + + + + + + + Todo + todo + + + + diff --git a/tests/upstream-test-suite/009/deprecated.xml b/tests/upstream-test-suite/009/deprecated.xml new file mode 100644 index 0000000..a787015 --- /dev/null +++ b/tests/upstream-test-suite/009/deprecated.xml @@ -0,0 +1,27 @@ + + + + deprecated + Deprecated List + + + + + + + Class Deprecated + + + This class is deprecated + + + Member Deprecated::deprecated () + + + No not use this function anymore. + + + + + + diff --git a/tests/upstream-test-suite/009/reminders.xml b/tests/upstream-test-suite/009/reminders.xml new file mode 100644 index 0000000..f848e3c --- /dev/null +++ b/tests/upstream-test-suite/009/reminders.xml @@ -0,0 +1,27 @@ + + + + reminders + Reminders + + + + + + + Class Reminder + + + A reminder + + + Member Reminder::reminder () + + + Need to rework this before the next release. + + + + + + diff --git a/tests/upstream-test-suite/009/test.xml b/tests/upstream-test-suite/009/test.xml new file mode 100644 index 0000000..828316d --- /dev/null +++ b/tests/upstream-test-suite/009/test.xml @@ -0,0 +1,27 @@ + + + + test + Test List + + + + + + + Class Test + + + This is part of testing + + + Member Test::test () + + + more things to test. + + + + + + diff --git a/tests/upstream-test-suite/009/todo.xml b/tests/upstream-test-suite/009/todo.xml new file mode 100644 index 0000000..394f07d --- /dev/null +++ b/tests/upstream-test-suite/009/todo.xml @@ -0,0 +1,27 @@ + + + + todo + Todo List + + + + + + + Class Todo + + + This still needs to be done. + + + Member Todo::todo () + + + more things to do here + + + + + + diff --git a/tests/upstream-test-suite/009_bug.cpp b/tests/upstream-test-suite/009_bug.cpp new file mode 100644 index 0000000..285c77e --- /dev/null +++ b/tests/upstream-test-suite/009_bug.cpp @@ -0,0 +1,62 @@ +// objective: test the \bug, \deprecated, \todo, \test, and \xrefitem commands +// check: class_bug.xml +// check: class_deprecated.xml +// check: class_todo.xml +// check: class_test.xml +// check: class_reminder.xml +// check: bug.xml +// check: deprecated.xml +// check: todo.xml +// check: test.xml +// check: reminders.xml +// config: ALIASES = "reminder=\xrefitem reminders \"Reminder\" \"Reminders\"" + +/** \bug Class bug. */ +class Bug +{ + public: + /** Description + * \bug Function bug + * - list item 1 in bug + * - list item 2 in bug + * + * More text. + */ + void foo(); +}; + +/** \deprecated This class is deprecated */ +class Deprecated +{ + public: + /** Do deprecated things. + * \deprecated No not use this function anymore. + */ + void deprecated(); +}; + +/** \todo This still needs to be done. */ +class Todo +{ + public: + /** \todo more things to do here */ + void todo(); +}; + +/** \test This is part of testing */ +class Test +{ + public: + /** \test more things to test. */ + void test(); +}; + +/** \reminder A reminder */ +class Reminder +{ + public: + /** \reminder Need to rework this before the next release. */ + void reminder(); +}; + + diff --git a/tests/upstream-test-suite/010/indexpage.xml b/tests/upstream-test-suite/010/indexpage.xml new file mode 100644 index 0000000..05c297e --- /dev/null +++ b/tests/upstream-test-suite/010/indexpage.xml @@ -0,0 +1,13 @@ + + + + index + My Project + + + + Text code normal text. + Text code normal text. + + + diff --git a/tests/upstream-test-suite/010_c.dox b/tests/upstream-test-suite/010_c.dox new file mode 100644 index 0000000..a26b5fd --- /dev/null +++ b/tests/upstream-test-suite/010_c.dox @@ -0,0 +1,7 @@ +// objective: test the \c and \p commands +// check: indexpage.xml +/** \mainpage + * Text \c code normal text. + * + * Text \p code normal text. + */ diff --git a/tests/upstream-test-suite/011/category_integer_07_arithmetic_08.xml b/tests/upstream-test-suite/011/category_integer_07_arithmetic_08.xml new file mode 100644 index 0000000..78a8c0e --- /dev/null +++ b/tests/upstream-test-suite/011/category_integer_07_arithmetic_08.xml @@ -0,0 +1,60 @@ + + + + Integer(Arithmetic) + + + id + id Integer(Arithmetic)::add: + (Integer *addend) + add: + + Integer * + addend + + + + + add operation + + + + + + + id + id Integer(Arithmetic)::sub: + (Integer *subtrahend) + sub: + + Integer * + subtrahend + + + + + subtract operation + + + + + + + + + + A category + + + + + Integer(Arithmetic) + add: + + + Integer(Arithmetic) + sub: + + + + diff --git a/tests/upstream-test-suite/011/interface_integer.xml b/tests/upstream-test-suite/011/interface_integer.xml new file mode 100644 index 0000000..429c6a0 --- /dev/null +++ b/tests/upstream-test-suite/011/interface_integer.xml @@ -0,0 +1,99 @@ + + + + Integer + Object + + + int + int Integer::integer + + integer + + + + data member + + + + + + + + + int + int Integer::integer + () + integer + + + + getter + + + + + + + id + id Integer::integer: + (int _integer) + integer: + + int + _integer + + + + + setter + + + + + + + + + + An interface + + + + + + + + + + + + + + + + + + + + + + + + + + + Integer + integer + + + Integer + integer + + + Integer + integer: + + + + diff --git a/tests/upstream-test-suite/011_category.m b/tests/upstream-test-suite/011_category.m new file mode 100644 index 0000000..f57c1d1 --- /dev/null +++ b/tests/upstream-test-suite/011_category.m @@ -0,0 +1,30 @@ +// objective: test the \interface and \category command +// check: category_integer_07_arithmetic_08.xml +// check: interface_integer.xml +# import + +@interface Integer : Object { + /** data member */ + int integer; +} + +/** getter */ +- (int) integer; +/** setter */ +- (id) integer: (int) _integer; +@end + +@interface Integer (Arithmetic) +/** add operation */ +- (id) add: (Integer *) addend; +/** subtract operation */ +- (id) sub: (Integer *) subtrahend; +@end + +/** \interface Integer + * An interface + */ + +/** \category Integer(Arithmetic) + * A category + */ diff --git a/tests/upstream-test-suite/012/citelist.xml b/tests/upstream-test-suite/012/citelist.xml new file mode 100644 index 0000000..f415968 --- /dev/null +++ b/tests/upstream-test-suite/012/citelist.xml @@ -0,0 +1,22 @@ + + + + citelist + Bibliography + + + + + + + [1] + + + DonaldE. Knuth. Tex and Metafont, New Directions in Typesetting. American Mathematical Society and Digital Press, Stanford, 1979. + + + + + + + diff --git a/tests/upstream-test-suite/012/indexpage.xml b/tests/upstream-test-suite/012/indexpage.xml new file mode 100644 index 0000000..73fb669 --- /dev/null +++ b/tests/upstream-test-suite/012/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + See [1] for more info. + + + diff --git a/tests/upstream-test-suite/012_cite.dox b/tests/upstream-test-suite/012_cite.dox new file mode 100644 index 0000000..94be5e7 --- /dev/null +++ b/tests/upstream-test-suite/012_cite.dox @@ -0,0 +1,7 @@ +// objective: test the \cite command +// check: indexpage.xml +// check: citelist.xml +// config: CITE_BIB_FILES = $INPUTDIR/sample.bib +/** \mainpage + * See \cite knuth79 for more info. + */ diff --git a/tests/upstream-test-suite/013/class_t1.xml b/tests/upstream-test-suite/013/class_t1.xml new file mode 100644 index 0000000..ba91621 --- /dev/null +++ b/tests/upstream-test-suite/013/class_t1.xml @@ -0,0 +1,15 @@ + + + + T1 + inc/013_class.h + + + + A class + + + + + + diff --git a/tests/upstream-test-suite/013/class_t2.xml b/tests/upstream-test-suite/013/class_t2.xml new file mode 100644 index 0000000..9df47e2 --- /dev/null +++ b/tests/upstream-test-suite/013/class_t2.xml @@ -0,0 +1,15 @@ + + + + T2 + 013_class.h + + + + class T2 + + + + + + diff --git a/tests/upstream-test-suite/013/class_t3.xml b/tests/upstream-test-suite/013/class_t3.xml new file mode 100644 index 0000000..dc0cd3f --- /dev/null +++ b/tests/upstream-test-suite/013/class_t3.xml @@ -0,0 +1,15 @@ + + + + T3 + 013_class.h + + + + class T3 + + + + + + diff --git a/tests/upstream-test-suite/013/class_t4.xml b/tests/upstream-test-suite/013/class_t4.xml new file mode 100644 index 0000000..52955d2 --- /dev/null +++ b/tests/upstream-test-suite/013/class_t4.xml @@ -0,0 +1,15 @@ + + + + T4 + inc/013_class.h + + + + class T4 + + + + + + diff --git a/tests/upstream-test-suite/013_class.h b/tests/upstream-test-suite/013_class.h new file mode 100644 index 0000000..346250b --- /dev/null +++ b/tests/upstream-test-suite/013_class.h @@ -0,0 +1,37 @@ +// objective: test the \class and \headerfile commands +// check: class_t1.xml +// check: class_t2.xml +// check: class_t3.xml +// check: class_t4.xml + +/** A class + * \headerfile 013_class.h "inc/013_class.h" + */ +class T1 +{ +}; + +class T2 +{ +}; + +class T3 +{ +}; + +class T4 +{ +}; + +/** \class T2 + * \headerfile <> + * class T2 + */ + +/** \class T3 013_class.h + * class T3 + */ + +/** \class T4 013_class.h "inc/013_class.h" + * class T4 + */ diff --git a/tests/upstream-test-suite/014/indexpage.xml b/tests/upstream-test-suite/014/indexpage.xml new file mode 100644 index 0000000..7cbc82f --- /dev/null +++ b/tests/upstream-test-suite/014/indexpage.xml @@ -0,0 +1,51 @@ + + + + index + My Project + + + + + + + #commentinPython + + + + + class + Python: + + + + + + + pass + + + + + + + //commentinacodeblock + + + + + class + Cpp{}; + + + + + + + //implicitcodelanguage + + + + + + diff --git a/tests/upstream-test-suite/014_code.dox b/tests/upstream-test-suite/014_code.dox new file mode 100644 index 0000000..56597cc --- /dev/null +++ b/tests/upstream-test-suite/014_code.dox @@ -0,0 +1,18 @@ +// objective: test the \code command +// check: indexpage.xml +/** \mainpage + * \code{.py} + * # comment in Python + * class Python: + * pass + * \endcode + * + * \code{.cpp} + * // comment in a code block + * class Cpp {}; + * \endcode + * + * \code + * // implicit code language + * \endcode + */ diff --git a/tests/upstream-test-suite/015/015__cond_8c.xml b/tests/upstream-test-suite/015/015__cond_8c.xml new file mode 100644 index 0000000..bcc18b5 --- /dev/null +++ b/tests/upstream-test-suite/015/015__cond_8c.xml @@ -0,0 +1,28 @@ + + + + 015_cond.c + + + void + void cond_enabled + () + cond_enabled + + + + Function to be shown. + + + + + + + + + + Text argument more text. + + + + diff --git a/tests/upstream-test-suite/015_cond.c b/tests/upstream-test-suite/015_cond.c new file mode 100644 index 0000000..0ac209d --- /dev/null +++ b/tests/upstream-test-suite/015_cond.c @@ -0,0 +1,32 @@ +// objective: test the `cond` command +// check: 015__cond_8c.xml +// config: ENABLED_SECTIONS = COND_ENABLED + +/** \file + * Text \a argument more text. + */ + +/// \cond + +/** A function */ +void func(); + +/** A macro */ +#define MACRO 42 + +/// \endcond + +/// \cond COND_ENABLED +/// Function to be shown. +void cond_enabled() +{ +} +/// \endcond + +/** \cond COND_DISABLED */ + Function not to be shown. +void cond_disabled() +{ +} +/** \endcond */ + diff --git a/tests/upstream-test-suite/016/016__copydoc_8c.xml b/tests/upstream-test-suite/016/016__copydoc_8c.xml new file mode 100644 index 0000000..992122d --- /dev/null +++ b/tests/upstream-test-suite/016/016__copydoc_8c.xml @@ -0,0 +1,76 @@ + + + + 016_copydoc.c + + + void + void func + (int i) + func + + int + i + + + Brief description. + + + Detailed description. + + + + + + + void + void func_brief + () + func_brief + + Brief description. + + + + + + + + + void + void func_details + () + func_details + + + + Detailed description. + + + + + + + void + void func_doc + () + func_doc + + Brief description. + + + Detailed description. More text. + + + + + + + + + + Text argument more text. + + + + diff --git a/tests/upstream-test-suite/016_copydoc.c b/tests/upstream-test-suite/016_copydoc.c new file mode 100644 index 0000000..bb8b1bb --- /dev/null +++ b/tests/upstream-test-suite/016_copydoc.c @@ -0,0 +1,23 @@ +// objective: test the \copydoc, \copybrief, \copydetails, and \details commands +// check: 016__copydoc_8c.xml + +/** \file + * Text \a argument more text. + */ + +/** \brief Brief description. + * \details Detailed description. + */ +void func(int i); + +/** \copybrief func(int) */ +void func_brief(); + +/** \copydetails func(int) */ +void func_details(); + +/** \copydoc func(int) + * More text. + */ +void func_doc(); + diff --git a/tests/upstream-test-suite/017/indexpage.xml b/tests/upstream-test-suite/017/indexpage.xml new file mode 100644 index 0000000..3326ee8 --- /dev/null +++ b/tests/upstream-test-suite/017/indexpage.xml @@ -0,0 +1,19 @@ + + + + index + My Project + + + + + + Dimitri van Heesch + + + July 13 2013 + + + + + diff --git a/tests/upstream-test-suite/017_copyright.dox b/tests/upstream-test-suite/017_copyright.dox new file mode 100644 index 0000000..2351180 --- /dev/null +++ b/tests/upstream-test-suite/017_copyright.dox @@ -0,0 +1,6 @@ +// objective: test \copyright and \date commands +// check: indexpage.xml +/** \mainpage + * \copyright Dimitri van Heesch + * \date July 13 2013 + */ diff --git a/tests/upstream-test-suite/018/018__def_8c.xml b/tests/upstream-test-suite/018/018__def_8c.xml new file mode 100644 index 0000000..5f42767 --- /dev/null +++ b/tests/upstream-test-suite/018/018__def_8c.xml @@ -0,0 +1,126 @@ + + + + 018_def.c + + + MACRO + 42 + + + + A macro definition + + + + + + + + + + E + + E1 + + + + + + + E2 + + + + + + + + + An enum + + + + + + + + + int + Type + + Type + + + + A type definition. + + + + + + + + + int + var + + var + = 10 + + + + A variable + + + + + + + + + void + func + (int) + func + + int + + + + + A function with one parameter. + + + + + + + void + func + (int, const char *) + func + + int + + + const char * + + + + + A function with two parameters + + + + + + + + + + Text argument more text. + + + + diff --git a/tests/upstream-test-suite/018_def.c b/tests/upstream-test-suite/018_def.c new file mode 100644 index 0000000..dadc71c --- /dev/null +++ b/tests/upstream-test-suite/018_def.c @@ -0,0 +1,37 @@ +// objective: test the \def, \var, \fn, and \typedef commands +// check: 018__def_8c.xml + +/** \file + * Text \a argument more text. + */ + +#define MACRO 42 +int var = 10; +void func(int) {} +void func(int,const char *) {} +typedef int Type; +enum E { E1, E2 }; + +/** \def MACRO + * A macro definition + */ + +/** \var var + * A variable + */ + +/** \fn func(int) + * A function with one parameter. + */ + +/** \fn func(int,const char *) + * A function with two parameters + */ + +/** \typedef Type + * A type definition. + */ + +/** \enum E + * An enum + */ diff --git a/tests/upstream-test-suite/019/group__g1.xml b/tests/upstream-test-suite/019/group__g1.xml new file mode 100644 index 0000000..23d9c31 --- /dev/null +++ b/tests/upstream-test-suite/019/group__g1.xml @@ -0,0 +1,28 @@ + + + + g1 + First Group + + + void + void func_g1 + () + func_g1 + + + + A function in the first group. + + + + + + + + + + Text for first group. + + + diff --git a/tests/upstream-test-suite/019/group__g2.xml b/tests/upstream-test-suite/019/group__g2.xml new file mode 100644 index 0000000..51df509 --- /dev/null +++ b/tests/upstream-test-suite/019/group__g2.xml @@ -0,0 +1,29 @@ + + + + g2 + Second Group + Third Group + + + void + void func_g2 + () + func_g2 + + + + A function in the second group + + + + + + + + + + Text for second group. + + + diff --git a/tests/upstream-test-suite/019/group__g3.xml b/tests/upstream-test-suite/019/group__g3.xml new file mode 100644 index 0000000..1c2b33b --- /dev/null +++ b/tests/upstream-test-suite/019/group__g3.xml @@ -0,0 +1,42 @@ + + + + g3 + Third Group + + + void + void func_g3 + () + func_g3 + + + + A function in the third group + + + + + + + void + void func_g3_add + () + func_g3_add + + + + Another function added to the third group + + + + + + + + + + Text for third group. + + + diff --git a/tests/upstream-test-suite/019_defgroup.c b/tests/upstream-test-suite/019_defgroup.c new file mode 100644 index 0000000..d42d63e --- /dev/null +++ b/tests/upstream-test-suite/019_defgroup.c @@ -0,0 +1,48 @@ +// objective: test the \defgroup, \addtogroup, and \ingroup command. +// check: group__g1.xml +// check: group__g2.xml +// check: group__g3.xml + +/** \defgroup g1 First Group + * Text for first group. + */ + +/** A function in the first group. + * \ingroup g1 + */ +void func_g1(); + +//-------------------------------- + +/** \defgroup g2 Second Group + * Text for second group. + */ +/// \{ + +/** A function in the second group */ +void func_g2(); + +/// \} + +/** \defgroup g3 Third Group + * Text for third group. + * \ingroup g2 + * \{ + */ + +//-------------------------------- + +/** A function in the third group */ +void func_g3(); + +/** \} */ + +/** \addtogroup g3 + * \{ + */ + +/** Another function added to the third group */ +void func_g3_add(); + +/** \} */ + diff --git a/tests/upstream-test-suite/020/indexpage.xml b/tests/upstream-test-suite/020/indexpage.xml new file mode 100644 index 0000000..3171e13 --- /dev/null +++ b/tests/upstream-test-suite/020/indexpage.xml @@ -0,0 +1,14 @@ + + + + index + My Project + + + + Text. +XML +More text. + + + diff --git a/tests/upstream-test-suite/020_only.dox b/tests/upstream-test-suite/020_only.dox new file mode 100644 index 0000000..f8e2ce1 --- /dev/null +++ b/tests/upstream-test-suite/020_only.dox @@ -0,0 +1,27 @@ +// objective: test the \*only and \*endonly commands +// check: indexpage.xml +/** \mainpage + * Text. + * \htmlonly + * HTML + * \endhtmlonly + * \htmlonly[block] + * HTML with block + * \endhtmlonly + * \rtfonly + * RTF + * \endrtfonly + * \manonly + * Man + * \endmanonly + * \latexonly + * LaTeX + * \endlatexonly + * \xmlonly + * XML + * \endxmlonly + * \docbookonly + * DocBook + * \enddocbookonly + * More text. + */ diff --git a/tests/upstream-test-suite/021/indexpage.xml b/tests/upstream-test-suite/021/indexpage.xml new file mode 100644 index 0000000..7c93a78 --- /dev/null +++ b/tests/upstream-test-suite/021/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Our main function starts like this: voidmain(){ First we create a object t of the Test class. Testt; Then we call the example member function t.example(); After that our little test routine ends. } + + + diff --git a/tests/upstream-test-suite/021_dontinclude.cpp b/tests/upstream-test-suite/021_dontinclude.cpp new file mode 100644 index 0000000..eeb95c5 --- /dev/null +++ b/tests/upstream-test-suite/021_dontinclude.cpp @@ -0,0 +1,23 @@ +// objective: test the \dontinclude, \skip, \until, \skipline, \line commands +// check: indexpage.xml +/*! A test class. */ + +class Test +{ + public: + /// a member function + void example(); +}; + +/*! \mainpage + * \dontinclude example_test.cpp + * Our main function starts like this: + * \skip main + * \until { + * First we create a object \c t of the Test class. + * \skipline Test + * Then we call the example member function + * \line example + * After that our little test routine ends. + * \line } + */ diff --git a/tests/upstream-test-suite/022/indexpage.xml b/tests/upstream-test-suite/022/indexpage.xml new file mode 100644 index 0000000..0fcee9c --- /dev/null +++ b/tests/upstream-test-suite/022/indexpage.xml @@ -0,0 +1,20 @@ + + + + index + My Project + + + + Class relations expressed via an inline dot graph: +digraph example { + node [shape=record, fontname=Helvetica, fontsize=10]; + b [ label="class B" URL="\ref B"]; + c [ label="class C" URL="\ref C"]; + b -> c [ arrowhead="open", style="dashed" ]; +} + + + + + diff --git a/tests/upstream-test-suite/022_dot.cpp b/tests/upstream-test-suite/022_dot.cpp new file mode 100644 index 0000000..74d3f7a --- /dev/null +++ b/tests/upstream-test-suite/022_dot.cpp @@ -0,0 +1,22 @@ +// objective: test the \dot and \enddot commands +// check: indexpage.xml +// config: HAVE_DOT = YES +// config: DOTFILE_DIRS = $INPUTDIR + +/*! class B */ +class B {}; +/*! class C */ +class C {}; + +/*! \mainpage +Class relations expressed via an inline dot graph: +\dot +digraph example { + node [shape=record, fontname=Helvetica, fontsize=10]; + b [ label="class B" URL="\ref B"]; + c [ label="class C" URL="\ref C"]; + b -> c [ arrowhead="open", style="dashed" ]; +} +\enddot +*/ + diff --git a/tests/upstream-test-suite/023/indexpage.xml b/tests/upstream-test-suite/023/indexpage.xml new file mode 100644 index 0000000..c87860c --- /dev/null +++ b/tests/upstream-test-suite/023/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Normal emphasis and more emphasis back to normal. + + + diff --git a/tests/upstream-test-suite/023_e.dox b/tests/upstream-test-suite/023_e.dox new file mode 100644 index 0000000..5f787b7 --- /dev/null +++ b/tests/upstream-test-suite/023_e.dox @@ -0,0 +1,5 @@ +// objective: test the \e, \em commands +// check: indexpage.xml +/** \mainpage + * Normal \e emphasis and more \em emphasis back to normal. + */ diff --git a/tests/upstream-test-suite/024/indexpage.xml b/tests/upstream-test-suite/024/indexpage.xml new file mode 100644 index 0000000..7396177 --- /dev/null +++ b/tests/upstream-test-suite/024/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Unconditional (start) Enabled (if). Enabled (else). Unconditional (middle) Enabled (else). Unconditional (end) + + + diff --git a/tests/upstream-test-suite/024_if.dox b/tests/upstream-test-suite/024_if.dox new file mode 100644 index 0000000..f24be43 --- /dev/null +++ b/tests/upstream-test-suite/024_if.dox @@ -0,0 +1,21 @@ +// objective: test the \if, \ifnot, \elsif, \else, and \endif commands +// check: indexpage.xml +// config: ENABLED_SECTIONS = GUARD_ENABLED +/** \mainpage + * Unconditional (start) + * \if GUARD_ENABLED + * Enabled (if). + * \if (!GUARD_ENABLED) Disabled (if).\else Enabled (else). \endif + * \else + * Disabled. + * \endif + * Unconditional (middle) + * \ifnot GUARD_ENABLED + * Disabled (ifnot). + * \elseif GUARD_DISABLED + * Disabled (elseif). + * \else + * Enabled (else). + * \endif + * Unconditional (end) + */ diff --git a/tests/upstream-test-suite/025/class_test.xml b/tests/upstream-test-suite/025/class_test.xml new file mode 100644 index 0000000..c19341a --- /dev/null +++ b/tests/upstream-test-suite/025/class_test.xml @@ -0,0 +1,36 @@ + + + + Test + + + void + void Test::example + () + example + + An example member function. + + + More details about this function. + + + + + + + + A Test class. + + + More details about this class. + + + + + Test + example + + + + diff --git a/tests/upstream-test-suite/025/example_test_8cpp-example.xml b/tests/upstream-test-suite/025/example_test_8cpp-example.xml new file mode 100644 index 0000000..6bcee68 --- /dev/null +++ b/tests/upstream-test-suite/025/example_test_8cpp-example.xml @@ -0,0 +1,12 @@ + + + + example_test.cpp + + + + This is an example of how to use the Test class. + More details about this example. voidmain(){constchar*a="Somespecialcharacterhere:";Testt;t.example();} + + + diff --git a/tests/upstream-test-suite/025_example.cpp b/tests/upstream-test-suite/025_example.cpp new file mode 100644 index 0000000..817a47f --- /dev/null +++ b/tests/upstream-test-suite/025_example.cpp @@ -0,0 +1,26 @@ +// objective: test the \example command +// check: example_test_8cpp-example.xml +// check: class_test.xml + + +/** \brief A Test class. + * + * More details about this class. + */ +class Test +{ + public: + /** \brief An example member function. + * + * More details about this function. + */ + void example(); +}; + +void Test::example() {} + +/** \example example_test.cpp + * This is an example of how to use the Test class. + * + * More details about this example. + */ diff --git a/tests/upstream-test-suite/026/class_test.xml b/tests/upstream-test-suite/026/class_test.xml new file mode 100644 index 0000000..582d509 --- /dev/null +++ b/tests/upstream-test-suite/026/class_test.xml @@ -0,0 +1,52 @@ + + + + Test + + + class T + + + + + int + int Test< T >::example + (int p1, int p2) + example + + int + p1 + + + int + p2 + + throw (std::out_of_range) + + + + An example member function. p1First parameter. p2Second parameter. +std::out_of_rangeparameter is out of range. +0if p1 and p2 are equal -1if p1 is smaller than p2 1if p1 is bigger than p2 + + + + + + + + + + + A Test class. More details about this class. TA template parameter. + + + + + + Test + example + + + + diff --git a/tests/upstream-test-suite/026_exception.cpp b/tests/upstream-test-suite/026_exception.cpp new file mode 100644 index 0000000..cabb128 --- /dev/null +++ b/tests/upstream-test-suite/026_exception.cpp @@ -0,0 +1,21 @@ +// objective: test the \exception, \param, and \tparam commands +// check: class_test.xml + +/** A Test class. + * More details about this class. + * @tparam T A template parameter. + */ +template class Test +{ + public: + /** An example member function. + * \param p1 First parameter. + * \param p2 Second parameter. + * \exception std::out_of_range parameter is out of range. + * \retval 0 if p1 and p2 are equal + * \retval -1 if p1 is smaller than p2 + * \retval 1 if p1 is bigger than p2 + */ + int example(int p1,int p2) throw(std::out_of_range); +}; + diff --git a/tests/upstream-test-suite/027/struct_car.xml b/tests/upstream-test-suite/027/struct_car.xml new file mode 100644 index 0000000..9027597 --- /dev/null +++ b/tests/upstream-test-suite/027/struct_car.xml @@ -0,0 +1,95 @@ + + + + Car + Vehicle + + + + Vehicle + + Vehicle Car::base + + base + + Base class. + + + + + + + + + + + + Car class. + + + + + + + + + + + + + + + + + + + + + + + + + + + base + + + + + + + + + + + + + base + + + + + + + Car + base + + + Car + objRef + + + Car + objUnref + + + Car + vehicleStart + + + Car + vehicleStop + + + + diff --git a/tests/upstream-test-suite/027/struct_object.xml b/tests/upstream-test-suite/027/struct_object.xml new file mode 100644 index 0000000..e14caa5 --- /dev/null +++ b/tests/upstream-test-suite/027/struct_object.xml @@ -0,0 +1,105 @@ + + + + Object + Vehicle + + + int + int Object::ref + + ref + + Reference count. + + + + + + + + + + + Object * + static Object * objRef + (Object *obj) + objRef + + Object * + obj + + + + + Increments object reference count by one. + + + + + + + Object * + static Object * objUnref + (Object *obj) + objUnref + + Object * + obj + + + + + Decrements object reference count by one. + + + + + + + + + + Base object class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Object + objRef + + + Object + objUnref + + + Object + ref + + + + diff --git a/tests/upstream-test-suite/027/struct_truck.xml b/tests/upstream-test-suite/027/struct_truck.xml new file mode 100644 index 0000000..c5009d4 --- /dev/null +++ b/tests/upstream-test-suite/027/struct_truck.xml @@ -0,0 +1,95 @@ + + + + Truck + Vehicle + + + + Vehicle + + Vehicle Truck::base + + base + + Base class. + + + + + + + + + + + + Truck class. + + + + + + + + + + + + + + + + + + + + + + + + + + + base + + + + + + + + + base + + + + + + + + + + + Truck + base + + + Truck + objRef + + + Truck + objUnref + + + Truck + vehicleStart + + + Truck + vehicleStop + + + + diff --git a/tests/upstream-test-suite/027/struct_vehicle.xml b/tests/upstream-test-suite/027/struct_vehicle.xml new file mode 100644 index 0000000..acf10a0 --- /dev/null +++ b/tests/upstream-test-suite/027/struct_vehicle.xml @@ -0,0 +1,132 @@ + + + + Vehicle + Object + Car + Truck + + + + Object + + Object Vehicle::base + + base + + Base class. + + + + + + + + + + + void + void vehicleStart + (Vehicle *obj) + vehicleStart + + Vehicle * + obj + + + + + Starts the vehicle. + + + + + + + void + void vehicleStop + (Vehicle *obj) + vehicleStop + + Vehicle * + obj + + + + + Stops the vehicle. + + + + + + + + + + Vehicle class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + base + + + + + + + + + + + Vehicle + base + + + Vehicle + objRef + + + Vehicle + objUnref + + + Vehicle + vehicleStart + + + Vehicle + vehicleStop + + + + diff --git a/tests/upstream-test-suite/027_extends.c b/tests/upstream-test-suite/027_extends.c new file mode 100644 index 0000000..7860abd --- /dev/null +++ b/tests/upstream-test-suite/027_extends.c @@ -0,0 +1,93 @@ +// objective: test the \extends, \implements, \memberof, \private, and \public commands +// check: struct_object.xml +// check: struct_vehicle.xml +// check: struct_car.xml +// check: struct_truck.xml + +/** + * \file + */ + +typedef struct Object Object; //!< Object type +typedef struct Vehicle Vehicle; //!< Vehicle type +typedef struct Car Car; //!< Car type +typedef struct Truck Truck; //!< Truck type + +/*! + * Base object class. + */ +struct Object +{ + int ref; //!< \private Reference count. +}; + + +/*! + * Increments object reference count by one. + * \public \memberof Object + */ +static Object * objRef(Object *obj); + + +/*! + * Decrements object reference count by one. + * \public \memberof Object + */ +static Object * objUnref(Object *obj); + + +/*! + * Vehicle class. + * \extends Object + */ +struct Vehicle +{ + Object base; //!< \protected Base class. +}; + + +/*! + * Starts the vehicle. + * \public \memberof Vehicle + */ +void vehicleStart(Vehicle *obj); + + +/*! + * Stops the vehicle. + * \public \memberof Vehicle + */ +void vehicleStop(Vehicle *obj); + + +/*! + * Car class. + * \implements Vehicle + */ +struct Car +{ + Vehicle base; //!< \protected Base class. +}; + + +/*! + * Truck class. + * \implements Vehicle + */ +struct Truck +{ + Vehicle base; //!< \protected Base class. +}; + + +/*! + * Main function. + * + * Ref vehicleStart(), objRef(), objUnref(). + */ +int main(void) +{ + Car c; + vehicleStart((Vehicle*) &c); +} + diff --git a/tests/upstream-test-suite/028/indexpage.xml b/tests/upstream-test-suite/028/indexpage.xml new file mode 100644 index 0000000..c13e1b2 --- /dev/null +++ b/tests/upstream-test-suite/028/indexpage.xml @@ -0,0 +1,13 @@ + + + + index + My Project + + + + Here are some formulas:The distance between $(x_1,y_1)$ and $(x_2,y_2)$ is $\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$.Unnumbered formula: \[ |I_2|=\left| \int_{0}^T \psi(t) \left\{ u(a,t)- \int_{\gamma(t)}^a \frac{d\theta}{k(\theta,t)} \int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi \right\} dt \right| \]Formula in different environment \begin{eqnarray*} g &=& \frac{Gm_2}{r^2} \\ &=& \frac{(6.673 \times 10^{-11}\,\mbox{m}^3\,\mbox{kg}^{-1}\, \mbox{s}^{-2})(5.9736 \times 10^{24}\,\mbox{kg})}{(6371.01\,\mbox{km})^2} \\ &=& 9.82066032\,\mbox{m/s}^2 \end{eqnarray*} + + + + diff --git a/tests/upstream-test-suite/028_formula.c b/tests/upstream-test-suite/028_formula.c new file mode 100644 index 0000000..2a4c5cb --- /dev/null +++ b/tests/upstream-test-suite/028_formula.c @@ -0,0 +1,17 @@ +// objective: test the \f$, \f[, \f], \f{, and \f} commands +// check: indexpage.xml + +/** @mainpage +Here are some formulas: +-# The distance between \f$(x_1,y_1)\f$ and \f$(x_2,y_2)\f$ is + \f$\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\f$. +-# Unnumbered formula: + \f[ |I_2|=\left| \int_{0}^T \psi(t) \left\{ u(a,t)- \int_{\gamma(t)}^a + \frac{d\theta}{k(\theta,t)} \int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi \right\} dt \right| \f] +-# Formula in different environment + \f{eqnarray*}{ g &=& \frac{Gm_2}{r^2} \\ + &=& \frac{(6.673 \times 10^{-11}\,\mbox{m}^3\,\mbox{kg}^{-1}\, + \mbox{s}^{-2})(5.9736 \times 10^{24}\,\mbox{kg})}{(6371.01\,\mbox{km})^2} \\ + &=& 9.82066032\,\mbox{m/s}^2 + \f} +*/ diff --git a/tests/upstream-test-suite/029/029__hideinit_8c.xml b/tests/upstream-test-suite/029/029__hideinit_8c.xml new file mode 100644 index 0000000..4caf092 --- /dev/null +++ b/tests/upstream-test-suite/029/029__hideinit_8c.xml @@ -0,0 +1,42 @@ + + + + 029_hideinit.c + + + int + int var1 + + var1 + = 10 + + + + a variable with initializer visible + + + + + + + int + int var2 + + var2 + + + + a variable without initializer visible + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/029_hideinit.c b/tests/upstream-test-suite/029_hideinit.c new file mode 100644 index 0000000..da3f4a5 --- /dev/null +++ b/tests/upstream-test-suite/029_hideinit.c @@ -0,0 +1,12 @@ +// objective: test the \hideinitializer command +// check: 029__hideinit_8c.xml + +/** \file */ + +/** a variable with initializer visible */ +int var1 = 10; + +/** a variable without initializer visible + * \hideinitializer + */ +int var2 = 20; diff --git a/tests/upstream-test-suite/030/indexpage.xml b/tests/upstream-test-suite/030/indexpage.xml new file mode 100644 index 0000000..a45eb8d --- /dev/null +++ b/tests/upstream-test-suite/030/indexpage.xml @@ -0,0 +1,13 @@ + + + + index + My Project + + + + Some text. <h1>Hello world</h1> + More text. + + + diff --git a/tests/upstream-test-suite/030_htmlinclude.dox b/tests/upstream-test-suite/030_htmlinclude.dox new file mode 100644 index 0000000..17d934d --- /dev/null +++ b/tests/upstream-test-suite/030_htmlinclude.dox @@ -0,0 +1,7 @@ +// objective: test the \htmlinclude command +// check: indexpage.xml +/** \mainpage + * Some text. + * \htmlinclude[block] sample.html + * More text. + */ diff --git a/tests/upstream-test-suite/031/indexpage.xml b/tests/upstream-test-suite/031/indexpage.xml new file mode 100644 index 0000000..2c1dfd7 --- /dev/null +++ b/tests/upstream-test-suite/031/indexpage.xml @@ -0,0 +1,15 @@ + + + + index + My Project + + + + Some text. + Doxygen logo + + More text. + + + diff --git a/tests/upstream-test-suite/031_image.dox b/tests/upstream-test-suite/031_image.dox new file mode 100644 index 0000000..8ba47b7 --- /dev/null +++ b/tests/upstream-test-suite/031_image.dox @@ -0,0 +1,10 @@ +// objective: test the \image command +// check: indexpage.xml +// config: IMAGE_PATH = $INPUTDIR +/** \mainpage + * Some text. + * \image html sample.png + * \image latex sample.png "Doxygen logo" width=5cm + * \image docbook sample.png + * More text. + */ diff --git a/tests/upstream-test-suite/032/indexpage.xml b/tests/upstream-test-suite/032/indexpage.xml new file mode 100644 index 0000000..89d8c1f --- /dev/null +++ b/tests/upstream-test-suite/032/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Some text. voidmain(){constchar*a="Somespecialcharacterhere:";Testt;t.example();} More text. voidmain(){constchar*a="Somespecialcharacterhere:";Testt;t.example();} End. + + + diff --git a/tests/upstream-test-suite/032_include.cpp b/tests/upstream-test-suite/032_include.cpp new file mode 100644 index 0000000..2eddc57 --- /dev/null +++ b/tests/upstream-test-suite/032_include.cpp @@ -0,0 +1,10 @@ +// objective: test the \include and \includelineno commands +// check: indexpage.xml + +/** \mainpage + * Some text. + * \include example_test.cpp + * More text. + * \includelineno example_test.cpp + * End. + */ diff --git a/tests/upstream-test-suite/033/indexpage.xml b/tests/upstream-test-suite/033/indexpage.xml new file mode 100644 index 0000000..652e5de --- /dev/null +++ b/tests/upstream-test-suite/033/indexpage.xml @@ -0,0 +1,13 @@ + + + + index + My Project + + + + Some text. + More visible text. + + + diff --git a/tests/upstream-test-suite/033_internal.dox b/tests/upstream-test-suite/033_internal.dox new file mode 100644 index 0000000..6e28f22 --- /dev/null +++ b/tests/upstream-test-suite/033_internal.dox @@ -0,0 +1,12 @@ +// objective: test the \internal and \endinternal commands (1) +// check: indexpage.xml + +/** \mainpage + * Some text. + * \internal + * Internal text. + * \endinternal + * More visible text. + * \internal + * More internal text. + */ diff --git a/tests/upstream-test-suite/034/indexpage.xml b/tests/upstream-test-suite/034/indexpage.xml new file mode 100644 index 0000000..0252b3c --- /dev/null +++ b/tests/upstream-test-suite/034/indexpage.xml @@ -0,0 +1,31 @@ + + + + index + My Project + + + + Some text. + + Internal text. + + + A Section + Some text in the section 1. + + Internal text. + + A Subsection + Some text in the subsection. + + + Visible text in section 1. + + + Another Section + Visible text. + + + + diff --git a/tests/upstream-test-suite/034_internal.dox b/tests/upstream-test-suite/034_internal.dox new file mode 100644 index 0000000..01587a9 --- /dev/null +++ b/tests/upstream-test-suite/034_internal.dox @@ -0,0 +1,21 @@ +// objective: test the \internal and \endinternal commands (2) +// check: indexpage.xml +// config: INTERNAL_DOCS = YES + +/** \mainpage + * Some text. + * \internal + * Internal text. + * \endinternal + * \section s1 A Section + * Some text in the section 1. + * \internal + * Internal text. + * \subsection ss1 A Subsection + * Some text in the subsection. + * \endinternal + * Visible text in section 1. + * \section s2 Another Section + * Visible text. + */ + diff --git a/tests/upstream-test-suite/035/035__invariant_8c.xml b/tests/upstream-test-suite/035/035__invariant_8c.xml new file mode 100644 index 0000000..b3d74bc --- /dev/null +++ b/tests/upstream-test-suite/035/035__invariant_8c.xml @@ -0,0 +1,45 @@ + + + + 035_invariant.c + + + void + void func + (int p, int *q) + func + + int + p + + + int * + q + + + + + + + i+j=p + + + p>=0 + + + *q=2^(p+1) + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/035_invariant.c b/tests/upstream-test-suite/035_invariant.c new file mode 100644 index 0000000..28c08f8 --- /dev/null +++ b/tests/upstream-test-suite/035_invariant.c @@ -0,0 +1,15 @@ +// objective: test \invariant, \pre and \post commands +// check: 035__invariant_8c.xml + +/** \file */ + +/** \invariant i+j=p + * \pre p\>=0 + * \post *q=2^(p+1) + */ +void func(int p,int *q) +{ + int j = p, k=1, i; + for (i=0; i<=p; i++) j--,k=k*2; + *q = k; +} diff --git a/tests/upstream-test-suite/036/036__link_8c.xml b/tests/upstream-test-suite/036/036__link_8c.xml new file mode 100644 index 0000000..c0dea58 --- /dev/null +++ b/tests/upstream-test-suite/036/036__link_8c.xml @@ -0,0 +1,33 @@ + + + + 036_link.c + Test + + + void + void func + (int p) + func + + int + p + + + + + A function + + + + + + + + + + See the function for more info. See the test class. + + + + diff --git a/tests/upstream-test-suite/036_link.c b/tests/upstream-test-suite/036_link.c new file mode 100644 index 0000000..901f660 --- /dev/null +++ b/tests/upstream-test-suite/036_link.c @@ -0,0 +1,16 @@ +// objective: test \link command +// check: 036__link_8c.xml + +/** \file + * See \link func() the function\endlink for more info. + * See the \link Test test\endlink class. + */ + +/** A function + */ +void func(int p); + +/** A test */ +class Test +{ +}; diff --git a/tests/upstream-test-suite/037/class_receiver.xml b/tests/upstream-test-suite/037/class_receiver.xml new file mode 100644 index 0000000..edb688a --- /dev/null +++ b/tests/upstream-test-suite/037/class_receiver.xml @@ -0,0 +1,43 @@ + + + + Receiver + + + void + void Receiver::Command + (int commandId) + Command + + int + commandId + + + + + Executable a command on the server + + + + + + + + + + Receiver class. Can be used to receive and execute commands. After execution of a command, the receiver will send an acknowledgement + Receiver,Sender; + Receiver<-Sender [label="Command()", URL="\ref Command()"]; + Receiver->Sender [label="Ack()", URL="\ref Sender::Ack()", ID="1"]; + + + + + + + Receiver + Command + + + + diff --git a/tests/upstream-test-suite/037/class_sender.xml b/tests/upstream-test-suite/037/class_sender.xml new file mode 100644 index 0000000..0f1996d --- /dev/null +++ b/tests/upstream-test-suite/037/class_sender.xml @@ -0,0 +1,43 @@ + + + + Sender + + + void + void Sender::Ack + (bool ok) + Ack + + bool + ok + + + + + Acknowledgement from server + + + + + + + + + + Sender class. Can be used to send a command to the server. The receiver will acknowledge the command by calling Ack(). + Sender,Receiver; + Sender->Receiver [label="Command()", URL="\ref Receiver::Command()"]; + Sender<-Receiver [label="Ack()", URL="\ref Ack()", ID="1"]; + + + + + + + Sender + Ack + + + + diff --git a/tests/upstream-test-suite/037_msc.cpp b/tests/upstream-test-suite/037_msc.cpp new file mode 100644 index 0000000..84ffc55 --- /dev/null +++ b/tests/upstream-test-suite/037_msc.cpp @@ -0,0 +1,33 @@ +// objective: test the \msc and \endmsc commands +// check: class_sender.xml +// check: class_receiver.xml + +/** Sender class. Can be used to send a command to the server. + * The receiver will acknowledge the command by calling Ack(). + * \msc + * Sender,Receiver; + * Sender->Receiver [label="Command()", URL="\ref Receiver::Command()"]; + * Sender<-Receiver [label="Ack()", URL="\ref Ack()", ID="1"]; + * \endmsc + */ +class Sender +{ + public: + /** Acknowledgement from server */ + void Ack(bool ok); +}; + +/** Receiver class. Can be used to receive and execute commands. + * After execution of a command, the receiver will send an acknowledgement + * \msc + * Receiver,Sender; + * Receiver<-Sender [label="Command()", URL="\ref Command()"]; + * Receiver->Sender [label="Ack()", URL="\ref Sender::Ack()", ID="1"]; + * \endmsc + */ +class Receiver +{ + public: + /** Executable a command on the server */ + void Command(int commandId); +}; diff --git a/tests/upstream-test-suite/038/indexpage.xml b/tests/upstream-test-suite/038/indexpage.xml new file mode 100644 index 0000000..2258113 --- /dev/null +++ b/tests/upstream-test-suite/038/indexpage.xml @@ -0,0 +1,14 @@ + + + + index + My Project + + + + Text +New line +Another line + + + diff --git a/tests/upstream-test-suite/038_n.dox b/tests/upstream-test-suite/038_n.dox new file mode 100644 index 0000000..617743c --- /dev/null +++ b/tests/upstream-test-suite/038_n.dox @@ -0,0 +1,7 @@ +// objective: test the \n command +// check: indexpage.xml +/** \mainpage +Text\n +New line\n +Another line +*/ diff --git a/tests/upstream-test-suite/039/class_test.xml b/tests/upstream-test-suite/039/class_test.xml new file mode 100644 index 0000000..2a4796a --- /dev/null +++ b/tests/upstream-test-suite/039/class_test.xml @@ -0,0 +1,74 @@ + + + + Test + +
A group of functions.
+ + void + void Test::foo + () + foo + + + + foo function + + + + + + + void + void Test::bar + () + bar + + + + bar function + + + + + +
+ + + void + void Test::ungrouped + () + ungrouped + + + + ungrouped function + + + + + + + + A Test class. + + + More details about this class. + + + + + Test + bar + + + Test + foo + + + Test + ungrouped + + +
+
diff --git a/tests/upstream-test-suite/039_name.cpp b/tests/upstream-test-suite/039_name.cpp new file mode 100644 index 0000000..f07b45c --- /dev/null +++ b/tests/upstream-test-suite/039_name.cpp @@ -0,0 +1,25 @@ +// objective: test the \name and \short commands +// check: class_test.xml + +/** \short A Test class. + * + * More details about this class. + */ +class Test +{ + public: + /** \name A group of functions. + * \{ + */ + + /** foo function */ + void foo(); + /** bar function */ + void bar(); + + /** \} */ + + /** ungrouped function */ + void ungrouped(); +}; + diff --git a/tests/upstream-test-suite/040/namespace_n_s.xml b/tests/upstream-test-suite/040/namespace_n_s.xml new file mode 100644 index 0000000..64beb23 --- /dev/null +++ b/tests/upstream-test-suite/040/namespace_n_s.xml @@ -0,0 +1,12 @@ + + + + NS + + + + A namespace + + + + diff --git a/tests/upstream-test-suite/040_namespace.cpp b/tests/upstream-test-suite/040_namespace.cpp new file mode 100644 index 0000000..a90f377 --- /dev/null +++ b/tests/upstream-test-suite/040_namespace.cpp @@ -0,0 +1,10 @@ +// objective: test the \namespace command +// check: namespace_n_s.xml + +namespace NS +{ +} + +/** @namespace NS + * A namespace + */ diff --git a/tests/upstream-test-suite/041/class_test.xml b/tests/upstream-test-suite/041/class_test.xml new file mode 100644 index 0000000..57dbe37 --- /dev/null +++ b/tests/upstream-test-suite/041/class_test.xml @@ -0,0 +1,100 @@ + + + + Test + + + void + void Test::drawRect + (int, int, int, int) + drawRect + + int + x + + + int + y + + + int + w + + + int + h + + + + + This command draws a rectangle with a left upper corner at ( x , y ), width w and height h. + + + + + + + void + void Test::drawRect + (const Rect &r) + drawRect + + const Rect & + r + + + + + This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + + + + + + + void + void Test::drawRect + (const Point &topLeft, const Point &bottomRight) + drawRect + + const Point & + topLeft + + + const Point & + bottomRight + + + + + This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. + More text. + + + + + + + + A short description. + + + More text. + + + + + Test + drawRect + + + Test + drawRect + + + Test + drawRect + + + + diff --git a/tests/upstream-test-suite/041_overload.cpp b/tests/upstream-test-suite/041_overload.cpp new file mode 100644 index 0000000..e206acf --- /dev/null +++ b/tests/upstream-test-suite/041_overload.cpp @@ -0,0 +1,33 @@ +// objective: test the \overload command +// check: class_test.xml + +class Test +{ + public: + void drawRect(int,int,int,int); + void drawRect(const Rect &r); + void drawRect(const Point &topLeft,const Point &bottomRight); +}; + +void Test::drawRect(int x,int y,int w,int h) {} +void Test::drawRect(const Rect &r) {} +/*! \overload + * + * More text. + */ +void Test::drawRect(const Point &topLeft,const Point &bottomRight) {} + +/*! \class Test + * \brief A short description. + * + * More text. + */ + +/*! \fn void Test::drawRect(int x,int y,int w,int h) + * This command draws a rectangle with a left upper corner at ( \a x , \a y ), + * width \a w and height \a h. + */ + +/*! + * \overload void Test::drawRect(const Rect &r) + */ diff --git a/tests/upstream-test-suite/042/namespaceorg_1_1doxygen_1_1_test.xml b/tests/upstream-test-suite/042/namespaceorg_1_1doxygen_1_1_test.xml new file mode 100644 index 0000000..7ed33d5 --- /dev/null +++ b/tests/upstream-test-suite/042/namespaceorg_1_1doxygen_1_1_test.xml @@ -0,0 +1,12 @@ + + + + org::doxygen::Test + + + + A test package. + + + + diff --git a/tests/upstream-test-suite/042_package.java b/tests/upstream-test-suite/042_package.java new file mode 100644 index 0000000..f46d55c --- /dev/null +++ b/tests/upstream-test-suite/042_package.java @@ -0,0 +1,8 @@ +// objective: test the \package command +// check: namespaceorg_1_1doxygen_1_1_test.xml + +package org.doxygen.Test; + +/** @package org.doxygen.Test + * A test package. + */ diff --git a/tests/upstream-test-suite/043/another.xml b/tests/upstream-test-suite/043/another.xml new file mode 100644 index 0000000..2c2e61b --- /dev/null +++ b/tests/upstream-test-suite/043/another.xml @@ -0,0 +1,12 @@ + + + + another + Another Page + + + + Another page's text. + + + diff --git a/tests/upstream-test-suite/043/mypage.xml b/tests/upstream-test-suite/043/mypage.xml new file mode 100644 index 0000000..c9bd6d0 --- /dev/null +++ b/tests/upstream-test-suite/043/mypage.xml @@ -0,0 +1,66 @@ + + + + mypage + Page Title + Another Page + + + Section Title. + mypage_1mysect + + + Subsection Title. + mypage_1mysubsect + + + Subsubsection Title. + mypage_1mysubsubsect + + + Paragraph Title. + mypage_1mypara + + + + + + + + + Another Section Title. + mypage_1mysect2 + + + + Page brief description. + + + Page brief description. + Text at page level. See Section Title. for more. + + Section Title. + Text at section level. See Subsection Title. for more. + + Subsection Title. + Text at subsection level. see Subsubsection Title. for more. + + Subsubsection Title. + Text at subsubsection level. Paragraph Title. for more. + + Paragraph Title. + Text at paragraph level. Another Section Title. for more. + + + + + + Another Section Title. + Text at section level. + + Another Page + + + + + diff --git a/tests/upstream-test-suite/043_page.dox b/tests/upstream-test-suite/043_page.dox new file mode 100644 index 0000000..9ac5c0e --- /dev/null +++ b/tests/upstream-test-suite/043_page.dox @@ -0,0 +1,26 @@ +// objective: test \page, \subpage, \*section, \paragraph, and \ref commands +// check: mypage.xml +// check: another.xml +/** \page mypage Page Title + * \brief Page brief description. + * + * @tableofcontents{xml,html,latex,docbook} + * + * Text at page level. See \ref mysect for more. + * \section mysect Section Title. + * Text at section level. See \ref mysubsect for more. + * \subsection mysubsect Subsection Title. + * Text at subsection level. see \ref mysubsubsect for more. + * \subsubsection mysubsubsect Subsubsection Title. + * Text at subsubsection level. \ref mypara for more. + * \paragraph mypara Paragraph Title. + * Text at paragraph level. \ref mysect2 for more. + * \section mysect2 Another Section Title. + * Text at section level. + * + * \subpage another + */ + +/** \page another Another Page + * Another page's text. + */ diff --git a/tests/upstream-test-suite/044/struct_s.xml b/tests/upstream-test-suite/044/struct_s.xml new file mode 100644 index 0000000..aefd50d --- /dev/null +++ b/tests/upstream-test-suite/044/struct_s.xml @@ -0,0 +1,129 @@ + + + + S + 044_section.h + + + int + int S::pub1 + + pub1 + + + + public field + + + + + + + int + int S::pub2 + + pub2 + + + + another public field + + + + + + + + + int + int S::pro1 + + pro1 + + + + protected field + + + + + + + int + int S::pro2 + + pro2 + + + + another protected field + + + + + + + + + int + int S::pri1 + + pri1 + + + + private field + + + + + + + int + int S::pri2 + + pri2 + + + + another private field + + + + + + + + + + A struct + + + + + S + pri1 + + + S + pri2 + + + S + pro1 + + + S + pro2 + + + S + pub1 + + + S + pub2 + + + + diff --git a/tests/upstream-test-suite/044_section.h b/tests/upstream-test-suite/044_section.h new file mode 100644 index 0000000..ef48051 --- /dev/null +++ b/tests/upstream-test-suite/044_section.h @@ -0,0 +1,28 @@ +// objective: test the \(public|protected|private)section commands +// check: struct_s.xml + +/** A struct */ +struct S +{ + /** \publicsection */ + + /** public field */ + int pub1; + /** another public field */ + int pub2; + + /** \protectedsection */ + + /** protected field */ + int pro1; + /** another protected field */ + int pro2; + + /** \privatesection */ + + /** private field */ + int pri1; + /** another private field */ + int pri2; +}; + diff --git a/tests/upstream-test-suite/045/indexpage.xml b/tests/upstream-test-suite/045/indexpage.xml new file mode 100644 index 0000000..294ceb8 --- /dev/null +++ b/tests/upstream-test-suite/045/indexpage.xml @@ -0,0 +1,23 @@ + + + + index + My Project + + + + + + First Item + Second Item + Third Item + + + Some filler text. + + First Section + Section 1 text. + + + + diff --git a/tests/upstream-test-suite/045_refitem.dox b/tests/upstream-test-suite/045_refitem.dox new file mode 100644 index 0000000..a6ba13b --- /dev/null +++ b/tests/upstream-test-suite/045_refitem.dox @@ -0,0 +1,20 @@ +// objective: test \refitem, \secreflist, \endsecreflist +// check: indexpage.xml +/** \mainpage + * \secreflist + * \refitem item1 First Item + * \refitem item2 Second Item + * \refitem item3 Third Item + * \endsecreflist + * + * Some filler text. + * + * \section item1 First Section + * Section 1 text. + */ + +/** \page item2 A page + * Some text. + * \section item3 Another Section. + * Section 2 text. + */ diff --git a/tests/upstream-test-suite/046/046__related_8cpp.xml b/tests/upstream-test-suite/046/046__related_8cpp.xml new file mode 100644 index 0000000..9f5eab6 --- /dev/null +++ b/tests/upstream-test-suite/046/046__related_8cpp.xml @@ -0,0 +1,28 @@ + + + + 046_related.cpp + Test + + + void + void another + () + another + + + + Another function + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/046/class_test.xml b/tests/upstream-test-suite/046/class_test.xml new file mode 100644 index 0000000..9a1bd9c --- /dev/null +++ b/tests/upstream-test-suite/046/class_test.xml @@ -0,0 +1,80 @@ + + + + Test + + + void + void Test::method + () + method + + + + A method + + + + + + + + + void + void function + () + function + + + + A function. + + + + another() + + + + + + + + + + void + void another + () + another + + + + Another function + + + + + + + + + + A test class Test::method() + + + + + + Test + another + + + Test + function + + + Test + method + + + + diff --git a/tests/upstream-test-suite/046_related.cpp b/tests/upstream-test-suite/046_related.cpp new file mode 100644 index 0000000..a8deb5a --- /dev/null +++ b/tests/upstream-test-suite/046_related.cpp @@ -0,0 +1,28 @@ +// objective: test the \related, \relatedalso, \see, and \sa commands +// check: class_test.xml +// check: 046__related_8cpp.xml + +/** @file */ + +/** A test class + * @see Test::method() + */ +class Test +{ + public: + /** A method */ + void method(); +}; + +/*! + * A function. + * \related Test + * \sa another() + */ +void function(); + +/*! + * Another function + * \relatedalso Test + */ +void another(); diff --git a/tests/upstream-test-suite/047/047__return_8cpp.xml b/tests/upstream-test-suite/047/047__return_8cpp.xml new file mode 100644 index 0000000..b57a0c3 --- /dev/null +++ b/tests/upstream-test-suite/047/047__return_8cpp.xml @@ -0,0 +1,58 @@ + + + + 047_return.cpp + + + int + int func1 + () + func1 + + + + Test function 1. A integer. + + + + + + + + int + int func2 + () + func2 + + + + Test function 2. A integer. + + + + + + + + int + int func3 + () + func3 + + + + Test function 3. A integer. + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/047_return.cpp b/tests/upstream-test-suite/047_return.cpp new file mode 100644 index 0000000..7585986 --- /dev/null +++ b/tests/upstream-test-suite/047_return.cpp @@ -0,0 +1,20 @@ +// objective: test the \result, \return, and \returns commands +// check: 047__return_8cpp.xml + +/** \file */ + +/** Test function 1. + * \result A integer. + */ +int func1(); + +/** Test function 2. + * \return A integer. + */ +int func2(); + +/** Test function 3. + * \returns A integer. + */ +int func3(); + diff --git a/tests/upstream-test-suite/048/048__showinit_8c.xml b/tests/upstream-test-suite/048/048__showinit_8c.xml new file mode 100644 index 0000000..4cc5717 --- /dev/null +++ b/tests/upstream-test-suite/048/048__showinit_8c.xml @@ -0,0 +1,42 @@ + + + + 048_showinit.c + + + int + int var1 + + var1 + + + + a variable with initializer hidden due to MAX_INITIALIZER_LINES + + + + + + + int + int var2 + + var2 + = 20 + + + + a variable with initializer visible + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/048_showinit.c b/tests/upstream-test-suite/048_showinit.c new file mode 100644 index 0000000..a37865d --- /dev/null +++ b/tests/upstream-test-suite/048_showinit.c @@ -0,0 +1,13 @@ +// objective: test the \showinit command +// check: 048__showinit_8c.xml +// config: MAX_INITIALIZER_LINES = 0 + +/** \file */ + +/** a variable with initializer hidden due to MAX_INITIALIZER_LINES */ +int var1 = 10; + +/** a variable with initializer visible + * \showinitializer + */ +int var2 = 20; diff --git a/tests/upstream-test-suite/049/indexpage.xml b/tests/upstream-test-suite/049/indexpage.xml new file mode 100644 index 0000000..f7cb48c --- /dev/null +++ b/tests/upstream-test-suite/049/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + A bubble sort algorithm First get the inputs for(i=0;i<n;i++){printf("Array[%d]=",i);scanf("%d",&arr[i]);}Then do the bubbling for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(arr[j]>arr[j+1])//SwappingConditionisChecked{temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}Then write the result for(i=0;i<n;i++){printf("%4d",arr[i]);} + + + diff --git a/tests/upstream-test-suite/049_snippet.cpp b/tests/upstream-test-suite/049_snippet.cpp new file mode 100644 index 0000000..9c5f18b --- /dev/null +++ b/tests/upstream-test-suite/049_snippet.cpp @@ -0,0 +1,12 @@ +// objective: test the \snippet command +// check: indexpage.xml + +/** \mainpage + * A bubble sort algorithm + * First get the inputs + * \snippet snippet_test.cpp input + * Then do the bubbling + * \snippet snippet_test.cpp bubble + * Then write the result + * \snippet snippet_test.cpp output + */ diff --git a/tests/upstream-test-suite/050/indexpage.xml b/tests/upstream-test-suite/050/indexpage.xml new file mode 100644 index 0000000..2f183fe --- /dev/null +++ b/tests/upstream-test-suite/050/indexpage.xml @@ -0,0 +1,20 @@ + + + + index + My Project + + + + Some normal text. A verbatim section with a /* C comment */ in it + Showing a file as verbatim @book{knuth79, + author = "Donald E. Knuth", + title = "Tex and Metafont, New Directions in Typesetting", + year = "1979", + publisher = "American Mathematical Society and Digital Press", + address = "Stanford" +} + More text after the verbatim section. + + + diff --git a/tests/upstream-test-suite/050_verbatim.dox b/tests/upstream-test-suite/050_verbatim.dox new file mode 100644 index 0000000..40c75a5 --- /dev/null +++ b/tests/upstream-test-suite/050_verbatim.dox @@ -0,0 +1,13 @@ +// objective: test \verbatim and \verbinclude commands +// check: indexpage.xml +/** +\mainpage +Some normal text. +\verbatim +A verbatim section with a /* C comment */ in it +\endverbatim +Showing a file as verbatim +\verbinclude sample.bib +More text after the verbatim section. + +*/ diff --git a/tests/upstream-test-suite/051/indexpage.xml b/tests/upstream-test-suite/051/indexpage.xml new file mode 100644 index 0000000..50a6ff8 --- /dev/null +++ b/tests/upstream-test-suite/051/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Dollar $ At @ Backslash \ Ampersand & Less < Greater > Hash # Percent % Quote " Dot . Double colon :: Pipe | Plus + Minus - + + + diff --git a/tests/upstream-test-suite/051_escape.dox b/tests/upstream-test-suite/051_escape.dox new file mode 100644 index 0000000..2165564 --- /dev/null +++ b/tests/upstream-test-suite/051_escape.dox @@ -0,0 +1,20 @@ +// objective: test various characters that should be escaped +// check: indexpage.xml +/** +\mainpage +Dollar \$ +At \@ +Backslash \\ +Ampersand \& +Less \< +Greater \> +Hash \# +Percent \% +Quote \" +Dot \. +Double colon \:: +Pipe \| +Plus \+ +Minus \- + +*/ diff --git a/tests/upstream-test-suite/052/indexpage.xml b/tests/upstream-test-suite/052/indexpage.xml new file mode 100644 index 0000000..d952781 --- /dev/null +++ b/tests/upstream-test-suite/052/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + This is English. Output for all languages. + + + diff --git a/tests/upstream-test-suite/052_tilde.dox b/tests/upstream-test-suite/052_tilde.dox new file mode 100644 index 0000000..81a8c9b --- /dev/null +++ b/tests/upstream-test-suite/052_tilde.dox @@ -0,0 +1,9 @@ +// objective: test \~ command +// check: indexpage.xml +/** +\mainpage +\~english This is English. +\~dutch Dit is Nederlands. +\~german Dies ist Deutsch. +\~ Output for all languages. +*/ diff --git a/tests/upstream-test-suite/053/indexpage.xml b/tests/upstream-test-suite/053/indexpage.xml new file mode 100644 index 0000000..211bb9a --- /dev/null +++ b/tests/upstream-test-suite/053/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + Dit is Nederlands. Output for all languages. + + + diff --git a/tests/upstream-test-suite/053_tilde.dox b/tests/upstream-test-suite/053_tilde.dox new file mode 100644 index 0000000..73cafa3 --- /dev/null +++ b/tests/upstream-test-suite/053_tilde.dox @@ -0,0 +1,10 @@ +// objective: test \~ command with non default OUTPUT_LANGUAGE +// check: indexpage.xml +// config: OUTPUT_LANGUAGE = Dutch +/** +\mainpage +\~english This is English. +\~dutch Dit is Nederlands. +\~german Dies ist Deutsch. +\~ Output for all languages. +*/ diff --git a/tests/upstream-test-suite/054/054__parblock_8cpp.xml b/tests/upstream-test-suite/054/054__parblock_8cpp.xml new file mode 100644 index 0000000..5567908 --- /dev/null +++ b/tests/upstream-test-suite/054/054__parblock_8cpp.xml @@ -0,0 +1,193 @@ + + + + 054_parblock.cpp + + + void + void function + (int client, int *resource, int parblock, int *test, int p) + function + + int + client + + + int * + resource + + + int + parblock + + + int * + test + + + int + p + + + + + call by target-specific code to manage resources required by the client. + + + + + client + + + ID of client requesting resource. + + + + + resource + + + Requested resource + + + + + parblock + + + + + This is a test for the @parblock command. + A list if values for the parblock param:Item 1. This is short one-line description.Item 2. This is a long bullet item; sometimes they wrap on multiple lines like this one. + + This is the second paragraph description for the @parblock parameter. Always end the text inside the @parblock command with an @endparblock command. + + + + + + + test + + + This is a test parameter for this function to see if it is included in the parameter table + + + + + p + + + + + First paragraph of the param description. + Second paragraph of the param description. + + + + + + + + + + + + + void + void function_2 + (int client, int *resource, int parblock, int *test, int p) + function_2 + + int + client + + + int * + resource + + + int + parblock + + + int * + test + + + int + p + + + + + call by target-specific code to manage resources required by the client. + + + + + client + + + ID of client requesting resource. + + + + + resource + + + Requested resource + + + + + parblock + + + + + This is a test for the @parblock command. + A list if values for the parblock param:Item 1. This is short one-line description.Item 2. This is a long bullet item; sometimes they wrap on multiple lines like this one. + + This is the second paragraph description for the @parblock parameter. Always end the text inside the @parblock command with an @endparblock command. + + + + + + + test + + + This is a test parameter for this function to see if it is included in the parameter table + + + + + p + + + + + First paragraph of the param description. Second paragraph of the param description. + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/054_parblock.cpp b/tests/upstream-test-suite/054_parblock.cpp new file mode 100644 index 0000000..4f303c6 --- /dev/null +++ b/tests/upstream-test-suite/054_parblock.cpp @@ -0,0 +1,60 @@ +// objective: test the \parblock command +// check: 054__parblock_8cpp.xml + +/** @file */ + +/** + call by target-specific code to manage resources required by the client. + + @param[in] client ID of client requesting resource. + @param[out] resource Requested resource + @param[in] parblock @parblock This is a test for the \@parblock + command. + + A list if values for the parblock param: + - Item 1. This is short one-line description. + - Item 2. This is a long bullet item; + sometimes they wrap on multiple lines like this + one. + + This is the second paragraph description for the + \@parblock parameter. Always end the text inside + the \@parblock command with an \@endparblock + command. + @endparblock + @param[out] test This is a test parameter for this function to see if + it is included in the parameter table + @param[in] p + @parblock First paragraph of the param description. + + Second paragraph of the param description. + @endparblock + */ +void function(int client,int *resource,int parblock,int *test,int p); +/** + call by target-specific code to manage resources required by the client. + + @param[in] client ID of client requesting resource. + @param[out] resource Requested resource + @param[in] parblock @parblock This is a test for the \@parblock + command. + + A list if values for the parblock param: + - Item 1. This is short one-line description. + - Item 2. This is a long bullet item; + sometimes they wrap on multiple lines like this + one. + + This is the second paragraph description for the + \@parblock parameter. Always end the text inside + the \@parblock command with an \@endparblock + command. + @endparblock + @param[out] test This is a test parameter for this function to see if + it is included in the parameter table + @param[in] p @parblock First paragraph of the param description. + + Second paragraph of the param description. + @endparblock + */ +void function_2(int client,int *resource,int parblock,int *test,int p); diff --git a/tests/upstream-test-suite/055/md_055_markdown.xml b/tests/upstream-test-suite/055/md_055_markdown.xml new file mode 100644 index 0000000..4bdd2e2 --- /dev/null +++ b/tests/upstream-test-suite/055/md_055_markdown.xml @@ -0,0 +1,31 @@ + + + + md_055_markdown + 055_markdown + + + + + Foo + + + Bar + + + Inline link + + + Reference link + + + Baz + + More text + + Upper-cased reference link on last line + + Dash - NDash MDash EDash - ENDash -- EMDash --- E3Dash --- + + + diff --git a/tests/upstream-test-suite/055_markdown.md b/tests/upstream-test-suite/055_markdown.md new file mode 100644 index 0000000..375040e --- /dev/null +++ b/tests/upstream-test-suite/055_markdown.md @@ -0,0 +1,24 @@ + + +# Foo + +## Bar + +[Inline link](http://example.com/inline) + +[Reference link][1] + +[1]: http://example.com/reference + +## Baz + +More text + +[Upper-cased reference link on last line][U] + +[U]: http://example.com/last-line + +Dash - NDash -- MDash --- EDash \- ENDash \-- EMDash \--- E3Dash \-\-\- diff --git a/tests/upstream-test-suite/056/indexpage.xml b/tests/upstream-test-suite/056/indexpage.xml new file mode 100644 index 0000000..55240e9 --- /dev/null +++ b/tests/upstream-test-suite/056/indexpage.xml @@ -0,0 +1,13 @@ + + + + index + My Project + + + + Some text. \section{Hello world} + More text. + + + diff --git a/tests/upstream-test-suite/056_latexinclude.dox b/tests/upstream-test-suite/056_latexinclude.dox new file mode 100644 index 0000000..021b2f7 --- /dev/null +++ b/tests/upstream-test-suite/056_latexinclude.dox @@ -0,0 +1,7 @@ +// objective: test the \latexinclude command +// check: indexpage.xml +/** \mainpage + * Some text. + * \latexinclude sample.tex + * More text. + */ diff --git a/tests/upstream-test-suite/057/057__caller__graphs_8tcl.xml b/tests/upstream-test-suite/057/057__caller__graphs_8tcl.xml new file mode 100644 index 0000000..1046e30 --- /dev/null +++ b/tests/upstream-test-suite/057/057__caller__graphs_8tcl.xml @@ -0,0 +1,92 @@ + + + + 057_caller_graphs.tcl + bar + foo + 1::1::1 + 1 + 1::1 + 2::2::2::2::2 + 2 + 2::2 + 2::2::2 + 2::2::2::2 + + + + baz + args + baz + + + + + + + + + + + bar + args + bar + + + + + + + + 1::test3 + + + + next + args + next + + + + + + + + 2::next + + + + master + args + master + + + + + + + + inFileB + + + + inFileA + args + inFileA + + + + + + + + inFileB + + + + + + + + + diff --git a/tests/upstream-test-suite/057/__057__caller__graphs_8tcl.xml b/tests/upstream-test-suite/057/__057__caller__graphs_8tcl.xml new file mode 100644 index 0000000..a71e7b5 --- /dev/null +++ b/tests/upstream-test-suite/057/__057__caller__graphs_8tcl.xml @@ -0,0 +1,28 @@ + + + + _057_caller_graphs.tcl + + + + inFileB + args + inFileB + + + + + + + + inFileA + master + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace1.xml b/tests/upstream-test-suite/057/namespace1.xml new file mode 100644 index 0000000..33d073d --- /dev/null +++ b/tests/upstream-test-suite/057/namespace1.xml @@ -0,0 +1,113 @@ + + + + 1 + 1::1 + + + + 1::baz + args + baz + + + + + + + + test1 + test5 + + + + 1::bar + args + bar + + + + + + + + test2 + + + + 1::test1 + args + test1 + + + + + + + + baz + + + + 1::test2 + args + test2 + + + + + + + + bar + + + + 1::test3 + args + test3 + + + + + + + + bar + + + + 1::test4 + args + test4 + + + + + + + + 1::1::bar + + + + 1::test5 + args + test5 + + + + + + + + baz + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace1_1_11.xml b/tests/upstream-test-suite/057/namespace1_1_11.xml new file mode 100644 index 0000000..e13e261 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace1_1_11.xml @@ -0,0 +1,28 @@ + + + + 1::1 + 1::1::1 + + + + 1::1::bar + args + bar + + + + + + + + 1::test4 + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace1_1_11_1_11.xml b/tests/upstream-test-suite/057/namespace1_1_11_1_11.xml new file mode 100644 index 0000000..55b7838 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace1_1_11_1_11.xml @@ -0,0 +1,26 @@ + + + + 1::1::1 + + + + 1::1::1::bar + args + bar + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace2.xml b/tests/upstream-test-suite/057/namespace2.xml new file mode 100644 index 0000000..a8a9bc6 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace2.xml @@ -0,0 +1,30 @@ + + + + 2 + 2::2 + + + + 2::next + args + next + + + + + + + + 2::2::next + next + 2::2::2::2::2::next + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace2_1_12.xml b/tests/upstream-test-suite/057/namespace2_1_12.xml new file mode 100644 index 0000000..a188f00 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace2_1_12.xml @@ -0,0 +1,29 @@ + + + + 2::2 + 2::2::2 + + + + 2::2::next + args + next + + + + + + + + 2::2::2::next + 2::next + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace2_1_12_1_12.xml b/tests/upstream-test-suite/057/namespace2_1_12_1_12.xml new file mode 100644 index 0000000..e83b3fd --- /dev/null +++ b/tests/upstream-test-suite/057/namespace2_1_12_1_12.xml @@ -0,0 +1,29 @@ + + + + 2::2::2 + 2::2::2::2 + + + + 2::2::2::next + args + next + + + + + + + + 2::2::2::2::next + 2::2::next + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12.xml b/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12.xml new file mode 100644 index 0000000..83c2a73 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12.xml @@ -0,0 +1,29 @@ + + + + 2::2::2::2 + 2::2::2::2::2 + + + + 2::2::2::2::next + args + next + + + + + + + + 2::2::2::2::2::next + 2::2::2::next + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12_1_12.xml b/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12_1_12.xml new file mode 100644 index 0000000..9222625 --- /dev/null +++ b/tests/upstream-test-suite/057/namespace2_1_12_1_12_1_12_1_12.xml @@ -0,0 +1,28 @@ + + + + 2::2::2::2::2 + + + + 2::2::2::2::2::next + args + next + + + + + + + + 2::next + 2::2::2::2::next + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespacebar.xml b/tests/upstream-test-suite/057/namespacebar.xml new file mode 100644 index 0000000..e16966e --- /dev/null +++ b/tests/upstream-test-suite/057/namespacebar.xml @@ -0,0 +1,57 @@ + + + + bar + + + + bar::slave + + slave + + + + + + + + baz + foo::master + + + + bar::baz + + baz + + + + + + + + bazbaz + slave + + + + bar::bazbaz + + bazbaz + + + + + + + + baz + + + + + + + + + diff --git a/tests/upstream-test-suite/057/namespacefoo.xml b/tests/upstream-test-suite/057/namespacefoo.xml new file mode 100644 index 0000000..8d0ac75 --- /dev/null +++ b/tests/upstream-test-suite/057/namespacefoo.xml @@ -0,0 +1,27 @@ + + + + foo + + + + foo::master + + master + + + + + + + + bar::slave + + + + + + + + + diff --git a/tests/upstream-test-suite/057_caller_graphs.tcl b/tests/upstream-test-suite/057_caller_graphs.tcl new file mode 100644 index 0000000..464d8aa --- /dev/null +++ b/tests/upstream-test-suite/057_caller_graphs.tcl @@ -0,0 +1,155 @@ +#// objective: test for completeness and correctness of references/referencedby relations +#// check: 057__caller__graphs_8tcl.xml +#// check: __057__caller__graphs_8tcl.xml +#// check: namespacebar.xml +#// check: namespacefoo.xml +#// check: namespace1.xml +#// check: namespace1_1_11.xml +#// check: namespace1_1_11_1_11.xml +#// check: namespace2.xml +#// check: namespace2_1_12.xml +#// check: namespace2_1_12_1_12.xml +#// check: namespace2_1_12_1_12_1_12.xml +#// check: namespace2_1_12_1_12_1_12_1_12.xml +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = no +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +#// config: INPUT = $INPUTDIR/057_caller_graphs.tcl $INPUTDIR/_057_caller_graphs.tcl +# config: HAVE_DOT = yes +# config: CALLER_GRAPH = yes +# config: CALL_GRAPH = yes +# config: GENERATE_HTML = yes + +# This is a stripped down example from my code. +# Doxygen 1.8.7 generates the correct relations (xml) +# but caller graphs will be incomplete. +# It does not generate any relations at all if INLINE_SOURCES = no. +namespace eval bar {} +proc bar::slave { } { + array set info [info frame 0]; puts -nonewline ->$info(proc) + if {1} then { + bar::baz + } + return +} +proc bar::baz {} { + array set info [info frame 0]; puts -nonewline ->$info(proc) + bar::bazbaz +} +proc bar::bazbaz {} { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +namespace eval foo {} +proc foo::master { } { + array set info [info frame 0]; puts -nonewline $info(proc) + bar::slave + return +} +# +# now we check tcl's rules: from the help +# NAME RESOLUTION +#... Command names are also always resolved by looking in the current +#namespace first. If not found there, they are searched for in every namespace on +#the current namespace's command path (which is empty by default). If not found +#there, command names are looked up in the global namespace (or, failing that, +#are processed by the unknown command.) ... +# +namespace eval ::1::1::1 {} +proc ::baz args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::baz args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::1::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::test1 args { + array set info [info frame 0]; puts -nonewline $info(proc) + baz +} +proc ::1::test2 args { + array set info [info frame 0]; puts -nonewline $info(proc) + bar +} +proc ::1::test3 args { + array set info [info frame 0]; puts -nonewline $info(proc) + ::bar +} +proc ::1::test4 args { + array set info [info frame 0]; puts -nonewline $info(proc) + 1::bar +} +proc ::1::test5 args { + array set info [info frame 0]; puts -nonewline $info(proc) + 1::baz +} +# +# funny example, do you see the infinite loop? +# we stop before the interpreter crashes +set ::countdown 10 +namespace eval ::2::2::2::2::2 {} +proc ::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::next args { + array set info [info frame 0]; puts $info(proc) + incr ::countdown -1 + if {$::countdown>0} then { + 2::next + } else { + puts "stop after 10 rounds." + } +} +proc ::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +# +# cross check with two files +# If doxygen did not do two passes, then xrefs would depend on file order +# and would be incomplete. +source _057_caller_graphs.tcl +proc master args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + inFileB + return +} +proc inFileA args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return +} +# now, check with tcl what is called +foo::master +puts "" +foreach proc [lsort [info procs ::1::test?]] { + $proc + puts "" +} +::next +master +exit + diff --git a/tests/upstream-test-suite/058/058__bracket__recursion_8tcl.xml b/tests/upstream-test-suite/058/058__bracket__recursion_8tcl.xml new file mode 100644 index 0000000..0381b83 --- /dev/null +++ b/tests/upstream-test-suite/058/058__bracket__recursion_8tcl.xml @@ -0,0 +1,384 @@ + + + + 058_bracket_recursion.tcl + + + + Invoked + args + Invoked + + should be reference by every proc below + + + + + + + a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + y + z + + + + NotInvoked + args + NotInvoked + + must not be reference by every proc below + + + + + + + + + + a + args + a + + + + + + + + Invoked + + + + b + args + b + + + + + + + + Invoked + + + + c + args + c + + + + + + + + Invoked + + + + d + args + d + + + + + + + + Invoked + + + + e + args + e + + + + + + + + Invoked + + + + f + args + f + + + + + + + + Invoked + + + + g + args + g + + + + + + + + Invoked + + + + h + args + h + + + + + + + + Invoked + + + + i + args + i + + + + + + + + Invoked + + + + j + args + j + + + + + + + + Invoked + + + + k + args + k + + + + + + + + Invoked + + + + l + args + l + + + + + + + + Invoked + + + + m + args + m + + + + + + + + Invoked + + + + n + args + n + + + + + + + + Invoked + + + + o + args + o + + + + + + + + Invoked + + + + $NotInvoked + args + $NotInvoked + + + + + + + + + + + p + args + p + + + + + + + + Invoked + + + + q + args + q + + + + + + + + Invoked + + + + r + args + r + + + + + + + + Invoked + + + + s + args + s + + + + + + + + Invoked + + + + t + args + t + + + + + + + + Invoked + + + + y + + y + + + + + + + + Invoked + + + + z + + z + + + + + + + + Invoked + + + + + + + + + diff --git a/tests/upstream-test-suite/058_bracket_recursion.tcl b/tests/upstream-test-suite/058_bracket_recursion.tcl new file mode 100644 index 0000000..2ecd673 --- /dev/null +++ b/tests/upstream-test-suite/058_bracket_recursion.tcl @@ -0,0 +1,157 @@ +#// objective: tests processing of commands inside brackets [], only references/referencedby relations are relevant +#// check: 058__bracket__recursion_8tcl.xml +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = yes + +## +# \brief should be reference by every proc below +proc Invoked args { + puts "Procedure \"Invoked\" is invoked indeed. Ok." + return $args +} +## +# \brief must not be reference by every proc below +proc NotInvoked args { + puts "Procedure \"NotInvoked\" is invoked. Not Ok!" + return $args +} +# +# check if call references work at all +proc a args { + Invoked NotInvoked + return +} +# +# check brackets with various quoting, bracing +proc b args { + set r [Invoked] + set r [list \[NotInvoked \]] + return +} +proc c args { + set r \{[Invoked]\} + set r {[NotInvoked]} + return +} +proc d args { + set r "[Invoked]" + set r "\[NotInvoked \]" + return +} +proc e args { + set r [list \[NotInvoked [Invoked]\]] + return +} +proc f args { + set r [list [Invoked \[NotInvoked \]]] + return +} +proc g args { + set r "{[Invoked]}" + set r "{\[NotInvoked \]}" + return +} +proc h args { + [Invoked set] r {[NotInvoked]} + return +} +# check brackets in tcl commands containing script arguments +# +# example generated according to +# https://groups.google.com/d/msg/comp.lang.tcl/G5-mc3GiIyY/e-AVD9t7xMkJ +proc i args { + foreach item [Invoked] { + return + } +} +proc j args { + foreach [Invoked item] [list one two three] { + } + return +} +proc k args { + while {[Invoked 0]} { + } +} +proc l args { + for {} {[Invoked 0]} {} { + } +} +proc m args { + if {[Invoked 1]} { + } +} +proc n args { + if [Invoked 1] { + } +} +proc o args { + if {0} { + } elseif {[Invoked 0]} { + } +} +# these are really nasty examples +# they shows, that the condition argument may not be parsed as a script +set NotInvoked \$NotInvoked +proc $NotInvoked args { + puts "Procedure \"\$NotInvoked\" is invoked. Not Ok!" + return $args +} +proc p args { + set NotInvoked \$NotInvoked + if {$NotInvoked eq [Invoked 1]} { + } + return +} +proc q args { + set NotInvoked \$NotInvoked + if {0} { + } elseif {$NotInvoked eq [Invoked 1]} { + } + return +} +proc r args { + set NotInvoked \$NotInvoked + while {$NotInvoked eq [Invoked 1]} { + } + return +} +proc s args { + set NotInvoked \$NotInvoked + for {} {$NotInvoked eq [Invoked 1]} {} { + } + return +} +# dangling open brackets should not confuse the scanner +proc t args { + set foo ]]]][Invoked] + return +} +# Example according to +# https://bugzilla.gnome.org/show_bug.cgi?id=729135 +# | +# Note the subtle difference in this | whitespace +# V +proc y {} { + set classifier_state {{bphy} } + if { ($classifier_state == {{bphy} }) } { + Invoked + } +} +proc z {} { + set classifier_state {{bphy} } + if { ($classifier_state == {{bphy} } ) } { + Invoked + } +} +# +# call all single letter procs +# let tcl check what is called and what is not called +foreach p [info procs ?] { + puts "Check procedure \"$p\"" + $p +} +exit + diff --git a/tests/upstream-test-suite/059/059__command__catch_8tcl.xml b/tests/upstream-test-suite/059/059__command__catch_8tcl.xml new file mode 100644 index 0000000..b5e5c96 --- /dev/null +++ b/tests/upstream-test-suite/059/059__command__catch_8tcl.xml @@ -0,0 +1,191 @@ + + + + 059_command_catch.tcl + + + + Invoked + args + Invoked + + should be reference by every proc below + + + + + + + a + b + c + d + e + f + g + h + i + j + + + + NotInvoked + args + NotInvoked + + must not be reference by every proc below + + + + + + + + + + a + args + a + + + + + + + + Invoked + + + + b + args + b + + + + + + + + Invoked + + + + c + args + c + + + + + + + + Invoked + + + + d + args + d + + + + + + + + Invoked + + + + e + args + e + + + + + + + + Invoked + + + + f + args + f + + + + + + + + Invoked + + + + g + args + g + + + + + + + + Invoked + + + + h + args + h + + + + + + + + Invoked + + + + i + args + i + + + + + + + + Invoked + + + + j + args + j + + + + + + + + Invoked + + + + + + + + + diff --git a/tests/upstream-test-suite/059_command_catch.tcl b/tests/upstream-test-suite/059_command_catch.tcl new file mode 100644 index 0000000..4227da7 --- /dev/null +++ b/tests/upstream-test-suite/059_command_catch.tcl @@ -0,0 +1,87 @@ +#// objective: tests processing of catch/eval, only references/referencedby relations are relevant +#// check: 059__command__catch_8tcl.xml +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = no + +## +# \brief should be reference by every proc below +proc Invoked args { + puts "Procedure \"Invoked\" is invoked indeed. Ok." + return $args +} +## +# \brief must not be reference by every proc below +proc NotInvoked args { + puts "Procedure \"NotInvoked\" is invoked. Not Ok!" + return $args +} +# +# check if call references work at all +proc a args { + Invoked NotInvoked + return +} +# +# catch command +# Tcl8.5: catch script ?resultVarName? ?optionsVarName? +proc b args { + catch Invoked + return +} +proc c args { + catch Invoked NotInvoked + return +} +proc d args { + catch Invoked NotInvoked NotInvoked + return +} +proc e args { + set r [catch Invoked NotInvoked NotInvoked] + return +} +proc f args { + set r [catch {Invoked} NotInvoked NotInvoked] + return +} +proc g args { + set r [catch { + set x [Invoked] + } NotInvoked NotInvoked] + return +} +# eval arg ?arg ...? +proc h args { + eval Invoked NotInvoked + return +} +proc i args { + eval set NotInvoked [Invoked NotInvoked] + return +} +# This is a striped down example. Original: +# +# jpeg.tcl -- +# +# Querying and modifying JPEG image files. +# +# Copyright (c) 2004 Aaron Faupell +# +# ... +# eval [list addComment $file] [lreplace $com 0 0 $comment] +# ... +proc j args { + eval [list set] [list NotInvoked] [Invoked NotInvoked] + return +} +# +# call all single letter procs +# let tcl check what is called and what is not called +foreach p [info procs ?] { + puts "Check procedure \"$p\"" + $p +} +exit + diff --git a/tests/upstream-test-suite/060/060__command__switch_8tcl.xml b/tests/upstream-test-suite/060/060__command__switch_8tcl.xml new file mode 100644 index 0000000..2def3fc --- /dev/null +++ b/tests/upstream-test-suite/060/060__command__switch_8tcl.xml @@ -0,0 +1,326 @@ + + + + 060_command_switch.tcl + + + + Invoked + args + Invoked + + should be reference by every proc below + + + + + + + a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + + + + NotInvoked + args + NotInvoked + + must not be reference by every proc below + + + + + + + + + + a + args + a + + + + + + + + Invoked + + + + b + args + b + + + + + + + + Invoked + + + + c + args + c + + + + + + + + Invoked + + + + d + args + d + + + + + + + + Invoked + + + + e + args + e + + + + + + + + Invoked + + + + f + args + f + + + + + + + + Invoked + + + + g + args + g + + + + + + + + Invoked + + + + h + args + h + + + + + + + + Invoked + + + + i + args + i + + + + + + + + Invoked + + + + j + args + j + + + + + + + + Invoked + + + + k + args + k + + + + + + + + Invoked + + + + l + args + l + + + + + + + + Invoked + + + + m + args + m + + + + + + + + Invoked + + + + n + args + n + + + + + + + + Invoked + + + + o + args + o + + + + + + + + Invoked + + + + p + args + p + + + + + + + + Invoked + + + + q + args + q + + + + + + + + Invoked + + + + r + args + r + + + + + + + + Invoked + + + + s + args + s + + + + + + + + Invoked + + + + + + + + + diff --git a/tests/upstream-test-suite/060_command_switch.tcl b/tests/upstream-test-suite/060_command_switch.tcl new file mode 100644 index 0000000..407f2e9 --- /dev/null +++ b/tests/upstream-test-suite/060_command_switch.tcl @@ -0,0 +1,238 @@ +#// objective: tests processing of switch, only references/referencedby relations are relevant +#// check: 060__command__switch_8tcl.xml +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = no + +## +# \brief should be reference by every proc below +proc Invoked args { + puts "Procedure \"Invoked\" is invoked indeed. Ok." + return $args +} +## +# \brief must not be reference by every proc below +proc NotInvoked args { + puts "Procedure \"NotInvoked\" is invoked. Not Ok!" + return $args +} +# +# check if call references work at all +proc a args { + Invoked NotInvoked + return +} +# +# switch command +# switch ?options? string pattern body ?pattern body ...? +proc b args { + switch value NotInvoked { + } NotInvoked { + } default { + Invoked + } + return +} +proc c args { + switch value NotInvoked { + } [Invoked] { + } default { + } + return +} +proc d args { + switch NotInvoked pattern { + } [Invoked] { + } default { + } + return +} +proc e args { + switch [Invoked] pattern { + } NotInvoked { + } default { + } + return +} +proc f args { + switch -exact value pattern { + } NotInvoked { + } default { + Invoked + } + return +} +proc g args { + switch -exact -- value pattern { + } NotInvoked { + } default { + Invoked + } + return +} +proc h args { + switch -exact -- -value pattern { + } NotInvoked { + } default { + Invoked + } + return +} +# switch ?options? string {pattern body ?pattern body ...?} +proc i args { + switch value { + NotInvoked { + } + NotInvoked { + } + default { + Invoked + } + } + return +} +proc j args { + switch vale { + NotInvoked { + } + [NotInvoked] { + } + default { + Invoked + } + } + return +} +proc k args { + switch NotInvoked { + [NotInvoked] { + } + NotInvoked { + Invoked + } + default { + } + } + return +} +proc l args { + switch [Invoked] { + pattern { + } + NotInvoked { + } + default { + } + } + return +} +proc m args { + switch -exact value { + pattern { + } + NotInvoked { + } + default { + Invoked + } + } + return +} +proc n args { + switch -exact -- value { + pattern { + } + NotInvoked { + } + default { + Invoked + } + } + return +} +proc o args { + switch -exact -- -value { + pattern { + } + NotInvoked { + } + default { + Invoked + } + } + return +} +proc p args { + switch -exact -- inquotes { + "inquotes" { + Invoked + } + default { + } + } + return +} +proc q args { + switch -exact -- "in quotes" { + "in quotes" { + Invoked + } + default { + } + } + return +} +proc r args { + switch -exact -- inbraces { + {inbraces} { + Invoked + } + default { + } + } + return +} +proc s args { + switch -exact -- {in braces} { + {in braces} { + Invoked + } + default { + } + } + return +} +# wrong syntax +#proc x args { +# catch {switch -exact -- [Invoked] pattern1 NotInvoked pattern2} +# return +#} +# The current version does not check the last argument beforehand. +# Therefore, all script elements are evaluated as scripts before +# the parser detects the dangling pattern. It throws a warning, at the very least. +# Anyway, for working code the documentation will be correct. +#proc y args { +# catch {switch -exact -- [Invoked] { +# pattern { +# NotInvoked +# } +# NotInvoked { +# NotInvoked +# } +# default { +# NotInvoked +# } +# pattern +# }} +# return +#} +# +# call all single letter procs +# let tcl check what is called and what is not called +foreach p [info procs ?] { + puts "Check procedure \"$p\"" + $p +} +exit + diff --git a/tests/upstream-test-suite/061/class_test.xml b/tests/upstream-test-suite/061/class_test.xml new file mode 100644 index 0000000..47e70ac --- /dev/null +++ b/tests/upstream-test-suite/061/class_test.xml @@ -0,0 +1,70 @@ + + + + Test + + + + Test::testmethod_one + args + testmethod_one + + Test method 1. + + + + + + + + + + Test::constructor + args + constructor + + Construction of class. + + + + + + + + + + Test::testmethod_two + args + testmethod_two + + Test method 2. + + + + + + + + + + Testclass. + + + + + + + Test + constructor + + + Test + testmethod_one + + + Test + testmethod_two + + + + diff --git a/tests/upstream-test-suite/061_bug_705503.tcl b/tests/upstream-test-suite/061_bug_705503.tcl new file mode 100644 index 0000000..ce25d6e --- /dev/null +++ b/tests/upstream-test-suite/061_bug_705503.tcl @@ -0,0 +1,19 @@ +#// objective: test for bug 705503 - TCL: Documentation of oo::define is not working +#// check: class_test.xml +#// config: EXTRACT_ALL = yes + +# taken from +# https://bugzilla.gnome.org/show_bug.cgi?id=705503 + +## @class Test +# @brief Testclass +oo::class create Test { + ## @brief Test method 1. + method testmethod_one args {} +} + +## @brief Construction of class +oo::define Test constructor args {} + +## @brief Test method 2 +oo::define Test method testmethod_two args {} diff --git a/tests/upstream-test-suite/062/namespacen1.xml b/tests/upstream-test-suite/062/namespacen1.xml new file mode 100644 index 0000000..408ef87 --- /dev/null +++ b/tests/upstream-test-suite/062/namespacen1.xml @@ -0,0 +1,42 @@ + + + + n1 + n1::n1 + + + + n1::p1 + args + p1 + + + + + + + + p2 + + + + n1::p2 + args + p2 + + + + + + + + p1 + + + + + + + + + diff --git a/tests/upstream-test-suite/062/namespacen2.xml b/tests/upstream-test-suite/062/namespacen2.xml new file mode 100644 index 0000000..f545576 --- /dev/null +++ b/tests/upstream-test-suite/062/namespacen2.xml @@ -0,0 +1,42 @@ + + + + n2 + n2::n2 + + + + n2::p1 + args + p1 + + + + + + + + p2 + + + + n2::p2 + args + p2 + + + + + + + + p1 + + + + + + + + + diff --git a/tests/upstream-test-suite/062/namespacen3.xml b/tests/upstream-test-suite/062/namespacen3.xml new file mode 100644 index 0000000..f8c2fb5 --- /dev/null +++ b/tests/upstream-test-suite/062/namespacen3.xml @@ -0,0 +1,42 @@ + + + + n3 + n3::n3 + + + + n3::p1 + args + p1 + + + + + + + + p2 + + + + n3::p2 + args + p2 + + + + + + + + p1 + + + + + + + + + diff --git a/tests/upstream-test-suite/062_namespace_resolution.tcl b/tests/upstream-test-suite/062_namespace_resolution.tcl new file mode 100644 index 0000000..dcc6701 --- /dev/null +++ b/tests/upstream-test-suite/062_namespace_resolution.tcl @@ -0,0 +1,68 @@ +#// objective: tests correct namespace resolution, only references/referencedby relations are relevant +#// check: namespacen1.xml +#// check: namespacen2.xml +#// check: namespacen3.xml +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = yes + +# now: combine namespace eval and qualified names +namespace eval n1 { + proc p1 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + p2 + return + } + proc p2 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return + } + namespace eval n1 { + proc p1 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return + } + } +} +# same thing, but fully qualified proc names +namespace eval ::n2 {} +namespace eval ::n2::n2 {} +proc ::n2::p1 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + p2 + return +} +proc ::n2::p2 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return +} +proc ::n2::n2::p2 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return +} +# same thing, without leading :: +namespace eval n3 {} +namespace eval n3::n3 {} +proc n3::p1 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + p2 + return +} +proc n3::p2 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return +} +proc n3::n3::p2 args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + return +} +# now, check with tcl what is called +n1::p1 +puts "" +n2::p1 +puts "" +n3::p1 +puts "" +exit + diff --git a/tests/upstream-test-suite/063/namespaceoo.xml b/tests/upstream-test-suite/063/namespaceoo.xml new file mode 100644 index 0000000..044c364 --- /dev/null +++ b/tests/upstream-test-suite/063/namespaceoo.xml @@ -0,0 +1,13 @@ + + + + oo + oo::define + oo::Helpers + + + + + + + diff --git a/tests/upstream-test-suite/063/namespaceoo_1_1_helpers.xml b/tests/upstream-test-suite/063/namespaceoo_1_1_helpers.xml new file mode 100644 index 0000000..e9083dc --- /dev/null +++ b/tests/upstream-test-suite/063/namespaceoo_1_1_helpers.xml @@ -0,0 +1,27 @@ + + + + oo::Helpers + + + + oo::Helpers::classvar + args + classvar + + + + Extension to TclOO to add static variables. Defines variables on the class instead of on the object. Can be used to enforce a limited number of instantiations. + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/063/namespaceoo_1_1define.xml b/tests/upstream-test-suite/063/namespaceoo_1_1define.xml new file mode 100644 index 0000000..c8c8e85 --- /dev/null +++ b/tests/upstream-test-suite/063/namespaceoo_1_1define.xml @@ -0,0 +1,27 @@ + + + + oo::define + + + + oo::define::classmethod + name ?args? ?body? + classmethod + + + + Extension to TclOO to add static methods. Defines the method on the class instead of on the object. Can be used for the creation of megawidgets using TclOO by overriding the unknown method to detect if the user is trying to instantiate a widget (because the method will be unknown and start with a dot). + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/063_bug_729092.tcl b/tests/upstream-test-suite/063_bug_729092.tcl new file mode 100644 index 0000000..a6d3341 --- /dev/null +++ b/tests/upstream-test-suite/063_bug_729092.tcl @@ -0,0 +1,43 @@ +#// objective: test for bug 729092 - TCL: Full documentation not shown for procs in namespaces. +#// check: namespaceoo.xml +#// check: namespaceoo_1_1_helpers.xml +#// check: namespaceoo_1_1define.xml +#// config: EXTRACT_ALL = yes +#// config: GENERATE_HTML = yes + +# taken from +# https://bugzilla.gnome.org/show_bug.cgi?id=729092 + +## +# Extension to TclOO to add static methods. +# Defines the method on the class instead of on the object. Can be used for +# the creation of megawidgets using TclOO by overriding the unknown method to +# detect if the user is trying to instantiate a widget (because the method +# will be unknown and start with a dot). +# +proc ::oo::define::classmethod {name {args ""} {body ""}} { + # Create the method on the class if the caller gave arguments and body. + if {[llength [info level 0]] == 4} { + uplevel 1 [list self method $name $args $body] + } + # Get the name of the class being defined. + set cls [lindex [info level -1] 1] + # Make connection to private class "my" command by forwarding. + uplevel forward $name [info object namespace $cls]::my $name +} + +## +# Extension to TclOO to add static variables. +# Defines variables on the class instead of on the object. Can be used to +# enforce a limited number of instantiations. +# +proc ::oo::Helpers::classvar {args} { + # Get reference to class's namespace. + set nsCl [info object namespace [uplevel 1 {self class}]] + set nsObj [uplevel 1 {namespace current}] + # Link variables into local (caller's) scope. + foreach v $args { + uplevel "my variable $v" + upvar #0 ${nsCl}::$v ${nsObj}::$v + } +} diff --git a/tests/upstream-test-suite/064/struct_foo.xml b/tests/upstream-test-suite/064/struct_foo.xml new file mode 100644 index 0000000..e228f92 --- /dev/null +++ b/tests/upstream-test-suite/064/struct_foo.xml @@ -0,0 +1,112 @@ + + + + Foo + + + + Foo::operator int + () + operator int + + Conversion to int. + + + + + + + + + + Foo::operator int + () const + operator int + + Conversion to int const. + + + + + + + + + + Foo. + + + + + + No autolink for operator int() + + + + operator int() + + + + + title + + + + + Foo::operator int() + + + + + Foo::operator int() + + + + + title + + + + No autolink for operator int() const + + + + operator int() const + + + + + title + + + + + Foo::operator int() const + + + + + Foo::operator int() const + + + + + title + + + + + + + + + Foo + operator int + + + Foo + operator int + + + + diff --git a/tests/upstream-test-suite/064_castoperator.cpp b/tests/upstream-test-suite/064_castoperator.cpp new file mode 100644 index 0000000..d6f8006 --- /dev/null +++ b/tests/upstream-test-suite/064_castoperator.cpp @@ -0,0 +1,25 @@ +// objective: test linking to the cast operator with and without const +// check: struct_foo.xml +/** + * @brief Foo + * + * - No autolink for operator int() + * - @ref operator int() + * - @ref operator int() "title" + * - Foo::operator int() + * - @ref Foo::operator int() + * - @ref Foo::operator int() "title" + * + * - No autolink for operator int() const + * - @ref operator int() const + * - @ref operator int() const "title" + * - Foo::operator int() const + * - @ref Foo::operator int() const + * - @ref Foo::operator int() const "title" + */ +struct Foo { + /** @brief Conversion to int */ + operator int(); + /** @brief Conversion to int const */ + operator int() const; +}; diff --git a/tests/upstream-test-suite/065/indexpage.xml b/tests/upstream-test-suite/065/indexpage.xml new file mode 100644 index 0000000..09c7f8c --- /dev/null +++ b/tests/upstream-test-suite/065/indexpage.xml @@ -0,0 +1,12 @@ + + + + index + My Project + + + + これは日本語(en)です. Output for all languages. + + + diff --git a/tests/upstream-test-suite/065_tilde.dox b/tests/upstream-test-suite/065_tilde.dox new file mode 100644 index 0000000..0b4986f --- /dev/null +++ b/tests/upstream-test-suite/065_tilde.dox @@ -0,0 +1,12 @@ +// objective: test \~ command with non default OUTPUT_LANGUAGE which contains '-' letter +// check: indexpage.xml +// config: OUTPUT_LANGUAGE = Japanese-en +/** +\mainpage +\~english This is English. +\~dutch Dit is Nederlands. +\~japanese これは日本語です. +\~japanese-en これは日本語(en)です. +\~german Dies ist Deutsch. +\~ Output for all languages. +*/ diff --git a/tests/upstream-test-suite/066/class_class1.xml b/tests/upstream-test-suite/066/class_class1.xml new file mode 100644 index 0000000..008bcc6 --- /dev/null +++ b/tests/upstream-test-suite/066/class_class1.xml @@ -0,0 +1,50 @@ + + + + Class1 + + + int + int Class1.Property1 + + Property1 + = 1 + + + + + + + + + + string + string Class1.Property2 + + Property2 + + + + + + + + + + + + + + + + + Class1 + Property1 + + + Class1 + Property2 + + + + diff --git a/tests/upstream-test-suite/066_property_initializer.cs b/tests/upstream-test-suite/066_property_initializer.cs new file mode 100644 index 0000000..d5b5c59 --- /dev/null +++ b/tests/upstream-test-suite/066_property_initializer.cs @@ -0,0 +1,7 @@ +// objective: C# property initializer +// check: class_class1.xml +class Class1 +{ + public int Property1 { get; } = 1; + public string Property2 { get; set; } +} diff --git a/tests/upstream-test-suite/067/067__link__varargs_8cpp.xml b/tests/upstream-test-suite/067/067__link__varargs_8cpp.xml new file mode 100644 index 0000000..76eb543 --- /dev/null +++ b/tests/upstream-test-suite/067/067__link__varargs_8cpp.xml @@ -0,0 +1,54 @@ + + + + 067_link_varargs.cpp + Test + + + void + void func + (int p) + func + + int + p + + + + + A function + + + + + + + void + void func + (int p,...) + func + + int + p + + + ... + + + + + Overloaded function taking variadic arguments + + + + + + + + + + See the function for more info. See the test class. + + + + diff --git a/tests/upstream-test-suite/067_link_varargs.cpp b/tests/upstream-test-suite/067_link_varargs.cpp new file mode 100644 index 0000000..8cf25a2 --- /dev/null +++ b/tests/upstream-test-suite/067_link_varargs.cpp @@ -0,0 +1,20 @@ +// objective: test \link command with function variadic arguments '...' +// check: 067__link__varargs_8cpp.xml + +/** \file + * See \link func(int,...) the function\endlink for more info. + * See the \link Test test\endlink class. + */ + +/** A function + */ +void func(int p); + +/** Overloaded function taking variadic arguments + */ +void func(int p, ...); + +/** A test */ +class Test +{ +}; diff --git a/tests/upstream-test-suite/068/068__ref__varargs_8cpp.xml b/tests/upstream-test-suite/068/068__ref__varargs_8cpp.xml new file mode 100644 index 0000000..8e0dc00 --- /dev/null +++ b/tests/upstream-test-suite/068/068__ref__varargs_8cpp.xml @@ -0,0 +1,54 @@ + + + + 068_ref_varargs.cpp + Test + + + void + void func + (int p) + func + + int + p + + + + + A function + + + + + + + void + void func + (int p,...) + func + + int + p + + + ... + + + + + Overloaded function taking variadic arguments + + + + + + + + + + See the function for more info. See the test class. + + + + diff --git a/tests/upstream-test-suite/068_ref_varargs.cpp b/tests/upstream-test-suite/068_ref_varargs.cpp new file mode 100644 index 0000000..c85daa2 --- /dev/null +++ b/tests/upstream-test-suite/068_ref_varargs.cpp @@ -0,0 +1,20 @@ +// objective: test \ref command with function variadic arguments '...' +// check: 068__ref__varargs_8cpp.xml + +/** \file + * See \ref func(int,...) "the function" for more info. + * See the \ref Test "test" class. + */ + +/** A function + */ +void func(int p); + +/** Overloaded function taking variadic arguments + */ +void func(int p, ...); + +/** A test */ +class Test +{ +}; diff --git a/tests/upstream-test-suite/069/069__link__variadic__template_8cpp.xml b/tests/upstream-test-suite/069/069__link__variadic__template_8cpp.xml new file mode 100644 index 0000000..c93a732 --- /dev/null +++ b/tests/upstream-test-suite/069/069__link__variadic__template_8cpp.xml @@ -0,0 +1,309 @@ + + + + 069_link_variadic_template.cpp + Test + + + void + void func + (int p) + func + + int + p + + + + + A function + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args &... args) + func + + int + p + + + Args &... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args &&... args) + func + + int + p + + + Args &&... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args &... args) + func + + int + p + + + const Args &... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args &&... args) + func + + int + p + + + const Args &&... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args *... args) + func + + int + p + + + Args *... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args **... args) + func + + int + p + + + Args **... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args *... args) + func + + int + p + + + const Args *... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args **... args) + func + + int + p + + + const Args **... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args... args) + func + + int + p + + + Args... + args + + + + + A variadic template function overload + + + + + + + + + + + + + + At the time of writing, the part between <> is totally ignored: func<Args...>(Args... args) is interpreted as func(Args... args). + Beware that a function parameter with either a & or * operator, e.g. 'const Args&... args', requires \link and \ref to specify such parameter as verbatim, i.e. 'const Args&... args'. At the time of writing, the form func(const Args&...) will fail, unless the function parameter was declared just as 'const Args&...'. + + + + + + variadic template method + + Links to the variadic template function overloads: First overloadSecond overloadThird overloadFourth overloadFifth overloadSixth overloadSeventh overloadEighth overloadNinth overload +The followings are interpreted the same: without template argumentwith template argument +See the test class. + + + + diff --git a/tests/upstream-test-suite/069_link_variadic_template.cpp b/tests/upstream-test-suite/069_link_variadic_template.cpp new file mode 100644 index 0000000..89ab57c --- /dev/null +++ b/tests/upstream-test-suite/069_link_variadic_template.cpp @@ -0,0 +1,95 @@ +// objective: test \link command with a variadic template function +// check: 069__link__variadic__template_8cpp.xml + +/** \file + * + * @attention + * @parblock + * At the time of writing, the part between \<\> is totally ignored: + * %func(Args... args) is interpreted as %func(Args... args). + * + * Beware that a function parameter with either a \& or \* operator, + * e.g. 'const Args&... args', requires \\link and \\ref to specify + * such parameter as verbatim, i.e. 'const Args&... args'. At the + * time of writing, the form %func(const Args&...) will fail, unless + * the function parameter was declared just as 'const Args&...'. + * @endparblock + * + * \link Test::func(int,Args...)const variadic template method\endlink + * + * Links to the variadic template function overloads: + * @li \link func(int,Args&... args) First overload\endlink + * @li \link func(int,Args&&... args) Second overload\endlink + * @li \link func(int,const Args&... args) Third overload\endlink + * @li \link func(int,const Args&&... args) Fourth overload\endlink + * @li \link func(int,Args*... args) Fifth overload\endlink + * @li \link func(int,Args**... args) Sixth overload\endlink + * @li \link func(int,const Args*... args) Seventh overload\endlink + * @li \link func(int,const Args**... args) Eighth overload\endlink + * @li \link func(int,Args...) Ninth overload\endlink + * + * The followings are interpreted the same: + * @li \link func(int,const Args&... args) without template argument\endlink + * @li \link func(int,const Args&... args) with template argument\endlink + * + * See the \link Test test\endlink class. + */ + +/** A function + */ +void func(int p); + +/** A variadic template function overload + */ +template +void func(int p, Args&... args); + +/** A variadic template function overload + */ +template +void func(int p, Args&&... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args&... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args&&... args); + +/** A variadic template function overload + */ +template +void func(int p, Args*... args); + +/** A variadic template function overload + */ +template +void func(int p, Args**... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args*... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args**... args); + +/** A variadic template function overload + */ +template +void func(int p, Args... args); + +/** A test */ +class Test +{ + public: + /** A variadic template method + */ + template + void func(int p, Args... args) const; +}; diff --git a/tests/upstream-test-suite/070/070__ref__variadic__template_8cpp.xml b/tests/upstream-test-suite/070/070__ref__variadic__template_8cpp.xml new file mode 100644 index 0000000..0f581e5 --- /dev/null +++ b/tests/upstream-test-suite/070/070__ref__variadic__template_8cpp.xml @@ -0,0 +1,309 @@ + + + + 070_ref_variadic_template.cpp + Test + + + void + void func + (int p) + func + + int + p + + + + + A function + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args &... args) + func + + int + p + + + Args &... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args &&... args) + func + + int + p + + + Args &&... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args &... args) + func + + int + p + + + const Args &... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args &&... args) + func + + int + p + + + const Args &&... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args *... args) + func + + int + p + + + Args *... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args **... args) + func + + int + p + + + Args **... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args *... args) + func + + int + p + + + const Args *... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, const Args **... args) + func + + int + p + + + const Args **... + args + + + + + A variadic template function overload + + + + + + + + + typename... + Args + Args + + + void + void func + (int p, Args... args) + func + + int + p + + + Args... + args + + + + + A variadic template function overload + + + + + + + + + + + + + + At the time of writing, the part between <> is totally ignored: func<Args...>(Args... args) is interpreted as func(Args... args). + Beware that a function parameter with either a & or * operator, e.g. 'const Args&... args', requires \link and \ref to specify such parameter as verbatim, i.e. 'const Args&... args'. At the time of writing, the form func(const Args&...) will fail, unless the function parameter was declared just as 'const Args&...'. + + + + + + variadic template method + + References to the variadic template function overloads: First overloadSecond overloadThird overloadFourth overloadFifth overloadSixth overloadSeventh overloadEighth overloadNinth overload +The followings are interpreted the same: without template argumentwith template argument +See the test class. + + + + diff --git a/tests/upstream-test-suite/070_ref_variadic_template.cpp b/tests/upstream-test-suite/070_ref_variadic_template.cpp new file mode 100644 index 0000000..376cebe --- /dev/null +++ b/tests/upstream-test-suite/070_ref_variadic_template.cpp @@ -0,0 +1,95 @@ +// objective: test \ref command with a variadic template function +// check: 070__ref__variadic__template_8cpp.xml + +/** \file + * + * @attention + * @parblock + * At the time of writing, the part between \<\> is totally ignored: + * %func(Args... args) is interpreted as %func(Args... args). + * + * Beware that a function parameter with either a \& or \* operator, + * e.g. 'const Args&... args', requires \\link and \\ref to specify + * such parameter as verbatim, i.e. 'const Args&... args'. At the + * time of writing, the form %func(const Args&...) will fail, unless + * the function parameter was declared just as 'const Args&...'. + * @endparblock + * + * \ref Test::func(int,Args...)const "variadic template method" + * + * References to the variadic template function overloads: + * @li \ref func(int,Args&... args) "First overload" + * @li \ref func(int,Args&&... args) "Second overload" + * @li \ref func(int,const Args&... args) "Third overload" + * @li \ref func(int,const Args&&... args) "Fourth overload" + * @li \ref func(int,Args*... args) "Fifth overload" + * @li \ref func(int,Args**... args) "Sixth overload" + * @li \ref func(int,const Args*... args) "Seventh overload" + * @li \ref func(int,const Args**... args) "Eighth overload" + * @li \ref func(int,Args...) "Ninth overload" + * + * The followings are interpreted the same: + * @li \ref func(int,const Args&... args) "without template argument" + * @li \ref func(int,const Args&... args) "with template argument" + * + * See the \ref Test "test" class. + */ + +/** A function + */ +void func(int p); + +/** A variadic template function overload + */ +template +void func(int p, Args&... args); + +/** A variadic template function overload + */ +template +void func(int p, Args&&... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args&... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args&&... args); + +/** A variadic template function overload + */ +template +void func(int p, Args*... args); + +/** A variadic template function overload + */ +template +void func(int p, Args**... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args*... args); + +/** A variadic template function overload + */ +template +void func(int p, const Args**... args); + +/** A variadic template function overload + */ +template +void func(int p, Args... args); + +/** A test */ +class Test +{ + public: + /** A variadic template method + */ + template + void func(int p, Args... args) const; +}; diff --git a/tests/upstream-test-suite/071/namespace_a_namespace_1_1_0D0.xml b/tests/upstream-test-suite/071/namespace_a_namespace_1_1_0D0.xml new file mode 100644 index 0000000..76483ca --- /dev/null +++ b/tests/upstream-test-suite/071/namespace_a_namespace_1_1_0D0.xml @@ -0,0 +1,45 @@ + + + + ANamespace::@0 + + + + Boolean + + False + + + + + + + True + + + + + + + FileNotFound + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/071_enum_in_anon_ns.cpp b/tests/upstream-test-suite/071_enum_in_anon_ns.cpp new file mode 100644 index 0000000..a5b9ac8 --- /dev/null +++ b/tests/upstream-test-suite/071_enum_in_anon_ns.cpp @@ -0,0 +1,12 @@ +// objective: test that enum values in anonymous namespaces produce no warning +// check: namespace_a_namespace_1_1_0D0.xml + +namespace ANamespace { namespace { + +enum class Boolean { + False, + True, + FileNotFound +}; + +}} diff --git a/tests/upstream-test-suite/072/072__using_8cpp.xml b/tests/upstream-test-suite/072/072__using_8cpp.xml new file mode 100644 index 0000000..e368966 --- /dev/null +++ b/tests/upstream-test-suite/072/072__using_8cpp.xml @@ -0,0 +1,32 @@ + + + + 072_using.cpp + + + + + class T + + + std::vector< T > + using Vec = std::vector<T> + + Vec + + A vector. + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/072_using.cpp b/tests/upstream-test-suite/072_using.cpp new file mode 100644 index 0000000..ca02902 --- /dev/null +++ b/tests/upstream-test-suite/072_using.cpp @@ -0,0 +1,7 @@ +// objective: test template parameters for a type alias +// check: 072__using_8cpp.xml + +/** \file */ + +/** @brief A vector */ +template using Vec = std::vector; diff --git a/tests/upstream-test-suite/073/073__typed__enum_8cpp.xml b/tests/upstream-test-suite/073/073__typed__enum_8cpp.xml new file mode 100644 index 0000000..9dda417 --- /dev/null +++ b/tests/upstream-test-suite/073/073__typed__enum_8cpp.xml @@ -0,0 +1,25 @@ + + + + 073_typed_enum.cpp + + + unsigned short + E + + A strongly-typed enum. + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/073_typed_enum.cpp b/tests/upstream-test-suite/073_typed_enum.cpp new file mode 100644 index 0000000..0818463 --- /dev/null +++ b/tests/upstream-test-suite/073_typed_enum.cpp @@ -0,0 +1,7 @@ +// objective: test underlying type and strongness for an enum +// check: 073__typed__enum_8cpp.xml + +/** \file */ + +/** @brief A strongly-typed enum */ +enum class E: unsigned short {}; diff --git a/tests/upstream-test-suite/074/struct_foo.xml b/tests/upstream-test-suite/074/struct_foo.xml new file mode 100644 index 0000000..56a497a --- /dev/null +++ b/tests/upstream-test-suite/074/struct_foo.xml @@ -0,0 +1,287 @@ + + + + Foo + + + + Foo::Foo + () + Foo + + + + Constructor + + + + + + + Foo & + Foo& Foo::operator<< + (int i) + operator<< + + int + i + + + + + overloaded less than operator + + + + + + + const Foo & + const Foo& Foo::operator<< + (int i) const + operator<< + + int + i + + + + + overloaded const less than operator + + + + + + + int + int Foo::operator() + (int i) + operator() + + int + i + + + + + overloaded call operator + + + + + + + int + int Foo::operator() + (int i) const + operator() + + int + i + + + + + overloaded call operator + + + + + + + Foo & + Foo& Foo::operator&= + (const Foo &rhs) + operator&= + + const Foo & + rhs + + + + + and equal operator + + + + + + + Foo & + Foo& Foo::operator&= + (const Foo &rhs) + operator&= + + const Foo & + rhs + + + + + and equal operator + + + + + + + int * + int* Foo::operator->* + (int *p) + operator->* + + int * + p + + + + + Member pointer operator + + + + + + + + Foo + + Foo Foo::fun + () const + fun + + Fun with itself. + + + + + + + + + + + + Foo + + static Foo Foo::fun + (Foo a, Foo b) + fun + + + Foo + + a + + + + Foo + + b + + + Fun of two. + + + + + + + fun() const + + + + + fun() const + + + + + title + + + + + + + + + + + + Foo class. + + + + + Foo::Foo() constructor for details. + + + Foo constant. + + + less than operator. + + + const less than operator. + + + call operator. + + + const call operator. + + + and equal operator. + + + member pointer operator. + + + + + + + Foo + Foo + + + Foo + fun + + + Foo + fun + + + Foo + operator&= + + + Foo + operator&= + + + Foo + operator() + + + Foo + operator() + + + Foo + operator->* + + + Foo + operator<< + + + Foo + operator<< + + + + diff --git a/tests/upstream-test-suite/074_ref.cpp b/tests/upstream-test-suite/074_ref.cpp new file mode 100644 index 0000000..141e2b4 --- /dev/null +++ b/tests/upstream-test-suite/074_ref.cpp @@ -0,0 +1,49 @@ +// objective: test \ref command in combination with const +// check: struct_foo.xml +/** @brief Foo class. + * + * @see @ref Foo::Foo() constructor for details. + * @see @ref Foo constant. + * @see @ref operator<<(int) "less than operator". + * @see @ref operator<<(int) const "const less than operator". + * @see @ref operator()(int) "call operator". + * @see @ref operator()(int) const "const call operator". + * @see @ref operator&=(const Foo&) "and equal operator". + * @see @ref operator->*(int *) "member pointer operator". + */ +struct Foo { + /** Constructor */ + Foo(); + /** + * @brief Fun of two + * + * - fun() const + * - @ref fun() const + * - @ref fun() const "title" + */ + static Foo fun(Foo a, Foo b); + + /** overloaded less than operator */ + Foo& operator<< (int i); + + /** overloaded const less than operator */ + const Foo& operator<< (int i) const; + + /** overloaded call operator */ + int operator()(int i); + + /** overloaded call operator */ + int operator()(int i) const; + + /** and equal operator */ + Foo& operator&=(const Foo& rhs); + + /** and equal operator */ + Foo& operator&=(const Foo& rhs); + + /** Member pointer operator */ + int* operator->*(int *p); + + /** @brief Fun with itself */ + Foo fun() const; +}; diff --git a/tests/upstream-test-suite/075/struct_foo.xml b/tests/upstream-test-suite/075/struct_foo.xml new file mode 100644 index 0000000..eca791b --- /dev/null +++ b/tests/upstream-test-suite/075/struct_foo.xml @@ -0,0 +1,148 @@ + + + + Foo + + + void + void Foo::foo + (float value) + foo + + float + value + + + Float. + + + + + + + + + void + void Foo::foo + (unsigned value) + foo + + unsigned + value + + + Unsigned int. + + + + + + + + + void + void Foo::foo + (unsigned long) + foo + + unsigned long + + + Unnamed unsigned long. + + + + + + + + + void + void Foo::foo + (signed long) + foo + + signed long + + + Unnamed signed long. + + + + + + + + + void + void Foo::foo + (const struct Foo) + foo + + const struct Foo + + + Unnamed struct foo. + + + + + + + + + void + void Foo::foo + (const char *const, const double param2) + foo + + const char * const + + + const double + param2 + + + Unnamed const pointer. + + + + + + + + + + Foo. + + + + + + + Foo + foo + + + Foo + foo + + + Foo + foo + + + Foo + foo + + + Foo + foo + + + Foo + foo + + + + diff --git a/tests/upstream-test-suite/075_argmatch.cpp b/tests/upstream-test-suite/075_argmatch.cpp new file mode 100644 index 0000000..439cdca --- /dev/null +++ b/tests/upstream-test-suite/075_argmatch.cpp @@ -0,0 +1,30 @@ +// objective: test argument matching in particular for unnamed types +// check: struct_foo.xml +/** @brief Foo */ +struct Foo { + void foo(float value); + void foo(unsigned value); + void foo(unsigned long); + void foo(signed long); + void foo(const struct Foo); + void foo(const char * const, const double param2); +}; + +/** @brief Float */ +void Foo::foo(float) {} + +/** @brief Unsigned int */ +void Foo::foo(unsigned value) {} + +/** @brief Unnamed unsigned long */ +void Foo::foo(unsigned long) {} + +/** @brief Unnamed signed long */ +void Foo::foo(signed long) {} + +/** @brief Unnamed struct foo */ +void Foo::foo(const struct Foo) {} + +/** @brief Unnamed const pointer */ +void Foo::foo(const char * const, const double param2); + diff --git a/tests/upstream-test-suite/076/indexpage.xml b/tests/upstream-test-suite/076/indexpage.xml new file mode 100644 index 0000000..5665d9b --- /dev/null +++ b/tests/upstream-test-suite/076/indexpage.xml @@ -0,0 +1,1500 @@ + + + + index + Emoji test + + + + from "+1" + from "-1" + from "100" + from "1234" + from "1st_place_medal" + from "2nd_place_medal" + from "3rd_place_medal" + from "8ball" + from "a" + from "ab" + from "abc" + from "abcd" + from "accept" + from "aerial_tramway" + from "afghanistan" + from "airplane" + from "aland_islands" + from "alarm_clock" + from "albania" + from "alembic" + from "algeria" + from "alien" + from "ambulance" + from "american_samoa" + from "amphora" + from "anchor" + from "andorra" + from "angel" + from "anger" + from "angola" + from "angry" + from "anguilla" + from "anguished" + from "ant" + from "antarctica" + from "antigua_barbuda" + from "apple" + from "aquarius" + from "argentina" + from "aries" + from "armenia" + from "arrow_backward" + from "arrow_double_down" + from "arrow_double_up" + from "arrow_down" + from "arrow_down_small" + from "arrow_forward" + from "arrow_heading_down" + from "arrow_heading_up" + from "arrow_left" + from "arrow_lower_left" + from "arrow_lower_right" + from "arrow_right" + from "arrow_right_hook" + from "arrow_up" + from "arrow_up_down" + from "arrow_up_small" + from "arrow_upper_left" + from "arrow_upper_right" + from "arrows_clockwise" + from "arrows_counterclockwise" + from "art" + from "articulated_lorry" + from "artificial_satellite" + from "aruba" + from "asterisk" + from "astonished" + from "athletic_shoe" + from "atm" + from "atom_symbol" + from "australia" + from "austria" + from "avocado" + from "azerbaijan" + from "b" + from "baby" + from "baby_bottle" + from "baby_chick" + from "baby_symbol" + from "back" + from "bacon" + from "badminton" + from "baggage_claim" + from "baguette_bread" + from "bahamas" + from "bahrain" + from "balance_scale" + from "balloon" + from "ballot_box" + from "ballot_box_with_check" + from "bamboo" + from "banana" + from "bangbang" + from "bangladesh" + from "bank" + from "bar_chart" + from "barbados" + from "barber" + from "baseball" + from "basketball" + from "basketball_man" + from "basketball_woman" + from "bat" + from "bath" + from "bathtub" + from "battery" + from "beach_umbrella" + from "bear" + from "bed" + from "bee" + from "beer" + from "beers" + from "beetle" + from "beginner" + from "belarus" + from "belgium" + from "belize" + from "bell" + from "bellhop_bell" + from "benin" + from "bento" + from "bermuda" + from "bhutan" + from "bicyclist" + from "bike" + from "biking_man" + from "biking_woman" + from "bikini" + from "biohazard" + from "bird" + from "birthday" + from "black_circle" + from "black_flag" + from "black_heart" + from "black_joker" + from "black_large_square" + from "black_medium_small_square" + from "black_medium_square" + from "black_nib" + from "black_small_square" + from "black_square_button" + from "blonde_man" + from "blonde_woman" + from "blossom" + from "blowfish" + from "blue_book" + from "blue_car" + from "blue_heart" + from "blush" + from "boar" + from "boat" + from "bolivia" + from "bomb" + from "book" + from "bookmark" + from "bookmark_tabs" + from "books" + from "boom" + from "boot" + from "bosnia_herzegovina" + from "botswana" + from "bouquet" + from "bow" + from "bow_and_arrow" + from "bowing_man" + from "bowing_woman" + from "bowling" + from "boxing_glove" + from "boy" + from "brazil" + from "bread" + from "bride_with_veil" + from "bridge_at_night" + from "briefcase" + from "british_indian_ocean_territory" + from "british_virgin_islands" + from "broken_heart" + from "brunei" + from "bug" + from "building_construction" + from "bulb" + from "bulgaria" + from "bullettrain_front" + from "bullettrain_side" + from "burkina_faso" + from "burrito" + from "burundi" + from "bus" + from "business_suit_levitating" + from "busstop" + from "bust_in_silhouette" + from "busts_in_silhouette" + from "butterfly" + from "cactus" + from "cake" + from "calendar" + from "call_me_hand" + from "calling" + from "cambodia" + from "camel" + from "camera" + from "camera_flash" + from "cameroon" + from "camping" + from "canada" + from "canary_islands" + from "cancer" + from "candle" + from "candy" + from "canoe" + from "cape_verde" + from "capital_abcd" + from "capricorn" + from "car" + from "card_file_box" + from "card_index" + from "card_index_dividers" + from "caribbean_netherlands" + from "carousel_horse" + from "carrot" + from "cat" + from "cat2" + from "cayman_islands" + from "cd" + from "central_african_republic" + from "chad" + from "chains" + from "champagne" + from "chart" + from "chart_with_downwards_trend" + from "chart_with_upwards_trend" + from "checkered_flag" + from "cheese" + from "cherries" + from "cherry_blossom" + from "chestnut" + from "chicken" + from "children_crossing" + from "chile" + from "chipmunk" + from "chocolate_bar" + from "christmas_island" + from "christmas_tree" + from "church" + from "cinema" + from "circus_tent" + from "city_sunrise" + from "city_sunset" + from "cityscape" + from "cl" + from "clamp" + from "clap" + from "clapper" + from "classical_building" + from "clinking_glasses" + from "clipboard" + from "clock1" + from "clock10" + from "clock1030" + from "clock11" + from "clock1130" + from "clock12" + from "clock1230" + from "clock130" + from "clock2" + from "clock230" + from "clock3" + from "clock330" + from "clock4" + from "clock430" + from "clock5" + from "clock530" + from "clock6" + from "clock630" + from "clock7" + from "clock730" + from "clock8" + from "clock830" + from "clock9" + from "clock930" + from "closed_book" + from "closed_lock_with_key" + from "closed_umbrella" + from "cloud" + from "cloud_with_lightning" + from "cloud_with_lightning_and_rain" + from "cloud_with_rain" + from "cloud_with_snow" + from "clown_face" + from "clubs" + from "cn" + from "cocktail" + from "cocos_islands" + from "coffee" + from "coffin" + from "cold_sweat" + from "collision" + from "colombia" + from "comet" + from "comoros" + from "computer" + from "computer_mouse" + from "confetti_ball" + from "confounded" + from "confused" + from "congo_brazzaville" + from "congo_kinshasa" + from "congratulations" + from "construction" + from "construction_worker" + from "construction_worker_man" + from "construction_worker_woman" + from "control_knobs" + from "convenience_store" + from "cook_islands" + from "cookie" + from "cool" + from "cop" + from "copyright" + from "corn" + from "costa_rica" + from "cote_divoire" + from "couch_and_lamp" + from "couple" + from "couple_with_heart" + from "couple_with_heart_man_man" + from "couple_with_heart_woman_man" + from "couple_with_heart_woman_woman" + from "couplekiss_man_man" + from "couplekiss_man_woman" + from "couplekiss_woman_woman" + from "cow" + from "cow2" + from "cowboy_hat_face" + from "crab" + from "crayon" + from "credit_card" + from "crescent_moon" + from "cricket" + from "croatia" + from "crocodile" + from "croissant" + from "crossed_fingers" + from "crossed_flags" + from "crossed_swords" + from "crown" + from "cry" + from "crying_cat_face" + from "crystal_ball" + from "cuba" + from "cucumber" + from "cupid" + from "curacao" + from "curly_loop" + from "currency_exchange" + from "curry" + from "custard" + from "customs" + from "cyclone" + from "cyprus" + from "czech_republic" + from "dagger" + from "dancer" + from "dancers" + from "dancing_men" + from "dancing_women" + from "dango" + from "dark_sunglasses" + from "dart" + from "dash" + from "date" + from "de" + from "deciduous_tree" + from "deer" + from "denmark" + from "department_store" + from "derelict_house" + from "desert" + from "desert_island" + from "desktop_computer" + from "detective" + from "diamond_shape_with_a_dot_inside" + from "diamonds" + from "disappointed" + from "disappointed_relieved" + from "dizzy" + from "dizzy_face" + from "djibouti" + from "do_not_litter" + from "dog" + from "dog2" + from "dollar" + from "dolls" + from "dolphin" + from "dominica" + from "dominican_republic" + from "door" + from "doughnut" + from "dove" + from "dragon" + from "dragon_face" + from "dress" + from "dromedary_camel" + from "drooling_face" + from "droplet" + from "drum" + from "duck" + from "dvd" + from "e-mail" + from "eagle" + from "ear" + from "ear_of_rice" + from "earth_africa" + from "earth_americas" + from "earth_asia" + from "ecuador" + from "egg" + from "eggplant" + from "egypt" + from "eight" + from "eight_pointed_black_star" + from "eight_spoked_asterisk" + from "el_salvador" + from "electric_plug" + from "elephant" + from "email" + from "end" + from "envelope" + from "envelope_with_arrow" + from "equatorial_guinea" + from "eritrea" + from "es" + from "estonia" + from "ethiopia" + from "eu" + from "euro" + from "european_castle" + from "european_post_office" + from "european_union" + from "evergreen_tree" + from "exclamation" + from "expressionless" + from "eye" + from "eye_speech_bubble" + from "eyeglasses" + from "eyes" + from "face_with_head_bandage" + from "face_with_thermometer" + from "facepunch" + from "factory" + from "falkland_islands" + from "fallen_leaf" + from "family" + from "family_man_boy" + from "family_man_boy_boy" + from "family_man_girl" + from "family_man_girl_boy" + from "family_man_girl_girl" + from "family_man_man_boy" + from "family_man_man_boy_boy" + from "family_man_man_girl" + from "family_man_man_girl_boy" + from "family_man_man_girl_girl" + from "family_man_woman_boy" + from "family_man_woman_boy_boy" + from "family_man_woman_girl" + from "family_man_woman_girl_boy" + from "family_man_woman_girl_girl" + from "family_woman_boy" + from "family_woman_boy_boy" + from "family_woman_girl" + from "family_woman_girl_boy" + from "family_woman_girl_girl" + from "family_woman_woman_boy" + from "family_woman_woman_boy_boy" + from "family_woman_woman_girl" + from "family_woman_woman_girl_boy" + from "family_woman_woman_girl_girl" + from "faroe_islands" + from "fast_forward" + from "fax" + from "fearful" + from "feet" + from "female_detective" + from "ferris_wheel" + from "ferry" + from "field_hockey" + from "fiji" + from "file_cabinet" + from "file_folder" + from "film_projector" + from "film_strip" + from "finland" + from "fire" + from "fire_engine" + from "fireworks" + from "first_quarter_moon" + from "first_quarter_moon_with_face" + from "fish" + from "fish_cake" + from "fishing_pole_and_fish" + from "fist" + from "fist_left" + from "fist_oncoming" + from "fist_raised" + from "fist_right" + from "five" + from "flags" + from "flashlight" + from "fleur_de_lis" + from "flight_arrival" + from "flight_departure" + from "flipper" + from "floppy_disk" + from "flower_playing_cards" + from "flushed" + from "fog" + from "foggy" + from "football" + from "footprints" + from "fork_and_knife" + from "fountain" + from "fountain_pen" + from "four" + from "four_leaf_clover" + from "fox_face" + from "fr" + from "framed_picture" + from "free" + from "french_guiana" + from "french_polynesia" + from "french_southern_territories" + from "fried_egg" + from "fried_shrimp" + from "fries" + from "frog" + from "frowning" + from "frowning_face" + from "frowning_man" + from "frowning_woman" + from "fu" + from "fuelpump" + from "full_moon" + from "full_moon_with_face" + from "funeral_urn" + from "gabon" + from "gambia" + from "game_die" + from "gb" + from "gear" + from "gem" + from "gemini" + from "georgia" + from "ghana" + from "ghost" + from "gibraltar" + from "gift" + from "gift_heart" + from "girl" + from "globe_with_meridians" + from "goal_net" + from "goat" + from "golf" + from "golfing_man" + from "golfing_woman" + from "gorilla" + from "grapes" + from "greece" + from "green_apple" + from "green_book" + from "green_heart" + from "green_salad" + from "greenland" + from "grenada" + from "grey_exclamation" + from "grey_question" + from "grimacing" + from "grin" + from "grinning" + from "guadeloupe" + from "guam" + from "guardsman" + from "guardswoman" + from "guatemala" + from "guernsey" + from "guinea" + from "guinea_bissau" + from "guitar" + from "gun" + from "guyana" + from "haircut" + from "haircut_man" + from "haircut_woman" + from "haiti" + from "hamburger" + from "hammer" + from "hammer_and_pick" + from "hammer_and_wrench" + from "hamster" + from "hand" + from "handbag" + from "handshake" + from "hankey" + from "hash" + from "hatched_chick" + from "hatching_chick" + from "headphones" + from "hear_no_evil" + from "heart" + from "heart_decoration" + from "heart_eyes" + from "heart_eyes_cat" + from "heartbeat" + from "heartpulse" + from "hearts" + from "heavy_check_mark" + from "heavy_division_sign" + from "heavy_dollar_sign" + from "heavy_exclamation_mark" + from "heavy_heart_exclamation" + from "heavy_minus_sign" + from "heavy_multiplication_x" + from "heavy_plus_sign" + from "helicopter" + from "herb" + from "hibiscus" + from "high_brightness" + from "high_heel" + from "hocho" + from "hole" + from "honduras" + from "honey_pot" + from "honeybee" + from "hong_kong" + from "horse" + from "horse_racing" + from "hospital" + from "hot_pepper" + from "hotdog" + from "hotel" + from "hotsprings" + from "hourglass" + from "hourglass_flowing_sand" + from "house" + from "house_with_garden" + from "houses" + from "hugs" + from "hungary" + from "hushed" + from "ice_cream" + from "ice_hockey" + from "ice_skate" + from "icecream" + from "iceland" + from "id" + from "ideograph_advantage" + from "imp" + from "inbox_tray" + from "incoming_envelope" + from "india" + from "indonesia" + from "information_desk_person" + from "information_source" + from "innocent" + from "interrobang" + from "iphone" + from "iran" + from "iraq" + from "ireland" + from "isle_of_man" + from "israel" + from "it" + from "izakaya_lantern" + from "jack_o_lantern" + from "jamaica" + from "japan" + from "japanese_castle" + from "japanese_goblin" + from "japanese_ogre" + from "jeans" + from "jersey" + from "jordan" + from "joy" + from "joy_cat" + from "joystick" + from "jp" + from "kaaba" + from "kazakhstan" + from "kenya" + from "key" + from "keyboard" + from "keycap_ten" + from "kick_scooter" + from "kimono" + from "kiribati" + from "kiss" + from "kissing" + from "kissing_cat" + from "kissing_closed_eyes" + from "kissing_heart" + from "kissing_smiling_eyes" + from "kiwi_fruit" + from "knife" + from "koala" + from "koko" + from "kosovo" + from "kr" + from "kuwait" + from "kyrgyzstan" + from "label" + from "lantern" + from "laos" + from "large_blue_circle" + from "large_blue_diamond" + from "large_orange_diamond" + from "last_quarter_moon" + from "last_quarter_moon_with_face" + from "latin_cross" + from "latvia" + from "laughing" + from "leaves" + from "lebanon" + from "ledger" + from "left_luggage" + from "left_right_arrow" + from "leftwards_arrow_with_hook" + from "lemon" + from "leo" + from "leopard" + from "lesotho" + from "level_slider" + from "liberia" + from "libra" + from "libya" + from "liechtenstein" + from "light_rail" + from "link" + from "lion" + from "lips" + from "lipstick" + from "lithuania" + from "lizard" + from "lock" + from "lock_with_ink_pen" + from "lollipop" + from "loop" + from "loud_sound" + from "loudspeaker" + from "love_hotel" + from "love_letter" + from "low_brightness" + from "luxembourg" + from "lying_face" + from "m" + from "macau" + from "macedonia" + from "madagascar" + from "mag" + from "mag_right" + from "mahjong" + from "mailbox" + from "mailbox_closed" + from "mailbox_with_mail" + from "mailbox_with_no_mail" + from "malawi" + from "malaysia" + from "maldives" + from "male_detective" + from "mali" + from "malta" + from "man" + from "man_artist" + from "man_astronaut" + from "man_cartwheeling" + from "man_cook" + from "man_dancing" + from "man_facepalming" + from "man_factory_worker" + from "man_farmer" + from "man_firefighter" + from "man_health_worker" + from "man_in_tuxedo" + from "man_judge" + from "man_juggling" + from "man_mechanic" + from "man_office_worker" + from "man_pilot" + from "man_playing_handball" + from "man_playing_water_polo" + from "man_scientist" + from "man_shrugging" + from "man_singer" + from "man_student" + from "man_teacher" + from "man_technologist" + from "man_with_gua_pi_mao" + from "man_with_turban" + from "mandarin" + from "mans_shoe" + from "mantelpiece_clock" + from "maple_leaf" + from "marshall_islands" + from "martial_arts_uniform" + from "martinique" + from "mask" + from "massage" + from "massage_man" + from "massage_woman" + from "mauritania" + from "mauritius" + from "mayotte" + from "meat_on_bone" + from "medal_military" + from "medal_sports" + from "mega" + from "melon" + from "memo" + from "men_wrestling" + from "menorah" + from "mens" + from "metal" + from "metro" + from "mexico" + from "micronesia" + from "microphone" + from "microscope" + from "middle_finger" + from "milk_glass" + from "milky_way" + from "minibus" + from "minidisc" + from "mobile_phone_off" + from "moldova" + from "monaco" + from "money_mouth_face" + from "money_with_wings" + from "moneybag" + from "mongolia" + from "monkey" + from "monkey_face" + from "monorail" + from "montenegro" + from "montserrat" + from "moon" + from "morocco" + from "mortar_board" + from "mosque" + from "motor_boat" + from "motor_scooter" + from "motorcycle" + from "motorway" + from "mount_fuji" + from "mountain" + from "mountain_bicyclist" + from "mountain_biking_man" + from "mountain_biking_woman" + from "mountain_cableway" + from "mountain_railway" + from "mountain_snow" + from "mouse" + from "mouse2" + from "movie_camera" + from "moyai" + from "mozambique" + from "mrs_claus" + from "muscle" + from "mushroom" + from "musical_keyboard" + from "musical_note" + from "musical_score" + from "mute" + from "myanmar" + from "nail_care" + from "name_badge" + from "namibia" + from "national_park" + from "nauru" + from "nauseated_face" + from "necktie" + from "negative_squared_cross_mark" + from "nepal" + from "nerd_face" + from "netherlands" + from "neutral_face" + from "new" + from "new_caledonia" + from "new_moon" + from "new_moon_with_face" + from "new_zealand" + from "newspaper" + from "newspaper_roll" + from "next_track_button" + from "ng" + from "ng_man" + from "ng_woman" + from "nicaragua" + from "niger" + from "nigeria" + from "night_with_stars" + from "nine" + from "niue" + from "no_bell" + from "no_bicycles" + from "no_entry" + from "no_entry_sign" + from "no_good" + from "no_good_man" + from "no_good_woman" + from "no_mobile_phones" + from "no_mouth" + from "no_pedestrians" + from "no_smoking" + from "non-potable_water" + from "norfolk_island" + from "north_korea" + from "northern_mariana_islands" + from "norway" + from "nose" + from "notebook" + from "notebook_with_decorative_cover" + from "notes" + from "nut_and_bolt" + from "o" + from "o2" + from "ocean" + from "octopus" + from "oden" + from "office" + from "oil_drum" + from "ok" + from "ok_hand" + from "ok_man" + from "ok_woman" + from "old_key" + from "older_man" + from "older_woman" + from "om" + from "oman" + from "on" + from "oncoming_automobile" + from "oncoming_bus" + from "oncoming_police_car" + from "oncoming_taxi" + from "one" + from "open_book" + from "open_file_folder" + from "open_hands" + from "open_mouth" + from "open_umbrella" + from "ophiuchus" + from "orange" + from "orange_book" + from "orthodox_cross" + from "outbox_tray" + from "owl" + from "ox" + from "package" + from "page_facing_up" + from "page_with_curl" + from "pager" + from "paintbrush" + from "pakistan" + from "palau" + from "palestinian_territories" + from "palm_tree" + from "panama" + from "pancakes" + from "panda_face" + from "paperclip" + from "paperclips" + from "papua_new_guinea" + from "paraguay" + from "parasol_on_ground" + from "parking" + from "part_alternation_mark" + from "partly_sunny" + from "passenger_ship" + from "passport_control" + from "pause_button" + from "paw_prints" + from "peace_symbol" + from "peach" + from "peanuts" + from "pear" + from "pen" + from "pencil" + from "pencil2" + from "penguin" + from "pensive" + from "performing_arts" + from "persevere" + from "person_fencing" + from "person_frowning" + from "person_with_blond_hair" + from "person_with_pouting_face" + from "peru" + from "philippines" + from "phone" + from "pick" + from "pig" + from "pig2" + from "pig_nose" + from "pill" + from "pineapple" + from "ping_pong" + from "pisces" + from "pitcairn_islands" + from "pizza" + from "place_of_worship" + from "plate_with_cutlery" + from "play_or_pause_button" + from "point_down" + from "point_left" + from "point_right" + from "point_up" + from "point_up_2" + from "poland" + from "police_car" + from "policeman" + from "policewoman" + from "poodle" + from "poop" + from "popcorn" + from "portugal" + from "post_office" + from "postal_horn" + from "postbox" + from "potable_water" + from "potato" + from "pouch" + from "poultry_leg" + from "pound" + from "pout" + from "pouting_cat" + from "pouting_man" + from "pouting_woman" + from "pray" + from "prayer_beads" + from "pregnant_woman" + from "previous_track_button" + from "prince" + from "princess" + from "printer" + from "puerto_rico" + from "punch" + from "purple_heart" + from "purse" + from "pushpin" + from "put_litter_in_its_place" + from "qatar" + from "question" + from "rabbit" + from "rabbit2" + from "racehorse" + from "racing_car" + from "radio" + from "radio_button" + from "radioactive" + from "rage" + from "railway_car" + from "railway_track" + from "rainbow" + from "rainbow_flag" + from "raised_back_of_hand" + from "raised_hand" + from "raised_hand_with_fingers_splayed" + from "raised_hands" + from "raising_hand" + from "raising_hand_man" + from "raising_hand_woman" + from "ram" + from "ramen" + from "rat" + from "record_button" + from "recycle" + from "red_car" + from "red_circle" + from "registered" + from "relaxed" + from "relieved" + from "reminder_ribbon" + from "repeat" + from "repeat_one" + from "rescue_worker_helmet" + from "restroom" + from "reunion" + from "revolving_hearts" + from "rewind" + from "rhinoceros" + from "ribbon" + from "rice" + from "rice_ball" + from "rice_cracker" + from "rice_scene" + from "right_anger_bubble" + from "ring" + from "robot" + from "rocket" + from "rofl" + from "roll_eyes" + from "roller_coaster" + from "romania" + from "rooster" + from "rose" + from "rosette" + from "rotating_light" + from "round_pushpin" + from "rowboat" + from "rowing_man" + from "rowing_woman" + from "ru" + from "rugby_football" + from "runner" + from "running" + from "running_man" + from "running_shirt_with_sash" + from "running_woman" + from "rwanda" + from "sa" + from "sagittarius" + from "sailboat" + from "sake" + from "samoa" + from "san_marino" + from "sandal" + from "santa" + from "sao_tome_principe" + from "satellite" + from "satisfied" + from "saudi_arabia" + from "saxophone" + from "school" + from "school_satchel" + from "scissors" + from "scorpion" + from "scorpius" + from "scream" + from "scream_cat" + from "scroll" + from "seat" + from "secret" + from "see_no_evil" + from "seedling" + from "selfie" + from "senegal" + from "serbia" + from "seven" + from "seychelles" + from "shallow_pan_of_food" + from "shamrock" + from "shark" + from "shaved_ice" + from "sheep" + from "shell" + from "shield" + from "shinto_shrine" + from "ship" + from "shirt" + from "shit" + from "shoe" + from "shopping" + from "shopping_cart" + from "shower" + from "shrimp" + from "sierra_leone" + from "signal_strength" + from "singapore" + from "sint_maarten" + from "six" + from "six_pointed_star" + from "ski" + from "skier" + from "skull" + from "skull_and_crossbones" + from "sleeping" + from "sleeping_bed" + from "sleepy" + from "slightly_frowning_face" + from "slightly_smiling_face" + from "slot_machine" + from "slovakia" + from "slovenia" + from "small_airplane" + from "small_blue_diamond" + from "small_orange_diamond" + from "small_red_triangle" + from "small_red_triangle_down" + from "smile" + from "smile_cat" + from "smiley" + from "smiley_cat" + from "smiling_imp" + from "smirk" + from "smirk_cat" + from "smoking" + from "snail" + from "snake" + from "sneezing_face" + from "snowboarder" + from "snowflake" + from "snowman" + from "snowman_with_snow" + from "sob" + from "soccer" + from "solomon_islands" + from "somalia" + from "soon" + from "sos" + from "sound" + from "south_africa" + from "south_georgia_south_sandwich_islands" + from "south_sudan" + from "space_invader" + from "spades" + from "spaghetti" + from "sparkle" + from "sparkler" + from "sparkles" + from "sparkling_heart" + from "speak_no_evil" + from "speaker" + from "speaking_head" + from "speech_balloon" + from "speedboat" + from "spider" + from "spider_web" + from "spiral_calendar" + from "spiral_notepad" + from "spoon" + from "squid" + from "sri_lanka" + from "st_barthelemy" + from "st_helena" + from "st_kitts_nevis" + from "st_lucia" + from "st_pierre_miquelon" + from "st_vincent_grenadines" + from "stadium" + from "star" + from "star2" + from "star_and_crescent" + from "star_of_david" + from "stars" + from "station" + from "statue_of_liberty" + from "steam_locomotive" + from "stew" + from "stop_button" + from "stop_sign" + from "stopwatch" + from "straight_ruler" + from "strawberry" + from "stuck_out_tongue" + from "stuck_out_tongue_closed_eyes" + from "stuck_out_tongue_winking_eye" + from "studio_microphone" + from "stuffed_flatbread" + from "sudan" + from "sun_behind_large_cloud" + from "sun_behind_rain_cloud" + from "sun_behind_small_cloud" + from "sun_with_face" + from "sunflower" + from "sunglasses" + from "sunny" + from "sunrise" + from "sunrise_over_mountains" + from "surfer" + from "surfing_man" + from "surfing_woman" + from "suriname" + from "sushi" + from "suspension_railway" + from "swaziland" + from "sweat" + from "sweat_drops" + from "sweat_smile" + from "sweden" + from "sweet_potato" + from "swimmer" + from "swimming_man" + from "swimming_woman" + from "switzerland" + from "symbols" + from "synagogue" + from "syria" + from "syringe" + from "taco" + from "tada" + from "taiwan" + from "tajikistan" + from "tanabata_tree" + from "tangerine" + from "tanzania" + from "taurus" + from "taxi" + from "tea" + from "telephone" + from "telephone_receiver" + from "telescope" + from "tennis" + from "tent" + from "thailand" + from "thermometer" + from "thinking" + from "thought_balloon" + from "three" + from "thumbsdown" + from "thumbsup" + from "ticket" + from "tickets" + from "tiger" + from "tiger2" + from "timer_clock" + from "timor_leste" + from "tipping_hand_man" + from "tipping_hand_woman" + from "tired_face" + from "tm" + from "togo" + from "toilet" + from "tokelau" + from "tokyo_tower" + from "tomato" + from "tonga" + from "tongue" + from "top" + from "tophat" + from "tornado" + from "tr" + from "trackball" + from "tractor" + from "traffic_light" + from "train" + from "train2" + from "tram" + from "triangular_flag_on_post" + from "triangular_ruler" + from "trident" + from "trinidad_tobago" + from "triumph" + from "trolleybus" + from "trophy" + from "tropical_drink" + from "tropical_fish" + from "truck" + from "trumpet" + from "tshirt" + from "tulip" + from "tumbler_glass" + from "tunisia" + from "turkey" + from "turkmenistan" + from "turks_caicos_islands" + from "turtle" + from "tuvalu" + from "tv" + from "twisted_rightwards_arrows" + from "two" + from "two_hearts" + from "two_men_holding_hands" + from "two_women_holding_hands" + from "u5272" + from "u5408" + from "u55b6" + from "u6307" + from "u6708" + from "u6709" + from "u6e80" + from "u7121" + from "u7533" + from "u7981" + from "u7a7a" + from "uganda" + from "uk" + from "ukraine" + from "umbrella" + from "unamused" + from "underage" + from "unicorn" + from "united_arab_emirates" + from "unlock" + from "up" + from "upside_down_face" + from "uruguay" + from "us" + from "us_virgin_islands" + from "uzbekistan" + from "v" + from "vanuatu" + from "vatican_city" + from "venezuela" + from "vertical_traffic_light" + from "vhs" + from "vibration_mode" + from "video_camera" + from "video_game" + from "vietnam" + from "violin" + from "virgo" + from "volcano" + from "volleyball" + from "vs" + from "vulcan_salute" + from "walking" + from "walking_man" + from "walking_woman" + from "wallis_futuna" + from "waning_crescent_moon" + from "waning_gibbous_moon" + from "warning" + from "wastebasket" + from "watch" + from "water_buffalo" + from "watermelon" + from "wave" + from "wavy_dash" + from "waxing_crescent_moon" + from "waxing_gibbous_moon" + from "wc" + from "weary" + from "wedding" + from "weight_lifting_man" + from "weight_lifting_woman" + from "western_sahara" + from "whale" + from "whale2" + from "wheel_of_dharma" + from "wheelchair" + from "white_check_mark" + from "white_circle" + from "white_flag" + from "white_flower" + from "white_large_square" + from "white_medium_small_square" + from "white_medium_square" + from "white_small_square" + from "white_square_button" + from "wilted_flower" + from "wind_chime" + from "wind_face" + from "wine_glass" + from "wink" + from "wolf" + from "woman" + from "woman_artist" + from "woman_astronaut" + from "woman_cartwheeling" + from "woman_cook" + from "woman_facepalming" + from "woman_factory_worker" + from "woman_farmer" + from "woman_firefighter" + from "woman_health_worker" + from "woman_judge" + from "woman_juggling" + from "woman_mechanic" + from "woman_office_worker" + from "woman_pilot" + from "woman_playing_handball" + from "woman_playing_water_polo" + from "woman_scientist" + from "woman_shrugging" + from "woman_singer" + from "woman_student" + from "woman_teacher" + from "woman_technologist" + from "woman_with_turban" + from "womans_clothes" + from "womans_hat" + from "women_wrestling" + from "womens" + from "world_map" + from "worried" + from "wrench" + from "writing_hand" + from "x" + from "yellow_heart" + from "yemen" + from "yen" + from "yin_yang" + from "yum" + from "zambia" + from "zap" + from "zero" + from "zimbabwe" + from "zipper_mouth_face" + from "zzz" + + + + diff --git a/tests/upstream-test-suite/076_emojis.cpp b/tests/upstream-test-suite/076_emojis.cpp new file mode 100644 index 0000000..0526ebe --- /dev/null +++ b/tests/upstream-test-suite/076_emojis.cpp @@ -0,0 +1,1493 @@ +// objective: test all supported emoji characters +// check: indexpage.xml +/** \mainpage Emoji test + + @emoji +1 @emoji :+1: from "+1"
+ @emoji -1 @emoji :-1: from "-1"
+ @emoji 100 @emoji :100: from "100"
+ @emoji 1234 @emoji :1234: from "1234"
+ @emoji 1st_place_medal @emoji :1st_place_medal: from "1st_place_medal"
+ @emoji 2nd_place_medal @emoji :2nd_place_medal: from "2nd_place_medal"
+ @emoji 3rd_place_medal @emoji :3rd_place_medal: from "3rd_place_medal"
+ @emoji 8ball @emoji :8ball: from "8ball"
+ @emoji a @emoji :a: from "a"
+ @emoji ab @emoji :ab: from "ab"
+ @emoji abc @emoji :abc: from "abc"
+ @emoji abcd @emoji :abcd: from "abcd"
+ @emoji accept @emoji :accept: from "accept"
+ @emoji aerial_tramway @emoji :aerial_tramway: from "aerial_tramway"
+ @emoji afghanistan @emoji :afghanistan: from "afghanistan"
+ @emoji airplane @emoji :airplane: from "airplane"
+ @emoji aland_islands @emoji :aland_islands: from "aland_islands"
+ @emoji alarm_clock @emoji :alarm_clock: from "alarm_clock"
+ @emoji albania @emoji :albania: from "albania"
+ @emoji alembic @emoji :alembic: from "alembic"
+ @emoji algeria @emoji :algeria: from "algeria"
+ @emoji alien @emoji :alien: from "alien"
+ @emoji ambulance @emoji :ambulance: from "ambulance"
+ @emoji american_samoa @emoji :american_samoa: from "american_samoa"
+ @emoji amphora @emoji :amphora: from "amphora"
+ @emoji anchor @emoji :anchor: from "anchor"
+ @emoji andorra @emoji :andorra: from "andorra"
+ @emoji angel @emoji :angel: from "angel"
+ @emoji anger @emoji :anger: from "anger"
+ @emoji angola @emoji :angola: from "angola"
+ @emoji angry @emoji :angry: from "angry"
+ @emoji anguilla @emoji :anguilla: from "anguilla"
+ @emoji anguished @emoji :anguished: from "anguished"
+ @emoji ant @emoji :ant: from "ant"
+ @emoji antarctica @emoji :antarctica: from "antarctica"
+ @emoji antigua_barbuda @emoji :antigua_barbuda: from "antigua_barbuda"
+ @emoji apple @emoji :apple: from "apple"
+ @emoji aquarius @emoji :aquarius: from "aquarius"
+ @emoji argentina @emoji :argentina: from "argentina"
+ @emoji aries @emoji :aries: from "aries"
+ @emoji armenia @emoji :armenia: from "armenia"
+ @emoji arrow_backward @emoji :arrow_backward: from "arrow_backward"
+ @emoji arrow_double_down @emoji :arrow_double_down: from "arrow_double_down"
+ @emoji arrow_double_up @emoji :arrow_double_up: from "arrow_double_up"
+ @emoji arrow_down @emoji :arrow_down: from "arrow_down"
+ @emoji arrow_down_small @emoji :arrow_down_small: from "arrow_down_small"
+ @emoji arrow_forward @emoji :arrow_forward: from "arrow_forward"
+ @emoji arrow_heading_down @emoji :arrow_heading_down: from "arrow_heading_down"
+ @emoji arrow_heading_up @emoji :arrow_heading_up: from "arrow_heading_up"
+ @emoji arrow_left @emoji :arrow_left: from "arrow_left"
+ @emoji arrow_lower_left @emoji :arrow_lower_left: from "arrow_lower_left"
+ @emoji arrow_lower_right @emoji :arrow_lower_right: from "arrow_lower_right"
+ @emoji arrow_right @emoji :arrow_right: from "arrow_right"
+ @emoji arrow_right_hook @emoji :arrow_right_hook: from "arrow_right_hook"
+ @emoji arrow_up @emoji :arrow_up: from "arrow_up"
+ @emoji arrow_up_down @emoji :arrow_up_down: from "arrow_up_down"
+ @emoji arrow_up_small @emoji :arrow_up_small: from "arrow_up_small"
+ @emoji arrow_upper_left @emoji :arrow_upper_left: from "arrow_upper_left"
+ @emoji arrow_upper_right @emoji :arrow_upper_right: from "arrow_upper_right"
+ @emoji arrows_clockwise @emoji :arrows_clockwise: from "arrows_clockwise"
+ @emoji arrows_counterclockwise @emoji :arrows_counterclockwise: from "arrows_counterclockwise"
+ @emoji art @emoji :art: from "art"
+ @emoji articulated_lorry @emoji :articulated_lorry: from "articulated_lorry"
+ @emoji artificial_satellite @emoji :artificial_satellite: from "artificial_satellite"
+ @emoji aruba @emoji :aruba: from "aruba"
+ @emoji asterisk @emoji :asterisk: from "asterisk"
+ @emoji astonished @emoji :astonished: from "astonished"
+ @emoji athletic_shoe @emoji :athletic_shoe: from "athletic_shoe"
+ @emoji atm @emoji :atm: from "atm"
+ @emoji atom_symbol @emoji :atom_symbol: from "atom_symbol"
+ @emoji australia @emoji :australia: from "australia"
+ @emoji austria @emoji :austria: from "austria"
+ @emoji avocado @emoji :avocado: from "avocado"
+ @emoji azerbaijan @emoji :azerbaijan: from "azerbaijan"
+ @emoji b @emoji :b: from "b"
+ @emoji baby @emoji :baby: from "baby"
+ @emoji baby_bottle @emoji :baby_bottle: from "baby_bottle"
+ @emoji baby_chick @emoji :baby_chick: from "baby_chick"
+ @emoji baby_symbol @emoji :baby_symbol: from "baby_symbol"
+ @emoji back @emoji :back: from "back"
+ @emoji bacon @emoji :bacon: from "bacon"
+ @emoji badminton @emoji :badminton: from "badminton"
+ @emoji baggage_claim @emoji :baggage_claim: from "baggage_claim"
+ @emoji baguette_bread @emoji :baguette_bread: from "baguette_bread"
+ @emoji bahamas @emoji :bahamas: from "bahamas"
+ @emoji bahrain @emoji :bahrain: from "bahrain"
+ @emoji balance_scale @emoji :balance_scale: from "balance_scale"
+ @emoji balloon @emoji :balloon: from "balloon"
+ @emoji ballot_box @emoji :ballot_box: from "ballot_box"
+ @emoji ballot_box_with_check @emoji :ballot_box_with_check: from "ballot_box_with_check"
+ @emoji bamboo @emoji :bamboo: from "bamboo"
+ @emoji banana @emoji :banana: from "banana"
+ @emoji bangbang @emoji :bangbang: from "bangbang"
+ @emoji bangladesh @emoji :bangladesh: from "bangladesh"
+ @emoji bank @emoji :bank: from "bank"
+ @emoji bar_chart @emoji :bar_chart: from "bar_chart"
+ @emoji barbados @emoji :barbados: from "barbados"
+ @emoji barber @emoji :barber: from "barber"
+ @emoji baseball @emoji :baseball: from "baseball"
+ @emoji basketball @emoji :basketball: from "basketball"
+ @emoji basketball_man @emoji :basketball_man: from "basketball_man"
+ @emoji basketball_woman @emoji :basketball_woman: from "basketball_woman"
+ @emoji bat @emoji :bat: from "bat"
+ @emoji bath @emoji :bath: from "bath"
+ @emoji bathtub @emoji :bathtub: from "bathtub"
+ @emoji battery @emoji :battery: from "battery"
+ @emoji beach_umbrella @emoji :beach_umbrella: from "beach_umbrella"
+ @emoji bear @emoji :bear: from "bear"
+ @emoji bed @emoji :bed: from "bed"
+ @emoji bee @emoji :bee: from "bee"
+ @emoji beer @emoji :beer: from "beer"
+ @emoji beers @emoji :beers: from "beers"
+ @emoji beetle @emoji :beetle: from "beetle"
+ @emoji beginner @emoji :beginner: from "beginner"
+ @emoji belarus @emoji :belarus: from "belarus"
+ @emoji belgium @emoji :belgium: from "belgium"
+ @emoji belize @emoji :belize: from "belize"
+ @emoji bell @emoji :bell: from "bell"
+ @emoji bellhop_bell @emoji :bellhop_bell: from "bellhop_bell"
+ @emoji benin @emoji :benin: from "benin"
+ @emoji bento @emoji :bento: from "bento"
+ @emoji bermuda @emoji :bermuda: from "bermuda"
+ @emoji bhutan @emoji :bhutan: from "bhutan"
+ @emoji bicyclist @emoji :bicyclist: from "bicyclist"
+ @emoji bike @emoji :bike: from "bike"
+ @emoji biking_man @emoji :biking_man: from "biking_man"
+ @emoji biking_woman @emoji :biking_woman: from "biking_woman"
+ @emoji bikini @emoji :bikini: from "bikini"
+ @emoji biohazard @emoji :biohazard: from "biohazard"
+ @emoji bird @emoji :bird: from "bird"
+ @emoji birthday @emoji :birthday: from "birthday"
+ @emoji black_circle @emoji :black_circle: from "black_circle"
+ @emoji black_flag @emoji :black_flag: from "black_flag"
+ @emoji black_heart @emoji :black_heart: from "black_heart"
+ @emoji black_joker @emoji :black_joker: from "black_joker"
+ @emoji black_large_square @emoji :black_large_square: from "black_large_square"
+ @emoji black_medium_small_square @emoji :black_medium_small_square: from "black_medium_small_square"
+ @emoji black_medium_square @emoji :black_medium_square: from "black_medium_square"
+ @emoji black_nib @emoji :black_nib: from "black_nib"
+ @emoji black_small_square @emoji :black_small_square: from "black_small_square"
+ @emoji black_square_button @emoji :black_square_button: from "black_square_button"
+ @emoji blonde_man @emoji :blonde_man: from "blonde_man"
+ @emoji blonde_woman @emoji :blonde_woman: from "blonde_woman"
+ @emoji blossom @emoji :blossom: from "blossom"
+ @emoji blowfish @emoji :blowfish: from "blowfish"
+ @emoji blue_book @emoji :blue_book: from "blue_book"
+ @emoji blue_car @emoji :blue_car: from "blue_car"
+ @emoji blue_heart @emoji :blue_heart: from "blue_heart"
+ @emoji blush @emoji :blush: from "blush"
+ @emoji boar @emoji :boar: from "boar"
+ @emoji boat @emoji :boat: from "boat"
+ @emoji bolivia @emoji :bolivia: from "bolivia"
+ @emoji bomb @emoji :bomb: from "bomb"
+ @emoji book @emoji :book: from "book"
+ @emoji bookmark @emoji :bookmark: from "bookmark"
+ @emoji bookmark_tabs @emoji :bookmark_tabs: from "bookmark_tabs"
+ @emoji books @emoji :books: from "books"
+ @emoji boom @emoji :boom: from "boom"
+ @emoji boot @emoji :boot: from "boot"
+ @emoji bosnia_herzegovina @emoji :bosnia_herzegovina: from "bosnia_herzegovina"
+ @emoji botswana @emoji :botswana: from "botswana"
+ @emoji bouquet @emoji :bouquet: from "bouquet"
+ @emoji bow @emoji :bow: from "bow"
+ @emoji bow_and_arrow @emoji :bow_and_arrow: from "bow_and_arrow"
+ @emoji bowing_man @emoji :bowing_man: from "bowing_man"
+ @emoji bowing_woman @emoji :bowing_woman: from "bowing_woman"
+ @emoji bowling @emoji :bowling: from "bowling"
+ @emoji boxing_glove @emoji :boxing_glove: from "boxing_glove"
+ @emoji boy @emoji :boy: from "boy"
+ @emoji brazil @emoji :brazil: from "brazil"
+ @emoji bread @emoji :bread: from "bread"
+ @emoji bride_with_veil @emoji :bride_with_veil: from "bride_with_veil"
+ @emoji bridge_at_night @emoji :bridge_at_night: from "bridge_at_night"
+ @emoji briefcase @emoji :briefcase: from "briefcase"
+ @emoji british_indian_ocean_territory @emoji :british_indian_ocean_territory: from "british_indian_ocean_territory"
+ @emoji british_virgin_islands @emoji :british_virgin_islands: from "british_virgin_islands"
+ @emoji broken_heart @emoji :broken_heart: from "broken_heart"
+ @emoji brunei @emoji :brunei: from "brunei"
+ @emoji bug @emoji :bug: from "bug"
+ @emoji building_construction @emoji :building_construction: from "building_construction"
+ @emoji bulb @emoji :bulb: from "bulb"
+ @emoji bulgaria @emoji :bulgaria: from "bulgaria"
+ @emoji bullettrain_front @emoji :bullettrain_front: from "bullettrain_front"
+ @emoji bullettrain_side @emoji :bullettrain_side: from "bullettrain_side"
+ @emoji burkina_faso @emoji :burkina_faso: from "burkina_faso"
+ @emoji burrito @emoji :burrito: from "burrito"
+ @emoji burundi @emoji :burundi: from "burundi"
+ @emoji bus @emoji :bus: from "bus"
+ @emoji business_suit_levitating @emoji :business_suit_levitating: from "business_suit_levitating"
+ @emoji busstop @emoji :busstop: from "busstop"
+ @emoji bust_in_silhouette @emoji :bust_in_silhouette: from "bust_in_silhouette"
+ @emoji busts_in_silhouette @emoji :busts_in_silhouette: from "busts_in_silhouette"
+ @emoji butterfly @emoji :butterfly: from "butterfly"
+ @emoji cactus @emoji :cactus: from "cactus"
+ @emoji cake @emoji :cake: from "cake"
+ @emoji calendar @emoji :calendar: from "calendar"
+ @emoji call_me_hand @emoji :call_me_hand: from "call_me_hand"
+ @emoji calling @emoji :calling: from "calling"
+ @emoji cambodia @emoji :cambodia: from "cambodia"
+ @emoji camel @emoji :camel: from "camel"
+ @emoji camera @emoji :camera: from "camera"
+ @emoji camera_flash @emoji :camera_flash: from "camera_flash"
+ @emoji cameroon @emoji :cameroon: from "cameroon"
+ @emoji camping @emoji :camping: from "camping"
+ @emoji canada @emoji :canada: from "canada"
+ @emoji canary_islands @emoji :canary_islands: from "canary_islands"
+ @emoji cancer @emoji :cancer: from "cancer"
+ @emoji candle @emoji :candle: from "candle"
+ @emoji candy @emoji :candy: from "candy"
+ @emoji canoe @emoji :canoe: from "canoe"
+ @emoji cape_verde @emoji :cape_verde: from "cape_verde"
+ @emoji capital_abcd @emoji :capital_abcd: from "capital_abcd"
+ @emoji capricorn @emoji :capricorn: from "capricorn"
+ @emoji car @emoji :car: from "car"
+ @emoji card_file_box @emoji :card_file_box: from "card_file_box"
+ @emoji card_index @emoji :card_index: from "card_index"
+ @emoji card_index_dividers @emoji :card_index_dividers: from "card_index_dividers"
+ @emoji caribbean_netherlands @emoji :caribbean_netherlands: from "caribbean_netherlands"
+ @emoji carousel_horse @emoji :carousel_horse: from "carousel_horse"
+ @emoji carrot @emoji :carrot: from "carrot"
+ @emoji cat @emoji :cat: from "cat"
+ @emoji cat2 @emoji :cat2: from "cat2"
+ @emoji cayman_islands @emoji :cayman_islands: from "cayman_islands"
+ @emoji cd @emoji :cd: from "cd"
+ @emoji central_african_republic @emoji :central_african_republic: from "central_african_republic"
+ @emoji chad @emoji :chad: from "chad"
+ @emoji chains @emoji :chains: from "chains"
+ @emoji champagne @emoji :champagne: from "champagne"
+ @emoji chart @emoji :chart: from "chart"
+ @emoji chart_with_downwards_trend @emoji :chart_with_downwards_trend: from "chart_with_downwards_trend"
+ @emoji chart_with_upwards_trend @emoji :chart_with_upwards_trend: from "chart_with_upwards_trend"
+ @emoji checkered_flag @emoji :checkered_flag: from "checkered_flag"
+ @emoji cheese @emoji :cheese: from "cheese"
+ @emoji cherries @emoji :cherries: from "cherries"
+ @emoji cherry_blossom @emoji :cherry_blossom: from "cherry_blossom"
+ @emoji chestnut @emoji :chestnut: from "chestnut"
+ @emoji chicken @emoji :chicken: from "chicken"
+ @emoji children_crossing @emoji :children_crossing: from "children_crossing"
+ @emoji chile @emoji :chile: from "chile"
+ @emoji chipmunk @emoji :chipmunk: from "chipmunk"
+ @emoji chocolate_bar @emoji :chocolate_bar: from "chocolate_bar"
+ @emoji christmas_island @emoji :christmas_island: from "christmas_island"
+ @emoji christmas_tree @emoji :christmas_tree: from "christmas_tree"
+ @emoji church @emoji :church: from "church"
+ @emoji cinema @emoji :cinema: from "cinema"
+ @emoji circus_tent @emoji :circus_tent: from "circus_tent"
+ @emoji city_sunrise @emoji :city_sunrise: from "city_sunrise"
+ @emoji city_sunset @emoji :city_sunset: from "city_sunset"
+ @emoji cityscape @emoji :cityscape: from "cityscape"
+ @emoji cl @emoji :cl: from "cl"
+ @emoji clamp @emoji :clamp: from "clamp"
+ @emoji clap @emoji :clap: from "clap"
+ @emoji clapper @emoji :clapper: from "clapper"
+ @emoji classical_building @emoji :classical_building: from "classical_building"
+ @emoji clinking_glasses @emoji :clinking_glasses: from "clinking_glasses"
+ @emoji clipboard @emoji :clipboard: from "clipboard"
+ @emoji clock1 @emoji :clock1: from "clock1"
+ @emoji clock10 @emoji :clock10: from "clock10"
+ @emoji clock1030 @emoji :clock1030: from "clock1030"
+ @emoji clock11 @emoji :clock11: from "clock11"
+ @emoji clock1130 @emoji :clock1130: from "clock1130"
+ @emoji clock12 @emoji :clock12: from "clock12"
+ @emoji clock1230 @emoji :clock1230: from "clock1230"
+ @emoji clock130 @emoji :clock130: from "clock130"
+ @emoji clock2 @emoji :clock2: from "clock2"
+ @emoji clock230 @emoji :clock230: from "clock230"
+ @emoji clock3 @emoji :clock3: from "clock3"
+ @emoji clock330 @emoji :clock330: from "clock330"
+ @emoji clock4 @emoji :clock4: from "clock4"
+ @emoji clock430 @emoji :clock430: from "clock430"
+ @emoji clock5 @emoji :clock5: from "clock5"
+ @emoji clock530 @emoji :clock530: from "clock530"
+ @emoji clock6 @emoji :clock6: from "clock6"
+ @emoji clock630 @emoji :clock630: from "clock630"
+ @emoji clock7 @emoji :clock7: from "clock7"
+ @emoji clock730 @emoji :clock730: from "clock730"
+ @emoji clock8 @emoji :clock8: from "clock8"
+ @emoji clock830 @emoji :clock830: from "clock830"
+ @emoji clock9 @emoji :clock9: from "clock9"
+ @emoji clock930 @emoji :clock930: from "clock930"
+ @emoji closed_book @emoji :closed_book: from "closed_book"
+ @emoji closed_lock_with_key @emoji :closed_lock_with_key: from "closed_lock_with_key"
+ @emoji closed_umbrella @emoji :closed_umbrella: from "closed_umbrella"
+ @emoji cloud @emoji :cloud: from "cloud"
+ @emoji cloud_with_lightning @emoji :cloud_with_lightning: from "cloud_with_lightning"
+ @emoji cloud_with_lightning_and_rain @emoji :cloud_with_lightning_and_rain: from "cloud_with_lightning_and_rain"
+ @emoji cloud_with_rain @emoji :cloud_with_rain: from "cloud_with_rain"
+ @emoji cloud_with_snow @emoji :cloud_with_snow: from "cloud_with_snow"
+ @emoji clown_face @emoji :clown_face: from "clown_face"
+ @emoji clubs @emoji :clubs: from "clubs"
+ @emoji cn @emoji :cn: from "cn"
+ @emoji cocktail @emoji :cocktail: from "cocktail"
+ @emoji cocos_islands @emoji :cocos_islands: from "cocos_islands"
+ @emoji coffee @emoji :coffee: from "coffee"
+ @emoji coffin @emoji :coffin: from "coffin"
+ @emoji cold_sweat @emoji :cold_sweat: from "cold_sweat"
+ @emoji collision @emoji :collision: from "collision"
+ @emoji colombia @emoji :colombia: from "colombia"
+ @emoji comet @emoji :comet: from "comet"
+ @emoji comoros @emoji :comoros: from "comoros"
+ @emoji computer @emoji :computer: from "computer"
+ @emoji computer_mouse @emoji :computer_mouse: from "computer_mouse"
+ @emoji confetti_ball @emoji :confetti_ball: from "confetti_ball"
+ @emoji confounded @emoji :confounded: from "confounded"
+ @emoji confused @emoji :confused: from "confused"
+ @emoji congo_brazzaville @emoji :congo_brazzaville: from "congo_brazzaville"
+ @emoji congo_kinshasa @emoji :congo_kinshasa: from "congo_kinshasa"
+ @emoji congratulations @emoji :congratulations: from "congratulations"
+ @emoji construction @emoji :construction: from "construction"
+ @emoji construction_worker @emoji :construction_worker: from "construction_worker"
+ @emoji construction_worker_man @emoji :construction_worker_man: from "construction_worker_man"
+ @emoji construction_worker_woman @emoji :construction_worker_woman: from "construction_worker_woman"
+ @emoji control_knobs @emoji :control_knobs: from "control_knobs"
+ @emoji convenience_store @emoji :convenience_store: from "convenience_store"
+ @emoji cook_islands @emoji :cook_islands: from "cook_islands"
+ @emoji cookie @emoji :cookie: from "cookie"
+ @emoji cool @emoji :cool: from "cool"
+ @emoji cop @emoji :cop: from "cop"
+ @emoji copyright @emoji :copyright: from "copyright"
+ @emoji corn @emoji :corn: from "corn"
+ @emoji costa_rica @emoji :costa_rica: from "costa_rica"
+ @emoji cote_divoire @emoji :cote_divoire: from "cote_divoire"
+ @emoji couch_and_lamp @emoji :couch_and_lamp: from "couch_and_lamp"
+ @emoji couple @emoji :couple: from "couple"
+ @emoji couple_with_heart @emoji :couple_with_heart: from "couple_with_heart"
+ @emoji couple_with_heart_man_man @emoji :couple_with_heart_man_man: from "couple_with_heart_man_man"
+ @emoji couple_with_heart_woman_man @emoji :couple_with_heart_woman_man: from "couple_with_heart_woman_man"
+ @emoji couple_with_heart_woman_woman @emoji :couple_with_heart_woman_woman: from "couple_with_heart_woman_woman"
+ @emoji couplekiss_man_man @emoji :couplekiss_man_man: from "couplekiss_man_man"
+ @emoji couplekiss_man_woman @emoji :couplekiss_man_woman: from "couplekiss_man_woman"
+ @emoji couplekiss_woman_woman @emoji :couplekiss_woman_woman: from "couplekiss_woman_woman"
+ @emoji cow @emoji :cow: from "cow"
+ @emoji cow2 @emoji :cow2: from "cow2"
+ @emoji cowboy_hat_face @emoji :cowboy_hat_face: from "cowboy_hat_face"
+ @emoji crab @emoji :crab: from "crab"
+ @emoji crayon @emoji :crayon: from "crayon"
+ @emoji credit_card @emoji :credit_card: from "credit_card"
+ @emoji crescent_moon @emoji :crescent_moon: from "crescent_moon"
+ @emoji cricket @emoji :cricket: from "cricket"
+ @emoji croatia @emoji :croatia: from "croatia"
+ @emoji crocodile @emoji :crocodile: from "crocodile"
+ @emoji croissant @emoji :croissant: from "croissant"
+ @emoji crossed_fingers @emoji :crossed_fingers: from "crossed_fingers"
+ @emoji crossed_flags @emoji :crossed_flags: from "crossed_flags"
+ @emoji crossed_swords @emoji :crossed_swords: from "crossed_swords"
+ @emoji crown @emoji :crown: from "crown"
+ @emoji cry @emoji :cry: from "cry"
+ @emoji crying_cat_face @emoji :crying_cat_face: from "crying_cat_face"
+ @emoji crystal_ball @emoji :crystal_ball: from "crystal_ball"
+ @emoji cuba @emoji :cuba: from "cuba"
+ @emoji cucumber @emoji :cucumber: from "cucumber"
+ @emoji cupid @emoji :cupid: from "cupid"
+ @emoji curacao @emoji :curacao: from "curacao"
+ @emoji curly_loop @emoji :curly_loop: from "curly_loop"
+ @emoji currency_exchange @emoji :currency_exchange: from "currency_exchange"
+ @emoji curry @emoji :curry: from "curry"
+ @emoji custard @emoji :custard: from "custard"
+ @emoji customs @emoji :customs: from "customs"
+ @emoji cyclone @emoji :cyclone: from "cyclone"
+ @emoji cyprus @emoji :cyprus: from "cyprus"
+ @emoji czech_republic @emoji :czech_republic: from "czech_republic"
+ @emoji dagger @emoji :dagger: from "dagger"
+ @emoji dancer @emoji :dancer: from "dancer"
+ @emoji dancers @emoji :dancers: from "dancers"
+ @emoji dancing_men @emoji :dancing_men: from "dancing_men"
+ @emoji dancing_women @emoji :dancing_women: from "dancing_women"
+ @emoji dango @emoji :dango: from "dango"
+ @emoji dark_sunglasses @emoji :dark_sunglasses: from "dark_sunglasses"
+ @emoji dart @emoji :dart: from "dart"
+ @emoji dash @emoji :dash: from "dash"
+ @emoji date @emoji :date: from "date"
+ @emoji de @emoji :de: from "de"
+ @emoji deciduous_tree @emoji :deciduous_tree: from "deciduous_tree"
+ @emoji deer @emoji :deer: from "deer"
+ @emoji denmark @emoji :denmark: from "denmark"
+ @emoji department_store @emoji :department_store: from "department_store"
+ @emoji derelict_house @emoji :derelict_house: from "derelict_house"
+ @emoji desert @emoji :desert: from "desert"
+ @emoji desert_island @emoji :desert_island: from "desert_island"
+ @emoji desktop_computer @emoji :desktop_computer: from "desktop_computer"
+ @emoji detective @emoji :detective: from "detective"
+ @emoji diamond_shape_with_a_dot_inside @emoji :diamond_shape_with_a_dot_inside: from "diamond_shape_with_a_dot_inside"
+ @emoji diamonds @emoji :diamonds: from "diamonds"
+ @emoji disappointed @emoji :disappointed: from "disappointed"
+ @emoji disappointed_relieved @emoji :disappointed_relieved: from "disappointed_relieved"
+ @emoji dizzy @emoji :dizzy: from "dizzy"
+ @emoji dizzy_face @emoji :dizzy_face: from "dizzy_face"
+ @emoji djibouti @emoji :djibouti: from "djibouti"
+ @emoji do_not_litter @emoji :do_not_litter: from "do_not_litter"
+ @emoji dog @emoji :dog: from "dog"
+ @emoji dog2 @emoji :dog2: from "dog2"
+ @emoji dollar @emoji :dollar: from "dollar"
+ @emoji dolls @emoji :dolls: from "dolls"
+ @emoji dolphin @emoji :dolphin: from "dolphin"
+ @emoji dominica @emoji :dominica: from "dominica"
+ @emoji dominican_republic @emoji :dominican_republic: from "dominican_republic"
+ @emoji door @emoji :door: from "door"
+ @emoji doughnut @emoji :doughnut: from "doughnut"
+ @emoji dove @emoji :dove: from "dove"
+ @emoji dragon @emoji :dragon: from "dragon"
+ @emoji dragon_face @emoji :dragon_face: from "dragon_face"
+ @emoji dress @emoji :dress: from "dress"
+ @emoji dromedary_camel @emoji :dromedary_camel: from "dromedary_camel"
+ @emoji drooling_face @emoji :drooling_face: from "drooling_face"
+ @emoji droplet @emoji :droplet: from "droplet"
+ @emoji drum @emoji :drum: from "drum"
+ @emoji duck @emoji :duck: from "duck"
+ @emoji dvd @emoji :dvd: from "dvd"
+ @emoji e-mail @emoji :e-mail: from "e-mail"
+ @emoji eagle @emoji :eagle: from "eagle"
+ @emoji ear @emoji :ear: from "ear"
+ @emoji ear_of_rice @emoji :ear_of_rice: from "ear_of_rice"
+ @emoji earth_africa @emoji :earth_africa: from "earth_africa"
+ @emoji earth_americas @emoji :earth_americas: from "earth_americas"
+ @emoji earth_asia @emoji :earth_asia: from "earth_asia"
+ @emoji ecuador @emoji :ecuador: from "ecuador"
+ @emoji egg @emoji :egg: from "egg"
+ @emoji eggplant @emoji :eggplant: from "eggplant"
+ @emoji egypt @emoji :egypt: from "egypt"
+ @emoji eight @emoji :eight: from "eight"
+ @emoji eight_pointed_black_star @emoji :eight_pointed_black_star: from "eight_pointed_black_star"
+ @emoji eight_spoked_asterisk @emoji :eight_spoked_asterisk: from "eight_spoked_asterisk"
+ @emoji el_salvador @emoji :el_salvador: from "el_salvador"
+ @emoji electric_plug @emoji :electric_plug: from "electric_plug"
+ @emoji elephant @emoji :elephant: from "elephant"
+ @emoji email @emoji :email: from "email"
+ @emoji end @emoji :end: from "end"
+ @emoji envelope @emoji :envelope: from "envelope"
+ @emoji envelope_with_arrow @emoji :envelope_with_arrow: from "envelope_with_arrow"
+ @emoji equatorial_guinea @emoji :equatorial_guinea: from "equatorial_guinea"
+ @emoji eritrea @emoji :eritrea: from "eritrea"
+ @emoji es @emoji :es: from "es"
+ @emoji estonia @emoji :estonia: from "estonia"
+ @emoji ethiopia @emoji :ethiopia: from "ethiopia"
+ @emoji eu @emoji :eu: from "eu"
+ @emoji euro @emoji :euro: from "euro"
+ @emoji european_castle @emoji :european_castle: from "european_castle"
+ @emoji european_post_office @emoji :european_post_office: from "european_post_office"
+ @emoji european_union @emoji :european_union: from "european_union"
+ @emoji evergreen_tree @emoji :evergreen_tree: from "evergreen_tree"
+ @emoji exclamation @emoji :exclamation: from "exclamation"
+ @emoji expressionless @emoji :expressionless: from "expressionless"
+ @emoji eye @emoji :eye: from "eye"
+ @emoji eye_speech_bubble @emoji :eye_speech_bubble: from "eye_speech_bubble"
+ @emoji eyeglasses @emoji :eyeglasses: from "eyeglasses"
+ @emoji eyes @emoji :eyes: from "eyes"
+ @emoji face_with_head_bandage @emoji :face_with_head_bandage: from "face_with_head_bandage"
+ @emoji face_with_thermometer @emoji :face_with_thermometer: from "face_with_thermometer"
+ @emoji facepunch @emoji :facepunch: from "facepunch"
+ @emoji factory @emoji :factory: from "factory"
+ @emoji falkland_islands @emoji :falkland_islands: from "falkland_islands"
+ @emoji fallen_leaf @emoji :fallen_leaf: from "fallen_leaf"
+ @emoji family @emoji :family: from "family"
+ @emoji family_man_boy @emoji :family_man_boy: from "family_man_boy"
+ @emoji family_man_boy_boy @emoji :family_man_boy_boy: from "family_man_boy_boy"
+ @emoji family_man_girl @emoji :family_man_girl: from "family_man_girl"
+ @emoji family_man_girl_boy @emoji :family_man_girl_boy: from "family_man_girl_boy"
+ @emoji family_man_girl_girl @emoji :family_man_girl_girl: from "family_man_girl_girl"
+ @emoji family_man_man_boy @emoji :family_man_man_boy: from "family_man_man_boy"
+ @emoji family_man_man_boy_boy @emoji :family_man_man_boy_boy: from "family_man_man_boy_boy"
+ @emoji family_man_man_girl @emoji :family_man_man_girl: from "family_man_man_girl"
+ @emoji family_man_man_girl_boy @emoji :family_man_man_girl_boy: from "family_man_man_girl_boy"
+ @emoji family_man_man_girl_girl @emoji :family_man_man_girl_girl: from "family_man_man_girl_girl"
+ @emoji family_man_woman_boy @emoji :family_man_woman_boy: from "family_man_woman_boy"
+ @emoji family_man_woman_boy_boy @emoji :family_man_woman_boy_boy: from "family_man_woman_boy_boy"
+ @emoji family_man_woman_girl @emoji :family_man_woman_girl: from "family_man_woman_girl"
+ @emoji family_man_woman_girl_boy @emoji :family_man_woman_girl_boy: from "family_man_woman_girl_boy"
+ @emoji family_man_woman_girl_girl @emoji :family_man_woman_girl_girl: from "family_man_woman_girl_girl"
+ @emoji family_woman_boy @emoji :family_woman_boy: from "family_woman_boy"
+ @emoji family_woman_boy_boy @emoji :family_woman_boy_boy: from "family_woman_boy_boy"
+ @emoji family_woman_girl @emoji :family_woman_girl: from "family_woman_girl"
+ @emoji family_woman_girl_boy @emoji :family_woman_girl_boy: from "family_woman_girl_boy"
+ @emoji family_woman_girl_girl @emoji :family_woman_girl_girl: from "family_woman_girl_girl"
+ @emoji family_woman_woman_boy @emoji :family_woman_woman_boy: from "family_woman_woman_boy"
+ @emoji family_woman_woman_boy_boy @emoji :family_woman_woman_boy_boy: from "family_woman_woman_boy_boy"
+ @emoji family_woman_woman_girl @emoji :family_woman_woman_girl: from "family_woman_woman_girl"
+ @emoji family_woman_woman_girl_boy @emoji :family_woman_woman_girl_boy: from "family_woman_woman_girl_boy"
+ @emoji family_woman_woman_girl_girl @emoji :family_woman_woman_girl_girl: from "family_woman_woman_girl_girl"
+ @emoji faroe_islands @emoji :faroe_islands: from "faroe_islands"
+ @emoji fast_forward @emoji :fast_forward: from "fast_forward"
+ @emoji fax @emoji :fax: from "fax"
+ @emoji fearful @emoji :fearful: from "fearful"
+ @emoji feet @emoji :feet: from "feet"
+ @emoji female_detective @emoji :female_detective: from "female_detective"
+ @emoji ferris_wheel @emoji :ferris_wheel: from "ferris_wheel"
+ @emoji ferry @emoji :ferry: from "ferry"
+ @emoji field_hockey @emoji :field_hockey: from "field_hockey"
+ @emoji fiji @emoji :fiji: from "fiji"
+ @emoji file_cabinet @emoji :file_cabinet: from "file_cabinet"
+ @emoji file_folder @emoji :file_folder: from "file_folder"
+ @emoji film_projector @emoji :film_projector: from "film_projector"
+ @emoji film_strip @emoji :film_strip: from "film_strip"
+ @emoji finland @emoji :finland: from "finland"
+ @emoji fire @emoji :fire: from "fire"
+ @emoji fire_engine @emoji :fire_engine: from "fire_engine"
+ @emoji fireworks @emoji :fireworks: from "fireworks"
+ @emoji first_quarter_moon @emoji :first_quarter_moon: from "first_quarter_moon"
+ @emoji first_quarter_moon_with_face @emoji :first_quarter_moon_with_face: from "first_quarter_moon_with_face"
+ @emoji fish @emoji :fish: from "fish"
+ @emoji fish_cake @emoji :fish_cake: from "fish_cake"
+ @emoji fishing_pole_and_fish @emoji :fishing_pole_and_fish: from "fishing_pole_and_fish"
+ @emoji fist @emoji :fist: from "fist"
+ @emoji fist_left @emoji :fist_left: from "fist_left"
+ @emoji fist_oncoming @emoji :fist_oncoming: from "fist_oncoming"
+ @emoji fist_raised @emoji :fist_raised: from "fist_raised"
+ @emoji fist_right @emoji :fist_right: from "fist_right"
+ @emoji five @emoji :five: from "five"
+ @emoji flags @emoji :flags: from "flags"
+ @emoji flashlight @emoji :flashlight: from "flashlight"
+ @emoji fleur_de_lis @emoji :fleur_de_lis: from "fleur_de_lis"
+ @emoji flight_arrival @emoji :flight_arrival: from "flight_arrival"
+ @emoji flight_departure @emoji :flight_departure: from "flight_departure"
+ @emoji flipper @emoji :flipper: from "flipper"
+ @emoji floppy_disk @emoji :floppy_disk: from "floppy_disk"
+ @emoji flower_playing_cards @emoji :flower_playing_cards: from "flower_playing_cards"
+ @emoji flushed @emoji :flushed: from "flushed"
+ @emoji fog @emoji :fog: from "fog"
+ @emoji foggy @emoji :foggy: from "foggy"
+ @emoji football @emoji :football: from "football"
+ @emoji footprints @emoji :footprints: from "footprints"
+ @emoji fork_and_knife @emoji :fork_and_knife: from "fork_and_knife"
+ @emoji fountain @emoji :fountain: from "fountain"
+ @emoji fountain_pen @emoji :fountain_pen: from "fountain_pen"
+ @emoji four @emoji :four: from "four"
+ @emoji four_leaf_clover @emoji :four_leaf_clover: from "four_leaf_clover"
+ @emoji fox_face @emoji :fox_face: from "fox_face"
+ @emoji fr @emoji :fr: from "fr"
+ @emoji framed_picture @emoji :framed_picture: from "framed_picture"
+ @emoji free @emoji :free: from "free"
+ @emoji french_guiana @emoji :french_guiana: from "french_guiana"
+ @emoji french_polynesia @emoji :french_polynesia: from "french_polynesia"
+ @emoji french_southern_territories @emoji :french_southern_territories: from "french_southern_territories"
+ @emoji fried_egg @emoji :fried_egg: from "fried_egg"
+ @emoji fried_shrimp @emoji :fried_shrimp: from "fried_shrimp"
+ @emoji fries @emoji :fries: from "fries"
+ @emoji frog @emoji :frog: from "frog"
+ @emoji frowning @emoji :frowning: from "frowning"
+ @emoji frowning_face @emoji :frowning_face: from "frowning_face"
+ @emoji frowning_man @emoji :frowning_man: from "frowning_man"
+ @emoji frowning_woman @emoji :frowning_woman: from "frowning_woman"
+ @emoji fu @emoji :fu: from "fu"
+ @emoji fuelpump @emoji :fuelpump: from "fuelpump"
+ @emoji full_moon @emoji :full_moon: from "full_moon"
+ @emoji full_moon_with_face @emoji :full_moon_with_face: from "full_moon_with_face"
+ @emoji funeral_urn @emoji :funeral_urn: from "funeral_urn"
+ @emoji gabon @emoji :gabon: from "gabon"
+ @emoji gambia @emoji :gambia: from "gambia"
+ @emoji game_die @emoji :game_die: from "game_die"
+ @emoji gb @emoji :gb: from "gb"
+ @emoji gear @emoji :gear: from "gear"
+ @emoji gem @emoji :gem: from "gem"
+ @emoji gemini @emoji :gemini: from "gemini"
+ @emoji georgia @emoji :georgia: from "georgia"
+ @emoji ghana @emoji :ghana: from "ghana"
+ @emoji ghost @emoji :ghost: from "ghost"
+ @emoji gibraltar @emoji :gibraltar: from "gibraltar"
+ @emoji gift @emoji :gift: from "gift"
+ @emoji gift_heart @emoji :gift_heart: from "gift_heart"
+ @emoji girl @emoji :girl: from "girl"
+ @emoji globe_with_meridians @emoji :globe_with_meridians: from "globe_with_meridians"
+ @emoji goal_net @emoji :goal_net: from "goal_net"
+ @emoji goat @emoji :goat: from "goat"
+ @emoji golf @emoji :golf: from "golf"
+ @emoji golfing_man @emoji :golfing_man: from "golfing_man"
+ @emoji golfing_woman @emoji :golfing_woman: from "golfing_woman"
+ @emoji gorilla @emoji :gorilla: from "gorilla"
+ @emoji grapes @emoji :grapes: from "grapes"
+ @emoji greece @emoji :greece: from "greece"
+ @emoji green_apple @emoji :green_apple: from "green_apple"
+ @emoji green_book @emoji :green_book: from "green_book"
+ @emoji green_heart @emoji :green_heart: from "green_heart"
+ @emoji green_salad @emoji :green_salad: from "green_salad"
+ @emoji greenland @emoji :greenland: from "greenland"
+ @emoji grenada @emoji :grenada: from "grenada"
+ @emoji grey_exclamation @emoji :grey_exclamation: from "grey_exclamation"
+ @emoji grey_question @emoji :grey_question: from "grey_question"
+ @emoji grimacing @emoji :grimacing: from "grimacing"
+ @emoji grin @emoji :grin: from "grin"
+ @emoji grinning @emoji :grinning: from "grinning"
+ @emoji guadeloupe @emoji :guadeloupe: from "guadeloupe"
+ @emoji guam @emoji :guam: from "guam"
+ @emoji guardsman @emoji :guardsman: from "guardsman"
+ @emoji guardswoman @emoji :guardswoman: from "guardswoman"
+ @emoji guatemala @emoji :guatemala: from "guatemala"
+ @emoji guernsey @emoji :guernsey: from "guernsey"
+ @emoji guinea @emoji :guinea: from "guinea"
+ @emoji guinea_bissau @emoji :guinea_bissau: from "guinea_bissau"
+ @emoji guitar @emoji :guitar: from "guitar"
+ @emoji gun @emoji :gun: from "gun"
+ @emoji guyana @emoji :guyana: from "guyana"
+ @emoji haircut @emoji :haircut: from "haircut"
+ @emoji haircut_man @emoji :haircut_man: from "haircut_man"
+ @emoji haircut_woman @emoji :haircut_woman: from "haircut_woman"
+ @emoji haiti @emoji :haiti: from "haiti"
+ @emoji hamburger @emoji :hamburger: from "hamburger"
+ @emoji hammer @emoji :hammer: from "hammer"
+ @emoji hammer_and_pick @emoji :hammer_and_pick: from "hammer_and_pick"
+ @emoji hammer_and_wrench @emoji :hammer_and_wrench: from "hammer_and_wrench"
+ @emoji hamster @emoji :hamster: from "hamster"
+ @emoji hand @emoji :hand: from "hand"
+ @emoji handbag @emoji :handbag: from "handbag"
+ @emoji handshake @emoji :handshake: from "handshake"
+ @emoji hankey @emoji :hankey: from "hankey"
+ @emoji hash @emoji :hash: from "hash"
+ @emoji hatched_chick @emoji :hatched_chick: from "hatched_chick"
+ @emoji hatching_chick @emoji :hatching_chick: from "hatching_chick"
+ @emoji headphones @emoji :headphones: from "headphones"
+ @emoji hear_no_evil @emoji :hear_no_evil: from "hear_no_evil"
+ @emoji heart @emoji :heart: from "heart"
+ @emoji heart_decoration @emoji :heart_decoration: from "heart_decoration"
+ @emoji heart_eyes @emoji :heart_eyes: from "heart_eyes"
+ @emoji heart_eyes_cat @emoji :heart_eyes_cat: from "heart_eyes_cat"
+ @emoji heartbeat @emoji :heartbeat: from "heartbeat"
+ @emoji heartpulse @emoji :heartpulse: from "heartpulse"
+ @emoji hearts @emoji :hearts: from "hearts"
+ @emoji heavy_check_mark @emoji :heavy_check_mark: from "heavy_check_mark"
+ @emoji heavy_division_sign @emoji :heavy_division_sign: from "heavy_division_sign"
+ @emoji heavy_dollar_sign @emoji :heavy_dollar_sign: from "heavy_dollar_sign"
+ @emoji heavy_exclamation_mark @emoji :heavy_exclamation_mark: from "heavy_exclamation_mark"
+ @emoji heavy_heart_exclamation @emoji :heavy_heart_exclamation: from "heavy_heart_exclamation"
+ @emoji heavy_minus_sign @emoji :heavy_minus_sign: from "heavy_minus_sign"
+ @emoji heavy_multiplication_x @emoji :heavy_multiplication_x: from "heavy_multiplication_x"
+ @emoji heavy_plus_sign @emoji :heavy_plus_sign: from "heavy_plus_sign"
+ @emoji helicopter @emoji :helicopter: from "helicopter"
+ @emoji herb @emoji :herb: from "herb"
+ @emoji hibiscus @emoji :hibiscus: from "hibiscus"
+ @emoji high_brightness @emoji :high_brightness: from "high_brightness"
+ @emoji high_heel @emoji :high_heel: from "high_heel"
+ @emoji hocho @emoji :hocho: from "hocho"
+ @emoji hole @emoji :hole: from "hole"
+ @emoji honduras @emoji :honduras: from "honduras"
+ @emoji honey_pot @emoji :honey_pot: from "honey_pot"
+ @emoji honeybee @emoji :honeybee: from "honeybee"
+ @emoji hong_kong @emoji :hong_kong: from "hong_kong"
+ @emoji horse @emoji :horse: from "horse"
+ @emoji horse_racing @emoji :horse_racing: from "horse_racing"
+ @emoji hospital @emoji :hospital: from "hospital"
+ @emoji hot_pepper @emoji :hot_pepper: from "hot_pepper"
+ @emoji hotdog @emoji :hotdog: from "hotdog"
+ @emoji hotel @emoji :hotel: from "hotel"
+ @emoji hotsprings @emoji :hotsprings: from "hotsprings"
+ @emoji hourglass @emoji :hourglass: from "hourglass"
+ @emoji hourglass_flowing_sand @emoji :hourglass_flowing_sand: from "hourglass_flowing_sand"
+ @emoji house @emoji :house: from "house"
+ @emoji house_with_garden @emoji :house_with_garden: from "house_with_garden"
+ @emoji houses @emoji :houses: from "houses"
+ @emoji hugs @emoji :hugs: from "hugs"
+ @emoji hungary @emoji :hungary: from "hungary"
+ @emoji hushed @emoji :hushed: from "hushed"
+ @emoji ice_cream @emoji :ice_cream: from "ice_cream"
+ @emoji ice_hockey @emoji :ice_hockey: from "ice_hockey"
+ @emoji ice_skate @emoji :ice_skate: from "ice_skate"
+ @emoji icecream @emoji :icecream: from "icecream"
+ @emoji iceland @emoji :iceland: from "iceland"
+ @emoji id @emoji :id: from "id"
+ @emoji ideograph_advantage @emoji :ideograph_advantage: from "ideograph_advantage"
+ @emoji imp @emoji :imp: from "imp"
+ @emoji inbox_tray @emoji :inbox_tray: from "inbox_tray"
+ @emoji incoming_envelope @emoji :incoming_envelope: from "incoming_envelope"
+ @emoji india @emoji :india: from "india"
+ @emoji indonesia @emoji :indonesia: from "indonesia"
+ @emoji information_desk_person @emoji :information_desk_person: from "information_desk_person"
+ @emoji information_source @emoji :information_source: from "information_source"
+ @emoji innocent @emoji :innocent: from "innocent"
+ @emoji interrobang @emoji :interrobang: from "interrobang"
+ @emoji iphone @emoji :iphone: from "iphone"
+ @emoji iran @emoji :iran: from "iran"
+ @emoji iraq @emoji :iraq: from "iraq"
+ @emoji ireland @emoji :ireland: from "ireland"
+ @emoji isle_of_man @emoji :isle_of_man: from "isle_of_man"
+ @emoji israel @emoji :israel: from "israel"
+ @emoji it @emoji :it: from "it"
+ @emoji izakaya_lantern @emoji :izakaya_lantern: from "izakaya_lantern"
+ @emoji jack_o_lantern @emoji :jack_o_lantern: from "jack_o_lantern"
+ @emoji jamaica @emoji :jamaica: from "jamaica"
+ @emoji japan @emoji :japan: from "japan"
+ @emoji japanese_castle @emoji :japanese_castle: from "japanese_castle"
+ @emoji japanese_goblin @emoji :japanese_goblin: from "japanese_goblin"
+ @emoji japanese_ogre @emoji :japanese_ogre: from "japanese_ogre"
+ @emoji jeans @emoji :jeans: from "jeans"
+ @emoji jersey @emoji :jersey: from "jersey"
+ @emoji jordan @emoji :jordan: from "jordan"
+ @emoji joy @emoji :joy: from "joy"
+ @emoji joy_cat @emoji :joy_cat: from "joy_cat"
+ @emoji joystick @emoji :joystick: from "joystick"
+ @emoji jp @emoji :jp: from "jp"
+ @emoji kaaba @emoji :kaaba: from "kaaba"
+ @emoji kazakhstan @emoji :kazakhstan: from "kazakhstan"
+ @emoji kenya @emoji :kenya: from "kenya"
+ @emoji key @emoji :key: from "key"
+ @emoji keyboard @emoji :keyboard: from "keyboard"
+ @emoji keycap_ten @emoji :keycap_ten: from "keycap_ten"
+ @emoji kick_scooter @emoji :kick_scooter: from "kick_scooter"
+ @emoji kimono @emoji :kimono: from "kimono"
+ @emoji kiribati @emoji :kiribati: from "kiribati"
+ @emoji kiss @emoji :kiss: from "kiss"
+ @emoji kissing @emoji :kissing: from "kissing"
+ @emoji kissing_cat @emoji :kissing_cat: from "kissing_cat"
+ @emoji kissing_closed_eyes @emoji :kissing_closed_eyes: from "kissing_closed_eyes"
+ @emoji kissing_heart @emoji :kissing_heart: from "kissing_heart"
+ @emoji kissing_smiling_eyes @emoji :kissing_smiling_eyes: from "kissing_smiling_eyes"
+ @emoji kiwi_fruit @emoji :kiwi_fruit: from "kiwi_fruit"
+ @emoji knife @emoji :knife: from "knife"
+ @emoji koala @emoji :koala: from "koala"
+ @emoji koko @emoji :koko: from "koko"
+ @emoji kosovo @emoji :kosovo: from "kosovo"
+ @emoji kr @emoji :kr: from "kr"
+ @emoji kuwait @emoji :kuwait: from "kuwait"
+ @emoji kyrgyzstan @emoji :kyrgyzstan: from "kyrgyzstan"
+ @emoji label @emoji :label: from "label"
+ @emoji lantern @emoji :lantern: from "lantern"
+ @emoji laos @emoji :laos: from "laos"
+ @emoji large_blue_circle @emoji :large_blue_circle: from "large_blue_circle"
+ @emoji large_blue_diamond @emoji :large_blue_diamond: from "large_blue_diamond"
+ @emoji large_orange_diamond @emoji :large_orange_diamond: from "large_orange_diamond"
+ @emoji last_quarter_moon @emoji :last_quarter_moon: from "last_quarter_moon"
+ @emoji last_quarter_moon_with_face @emoji :last_quarter_moon_with_face: from "last_quarter_moon_with_face"
+ @emoji latin_cross @emoji :latin_cross: from "latin_cross"
+ @emoji latvia @emoji :latvia: from "latvia"
+ @emoji laughing @emoji :laughing: from "laughing"
+ @emoji leaves @emoji :leaves: from "leaves"
+ @emoji lebanon @emoji :lebanon: from "lebanon"
+ @emoji ledger @emoji :ledger: from "ledger"
+ @emoji left_luggage @emoji :left_luggage: from "left_luggage"
+ @emoji left_right_arrow @emoji :left_right_arrow: from "left_right_arrow"
+ @emoji leftwards_arrow_with_hook @emoji :leftwards_arrow_with_hook: from "leftwards_arrow_with_hook"
+ @emoji lemon @emoji :lemon: from "lemon"
+ @emoji leo @emoji :leo: from "leo"
+ @emoji leopard @emoji :leopard: from "leopard"
+ @emoji lesotho @emoji :lesotho: from "lesotho"
+ @emoji level_slider @emoji :level_slider: from "level_slider"
+ @emoji liberia @emoji :liberia: from "liberia"
+ @emoji libra @emoji :libra: from "libra"
+ @emoji libya @emoji :libya: from "libya"
+ @emoji liechtenstein @emoji :liechtenstein: from "liechtenstein"
+ @emoji light_rail @emoji :light_rail: from "light_rail"
+ @emoji link @emoji :link: from "link"
+ @emoji lion @emoji :lion: from "lion"
+ @emoji lips @emoji :lips: from "lips"
+ @emoji lipstick @emoji :lipstick: from "lipstick"
+ @emoji lithuania @emoji :lithuania: from "lithuania"
+ @emoji lizard @emoji :lizard: from "lizard"
+ @emoji lock @emoji :lock: from "lock"
+ @emoji lock_with_ink_pen @emoji :lock_with_ink_pen: from "lock_with_ink_pen"
+ @emoji lollipop @emoji :lollipop: from "lollipop"
+ @emoji loop @emoji :loop: from "loop"
+ @emoji loud_sound @emoji :loud_sound: from "loud_sound"
+ @emoji loudspeaker @emoji :loudspeaker: from "loudspeaker"
+ @emoji love_hotel @emoji :love_hotel: from "love_hotel"
+ @emoji love_letter @emoji :love_letter: from "love_letter"
+ @emoji low_brightness @emoji :low_brightness: from "low_brightness"
+ @emoji luxembourg @emoji :luxembourg: from "luxembourg"
+ @emoji lying_face @emoji :lying_face: from "lying_face"
+ @emoji m @emoji :m: from "m"
+ @emoji macau @emoji :macau: from "macau"
+ @emoji macedonia @emoji :macedonia: from "macedonia"
+ @emoji madagascar @emoji :madagascar: from "madagascar"
+ @emoji mag @emoji :mag: from "mag"
+ @emoji mag_right @emoji :mag_right: from "mag_right"
+ @emoji mahjong @emoji :mahjong: from "mahjong"
+ @emoji mailbox @emoji :mailbox: from "mailbox"
+ @emoji mailbox_closed @emoji :mailbox_closed: from "mailbox_closed"
+ @emoji mailbox_with_mail @emoji :mailbox_with_mail: from "mailbox_with_mail"
+ @emoji mailbox_with_no_mail @emoji :mailbox_with_no_mail: from "mailbox_with_no_mail"
+ @emoji malawi @emoji :malawi: from "malawi"
+ @emoji malaysia @emoji :malaysia: from "malaysia"
+ @emoji maldives @emoji :maldives: from "maldives"
+ @emoji male_detective @emoji :male_detective: from "male_detective"
+ @emoji mali @emoji :mali: from "mali"
+ @emoji malta @emoji :malta: from "malta"
+ @emoji man @emoji :man: from "man"
+ @emoji man_artist @emoji :man_artist: from "man_artist"
+ @emoji man_astronaut @emoji :man_astronaut: from "man_astronaut"
+ @emoji man_cartwheeling @emoji :man_cartwheeling: from "man_cartwheeling"
+ @emoji man_cook @emoji :man_cook: from "man_cook"
+ @emoji man_dancing @emoji :man_dancing: from "man_dancing"
+ @emoji man_facepalming @emoji :man_facepalming: from "man_facepalming"
+ @emoji man_factory_worker @emoji :man_factory_worker: from "man_factory_worker"
+ @emoji man_farmer @emoji :man_farmer: from "man_farmer"
+ @emoji man_firefighter @emoji :man_firefighter: from "man_firefighter"
+ @emoji man_health_worker @emoji :man_health_worker: from "man_health_worker"
+ @emoji man_in_tuxedo @emoji :man_in_tuxedo: from "man_in_tuxedo"
+ @emoji man_judge @emoji :man_judge: from "man_judge"
+ @emoji man_juggling @emoji :man_juggling: from "man_juggling"
+ @emoji man_mechanic @emoji :man_mechanic: from "man_mechanic"
+ @emoji man_office_worker @emoji :man_office_worker: from "man_office_worker"
+ @emoji man_pilot @emoji :man_pilot: from "man_pilot"
+ @emoji man_playing_handball @emoji :man_playing_handball: from "man_playing_handball"
+ @emoji man_playing_water_polo @emoji :man_playing_water_polo: from "man_playing_water_polo"
+ @emoji man_scientist @emoji :man_scientist: from "man_scientist"
+ @emoji man_shrugging @emoji :man_shrugging: from "man_shrugging"
+ @emoji man_singer @emoji :man_singer: from "man_singer"
+ @emoji man_student @emoji :man_student: from "man_student"
+ @emoji man_teacher @emoji :man_teacher: from "man_teacher"
+ @emoji man_technologist @emoji :man_technologist: from "man_technologist"
+ @emoji man_with_gua_pi_mao @emoji :man_with_gua_pi_mao: from "man_with_gua_pi_mao"
+ @emoji man_with_turban @emoji :man_with_turban: from "man_with_turban"
+ @emoji mandarin @emoji :mandarin: from "mandarin"
+ @emoji mans_shoe @emoji :mans_shoe: from "mans_shoe"
+ @emoji mantelpiece_clock @emoji :mantelpiece_clock: from "mantelpiece_clock"
+ @emoji maple_leaf @emoji :maple_leaf: from "maple_leaf"
+ @emoji marshall_islands @emoji :marshall_islands: from "marshall_islands"
+ @emoji martial_arts_uniform @emoji :martial_arts_uniform: from "martial_arts_uniform"
+ @emoji martinique @emoji :martinique: from "martinique"
+ @emoji mask @emoji :mask: from "mask"
+ @emoji massage @emoji :massage: from "massage"
+ @emoji massage_man @emoji :massage_man: from "massage_man"
+ @emoji massage_woman @emoji :massage_woman: from "massage_woman"
+ @emoji mauritania @emoji :mauritania: from "mauritania"
+ @emoji mauritius @emoji :mauritius: from "mauritius"
+ @emoji mayotte @emoji :mayotte: from "mayotte"
+ @emoji meat_on_bone @emoji :meat_on_bone: from "meat_on_bone"
+ @emoji medal_military @emoji :medal_military: from "medal_military"
+ @emoji medal_sports @emoji :medal_sports: from "medal_sports"
+ @emoji mega @emoji :mega: from "mega"
+ @emoji melon @emoji :melon: from "melon"
+ @emoji memo @emoji :memo: from "memo"
+ @emoji men_wrestling @emoji :men_wrestling: from "men_wrestling"
+ @emoji menorah @emoji :menorah: from "menorah"
+ @emoji mens @emoji :mens: from "mens"
+ @emoji metal @emoji :metal: from "metal"
+ @emoji metro @emoji :metro: from "metro"
+ @emoji mexico @emoji :mexico: from "mexico"
+ @emoji micronesia @emoji :micronesia: from "micronesia"
+ @emoji microphone @emoji :microphone: from "microphone"
+ @emoji microscope @emoji :microscope: from "microscope"
+ @emoji middle_finger @emoji :middle_finger: from "middle_finger"
+ @emoji milk_glass @emoji :milk_glass: from "milk_glass"
+ @emoji milky_way @emoji :milky_way: from "milky_way"
+ @emoji minibus @emoji :minibus: from "minibus"
+ @emoji minidisc @emoji :minidisc: from "minidisc"
+ @emoji mobile_phone_off @emoji :mobile_phone_off: from "mobile_phone_off"
+ @emoji moldova @emoji :moldova: from "moldova"
+ @emoji monaco @emoji :monaco: from "monaco"
+ @emoji money_mouth_face @emoji :money_mouth_face: from "money_mouth_face"
+ @emoji money_with_wings @emoji :money_with_wings: from "money_with_wings"
+ @emoji moneybag @emoji :moneybag: from "moneybag"
+ @emoji mongolia @emoji :mongolia: from "mongolia"
+ @emoji monkey @emoji :monkey: from "monkey"
+ @emoji monkey_face @emoji :monkey_face: from "monkey_face"
+ @emoji monorail @emoji :monorail: from "monorail"
+ @emoji montenegro @emoji :montenegro: from "montenegro"
+ @emoji montserrat @emoji :montserrat: from "montserrat"
+ @emoji moon @emoji :moon: from "moon"
+ @emoji morocco @emoji :morocco: from "morocco"
+ @emoji mortar_board @emoji :mortar_board: from "mortar_board"
+ @emoji mosque @emoji :mosque: from "mosque"
+ @emoji motor_boat @emoji :motor_boat: from "motor_boat"
+ @emoji motor_scooter @emoji :motor_scooter: from "motor_scooter"
+ @emoji motorcycle @emoji :motorcycle: from "motorcycle"
+ @emoji motorway @emoji :motorway: from "motorway"
+ @emoji mount_fuji @emoji :mount_fuji: from "mount_fuji"
+ @emoji mountain @emoji :mountain: from "mountain"
+ @emoji mountain_bicyclist @emoji :mountain_bicyclist: from "mountain_bicyclist"
+ @emoji mountain_biking_man @emoji :mountain_biking_man: from "mountain_biking_man"
+ @emoji mountain_biking_woman @emoji :mountain_biking_woman: from "mountain_biking_woman"
+ @emoji mountain_cableway @emoji :mountain_cableway: from "mountain_cableway"
+ @emoji mountain_railway @emoji :mountain_railway: from "mountain_railway"
+ @emoji mountain_snow @emoji :mountain_snow: from "mountain_snow"
+ @emoji mouse @emoji :mouse: from "mouse"
+ @emoji mouse2 @emoji :mouse2: from "mouse2"
+ @emoji movie_camera @emoji :movie_camera: from "movie_camera"
+ @emoji moyai @emoji :moyai: from "moyai"
+ @emoji mozambique @emoji :mozambique: from "mozambique"
+ @emoji mrs_claus @emoji :mrs_claus: from "mrs_claus"
+ @emoji muscle @emoji :muscle: from "muscle"
+ @emoji mushroom @emoji :mushroom: from "mushroom"
+ @emoji musical_keyboard @emoji :musical_keyboard: from "musical_keyboard"
+ @emoji musical_note @emoji :musical_note: from "musical_note"
+ @emoji musical_score @emoji :musical_score: from "musical_score"
+ @emoji mute @emoji :mute: from "mute"
+ @emoji myanmar @emoji :myanmar: from "myanmar"
+ @emoji nail_care @emoji :nail_care: from "nail_care"
+ @emoji name_badge @emoji :name_badge: from "name_badge"
+ @emoji namibia @emoji :namibia: from "namibia"
+ @emoji national_park @emoji :national_park: from "national_park"
+ @emoji nauru @emoji :nauru: from "nauru"
+ @emoji nauseated_face @emoji :nauseated_face: from "nauseated_face"
+ @emoji necktie @emoji :necktie: from "necktie"
+ @emoji negative_squared_cross_mark @emoji :negative_squared_cross_mark: from "negative_squared_cross_mark"
+ @emoji nepal @emoji :nepal: from "nepal"
+ @emoji nerd_face @emoji :nerd_face: from "nerd_face"
+ @emoji netherlands @emoji :netherlands: from "netherlands"
+ @emoji neutral_face @emoji :neutral_face: from "neutral_face"
+ @emoji new @emoji :new: from "new"
+ @emoji new_caledonia @emoji :new_caledonia: from "new_caledonia"
+ @emoji new_moon @emoji :new_moon: from "new_moon"
+ @emoji new_moon_with_face @emoji :new_moon_with_face: from "new_moon_with_face"
+ @emoji new_zealand @emoji :new_zealand: from "new_zealand"
+ @emoji newspaper @emoji :newspaper: from "newspaper"
+ @emoji newspaper_roll @emoji :newspaper_roll: from "newspaper_roll"
+ @emoji next_track_button @emoji :next_track_button: from "next_track_button"
+ @emoji ng @emoji :ng: from "ng"
+ @emoji ng_man @emoji :ng_man: from "ng_man"
+ @emoji ng_woman @emoji :ng_woman: from "ng_woman"
+ @emoji nicaragua @emoji :nicaragua: from "nicaragua"
+ @emoji niger @emoji :niger: from "niger"
+ @emoji nigeria @emoji :nigeria: from "nigeria"
+ @emoji night_with_stars @emoji :night_with_stars: from "night_with_stars"
+ @emoji nine @emoji :nine: from "nine"
+ @emoji niue @emoji :niue: from "niue"
+ @emoji no_bell @emoji :no_bell: from "no_bell"
+ @emoji no_bicycles @emoji :no_bicycles: from "no_bicycles"
+ @emoji no_entry @emoji :no_entry: from "no_entry"
+ @emoji no_entry_sign @emoji :no_entry_sign: from "no_entry_sign"
+ @emoji no_good @emoji :no_good: from "no_good"
+ @emoji no_good_man @emoji :no_good_man: from "no_good_man"
+ @emoji no_good_woman @emoji :no_good_woman: from "no_good_woman"
+ @emoji no_mobile_phones @emoji :no_mobile_phones: from "no_mobile_phones"
+ @emoji no_mouth @emoji :no_mouth: from "no_mouth"
+ @emoji no_pedestrians @emoji :no_pedestrians: from "no_pedestrians"
+ @emoji no_smoking @emoji :no_smoking: from "no_smoking"
+ @emoji non-potable_water @emoji :non-potable_water: from "non-potable_water"
+ @emoji norfolk_island @emoji :norfolk_island: from "norfolk_island"
+ @emoji north_korea @emoji :north_korea: from "north_korea"
+ @emoji northern_mariana_islands @emoji :northern_mariana_islands: from "northern_mariana_islands"
+ @emoji norway @emoji :norway: from "norway"
+ @emoji nose @emoji :nose: from "nose"
+ @emoji notebook @emoji :notebook: from "notebook"
+ @emoji notebook_with_decorative_cover @emoji :notebook_with_decorative_cover: from "notebook_with_decorative_cover"
+ @emoji notes @emoji :notes: from "notes"
+ @emoji nut_and_bolt @emoji :nut_and_bolt: from "nut_and_bolt"
+ @emoji o @emoji :o: from "o"
+ @emoji o2 @emoji :o2: from "o2"
+ @emoji ocean @emoji :ocean: from "ocean"
+ @emoji octopus @emoji :octopus: from "octopus"
+ @emoji oden @emoji :oden: from "oden"
+ @emoji office @emoji :office: from "office"
+ @emoji oil_drum @emoji :oil_drum: from "oil_drum"
+ @emoji ok @emoji :ok: from "ok"
+ @emoji ok_hand @emoji :ok_hand: from "ok_hand"
+ @emoji ok_man @emoji :ok_man: from "ok_man"
+ @emoji ok_woman @emoji :ok_woman: from "ok_woman"
+ @emoji old_key @emoji :old_key: from "old_key"
+ @emoji older_man @emoji :older_man: from "older_man"
+ @emoji older_woman @emoji :older_woman: from "older_woman"
+ @emoji om @emoji :om: from "om"
+ @emoji oman @emoji :oman: from "oman"
+ @emoji on @emoji :on: from "on"
+ @emoji oncoming_automobile @emoji :oncoming_automobile: from "oncoming_automobile"
+ @emoji oncoming_bus @emoji :oncoming_bus: from "oncoming_bus"
+ @emoji oncoming_police_car @emoji :oncoming_police_car: from "oncoming_police_car"
+ @emoji oncoming_taxi @emoji :oncoming_taxi: from "oncoming_taxi"
+ @emoji one @emoji :one: from "one"
+ @emoji open_book @emoji :open_book: from "open_book"
+ @emoji open_file_folder @emoji :open_file_folder: from "open_file_folder"
+ @emoji open_hands @emoji :open_hands: from "open_hands"
+ @emoji open_mouth @emoji :open_mouth: from "open_mouth"
+ @emoji open_umbrella @emoji :open_umbrella: from "open_umbrella"
+ @emoji ophiuchus @emoji :ophiuchus: from "ophiuchus"
+ @emoji orange @emoji :orange: from "orange"
+ @emoji orange_book @emoji :orange_book: from "orange_book"
+ @emoji orthodox_cross @emoji :orthodox_cross: from "orthodox_cross"
+ @emoji outbox_tray @emoji :outbox_tray: from "outbox_tray"
+ @emoji owl @emoji :owl: from "owl"
+ @emoji ox @emoji :ox: from "ox"
+ @emoji package @emoji :package: from "package"
+ @emoji page_facing_up @emoji :page_facing_up: from "page_facing_up"
+ @emoji page_with_curl @emoji :page_with_curl: from "page_with_curl"
+ @emoji pager @emoji :pager: from "pager"
+ @emoji paintbrush @emoji :paintbrush: from "paintbrush"
+ @emoji pakistan @emoji :pakistan: from "pakistan"
+ @emoji palau @emoji :palau: from "palau"
+ @emoji palestinian_territories @emoji :palestinian_territories: from "palestinian_territories"
+ @emoji palm_tree @emoji :palm_tree: from "palm_tree"
+ @emoji panama @emoji :panama: from "panama"
+ @emoji pancakes @emoji :pancakes: from "pancakes"
+ @emoji panda_face @emoji :panda_face: from "panda_face"
+ @emoji paperclip @emoji :paperclip: from "paperclip"
+ @emoji paperclips @emoji :paperclips: from "paperclips"
+ @emoji papua_new_guinea @emoji :papua_new_guinea: from "papua_new_guinea"
+ @emoji paraguay @emoji :paraguay: from "paraguay"
+ @emoji parasol_on_ground @emoji :parasol_on_ground: from "parasol_on_ground"
+ @emoji parking @emoji :parking: from "parking"
+ @emoji part_alternation_mark @emoji :part_alternation_mark: from "part_alternation_mark"
+ @emoji partly_sunny @emoji :partly_sunny: from "partly_sunny"
+ @emoji passenger_ship @emoji :passenger_ship: from "passenger_ship"
+ @emoji passport_control @emoji :passport_control: from "passport_control"
+ @emoji pause_button @emoji :pause_button: from "pause_button"
+ @emoji paw_prints @emoji :paw_prints: from "paw_prints"
+ @emoji peace_symbol @emoji :peace_symbol: from "peace_symbol"
+ @emoji peach @emoji :peach: from "peach"
+ @emoji peanuts @emoji :peanuts: from "peanuts"
+ @emoji pear @emoji :pear: from "pear"
+ @emoji pen @emoji :pen: from "pen"
+ @emoji pencil @emoji :pencil: from "pencil"
+ @emoji pencil2 @emoji :pencil2: from "pencil2"
+ @emoji penguin @emoji :penguin: from "penguin"
+ @emoji pensive @emoji :pensive: from "pensive"
+ @emoji performing_arts @emoji :performing_arts: from "performing_arts"
+ @emoji persevere @emoji :persevere: from "persevere"
+ @emoji person_fencing @emoji :person_fencing: from "person_fencing"
+ @emoji person_frowning @emoji :person_frowning: from "person_frowning"
+ @emoji person_with_blond_hair @emoji :person_with_blond_hair: from "person_with_blond_hair"
+ @emoji person_with_pouting_face @emoji :person_with_pouting_face: from "person_with_pouting_face"
+ @emoji peru @emoji :peru: from "peru"
+ @emoji philippines @emoji :philippines: from "philippines"
+ @emoji phone @emoji :phone: from "phone"
+ @emoji pick @emoji :pick: from "pick"
+ @emoji pig @emoji :pig: from "pig"
+ @emoji pig2 @emoji :pig2: from "pig2"
+ @emoji pig_nose @emoji :pig_nose: from "pig_nose"
+ @emoji pill @emoji :pill: from "pill"
+ @emoji pineapple @emoji :pineapple: from "pineapple"
+ @emoji ping_pong @emoji :ping_pong: from "ping_pong"
+ @emoji pisces @emoji :pisces: from "pisces"
+ @emoji pitcairn_islands @emoji :pitcairn_islands: from "pitcairn_islands"
+ @emoji pizza @emoji :pizza: from "pizza"
+ @emoji place_of_worship @emoji :place_of_worship: from "place_of_worship"
+ @emoji plate_with_cutlery @emoji :plate_with_cutlery: from "plate_with_cutlery"
+ @emoji play_or_pause_button @emoji :play_or_pause_button: from "play_or_pause_button"
+ @emoji point_down @emoji :point_down: from "point_down"
+ @emoji point_left @emoji :point_left: from "point_left"
+ @emoji point_right @emoji :point_right: from "point_right"
+ @emoji point_up @emoji :point_up: from "point_up"
+ @emoji point_up_2 @emoji :point_up_2: from "point_up_2"
+ @emoji poland @emoji :poland: from "poland"
+ @emoji police_car @emoji :police_car: from "police_car"
+ @emoji policeman @emoji :policeman: from "policeman"
+ @emoji policewoman @emoji :policewoman: from "policewoman"
+ @emoji poodle @emoji :poodle: from "poodle"
+ @emoji poop @emoji :poop: from "poop"
+ @emoji popcorn @emoji :popcorn: from "popcorn"
+ @emoji portugal @emoji :portugal: from "portugal"
+ @emoji post_office @emoji :post_office: from "post_office"
+ @emoji postal_horn @emoji :postal_horn: from "postal_horn"
+ @emoji postbox @emoji :postbox: from "postbox"
+ @emoji potable_water @emoji :potable_water: from "potable_water"
+ @emoji potato @emoji :potato: from "potato"
+ @emoji pouch @emoji :pouch: from "pouch"
+ @emoji poultry_leg @emoji :poultry_leg: from "poultry_leg"
+ @emoji pound @emoji :pound: from "pound"
+ @emoji pout @emoji :pout: from "pout"
+ @emoji pouting_cat @emoji :pouting_cat: from "pouting_cat"
+ @emoji pouting_man @emoji :pouting_man: from "pouting_man"
+ @emoji pouting_woman @emoji :pouting_woman: from "pouting_woman"
+ @emoji pray @emoji :pray: from "pray"
+ @emoji prayer_beads @emoji :prayer_beads: from "prayer_beads"
+ @emoji pregnant_woman @emoji :pregnant_woman: from "pregnant_woman"
+ @emoji previous_track_button @emoji :previous_track_button: from "previous_track_button"
+ @emoji prince @emoji :prince: from "prince"
+ @emoji princess @emoji :princess: from "princess"
+ @emoji printer @emoji :printer: from "printer"
+ @emoji puerto_rico @emoji :puerto_rico: from "puerto_rico"
+ @emoji punch @emoji :punch: from "punch"
+ @emoji purple_heart @emoji :purple_heart: from "purple_heart"
+ @emoji purse @emoji :purse: from "purse"
+ @emoji pushpin @emoji :pushpin: from "pushpin"
+ @emoji put_litter_in_its_place @emoji :put_litter_in_its_place: from "put_litter_in_its_place"
+ @emoji qatar @emoji :qatar: from "qatar"
+ @emoji question @emoji :question: from "question"
+ @emoji rabbit @emoji :rabbit: from "rabbit"
+ @emoji rabbit2 @emoji :rabbit2: from "rabbit2"
+ @emoji racehorse @emoji :racehorse: from "racehorse"
+ @emoji racing_car @emoji :racing_car: from "racing_car"
+ @emoji radio @emoji :radio: from "radio"
+ @emoji radio_button @emoji :radio_button: from "radio_button"
+ @emoji radioactive @emoji :radioactive: from "radioactive"
+ @emoji rage @emoji :rage: from "rage"
+ @emoji railway_car @emoji :railway_car: from "railway_car"
+ @emoji railway_track @emoji :railway_track: from "railway_track"
+ @emoji rainbow @emoji :rainbow: from "rainbow"
+ @emoji rainbow_flag @emoji :rainbow_flag: from "rainbow_flag"
+ @emoji raised_back_of_hand @emoji :raised_back_of_hand: from "raised_back_of_hand"
+ @emoji raised_hand @emoji :raised_hand: from "raised_hand"
+ @emoji raised_hand_with_fingers_splayed @emoji :raised_hand_with_fingers_splayed: from "raised_hand_with_fingers_splayed"
+ @emoji raised_hands @emoji :raised_hands: from "raised_hands"
+ @emoji raising_hand @emoji :raising_hand: from "raising_hand"
+ @emoji raising_hand_man @emoji :raising_hand_man: from "raising_hand_man"
+ @emoji raising_hand_woman @emoji :raising_hand_woman: from "raising_hand_woman"
+ @emoji ram @emoji :ram: from "ram"
+ @emoji ramen @emoji :ramen: from "ramen"
+ @emoji rat @emoji :rat: from "rat"
+ @emoji record_button @emoji :record_button: from "record_button"
+ @emoji recycle @emoji :recycle: from "recycle"
+ @emoji red_car @emoji :red_car: from "red_car"
+ @emoji red_circle @emoji :red_circle: from "red_circle"
+ @emoji registered @emoji :registered: from "registered"
+ @emoji relaxed @emoji :relaxed: from "relaxed"
+ @emoji relieved @emoji :relieved: from "relieved"
+ @emoji reminder_ribbon @emoji :reminder_ribbon: from "reminder_ribbon"
+ @emoji repeat @emoji :repeat: from "repeat"
+ @emoji repeat_one @emoji :repeat_one: from "repeat_one"
+ @emoji rescue_worker_helmet @emoji :rescue_worker_helmet: from "rescue_worker_helmet"
+ @emoji restroom @emoji :restroom: from "restroom"
+ @emoji reunion @emoji :reunion: from "reunion"
+ @emoji revolving_hearts @emoji :revolving_hearts: from "revolving_hearts"
+ @emoji rewind @emoji :rewind: from "rewind"
+ @emoji rhinoceros @emoji :rhinoceros: from "rhinoceros"
+ @emoji ribbon @emoji :ribbon: from "ribbon"
+ @emoji rice @emoji :rice: from "rice"
+ @emoji rice_ball @emoji :rice_ball: from "rice_ball"
+ @emoji rice_cracker @emoji :rice_cracker: from "rice_cracker"
+ @emoji rice_scene @emoji :rice_scene: from "rice_scene"
+ @emoji right_anger_bubble @emoji :right_anger_bubble: from "right_anger_bubble"
+ @emoji ring @emoji :ring: from "ring"
+ @emoji robot @emoji :robot: from "robot"
+ @emoji rocket @emoji :rocket: from "rocket"
+ @emoji rofl @emoji :rofl: from "rofl"
+ @emoji roll_eyes @emoji :roll_eyes: from "roll_eyes"
+ @emoji roller_coaster @emoji :roller_coaster: from "roller_coaster"
+ @emoji romania @emoji :romania: from "romania"
+ @emoji rooster @emoji :rooster: from "rooster"
+ @emoji rose @emoji :rose: from "rose"
+ @emoji rosette @emoji :rosette: from "rosette"
+ @emoji rotating_light @emoji :rotating_light: from "rotating_light"
+ @emoji round_pushpin @emoji :round_pushpin: from "round_pushpin"
+ @emoji rowboat @emoji :rowboat: from "rowboat"
+ @emoji rowing_man @emoji :rowing_man: from "rowing_man"
+ @emoji rowing_woman @emoji :rowing_woman: from "rowing_woman"
+ @emoji ru @emoji :ru: from "ru"
+ @emoji rugby_football @emoji :rugby_football: from "rugby_football"
+ @emoji runner @emoji :runner: from "runner"
+ @emoji running @emoji :running: from "running"
+ @emoji running_man @emoji :running_man: from "running_man"
+ @emoji running_shirt_with_sash @emoji :running_shirt_with_sash: from "running_shirt_with_sash"
+ @emoji running_woman @emoji :running_woman: from "running_woman"
+ @emoji rwanda @emoji :rwanda: from "rwanda"
+ @emoji sa @emoji :sa: from "sa"
+ @emoji sagittarius @emoji :sagittarius: from "sagittarius"
+ @emoji sailboat @emoji :sailboat: from "sailboat"
+ @emoji sake @emoji :sake: from "sake"
+ @emoji samoa @emoji :samoa: from "samoa"
+ @emoji san_marino @emoji :san_marino: from "san_marino"
+ @emoji sandal @emoji :sandal: from "sandal"
+ @emoji santa @emoji :santa: from "santa"
+ @emoji sao_tome_principe @emoji :sao_tome_principe: from "sao_tome_principe"
+ @emoji satellite @emoji :satellite: from "satellite"
+ @emoji satisfied @emoji :satisfied: from "satisfied"
+ @emoji saudi_arabia @emoji :saudi_arabia: from "saudi_arabia"
+ @emoji saxophone @emoji :saxophone: from "saxophone"
+ @emoji school @emoji :school: from "school"
+ @emoji school_satchel @emoji :school_satchel: from "school_satchel"
+ @emoji scissors @emoji :scissors: from "scissors"
+ @emoji scorpion @emoji :scorpion: from "scorpion"
+ @emoji scorpius @emoji :scorpius: from "scorpius"
+ @emoji scream @emoji :scream: from "scream"
+ @emoji scream_cat @emoji :scream_cat: from "scream_cat"
+ @emoji scroll @emoji :scroll: from "scroll"
+ @emoji seat @emoji :seat: from "seat"
+ @emoji secret @emoji :secret: from "secret"
+ @emoji see_no_evil @emoji :see_no_evil: from "see_no_evil"
+ @emoji seedling @emoji :seedling: from "seedling"
+ @emoji selfie @emoji :selfie: from "selfie"
+ @emoji senegal @emoji :senegal: from "senegal"
+ @emoji serbia @emoji :serbia: from "serbia"
+ @emoji seven @emoji :seven: from "seven"
+ @emoji seychelles @emoji :seychelles: from "seychelles"
+ @emoji shallow_pan_of_food @emoji :shallow_pan_of_food: from "shallow_pan_of_food"
+ @emoji shamrock @emoji :shamrock: from "shamrock"
+ @emoji shark @emoji :shark: from "shark"
+ @emoji shaved_ice @emoji :shaved_ice: from "shaved_ice"
+ @emoji sheep @emoji :sheep: from "sheep"
+ @emoji shell @emoji :shell: from "shell"
+ @emoji shield @emoji :shield: from "shield"
+ @emoji shinto_shrine @emoji :shinto_shrine: from "shinto_shrine"
+ @emoji ship @emoji :ship: from "ship"
+ @emoji shirt @emoji :shirt: from "shirt"
+ @emoji shit @emoji :shit: from "shit"
+ @emoji shoe @emoji :shoe: from "shoe"
+ @emoji shopping @emoji :shopping: from "shopping"
+ @emoji shopping_cart @emoji :shopping_cart: from "shopping_cart"
+ @emoji shower @emoji :shower: from "shower"
+ @emoji shrimp @emoji :shrimp: from "shrimp"
+ @emoji sierra_leone @emoji :sierra_leone: from "sierra_leone"
+ @emoji signal_strength @emoji :signal_strength: from "signal_strength"
+ @emoji singapore @emoji :singapore: from "singapore"
+ @emoji sint_maarten @emoji :sint_maarten: from "sint_maarten"
+ @emoji six @emoji :six: from "six"
+ @emoji six_pointed_star @emoji :six_pointed_star: from "six_pointed_star"
+ @emoji ski @emoji :ski: from "ski"
+ @emoji skier @emoji :skier: from "skier"
+ @emoji skull @emoji :skull: from "skull"
+ @emoji skull_and_crossbones @emoji :skull_and_crossbones: from "skull_and_crossbones"
+ @emoji sleeping @emoji :sleeping: from "sleeping"
+ @emoji sleeping_bed @emoji :sleeping_bed: from "sleeping_bed"
+ @emoji sleepy @emoji :sleepy: from "sleepy"
+ @emoji slightly_frowning_face @emoji :slightly_frowning_face: from "slightly_frowning_face"
+ @emoji slightly_smiling_face @emoji :slightly_smiling_face: from "slightly_smiling_face"
+ @emoji slot_machine @emoji :slot_machine: from "slot_machine"
+ @emoji slovakia @emoji :slovakia: from "slovakia"
+ @emoji slovenia @emoji :slovenia: from "slovenia"
+ @emoji small_airplane @emoji :small_airplane: from "small_airplane"
+ @emoji small_blue_diamond @emoji :small_blue_diamond: from "small_blue_diamond"
+ @emoji small_orange_diamond @emoji :small_orange_diamond: from "small_orange_diamond"
+ @emoji small_red_triangle @emoji :small_red_triangle: from "small_red_triangle"
+ @emoji small_red_triangle_down @emoji :small_red_triangle_down: from "small_red_triangle_down"
+ @emoji smile @emoji :smile: from "smile"
+ @emoji smile_cat @emoji :smile_cat: from "smile_cat"
+ @emoji smiley @emoji :smiley: from "smiley"
+ @emoji smiley_cat @emoji :smiley_cat: from "smiley_cat"
+ @emoji smiling_imp @emoji :smiling_imp: from "smiling_imp"
+ @emoji smirk @emoji :smirk: from "smirk"
+ @emoji smirk_cat @emoji :smirk_cat: from "smirk_cat"
+ @emoji smoking @emoji :smoking: from "smoking"
+ @emoji snail @emoji :snail: from "snail"
+ @emoji snake @emoji :snake: from "snake"
+ @emoji sneezing_face @emoji :sneezing_face: from "sneezing_face"
+ @emoji snowboarder @emoji :snowboarder: from "snowboarder"
+ @emoji snowflake @emoji :snowflake: from "snowflake"
+ @emoji snowman @emoji :snowman: from "snowman"
+ @emoji snowman_with_snow @emoji :snowman_with_snow: from "snowman_with_snow"
+ @emoji sob @emoji :sob: from "sob"
+ @emoji soccer @emoji :soccer: from "soccer"
+ @emoji solomon_islands @emoji :solomon_islands: from "solomon_islands"
+ @emoji somalia @emoji :somalia: from "somalia"
+ @emoji soon @emoji :soon: from "soon"
+ @emoji sos @emoji :sos: from "sos"
+ @emoji sound @emoji :sound: from "sound"
+ @emoji south_africa @emoji :south_africa: from "south_africa"
+ @emoji south_georgia_south_sandwich_islands @emoji :south_georgia_south_sandwich_islands: from "south_georgia_south_sandwich_islands"
+ @emoji south_sudan @emoji :south_sudan: from "south_sudan"
+ @emoji space_invader @emoji :space_invader: from "space_invader"
+ @emoji spades @emoji :spades: from "spades"
+ @emoji spaghetti @emoji :spaghetti: from "spaghetti"
+ @emoji sparkle @emoji :sparkle: from "sparkle"
+ @emoji sparkler @emoji :sparkler: from "sparkler"
+ @emoji sparkles @emoji :sparkles: from "sparkles"
+ @emoji sparkling_heart @emoji :sparkling_heart: from "sparkling_heart"
+ @emoji speak_no_evil @emoji :speak_no_evil: from "speak_no_evil"
+ @emoji speaker @emoji :speaker: from "speaker"
+ @emoji speaking_head @emoji :speaking_head: from "speaking_head"
+ @emoji speech_balloon @emoji :speech_balloon: from "speech_balloon"
+ @emoji speedboat @emoji :speedboat: from "speedboat"
+ @emoji spider @emoji :spider: from "spider"
+ @emoji spider_web @emoji :spider_web: from "spider_web"
+ @emoji spiral_calendar @emoji :spiral_calendar: from "spiral_calendar"
+ @emoji spiral_notepad @emoji :spiral_notepad: from "spiral_notepad"
+ @emoji spoon @emoji :spoon: from "spoon"
+ @emoji squid @emoji :squid: from "squid"
+ @emoji sri_lanka @emoji :sri_lanka: from "sri_lanka"
+ @emoji st_barthelemy @emoji :st_barthelemy: from "st_barthelemy"
+ @emoji st_helena @emoji :st_helena: from "st_helena"
+ @emoji st_kitts_nevis @emoji :st_kitts_nevis: from "st_kitts_nevis"
+ @emoji st_lucia @emoji :st_lucia: from "st_lucia"
+ @emoji st_pierre_miquelon @emoji :st_pierre_miquelon: from "st_pierre_miquelon"
+ @emoji st_vincent_grenadines @emoji :st_vincent_grenadines: from "st_vincent_grenadines"
+ @emoji stadium @emoji :stadium: from "stadium"
+ @emoji star @emoji :star: from "star"
+ @emoji star2 @emoji :star2: from "star2"
+ @emoji star_and_crescent @emoji :star_and_crescent: from "star_and_crescent"
+ @emoji star_of_david @emoji :star_of_david: from "star_of_david"
+ @emoji stars @emoji :stars: from "stars"
+ @emoji station @emoji :station: from "station"
+ @emoji statue_of_liberty @emoji :statue_of_liberty: from "statue_of_liberty"
+ @emoji steam_locomotive @emoji :steam_locomotive: from "steam_locomotive"
+ @emoji stew @emoji :stew: from "stew"
+ @emoji stop_button @emoji :stop_button: from "stop_button"
+ @emoji stop_sign @emoji :stop_sign: from "stop_sign"
+ @emoji stopwatch @emoji :stopwatch: from "stopwatch"
+ @emoji straight_ruler @emoji :straight_ruler: from "straight_ruler"
+ @emoji strawberry @emoji :strawberry: from "strawberry"
+ @emoji stuck_out_tongue @emoji :stuck_out_tongue: from "stuck_out_tongue"
+ @emoji stuck_out_tongue_closed_eyes @emoji :stuck_out_tongue_closed_eyes: from "stuck_out_tongue_closed_eyes"
+ @emoji stuck_out_tongue_winking_eye @emoji :stuck_out_tongue_winking_eye: from "stuck_out_tongue_winking_eye"
+ @emoji studio_microphone @emoji :studio_microphone: from "studio_microphone"
+ @emoji stuffed_flatbread @emoji :stuffed_flatbread: from "stuffed_flatbread"
+ @emoji sudan @emoji :sudan: from "sudan"
+ @emoji sun_behind_large_cloud @emoji :sun_behind_large_cloud: from "sun_behind_large_cloud"
+ @emoji sun_behind_rain_cloud @emoji :sun_behind_rain_cloud: from "sun_behind_rain_cloud"
+ @emoji sun_behind_small_cloud @emoji :sun_behind_small_cloud: from "sun_behind_small_cloud"
+ @emoji sun_with_face @emoji :sun_with_face: from "sun_with_face"
+ @emoji sunflower @emoji :sunflower: from "sunflower"
+ @emoji sunglasses @emoji :sunglasses: from "sunglasses"
+ @emoji sunny @emoji :sunny: from "sunny"
+ @emoji sunrise @emoji :sunrise: from "sunrise"
+ @emoji sunrise_over_mountains @emoji :sunrise_over_mountains: from "sunrise_over_mountains"
+ @emoji surfer @emoji :surfer: from "surfer"
+ @emoji surfing_man @emoji :surfing_man: from "surfing_man"
+ @emoji surfing_woman @emoji :surfing_woman: from "surfing_woman"
+ @emoji suriname @emoji :suriname: from "suriname"
+ @emoji sushi @emoji :sushi: from "sushi"
+ @emoji suspension_railway @emoji :suspension_railway: from "suspension_railway"
+ @emoji swaziland @emoji :swaziland: from "swaziland"
+ @emoji sweat @emoji :sweat: from "sweat"
+ @emoji sweat_drops @emoji :sweat_drops: from "sweat_drops"
+ @emoji sweat_smile @emoji :sweat_smile: from "sweat_smile"
+ @emoji sweden @emoji :sweden: from "sweden"
+ @emoji sweet_potato @emoji :sweet_potato: from "sweet_potato"
+ @emoji swimmer @emoji :swimmer: from "swimmer"
+ @emoji swimming_man @emoji :swimming_man: from "swimming_man"
+ @emoji swimming_woman @emoji :swimming_woman: from "swimming_woman"
+ @emoji switzerland @emoji :switzerland: from "switzerland"
+ @emoji symbols @emoji :symbols: from "symbols"
+ @emoji synagogue @emoji :synagogue: from "synagogue"
+ @emoji syria @emoji :syria: from "syria"
+ @emoji syringe @emoji :syringe: from "syringe"
+ @emoji taco @emoji :taco: from "taco"
+ @emoji tada @emoji :tada: from "tada"
+ @emoji taiwan @emoji :taiwan: from "taiwan"
+ @emoji tajikistan @emoji :tajikistan: from "tajikistan"
+ @emoji tanabata_tree @emoji :tanabata_tree: from "tanabata_tree"
+ @emoji tangerine @emoji :tangerine: from "tangerine"
+ @emoji tanzania @emoji :tanzania: from "tanzania"
+ @emoji taurus @emoji :taurus: from "taurus"
+ @emoji taxi @emoji :taxi: from "taxi"
+ @emoji tea @emoji :tea: from "tea"
+ @emoji telephone @emoji :telephone: from "telephone"
+ @emoji telephone_receiver @emoji :telephone_receiver: from "telephone_receiver"
+ @emoji telescope @emoji :telescope: from "telescope"
+ @emoji tennis @emoji :tennis: from "tennis"
+ @emoji tent @emoji :tent: from "tent"
+ @emoji thailand @emoji :thailand: from "thailand"
+ @emoji thermometer @emoji :thermometer: from "thermometer"
+ @emoji thinking @emoji :thinking: from "thinking"
+ @emoji thought_balloon @emoji :thought_balloon: from "thought_balloon"
+ @emoji three @emoji :three: from "three"
+ @emoji thumbsdown @emoji :thumbsdown: from "thumbsdown"
+ @emoji thumbsup @emoji :thumbsup: from "thumbsup"
+ @emoji ticket @emoji :ticket: from "ticket"
+ @emoji tickets @emoji :tickets: from "tickets"
+ @emoji tiger @emoji :tiger: from "tiger"
+ @emoji tiger2 @emoji :tiger2: from "tiger2"
+ @emoji timer_clock @emoji :timer_clock: from "timer_clock"
+ @emoji timor_leste @emoji :timor_leste: from "timor_leste"
+ @emoji tipping_hand_man @emoji :tipping_hand_man: from "tipping_hand_man"
+ @emoji tipping_hand_woman @emoji :tipping_hand_woman: from "tipping_hand_woman"
+ @emoji tired_face @emoji :tired_face: from "tired_face"
+ @emoji tm @emoji :tm: from "tm"
+ @emoji togo @emoji :togo: from "togo"
+ @emoji toilet @emoji :toilet: from "toilet"
+ @emoji tokelau @emoji :tokelau: from "tokelau"
+ @emoji tokyo_tower @emoji :tokyo_tower: from "tokyo_tower"
+ @emoji tomato @emoji :tomato: from "tomato"
+ @emoji tonga @emoji :tonga: from "tonga"
+ @emoji tongue @emoji :tongue: from "tongue"
+ @emoji top @emoji :top: from "top"
+ @emoji tophat @emoji :tophat: from "tophat"
+ @emoji tornado @emoji :tornado: from "tornado"
+ @emoji tr @emoji :tr: from "tr"
+ @emoji trackball @emoji :trackball: from "trackball"
+ @emoji tractor @emoji :tractor: from "tractor"
+ @emoji traffic_light @emoji :traffic_light: from "traffic_light"
+ @emoji train @emoji :train: from "train"
+ @emoji train2 @emoji :train2: from "train2"
+ @emoji tram @emoji :tram: from "tram"
+ @emoji triangular_flag_on_post @emoji :triangular_flag_on_post: from "triangular_flag_on_post"
+ @emoji triangular_ruler @emoji :triangular_ruler: from "triangular_ruler"
+ @emoji trident @emoji :trident: from "trident"
+ @emoji trinidad_tobago @emoji :trinidad_tobago: from "trinidad_tobago"
+ @emoji triumph @emoji :triumph: from "triumph"
+ @emoji trolleybus @emoji :trolleybus: from "trolleybus"
+ @emoji trophy @emoji :trophy: from "trophy"
+ @emoji tropical_drink @emoji :tropical_drink: from "tropical_drink"
+ @emoji tropical_fish @emoji :tropical_fish: from "tropical_fish"
+ @emoji truck @emoji :truck: from "truck"
+ @emoji trumpet @emoji :trumpet: from "trumpet"
+ @emoji tshirt @emoji :tshirt: from "tshirt"
+ @emoji tulip @emoji :tulip: from "tulip"
+ @emoji tumbler_glass @emoji :tumbler_glass: from "tumbler_glass"
+ @emoji tunisia @emoji :tunisia: from "tunisia"
+ @emoji turkey @emoji :turkey: from "turkey"
+ @emoji turkmenistan @emoji :turkmenistan: from "turkmenistan"
+ @emoji turks_caicos_islands @emoji :turks_caicos_islands: from "turks_caicos_islands"
+ @emoji turtle @emoji :turtle: from "turtle"
+ @emoji tuvalu @emoji :tuvalu: from "tuvalu"
+ @emoji tv @emoji :tv: from "tv"
+ @emoji twisted_rightwards_arrows @emoji :twisted_rightwards_arrows: from "twisted_rightwards_arrows"
+ @emoji two @emoji :two: from "two"
+ @emoji two_hearts @emoji :two_hearts: from "two_hearts"
+ @emoji two_men_holding_hands @emoji :two_men_holding_hands: from "two_men_holding_hands"
+ @emoji two_women_holding_hands @emoji :two_women_holding_hands: from "two_women_holding_hands"
+ @emoji u5272 @emoji :u5272: from "u5272"
+ @emoji u5408 @emoji :u5408: from "u5408"
+ @emoji u55b6 @emoji :u55b6: from "u55b6"
+ @emoji u6307 @emoji :u6307: from "u6307"
+ @emoji u6708 @emoji :u6708: from "u6708"
+ @emoji u6709 @emoji :u6709: from "u6709"
+ @emoji u6e80 @emoji :u6e80: from "u6e80"
+ @emoji u7121 @emoji :u7121: from "u7121"
+ @emoji u7533 @emoji :u7533: from "u7533"
+ @emoji u7981 @emoji :u7981: from "u7981"
+ @emoji u7a7a @emoji :u7a7a: from "u7a7a"
+ @emoji uganda @emoji :uganda: from "uganda"
+ @emoji uk @emoji :uk: from "uk"
+ @emoji ukraine @emoji :ukraine: from "ukraine"
+ @emoji umbrella @emoji :umbrella: from "umbrella"
+ @emoji unamused @emoji :unamused: from "unamused"
+ @emoji underage @emoji :underage: from "underage"
+ @emoji unicorn @emoji :unicorn: from "unicorn"
+ @emoji united_arab_emirates @emoji :united_arab_emirates: from "united_arab_emirates"
+ @emoji unlock @emoji :unlock: from "unlock"
+ @emoji up @emoji :up: from "up"
+ @emoji upside_down_face @emoji :upside_down_face: from "upside_down_face"
+ @emoji uruguay @emoji :uruguay: from "uruguay"
+ @emoji us @emoji :us: from "us"
+ @emoji us_virgin_islands @emoji :us_virgin_islands: from "us_virgin_islands"
+ @emoji uzbekistan @emoji :uzbekistan: from "uzbekistan"
+ @emoji v @emoji :v: from "v"
+ @emoji vanuatu @emoji :vanuatu: from "vanuatu"
+ @emoji vatican_city @emoji :vatican_city: from "vatican_city"
+ @emoji venezuela @emoji :venezuela: from "venezuela"
+ @emoji vertical_traffic_light @emoji :vertical_traffic_light: from "vertical_traffic_light"
+ @emoji vhs @emoji :vhs: from "vhs"
+ @emoji vibration_mode @emoji :vibration_mode: from "vibration_mode"
+ @emoji video_camera @emoji :video_camera: from "video_camera"
+ @emoji video_game @emoji :video_game: from "video_game"
+ @emoji vietnam @emoji :vietnam: from "vietnam"
+ @emoji violin @emoji :violin: from "violin"
+ @emoji virgo @emoji :virgo: from "virgo"
+ @emoji volcano @emoji :volcano: from "volcano"
+ @emoji volleyball @emoji :volleyball: from "volleyball"
+ @emoji vs @emoji :vs: from "vs"
+ @emoji vulcan_salute @emoji :vulcan_salute: from "vulcan_salute"
+ @emoji walking @emoji :walking: from "walking"
+ @emoji walking_man @emoji :walking_man: from "walking_man"
+ @emoji walking_woman @emoji :walking_woman: from "walking_woman"
+ @emoji wallis_futuna @emoji :wallis_futuna: from "wallis_futuna"
+ @emoji waning_crescent_moon @emoji :waning_crescent_moon: from "waning_crescent_moon"
+ @emoji waning_gibbous_moon @emoji :waning_gibbous_moon: from "waning_gibbous_moon"
+ @emoji warning @emoji :warning: from "warning"
+ @emoji wastebasket @emoji :wastebasket: from "wastebasket"
+ @emoji watch @emoji :watch: from "watch"
+ @emoji water_buffalo @emoji :water_buffalo: from "water_buffalo"
+ @emoji watermelon @emoji :watermelon: from "watermelon"
+ @emoji wave @emoji :wave: from "wave"
+ @emoji wavy_dash @emoji :wavy_dash: from "wavy_dash"
+ @emoji waxing_crescent_moon @emoji :waxing_crescent_moon: from "waxing_crescent_moon"
+ @emoji waxing_gibbous_moon @emoji :waxing_gibbous_moon: from "waxing_gibbous_moon"
+ @emoji wc @emoji :wc: from "wc"
+ @emoji weary @emoji :weary: from "weary"
+ @emoji wedding @emoji :wedding: from "wedding"
+ @emoji weight_lifting_man @emoji :weight_lifting_man: from "weight_lifting_man"
+ @emoji weight_lifting_woman @emoji :weight_lifting_woman: from "weight_lifting_woman"
+ @emoji western_sahara @emoji :western_sahara: from "western_sahara"
+ @emoji whale @emoji :whale: from "whale"
+ @emoji whale2 @emoji :whale2: from "whale2"
+ @emoji wheel_of_dharma @emoji :wheel_of_dharma: from "wheel_of_dharma"
+ @emoji wheelchair @emoji :wheelchair: from "wheelchair"
+ @emoji white_check_mark @emoji :white_check_mark: from "white_check_mark"
+ @emoji white_circle @emoji :white_circle: from "white_circle"
+ @emoji white_flag @emoji :white_flag: from "white_flag"
+ @emoji white_flower @emoji :white_flower: from "white_flower"
+ @emoji white_large_square @emoji :white_large_square: from "white_large_square"
+ @emoji white_medium_small_square @emoji :white_medium_small_square: from "white_medium_small_square"
+ @emoji white_medium_square @emoji :white_medium_square: from "white_medium_square"
+ @emoji white_small_square @emoji :white_small_square: from "white_small_square"
+ @emoji white_square_button @emoji :white_square_button: from "white_square_button"
+ @emoji wilted_flower @emoji :wilted_flower: from "wilted_flower"
+ @emoji wind_chime @emoji :wind_chime: from "wind_chime"
+ @emoji wind_face @emoji :wind_face: from "wind_face"
+ @emoji wine_glass @emoji :wine_glass: from "wine_glass"
+ @emoji wink @emoji :wink: from "wink"
+ @emoji wolf @emoji :wolf: from "wolf"
+ @emoji woman @emoji :woman: from "woman"
+ @emoji woman_artist @emoji :woman_artist: from "woman_artist"
+ @emoji woman_astronaut @emoji :woman_astronaut: from "woman_astronaut"
+ @emoji woman_cartwheeling @emoji :woman_cartwheeling: from "woman_cartwheeling"
+ @emoji woman_cook @emoji :woman_cook: from "woman_cook"
+ @emoji woman_facepalming @emoji :woman_facepalming: from "woman_facepalming"
+ @emoji woman_factory_worker @emoji :woman_factory_worker: from "woman_factory_worker"
+ @emoji woman_farmer @emoji :woman_farmer: from "woman_farmer"
+ @emoji woman_firefighter @emoji :woman_firefighter: from "woman_firefighter"
+ @emoji woman_health_worker @emoji :woman_health_worker: from "woman_health_worker"
+ @emoji woman_judge @emoji :woman_judge: from "woman_judge"
+ @emoji woman_juggling @emoji :woman_juggling: from "woman_juggling"
+ @emoji woman_mechanic @emoji :woman_mechanic: from "woman_mechanic"
+ @emoji woman_office_worker @emoji :woman_office_worker: from "woman_office_worker"
+ @emoji woman_pilot @emoji :woman_pilot: from "woman_pilot"
+ @emoji woman_playing_handball @emoji :woman_playing_handball: from "woman_playing_handball"
+ @emoji woman_playing_water_polo @emoji :woman_playing_water_polo: from "woman_playing_water_polo"
+ @emoji woman_scientist @emoji :woman_scientist: from "woman_scientist"
+ @emoji woman_shrugging @emoji :woman_shrugging: from "woman_shrugging"
+ @emoji woman_singer @emoji :woman_singer: from "woman_singer"
+ @emoji woman_student @emoji :woman_student: from "woman_student"
+ @emoji woman_teacher @emoji :woman_teacher: from "woman_teacher"
+ @emoji woman_technologist @emoji :woman_technologist: from "woman_technologist"
+ @emoji woman_with_turban @emoji :woman_with_turban: from "woman_with_turban"
+ @emoji womans_clothes @emoji :womans_clothes: from "womans_clothes"
+ @emoji womans_hat @emoji :womans_hat: from "womans_hat"
+ @emoji women_wrestling @emoji :women_wrestling: from "women_wrestling"
+ @emoji womens @emoji :womens: from "womens"
+ @emoji world_map @emoji :world_map: from "world_map"
+ @emoji worried @emoji :worried: from "worried"
+ @emoji wrench @emoji :wrench: from "wrench"
+ @emoji writing_hand @emoji :writing_hand: from "writing_hand"
+ @emoji x @emoji :x: from "x"
+ @emoji yellow_heart @emoji :yellow_heart: from "yellow_heart"
+ @emoji yemen @emoji :yemen: from "yemen"
+ @emoji yen @emoji :yen: from "yen"
+ @emoji yin_yang @emoji :yin_yang: from "yin_yang"
+ @emoji yum @emoji :yum: from "yum"
+ @emoji zambia @emoji :zambia: from "zambia"
+ @emoji zap @emoji :zap: from "zap"
+ @emoji zero @emoji :zero: from "zero"
+ @emoji zimbabwe @emoji :zimbabwe: from "zimbabwe"
+ @emoji zipper_mouth_face @emoji :zipper_mouth_face: from "zipper_mouth_face"
+ @emoji zzz @emoji :zzz: from "zzz"
+ */ diff --git a/tests/upstream-test-suite/077/077__no__xml__namespace__members__in__file__scope_8h.xml b/tests/upstream-test-suite/077/077__no__xml__namespace__members__in__file__scope_8h.xml new file mode 100644 index 0000000..9825cc1 --- /dev/null +++ b/tests/upstream-test-suite/077/077__no__xml__namespace__members__in__file__scope_8h.xml @@ -0,0 +1,12 @@ + + + + 077_no_xml_namespace_members_in_file_scope.h + Namespace + + + + + + + diff --git a/tests/upstream-test-suite/077_no_xml_namespace_members_in_file_scope.h b/tests/upstream-test-suite/077_no_xml_namespace_members_in_file_scope.h new file mode 100644 index 0000000..bf3dc64 --- /dev/null +++ b/tests/upstream-test-suite/077_no_xml_namespace_members_in_file_scope.h @@ -0,0 +1,16 @@ +// objective: test that namespace members are not put to file docs by default +// check: 077__no__xml__namespace__members__in__file__scope_8h.xml + +namespace Namespace { + +/** +@brief A function + +Detailed documentation. +*/ +void foo(); + +/** @brief An enum */ +enum class Enum {}; + +} diff --git a/tests/upstream-test-suite/078/078__xml__namespace__members__in__file__scope_8h.xml b/tests/upstream-test-suite/078/078__xml__namespace__members__in__file__scope_8h.xml new file mode 100644 index 0000000..e0a0343 --- /dev/null +++ b/tests/upstream-test-suite/078/078__xml__namespace__members__in__file__scope_8h.xml @@ -0,0 +1,43 @@ + + + + 078_xml_namespace_members_in_file_scope.h + Namespace + + + + Enum + + An enum. + + + + + + + + + + + void + void Namespace::foo + () + foo + + A function. + + + Detailed documentation. + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/078_xml_namespace_members_in_file_scope.h b/tests/upstream-test-suite/078_xml_namespace_members_in_file_scope.h new file mode 100644 index 0000000..f456464 --- /dev/null +++ b/tests/upstream-test-suite/078_xml_namespace_members_in_file_scope.h @@ -0,0 +1,17 @@ +// objective: test that namespace members are put to file docs when enabled +// check: 078__xml__namespace__members__in__file__scope_8h.xml +// config: XML_NS_MEMB_FILE_SCOPE = YES + +namespace Namespace { + +/** +@brief A function + +Detailed documentation. +*/ +void foo(); + +/** @brief An enum */ +enum class Enum {}; + +} diff --git a/tests/upstream-test-suite/Doxyfile b/tests/upstream-test-suite/Doxyfile new file mode 100644 index 0000000..e1486d3 --- /dev/null +++ b/tests/upstream-test-suite/Doxyfile @@ -0,0 +1,7 @@ +# start with defaults +QUIET = YES +GENERATE_HTML = NO +GENERATE_LATEX = NO +GENERATE_XML = YES +XML_PROGRAMLISTING = NO +CASE_SENSE_NAMES = NO diff --git a/tests/upstream-test-suite/Makefile b/tests/upstream-test-suite/Makefile new file mode 100644 index 0000000..30ee4e2 --- /dev/null +++ b/tests/upstream-test-suite/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/patch/Sanity/upstream-test-suite +# Description: tests upstream test suite +# Author: Than Ngo +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program 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 this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/patch/Sanity/upstream-test-suite +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Than Ngo " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Executes upstream test suite" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 30m" >> $(METADATA) + @echo "RunFor: doxygen" >> $(METADATA) + @echo "Requires: doxygen python3" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/upstream-test-suite/PURPOSE b/tests/upstream-test-suite/PURPOSE new file mode 100644 index 0000000..62ae14b --- /dev/null +++ b/tests/upstream-test-suite/PURPOSE @@ -0,0 +1,8 @@ +PURPOSE of /CoreOS/patch/Sanity/upstream-test-suite +Description: smoke test, funktion test and upstream test suite +Author: Than Ngo + +tests following scenarios: + * smoke test + * funktion test + * run the upstream test suite diff --git a/tests/upstream-test-suite/README.txt b/tests/upstream-test-suite/README.txt new file mode 100644 index 0000000..39b2345 --- /dev/null +++ b/tests/upstream-test-suite/README.txt @@ -0,0 +1,66 @@ +Doxygen regression test suite +============================ + +This directory contains a set of regression tests. Each test consists of a +file starting with a 3 digit number and a corresponding directory whose name +has the same 3 digit number. The directory contains one or more reference +files that are compared against the XML output produced by doxygen. If the +result is the same, there is no regression and the test passes. If there is a +difference the test fails and the difference (in diff -u format) will be shown. +It is also possible to see whether or not the test can be built to a xhtml set +of files (and tested against a DTD), it is also possible to create a pdf file +for each test to see if the LaTeX / pdf generation is possible. + +The runtest.py script responsible for running the tests takes a number of +optional parameters: + --updateref update the reference data for a test + --doxygen [DOXYGEN] path/name of the doxygen executable + --xmllint [XMLLINT] path/name of the xmllint executable + --id IDS [IDS ...] id of the test to perform + --start_id START_ID run tests starting with number n + --end_id END_ID run tests ending with number n + --all perform all tests + --inputdir [INPUTDIR] + input directory containing the tests + --outputdir [OUTPUTDIR] + output directory to write the doxygen output to + --noredir disable redirection of doxygen warnings + --xml create xml output and check + --rtf create rtf output + --docbook create docbook output and check with xmllint + --xhtml create xhtml output and check with xmllint + --pdf create LaTeX output and create pdf from it + --subdirs use the configuration parameter CREATE_SUBDIRS=YES + --keep keep result directories + --cfg CFGS [CFGS ...] run test with extra doxygen configuration settings + (the option may be specified multiple times +In case neither --xml, --pdf, --rtf, --docbook or --xhtml is used the default is set to --xml. + +The runtest.pl has the following dependencies on 3rd party tools: +- python to run the script +- xmllint to normalize the XML output +- diff to show the differences in case a test fails + +Each test file can have a number of special comment lines that are extracted by +the runtest.pl script and take the form: +// : 'argument' +Where can be one of: +- objective: 'argument' provides the objective for the test (i.e. its purpose) +- check: 'argument' names a file that is generated by doxygen, which should + be compared against the reference. +- config: 'argument' is a line that is added to the default Doxyfile used to + run doxygen on the test file. + +Example to run all tests: + python runtest.py + +Example to run a test + python runtest.py -id 10 + +Example to update the reference files for a test + python runtest.py -updateref -id 10 + +There is also a CMakeLists.txt, which can be used from the build directory +to run all tests by simply invoking 'make tests', to use the specific options use +the flag TEST_FLAGS with make + e.g. make tests TEST_FLAGS="--id=5 --id=10 --pdf --xhtml" diff --git a/tests/upstream-test-suite/_057_caller_graphs.tcl b/tests/upstream-test-suite/_057_caller_graphs.tcl new file mode 100644 index 0000000..24b9c20 --- /dev/null +++ b/tests/upstream-test-suite/_057_caller_graphs.tcl @@ -0,0 +1,4 @@ +proc inFileB args { + array set info [info frame 0]; puts -nonewline ->$info(proc) + inFileA +} diff --git a/tests/upstream-test-suite/dtd/xhtml-lat1.ent b/tests/upstream-test-suite/dtd/xhtml-lat1.ent new file mode 100755 index 0000000..ffee223 --- /dev/null +++ b/tests/upstream-test-suite/dtd/xhtml-lat1.ent @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/dtd/xhtml-special.ent b/tests/upstream-test-suite/dtd/xhtml-special.ent new file mode 100755 index 0000000..ca358b2 --- /dev/null +++ b/tests/upstream-test-suite/dtd/xhtml-special.ent @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/dtd/xhtml-symbol.ent b/tests/upstream-test-suite/dtd/xhtml-symbol.ent new file mode 100755 index 0000000..63c2abf --- /dev/null +++ b/tests/upstream-test-suite/dtd/xhtml-symbol.ent @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/dtd/xhtml1-strict.dtd b/tests/upstream-test-suite/dtd/xhtml1-strict.dtd new file mode 100755 index 0000000..2927b9e --- /dev/null +++ b/tests/upstream-test-suite/dtd/xhtml1-strict.dtd @@ -0,0 +1,978 @@ + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/dtd/xhtml1-transitional.dtd b/tests/upstream-test-suite/dtd/xhtml1-transitional.dtd new file mode 100755 index 0000000..4ac1571 --- /dev/null +++ b/tests/upstream-test-suite/dtd/xhtml1-transitional.dtd @@ -0,0 +1,1220 @@ + + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/upstream-test-suite/example_test.cpp b/tests/upstream-test-suite/example_test.cpp new file mode 100644 index 0000000..a117b63 --- /dev/null +++ b/tests/upstream-test-suite/example_test.cpp @@ -0,0 +1,8 @@ +void main() +{ + const char* a = "Some special character here:  "; + + Test t; + t.example(); +} + diff --git a/tests/upstream-test-suite/runtest.sh b/tests/upstream-test-suite/runtest.sh new file mode 100755 index 0000000..127806b --- /dev/null +++ b/tests/upstream-test-suite/runtest.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/patch/Sanity/upstream-test-suite +# Description: Executes the upstream test suite comming with the package +# Author: Than Ngo +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2010 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program 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 this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="doxygen" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp -a * $TmpDir" 0 "Copy files to $TmpDir" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "test --version" + rlRun "VERSION=\$( rpm -q --qf '%{VERSION}' doxygen )" + rlRun -s "doxygen --version" + rlAssertGrep "${VERSION}" $rlRun_LOG + rlPhaseEnd + + rlPhaseStartTest "test upstream test suite" + rlRun "python3 runtests.py >out" 0 "python3 runtests.py" + rlRun "[ -s out ]" 0 "Output should not be empty" + rlRun "cat out" 0 "Output of the test suite" + rlAssertGrep 'All tests passed!' out + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -fr $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/upstream-test-suite/runtests.py b/tests/upstream-test-suite/runtests.py new file mode 100644 index 0000000..452c36e --- /dev/null +++ b/tests/upstream-test-suite/runtests.py @@ -0,0 +1,424 @@ +#!/usr/bin/python + +from __future__ import print_function +import argparse, glob, itertools, re, shutil, os, sys + +config_reg = re.compile('.*\/\/\s*(?P\S+):\s*(?P.*)$') + +class Tester: + def __init__(self,args,test): + self.args = args + self.test = test + self.update = args.updateref + self.config = self.get_config() + self.test_name = '[%s]: %s' % (self.test,self.config['objective'][0]) + self.test_id = self.test.split('_')[0] + if self.update: + self.test_out = self.args.inputdir+'/'+self.test_id + else: + self.test_out = self.args.outputdir+'/test_output_'+self.test_id + self.prepare_test() + + def compare_ok(self,got_file,expected_file,name): + if not os.path.isfile(got_file): + return (True,'%s absent' % got_file) + elif not os.path.isfile(expected_file): + return (True,'%s absent' % expected_file) + else: + diff = os.popen('diff -b -w -u %s %s' % (got_file,expected_file)).read() + if diff and not diff.startswith("No differences"): + return (True,'Difference between generated output and reference:\n%s' % diff) + return (False,'') + + def cleanup_xmllint(self,errmsg): + msg = errmsg.split('\n') + rtnmsg = "" + for o in msg: + if (o): + if (o.startswith("I/O error : Attempt")): + pass + else: + if (rtnmsg): + rtnmsg += '\n' + rtnmsg += o + return rtnmsg + + def cleanup_xmllint_docbook(self,errmsg): + # For future work, first get everything valid XML + msg = self.cleanup_xmllint(errmsg).split('\n') + rtnmsg = "" + cnt = 0 + for o in msg: + if (o): + if (cnt): + cnt -= 1 + pass + elif (o.endswith("does not validate")): + pass + elif (o.find("no DTD found!")!=-1): + pass + elif (o.find("is not an NCName")!=-1): + cnt = 2 + else: + if (rtnmsg): + rtnmsg += '\n' + rtnmsg += o + return rtnmsg + + def get_config(self): + config = {} + with open(self.args.inputdir+'/'+self.test,'r') as f: + for line in f.readlines(): + m = config_reg.match(line) + if m: + key = m.group('name') + value = m.group('value') + if (key=='config'): + value = value.replace('$INPUTDIR',self.args.inputdir) + # print('key=%s value=%s' % (key,value)) + config.setdefault(key, []).append(value) + return config + + def prepare_test(self): + # prepare test environment + shutil.rmtree(self.test_out,ignore_errors=True) + os.mkdir(self.test_out) + shutil.copy(self.args.inputdir+'/Doxyfile',self.test_out) + with open(self.test_out+'/Doxyfile','a') as f: + print('INPUT=%s/%s' % (self.args.inputdir,self.test), file=f) + print('STRIP_FROM_PATH=%s' % self.args.inputdir, file=f) + print('EXAMPLE_PATH=%s' % self.args.inputdir, file=f) + if 'config' in self.config: + for option in self.config['config']: + print(option, file=f) + if (self.args.xml): + print('GENERATE_XML=YES', file=f) + print('XML_OUTPUT=%s/out' % self.test_out, file=f) + else: + print('GENERATE_XML=NO', file=f) + if (self.args.rtf): + print('GENERATE_RTF=YES', file=f) + print('RTF_OUTPUT=%s/rtf' % self.test_out, file=f) + else: + print('GENERATE_RTF=NO', file=f) + if (self.args.docbook): + print('GENERATE_DOCBOOK=YES', file=f) + print('DOCBOOK_OUTPUT=%s/docbook' % self.test_out, file=f) + else: + print('GENERATE_DOCBOOK=NO', file=f) + if (self.args.xhtml): + print('GENERATE_HTML=YES', file=f) + # HTML_OUTPUT can also be set locally + print('HTML_OUTPUT=%s/html' % self.test_out, file=f) + print('HTML_FILE_EXTENSION=.xhtml', file=f) + if (self.args.pdf): + print('GENERATE_LATEX=YES', file=f) + print('LATEX_OUTPUT=%s/latex' % self.test_out, file=f) + if self.args.subdirs: + print('CREATE_SUBDIRS=YES', file=f) + if (self.args.cfgs): + for cfg in list(itertools.chain.from_iterable(self.args.cfgs)): + if cfg.find('=') == -1: + print("Not a doxygen configuration item, missing '=' sign: '%s'."%cfg) + sys.exit(1) + print(cfg, file=f) + + if 'check' not in self.config or not self.config['check']: + print('Test doesn\'t specify any files to check') + sys.exit(1) + + # run doxygen + if (sys.platform == 'win32'): + redir=' > nul:' + else: + redir=' 2> /dev/null > /dev/null' + + if (self.args.noredir): + redir='' + + if os.system('%s %s/Doxyfile %s' % (self.args.doxygen,self.test_out,redir))!=0: + print('Error: failed to run %s on %s/Doxyfile' % (self.args.doxygen,self.test_out)) + sys.exit(1) + + # update the reference data for this test + def update_test(self,testmgr): + print('Updating reference for %s' % self.test_name) + + if 'check' in self.config: + for check in self.config['check']: + check_file='%s/out/%s' % (self.test_out,check) + # check if the file we need to check is actually generated + if not os.path.isfile(check_file): + print('Non-existing file %s after \'check:\' statement' % check_file) + return + # convert output to canonical form + data = os.popen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read() + if data: + # strip version + data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n') + else: + print('Failed to run %s on the doxygen output file %s' % (self.args.xmllint,self.test_out)) + return + out_file='%s/%s' % (self.test_out,check) + with open(out_file,'w') as f: + print(data,file=f) + shutil.rmtree(self.test_out+'/out',ignore_errors=True) + os.remove(self.test_out+'/Doxyfile') + + # check the relevant files of a doxygen run with the reference material + def perform_test(self,testmgr): + if (sys.platform == 'win32'): + redir=' > nul:' + separ='&' + else: + redir=' 2> /dev/null' + separ=';' + + if (self.args.noredir): + redir='' + + failed_xml=False + failed_html=False + failed_latex=False + failed_docbook=False + failed_rtf=False + msg = () + # look for files to check against the reference + if self.args.xml: + failed_xml=True + if 'check' in self.config: + for check in self.config['check']: + check_file='%s/out/%s' % (self.test_out,check) + # check if the file we need to check is actually generated + if not os.path.isfile(check_file): + # try with sub dirs + check_file = glob.glob('%s/out/*/*/%s' % (self.test_out,check)) + if not check_file: + check_file='%s/out/%s' % (self.test_out,check) + msg += ('Non-existing file %s after \'check:\' statement' % check_file,) + break + else: + check_file = check_file[0] + # convert output to canonical form + data = os.popen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read() + if data: + # strip version + data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n') + else: + msg += ('Failed to run %s on the doxygen output file %s' % (self.args.xmllint,self.test_out),) + break + out_file='%s/%s' % (self.test_out,check) + with open(out_file,'w') as f: + print(data,file=f) + ref_file='%s/%s/%s' % (self.args.inputdir,self.test_id,check) + (failed_xml,xml_msg) = self.compare_ok(out_file,ref_file,self.test_name) + if failed_xml: + msg+= (xml_msg,) + break + if not failed_xml and not self.args.keep: + xml_output='%s/out' % self.test_out + shutil.rmtree(xml_output,ignore_errors=True) + + if (self.args.rtf): + # no tests defined yet + pass + + if (self.args.docbook): + docbook_output='%s/docbook' % self.test_out + if (sys.platform == 'win32'): + redirx=' 2> %s/temp >nul:'%docbook_output + else: + redirx='2>%s/temp >/dev/null'%docbook_output + # For future work, first get everything valid XML + # exe_string = '%s --relaxng db/docbook.rng --nonet --postvalid %s/*xml %s % (self.args.xmllint,docbook_output,redirx) + tests = [] + tests.append(glob.glob('%s/*.xml' % (docbook_output))) + tests.append(glob.glob('%s/*/*/*.xml' % (docbook_output))) + tests = ' '.join(list(itertools.chain.from_iterable(tests))).replace(self.args.outputdir +'/','').replace('\\','/') + exe_string = '%s --nonet --postvalid %s %s' % (self.args.xmllint,tests,redirx) + exe_string += ' %s more "%s/temp"' % (separ,docbook_output) + + failed_docbook=False + xmllint_out = os.popen(exe_string).read() + xmllint_out = self.cleanup_xmllint_docbook(xmllint_out) + if xmllint_out: + msg += (xmllint_out,) + failed_docbook=True + elif not self.args.keep: + shutil.rmtree(docbook_output,ignore_errors=True) + + if (self.args.xhtml): + html_output='%s/html' % self.test_out + if (sys.platform == 'win32'): + redirx=' 2> %s/temp >nul:'%html_output + else: + redirx='2>%s/temp >/dev/null'%html_output + exe_string = '%s --path dtd --nonet --postvalid %s/*xhtml %s %s ' % (self.args.xmllint,html_output,redirx,separ) + exe_string += 'more "%s/temp"' % (html_output) + failed_html=False + xmllint_out = os.popen(exe_string).read() + xmllint_out = self.cleanup_xmllint(xmllint_out) + if xmllint_out: + msg += (xmllint_out,) + failed_html=True + elif not self.args.keep: + shutil.rmtree(html_output,ignore_errors=True) + if (self.args.pdf): + failed_latex=False + latex_output='%s/latex' % self.test_out + if (sys.platform == 'win32'): + redirl='>nul: 2>temp' + else: + redirl='>/dev/null 2>temp' + exe_string = 'cd %s %s echo "q" | make %s %s' % (latex_output,separ,redirl,separ) + exe_string += 'more temp' + latex_out = os.popen(exe_string).read() + if latex_out.find("Error")!=-1: + msg += ("PDF generation failed\n For a description of the problem see 'refman.log' in the latex directory of this test",) + failed_html=True + elif open(latex_output + "/refman.log",'r').read().find("Emergency stop")!= -1: + msg += ("PDF generation failed\n For a description of the problem see 'refman.log' in the latex directory of this test",) + failed_html=True + elif not self.args.keep: + shutil.rmtree(latex_output,ignore_errors=True) + + if failed_xml or failed_html or failed_latex or failed_docbook or failed_rtf: + testmgr.ok(False,self.test_name,msg) + return + + testmgr.ok(True,self.test_name) + if not self.args.keep: + shutil.rmtree(self.test_out,ignore_errors=True) + + def run(self,testmgr): + if self.update: + self.update_test(testmgr) + else: + self.perform_test(testmgr) + +class TestManager: + def __init__(self,args,tests): + self.args = args + self.tests = tests + self.num_tests = len(tests) + self.count=1 + self.passed=0 + if self.args.xhtml: + self.prepare_dtd() + print('1..%d' % self.num_tests) + + def ok(self,result,test_name,msg='Ok'): + if result: + print('ok %s - %s' % (self.count,test_name)) + self.passed = self.passed + 1 + else: + print('not ok %s - %s' % (self.count,test_name)) + print('-------------------------------------') + for o in msg: + print(o) + print('-------------------------------------') + self.count = self.count + 1 + + def result(self): + if self.passed==self.num_tests: + print('All tests passed!') + else: + print('%d out of %s tests failed' % (self.num_tests-self.passed,self.num_tests)) + return 0 if self.passed==self.num_tests else 1 + + def perform_tests(self): + for test in self.tests: + tester = Tester(self.args,test) + tester.run(self) + res=self.result() + if self.args.xhtml and not res and not self.args.keep: + shutil.rmtree("dtd",ignore_errors=True) + return 0 if self.args.updateref else res + + def prepare_dtd(self): + shutil.rmtree("dtd",ignore_errors=True) + shutil.copytree(self.args.inputdir+"/dtd", "dtd") + +def main(): + # argument handling + parser = argparse.ArgumentParser(description='run doxygen tests') + parser.add_argument('--updateref',help= + 'update the reference files. Should be used in combination with -id to ' + 'update the reference file(s) for the given test',action="store_true") + parser.add_argument('--doxygen',nargs='?',default='doxygen',help= + 'path/name of the doxygen executable') + parser.add_argument('--xmllint',nargs='?',default='xmllint',help= + 'path/name of the xmllint executable') + parser.add_argument('--id',nargs='+',dest='ids',action='append',type=int,help= + 'run test with number n only (the option can be specified to run test with ' + 'number n only (the option can be specified multiple times') + parser.add_argument('--start_id',dest='start_id',type=int,help= + 'run tests starting with number n') + parser.add_argument('--end_id',dest='end_id',type=int,help= + 'run tests ending with number n') + parser.add_argument('--all',help= + 'can be used in combination with -updateref to update the reference files ' + 'for all tests.',action="store_true") + parser.add_argument('--inputdir',nargs='?',default='.',help= + 'input directory containing the tests') + parser.add_argument('--outputdir',nargs='?',default='.',help= + 'output directory to write the doxygen output to') + parser.add_argument('--noredir',help= + 'disable redirection of doxygen warnings',action="store_true") + parser.add_argument('--xml',help='create xml output and check', + action="store_true") + parser.add_argument('--rtf',help= + 'create rtf output',action="store_true") + parser.add_argument('--docbook',help= + 'create docbook output and check with xmllint',action="store_true") + parser.add_argument('--xhtml',help= + 'create xhtml output and check with xmllint',action="store_true") + parser.add_argument('--pdf',help='create LaTeX output and create pdf from it', + action="store_true") + parser.add_argument('--subdirs',help='use the configuration parameter CREATE_SUBDIRS=YES', + action="store_true") + parser.add_argument('--keep',help='keep result directories', + action="store_true") + parser.add_argument('--cfg',nargs='+',dest='cfgs',action='append',help= + 'run test with extra doxygen configuration settings ' + '(the option may be specified multiple times') + test_flags = os.getenv('TEST_FLAGS', default='').split() + args = parser.parse_args(test_flags + sys.argv[1:]) + + # sanity check + if (not args.xml) and (not args.pdf) and (not args.xhtml) and (not args.docbook and (not args.rtf)): + args.xml=True + if (not args.updateref is None) and (args.ids is None) and (args.all is None): + parser.error('--updateref requires either --id or --all') + + starting_directory = os.getcwd() + os.chdir(args.inputdir) + # find the tests to run + tests = [] + if args.start_id: + if args.end_id: + for id in range(args.start_id, args.end_id + 1): + tests.append(glob.glob('%s_*'%id)) + tests.append(glob.glob('0%s_*'%id)) + tests.append(glob.glob('00%s_*'%id)) + else: + parser.error('--start_id requires --end_id') + elif args.end_id: + parser.error('--end_id requires --start_id') + if args.ids: # test ids are given by user + for id in list(itertools.chain.from_iterable(args.ids)): + tests.append(glob.glob('%s_*'%id)) + tests.append(glob.glob('0%s_*'%id)) + tests.append(glob.glob('00%s_*'%id)) + if (not args.ids and not args.start_id): # find all tests + tests = glob.glob('[0-9][0-9][0-9]_*') + else: + tests = list(itertools.chain.from_iterable(tests)) + os.chdir(starting_directory) + + # create test manager to run the tests + testManager = TestManager(args,tests) + sys.exit(testManager.perform_tests()) + +if __name__ == '__main__': + main() diff --git a/tests/upstream-test-suite/sample.bib b/tests/upstream-test-suite/sample.bib new file mode 100644 index 0000000..436e8cd --- /dev/null +++ b/tests/upstream-test-suite/sample.bib @@ -0,0 +1,7 @@ +@book{knuth79, + author = "Donald E. Knuth", + title = "Tex and Metafont, New Directions in Typesetting", + year = "1979", + publisher = "American Mathematical Society and Digital Press", + address = "Stanford" +} diff --git a/tests/upstream-test-suite/sample.html b/tests/upstream-test-suite/sample.html new file mode 100644 index 0000000..159202e --- /dev/null +++ b/tests/upstream-test-suite/sample.html @@ -0,0 +1 @@ +

Hello world

diff --git a/tests/upstream-test-suite/sample.png b/tests/upstream-test-suite/sample.png new file mode 100644 index 0000000..5c9f51f Binary files /dev/null and b/tests/upstream-test-suite/sample.png differ diff --git a/tests/upstream-test-suite/sample.tex b/tests/upstream-test-suite/sample.tex new file mode 100644 index 0000000..9a1717e --- /dev/null +++ b/tests/upstream-test-suite/sample.tex @@ -0,0 +1 @@ +\section{Hello world} diff --git a/tests/upstream-test-suite/snippet_test.cpp b/tests/upstream-test-suite/snippet_test.cpp new file mode 100644 index 0000000..763f6be --- /dev/null +++ b/tests/upstream-test-suite/snippet_test.cpp @@ -0,0 +1,41 @@ +#include +#include + +void main() +{ + int i,n,temp,j,arr[25]; + printf("Enter the number of elements in the Array: "); + scanf("%d",&n); + printf("\nEnter the elements:\n\n"); + + /* [input] */ + for(i=0 ; iarr[j+1]) //Swapping Condition is Checked + { + temp=arr[j]; + arr[j]=arr[j+1]; + arr[j+1]=temp; + } + } + } + // [bubble] + + printf("\nThe Sorted Array is:\n\n"); + /* [output] */ + for(i=0 ; i