diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.am | 31 | ||||
-rw-r--r-- | test/README | 121 | ||||
-rwxr-xr-x | test/appointment-001.sh | 19 | ||||
-rw-r--r-- | test/data/apts | 660 | ||||
-rw-r--r-- | test/data/conf | 75 | ||||
-rw-r--r-- | test/data/todo | 197 | ||||
-rwxr-xr-x | test/day-001.sh | 14 | ||||
-rwxr-xr-x | test/day-002.sh | 39 | ||||
-rwxr-xr-x | test/day-003.sh | 14 | ||||
-rwxr-xr-x | test/next-001.sh | 17 | ||||
-rwxr-xr-x | test/range-001.sh | 19 | ||||
-rwxr-xr-x | test/range-002.sh | 37 | ||||
-rwxr-xr-x | test/range-003.sh | 14 | ||||
-rwxr-xr-x | test/run-test-001.sh | 7 | ||||
-rwxr-xr-x | test/run-test-002.sh | 9 | ||||
-rw-r--r-- | test/run-test.c | 229 | ||||
-rwxr-xr-x | test/search-001.sh | 26 | ||||
-rwxr-xr-x | test/todo-001.sh | 12 | ||||
-rwxr-xr-x | test/todo-002.sh | 10 | ||||
-rwxr-xr-x | test/todo-003.sh | 12 | ||||
-rwxr-xr-x | test/true-001.sh | 3 |
21 files changed, 1565 insertions, 0 deletions
diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..85c8a1d --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,31 @@ +AUTOMAKE_OPTIONS = foreign + +TESTS = \ + true-001.sh \ + run-test-001.sh \ + run-test-002.sh \ + todo-001.sh \ + todo-002.sh \ + todo-003.sh \ + day-001.sh \ + day-002.sh \ + day-003.sh \ + range-001.sh \ + range-002.sh \ + range-003.sh \ + appointment-001.sh \ + next-001.sh \ + search-001.sh + +TESTS_ENVIRONMENT = \ + CALCURSE='$(top_builddir)/src/calcurse' \ + DATA_DIR='$(top_srcdir)/test/data/' + +AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L + +check_PROGRAMS = run-test +check_SCRIPTS = $(TESTS) + +run_test_SOURCES = run-test.c + +EXTRA_DIST = $(TESTS) data/apts data/conf data/todo diff --git a/test/README b/test/README new file mode 100644 index 0000000..f0fd06a --- /dev/null +++ b/test/README @@ -0,0 +1,121 @@ +calcurse Test Suite +=================== + +This directory holds of a couple of test cases and some helpers to simplify the +task of creating new tests. Test cases are intended to test a specified set of +behaviors and to avoid reintroduction of bugs that have already been fixed. The +idea is that a new test should be added for each bug report that is received +and for each bug that is fixed in the development branch. + +Running tests +------------- + +The easiest way to run tests is running `make check`. This will prepare and +compile all needed components and start all test cases. A summary is displayed +when all tests are finished. + +You can also run tests manually. Test cases are usually shell scripts or +binaries. To run an individual test, just invoke the corresponding executable. +Note that some tests require the `CALCURSE` and `DATA_DIR` environment +variables to be set, where `CALCURSE` should point to a valid calcurse binary +and `DATA_DIR` should point to a valid data directory. We usually use the data +directory `data/`, which is contained in the `test/` directory, for test cases: + + $ CALCURSE=../src/calcurse DATA_DIR=data/ ./next-001.sh + Running ./next-001.sh... ok + +Passing another data directory might cause some failures since many tests are +adapted for the `test/` directory provided by the test suite: + + $ CALCURSE=../src/calcurse DATA_DIR="$HOME/.calcurse/" ./next-001.sh + Running ./next-001.sh... FAIL + +Writing tests +------------- + +Writing test cases is as simple as creating a new shell script and adding some +test code. Success and failure are reported by setting the exit status. Setting +the exit status to `0` indicates success, a non-zero value indicates failure +(which reflects the usual exit code semantics of POSIX systems). + +To enable a test, just add it to the `TESTS` variable in `test/Makefile.am`. If +your test case is written in a non-interpretable language, you may need to add +some compilation directives as well. Please note that we only accept +POSIX-compatible shell scripts and C in mainline, so please avoid using other +languages if you plan to get your test case integrated upstream. + +If your test case invokes the calcurse binary, please continue reading the +following sections, also. + +The `run-test` helper +--------------------- + +The `run-test` helper is a simple C program that makes writing script-based +test cases much easier. Tests for the calcurse command line interface usually +invoke the calcurse binary with some special command line options and compare +the output with a hardcoded set of expected results. Unfortunately, comparing +the output of two commands is not exactly easy in POSIX shell: this is where +the `run-test` helper comes in handy. + +If you run the `run-test` helper, you can pass one or more executable files as +parameters. The helper then invokes each of the specified scripts twice: Once +passing `actual` as a command line parameter and once passing `expected`. It +then compares the outputs of both invocations and checks if they are equal or +not. If the `actual`/`expected` outputs differ for one of the programs passed +to `run-test`, if displays `FAIL` and exits with a non-zero exit status. It +returns success otherwise. + +Here is a simple example on how to use `run-test`: + + #!/bin/sh + + if [ "$1" = 'actual' ]; then + echo 'obrocodobro' | sed 's/o/a/g' + elif [ "$1" = 'expected' ]; then + echo 'abracadabra' + else + ./run-test "$0" + fi + +If the script is run without any parameters, it simply invokes `run-test`, +passing itself as a command line parameter (see the `else` branch). `run-test` +then reruns the script, passing `actual` as the first parameter. This starts +the actual test (see the `if` branch). It reruns the script a second time, +passing `expected` as the first parameter which results in the script printing +the expected result for this test (see the `elif` branch). Finally, `run-test` +compares both outputs, prints a message indicating whether they are equal and +sets the exit status accordingly. This exit status is then passed on to the +original instance of the test script and returned since `./run-test "$0"` is +the last command that is run if the script is invoked without any parameters. + +You should stick to this strategy whenever you want to check the output of a +non-interactive calcurse instance in a test. Check the following tests for some +more examples: + +* `todo-001.sh` +* `todo-002.sh` +* `todo-003.sh` + +Using libfaketime +----------------- + +Some tests might require faking current date and time. We currently use +libfaketime to achieve this. Check the following files for examples: + +* `appointment-001.sh` +* `next-001.sh` +* `range-001.sh` +* `range-002.sh` +* `range-003.sh` + +NOTE: Please do not forget to check for libfaketime presence at the beginning +of your test. Otherwise, your test is likely to fail on systems that are not +supported by libfaketime. + +Additional notes +---------------- + +Most tests, that invoke the calcurse binary, pass the `--read-only` parameter +to make sure the data directory is not modified by calcurse, preventing +unexpected side effects. Please follow this guideline if you plan to submit +your patch upstream. diff --git a/test/appointment-001.sh b/test/appointment-001.sh new file mode 100755 index 0000000..27813b3 --- /dev/null +++ b/test/appointment-001.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '2011-02-25 23:42' "$CALCURSE" --read-only -D "$DATA_DIR" -a +elif [ "$1" = 'expected' ]; then + cat <<EOD +02/25/11: + * Socket ghastlier + - ..:.. -> ..:.. + Covenants useful smoker's +EOD +else + ./run-test "$0" +fi diff --git a/test/data/apts b/test/data/apts new file mode 100644 index 0000000..33de89b --- /dev/null +++ b/test/data/apts @@ -0,0 +1,660 @@ +12/27/1911 @ 01:18 -> 12/29/1911 @ 18:52 |Outsmarts Leoncavallo's daunting +02/10/1912 @ 20:36 -> 02/14/1912 @ 21:46 |Relieving uncleanliest footnoting unscrewed +04/28/1912 @ 02:54 -> 04/30/1912 @ 16:47 |Visit repel egotism antidepressant Idahos +07/10/1912 @ 17:47 -> 07/13/1912 @ 03:18 |Impersonating integer broils blame +09/27/1912 @ 16:07 -> 10/02/1912 @ 07:24 |Wedgwood's dilating +10/28/1913 @ 11:18 -> 11/01/1913 @ 17:07 |Deviation perspire +12/23/1913 @ 07:25 -> 12/23/1913 @ 17:46 |Nintendo stapler jellyfish vaporous +09/08/1914 @ 07:41 -> 09/11/1914 @ 18:15 |Panelling +03/22/1915 @ 07:21 -> 03/25/1915 @ 20:57 |Veritable intercom's +08/12/1915 @ 23:57 -> 08/16/1915 @ 23:02 |Meddlers presides prefabricates Disneyland's +08/27/1915 @ 07:34 -> 08/29/1915 @ 23:36 |EverReady's tramping patches napped +06/16/1916 @ 15:56 -> 06/19/1916 @ 15:05 |Rediscovery's Barnaby's lummox's shan't +06/19/1916 @ 15:35 -> 06/23/1916 @ 09:00 |Lu gastric Valenti bankruptcy's intents +10/01/1916 @ 08:13 -> 10/02/1916 @ 11:56 |Appropriately Potemkin's hassocks snappier Millay +12/12/1916 @ 12:04 -> 12/15/1916 @ 08:31 |Thefts infrastructure's chides +01/20/1917 @ 07:12 -> 01/20/1917 @ 12:19 |Outfit Hannah +07/22/1917 @ 04:28 -> 07/22/1917 @ 10:04 |Shallowness's tap's enjoining chewy obligation's +07/30/1917 @ 08:34 -> 08/04/1917 @ 11:53 |Stephan +03/25/1918 @ 11:14 -> 03/29/1918 @ 14:57 |Butterfat Cherry's aviators albs fattier +01/26/1919 @ 17:43 -> 01/26/1919 @ 23:18 |Creakiest cocking disporting polyhedron auditions +03/21/1919 @ 19:33 -> 03/23/1919 @ 03:37 |Stethoscopes Singer's vermouth pincers +04/01/1919 @ 23:51 -> 04/03/1919 @ 09:19 |Doughtiest +05/14/1919 @ 05:55 -> 05/16/1919 @ 22:47 |Aviation's O'Neill welding +06/21/1919 @ 01:48 -> 06/22/1919 @ 01:07 |Marquis grid sprinkling's +06/30/1919 @ 13:48 -> 07/03/1919 @ 06:08 |Barracudas +07/05/1919 @ 09:09 -> 07/10/1919 @ 10:56 |Lea's mullion remove connects collation's +09/07/1919 @ 20:52 -> 09/11/1919 @ 17:11 |Alps hotshot +01/21/1921 @ 19:57 -> 01/22/1921 @ 18:42 |Gunk +05/01/1921 @ 20:50 -> 05/01/1921 @ 20:57 |Citibank +06/19/1921 @ 08:01 -> 06/22/1921 @ 10:20 |Coziness sloshed retyping southwards intensified +08/02/1921 @ 16:46 -> 08/04/1921 @ 22:17 |Malawi's undefinable Copacabana hungered +08/04/1921 @ 00:58 -> 08/04/1921 @ 09:07 |Bagpipes dole shores +01/16/1922 @ 13:01 -> 01/17/1922 @ 14:32 |Gravies +06/23/1922 @ 13:56 -> 06/25/1922 @ 02:12 |Funnelling creation's regionalisms skivvied jaunted +07/08/1922 @ 17:13 -> 07/09/1922 @ 08:03 |Alleluia Freetown's +07/14/1922 @ 05:26 -> 07/19/1922 @ 11:28 |Pittsburgh's joined overbearing propellant's +03/07/1923 @ 17:37 -> 03/09/1923 @ 22:27 |Impulsion Sheffield's Swanson's +05/17/1923 @ 13:01 -> 05/19/1923 @ 04:23 |Disconnections +07/06/1923 @ 18:38 -> 07/09/1923 @ 13:26 |Sightseeing yarns +08/07/1923 @ 17:38 -> 08/11/1923 @ 03:34 |Tc's +12/20/1923 @ 11:05 -> 12/21/1923 @ 09:31 |Chanter snuffs Hymen +03/19/1924 @ 10:11 -> 03/20/1924 @ 04:34 |Powder imagines devastating +07/11/1924 @ 18:34 -> 07/13/1924 @ 09:32 |Manley's Telemann +01/24/1926 @ 09:39 -> 01/28/1926 @ 00:32 |Freebases improvidence maggot gestation's +06/30/1926 @ 17:36 -> 07/01/1926 @ 22:54 |Antibody poor Atlantes +07/24/1926 @ 13:52 -> 07/28/1926 @ 14:48 |Piety's +08/19/1926 @ 21:46 -> 08/21/1926 @ 00:07 |Incur hearties outlining sensationalists +09/15/1926 @ 09:13 -> 09/17/1926 @ 08:27 |Theocritus's +03/17/1927 @ 05:31 -> 03/17/1927 @ 17:55 |Closets scrape addictive consummations +05/27/1927 @ 12:40 -> 05/28/1927 @ 10:43 |Pharaoh Montoya bloods acclamation yesteryear's +06/05/1927 @ 15:47 -> 06/07/1927 @ 00:26 |Pawned subplot's Dzerzhinsky +11/18/1927 @ 13:33 -> 11/21/1927 @ 19:10 |Splurges +06/05/1928 @ 13:34 -> 06/06/1928 @ 17:32 |Auricle's precognition cytoplasm +07/02/1928 @ 05:14 -> 07/03/1928 @ 00:20 |Saboteurs crassest moderator's waif's fear's +10/24/1928 @ 02:11 -> 10/28/1928 @ 16:48 |Restorers indifferent Schwinger's Valentino's bowing +11/01/1928 @ 09:39 -> 11/05/1928 @ 02:18 |Dalmatians lionizing colonist hustle tawdrier +11/05/1928 @ 06:20 -> 11/08/1928 @ 17:22 |Boob's pied sorest +12/28/1928 @ 01:34 -> 12/28/1928 @ 01:43 |Intermezzo's cockerel +04/30/1929 @ 02:40 -> 05/02/1929 @ 13:42 |Unnecessarily imploring rebut Cuvier +08/29/1929 @ 08:55 -> 08/31/1929 @ 09:04 |Motherland distances cornbread reflect +09/16/1929 @ 11:58 -> 09/19/1929 @ 18:10 |Misstate ghoul +05/13/1930 @ 20:14 -> 05/15/1930 @ 01:57 |Groan's crabbed fifty's Mugabe +09/07/1930 @ 21:39 -> 09/11/1930 @ 14:25 |Surpasses received Kidd Midway consoled +11/06/1930 @ 05:01 -> 11/09/1930 @ 15:37 |Seafaring ravined petunia's babe's hose +06/24/1931 @ 20:40 -> 06/28/1931 @ 08:56 |Stiffening hodgepodges embarkation's +07/18/1931 @ 00:40 -> 07/21/1931 @ 21:13 |Colony explosions Gienah's +11/07/1931 @ 09:33 -> 11/10/1931 @ 07:30 |Intoxicant's Rex amphetamine's curacy's cardiologists +11/28/1931 @ 13:19 -> 11/29/1931 @ 10:56 |Sawdusting vicariously brunette's +03/22/1932 @ 07:58 -> 03/23/1932 @ 15:26 |Mailboxes pigment's jasmine +05/06/1932 @ 19:31 -> 05/08/1932 @ 15:08 |Felix's possibles debilitation's +12/07/1932 @ 14:30 -> 12/10/1932 @ 10:24 |Electioneering truces +03/18/1933 @ 16:50 -> 03/22/1933 @ 13:55 |Rotisseries powwowed abutment's crash evacuee's +08/24/1933 @ 09:24 -> 08/25/1933 @ 13:22 |Usage +12/28/1933 @ 10:48 -> 12/28/1933 @ 13:14 |Martial knitted woodenness's GE glassful's +01/12/1934 @ 00:25 -> 01/14/1934 @ 16:05 |Languors uncommonly magnetizing cataclysm +06/23/1934 @ 07:35 -> 06/28/1934 @ 00:23 |Pogromed +06/26/1934 @ 12:56 -> 07/01/1934 @ 00:06 |Outburst Delilah upbeat hooky ideologies +08/06/1934 @ 20:27 -> 08/09/1934 @ 08:18 |Effectuates kilogram region's Debby's +10/06/1934 @ 06:31 -> 10/11/1934 @ 01:13 |Leftest tire's propagation +10/21/1934 @ 18:18 -> 10/21/1934 @ 23:06 |Delta applause's backside allusion Lamb's +11/21/1934 @ 01:28 -> 11/25/1934 @ 12:28 |Milling discontinuances migration's introducing +11/29/1934 @ 21:28 -> 12/01/1934 @ 11:52 |Porpoise Angora's overwrite +04/19/1935 @ 01:32 -> 04/20/1935 @ 09:03 |Elbowing ricked +07/18/1935 @ 08:15 -> 07/22/1935 @ 18:48 |Anaerobic filmmakers +08/08/1935 @ 21:02 -> 08/10/1935 @ 02:18 |Isherwood's yearning's Modesto's forswearing +10/06/1935 @ 15:39 -> 10/11/1935 @ 07:45 |Mannerism's Koppel's Philippe's +11/06/1935 @ 22:58 -> 11/10/1935 @ 12:09 |Flog impacts +05/03/1936 @ 12:03 -> 05/07/1936 @ 06:07 |Pluralities Capitol +07/15/1936 @ 11:02 -> 07/17/1936 @ 19:10 |Sancta nones +08/05/1936 @ 14:13 -> 08/06/1936 @ 04:38 |Rustbelt slacking valedictorians +01/04/1937 @ 11:54 -> 01/04/1937 @ 14:31 |Gynecological Babur barking +05/20/1937 @ 04:24 -> 05/20/1937 @ 05:31 |Mayra's Muscovy grumble +02/08/1938 @ 12:02 -> 02/12/1938 @ 14:25 |Graveyards aha leftover's intrusted tobacco +02/15/1938 @ 11:18 -> 02/16/1938 @ 18:50 |Pt vulcanize Chayefsky Harlan cerebella +03/31/1938 @ 18:28 -> 04/01/1938 @ 12:12 |Musicologist's Lorie Indiana monograming +04/28/1938 @ 14:00 -> 05/01/1938 @ 17:35 |Stalingrad stagnating flame stacked +07/18/1938 @ 08:36 -> 07/21/1938 @ 10:02 |Vacuum lingering cantaloup +09/10/1938 @ 15:13 -> 09/11/1938 @ 13:50 |Unpleasant loudly ingredients owning +12/30/1938 @ 01:27 -> 12/30/1938 @ 18:30 |Exigent circumventing pundit Dietrich pertinents +11/27/1939 @ 22:21 -> 11/28/1939 @ 18:06 |Novice greasier +12/02/1939 @ 06:49 -> 12/06/1939 @ 05:46 |Lunchtimes compression Mazola's +02/27/1940 @ 09:29 -> 02/27/1940 @ 10:01 |Somnambulism Appomattox's ductile shades +01/21/1941 @ 00:48 -> 01/21/1941 @ 04:20 |Dysentery Oldfield phonograph lavendered +08/01/1941 @ 01:14 -> 08/02/1941 @ 09:11 |Garrotes species sandpapering +11/12/1941 @ 15:08 -> 11/13/1941 @ 05:37 |Gutierrez's discarding adjudicators astutest Alyce's +06/18/1942 @ 19:24 -> 06/19/1942 @ 09:01 |Lanyard +06/28/1942 @ 14:03 -> 06/30/1942 @ 02:29 |Panoramic murderesses +09/22/1942 @ 00:58 -> 09/26/1942 @ 21:44 |Malplaquet's Benelux pantsuit +12/06/1942 @ 09:46 -> 12/07/1942 @ 04:33 |Manuel glorified four +09/02/1943 @ 18:01 -> 09/03/1943 @ 10:39 |Decriminalized Bacon +12/15/1943 @ 15:40 -> 12/18/1943 @ 22:57 |Laundress Galibi's equine +01/30/1944 @ 01:51 -> 01/30/1944 @ 03:52 |Attenuates rarefying Pomeranian vivisection's laughably +03/18/1944 @ 17:11 -> 03/20/1944 @ 11:57 |Laundry's Cote's +06/28/1944 @ 23:38 -> 06/29/1944 @ 13:04 |Film's colonizer +04/20/1945 @ 12:03 -> 04/22/1945 @ 13:53 |Chandragupta shrimp payoff barometric zone's +06/08/1945 @ 11:23 -> 06/13/1945 @ 02:29 |Fling Jinnah +03/06/1946 @ 11:55 -> 03/11/1946 @ 04:52 |Drowning snailing drawbacks +03/17/1946 @ 12:16 -> 03/19/1946 @ 14:30 |Needles awnings roughhouses +03/19/1946 @ 21:06 -> 03/22/1946 @ 12:43 |Magpie's doohickey +06/22/1946 @ 19:16 -> 06/23/1946 @ 19:02 |Dobbin's spiked +10/23/1946 @ 15:44 -> 10/26/1946 @ 17:49 |Nauru Worcester +07/28/1947 @ 19:04 -> 08/03/1947 @ 02:17 |Manufacturer preterit's delectable fulcrum +03/25/1948 @ 11:07 -> 03/28/1948 @ 01:40 |Shaggiest Chan astrakhan marten +06/15/1948 @ 14:24 -> 06/17/1948 @ 19:03 |Cabrini directer pennies +05/25/1949 @ 11:16 -> 05/26/1949 @ 12:58 |Anybodies keystroke's +08/07/1949 @ 21:47 -> 08/08/1949 @ 13:21 |Ormolu Stephenson diatoms +10/23/1949 @ 19:18 -> 10/27/1949 @ 02:41 |Smouldering hales curios refinished dogmatic +10/28/1949 @ 03:45 -> 10/31/1949 @ 22:17 |Principals six Geller's +06/24/1950 @ 10:34 -> 06/28/1950 @ 12:35 |Disembowels +07/11/1950 @ 03:22 -> 07/12/1950 @ 17:20 |Coiffing Trent cosmologies penalizes minuteness's +07/20/1950 @ 14:25 -> 07/24/1950 @ 02:35 |Recreant eclipsed +10/13/1950 @ 21:53 -> 10/17/1950 @ 14:07 |Dredger +10/30/1950 @ 14:11 -> 10/31/1950 @ 15:34 |Unleashing tusk's incidences +12/10/1951 @ 05:28 -> 12/10/1951 @ 20:02 |Linemen +09/03/1952 @ 05:06 -> 09/03/1952 @ 11:52 |Simmons +11/05/1952 @ 15:24 -> 11/06/1952 @ 21:10 |Sheers quiche mixture's proprietorship's cone +12/04/1952 @ 02:54 -> 12/05/1952 @ 18:40 |Unreal collaboration jabots pigeoned analytics +09/04/1953 @ 09:24 -> 09/08/1953 @ 06:57 |Contentedness's perpendicular atmosphere +11/13/1953 @ 09:24 -> 11/17/1953 @ 03:12 |Hilbert's +04/01/1954 @ 05:40 -> 04/02/1954 @ 21:14 |Think equipment's sturdiness's birdbath's +06/16/1954 @ 01:30 -> 06/21/1954 @ 00:11 |Quotients prerequisite +02/06/1955 @ 07:45 -> 02/10/1955 @ 08:35 |Jami's shard's +07/19/1955 @ 04:27 -> 07/20/1955 @ 12:47 |Nanjing Apollonian heath's undeclared zinnia +08/13/1955 @ 15:47 -> 08/14/1955 @ 06:57 |Agglomerations wire Prescott's Mexicali extremer +09/18/1956 @ 21:45 -> 09/21/1956 @ 14:34 |Vouched Woodrow's +01/28/1957 @ 02:11 -> 01/28/1957 @ 07:56 |Intolerable cheekiness's reorganized blustering +05/13/1957 @ 17:09 -> 05/15/1957 @ 21:05 |Preferential blobbed Na +09/13/1957 @ 09:37 -> 09/16/1957 @ 11:59 |Reflexive +01/07/1958 @ 04:17 -> 01/07/1958 @ 18:53 |Slaver's bewared +05/13/1958 @ 09:54 -> 05/18/1958 @ 05:05 |Gentlest madcaps recaptures vestibule's +01/14/1959 @ 17:00 -> 01/18/1959 @ 19:12 |Stepchildren +05/21/1959 @ 23:01 -> 05/24/1959 @ 10:46 |Tailwind's preaches dappling ventricle's +07/19/1959 @ 10:37 -> 07/22/1959 @ 14:24 |Slingshot Cognac's insulate +01/03/1960 @ 05:18 -> 01/06/1960 @ 02:14 |Wren's carcinoma's jellied plateau engine's +03/06/1960 @ 21:51 -> 03/07/1960 @ 13:27 |Assessor cigar Bridges mutiny's freezing +04/13/1960 @ 20:14 -> 04/15/1960 @ 05:02 |Rios Hormel's +11/28/1960 @ 20:04 -> 11/28/1960 @ 22:29 |Sporran's extraordinaries Scotsmen findings +12/24/1960 @ 01:08 -> 12/27/1960 @ 20:51 |Meadows Alfredo valentine +08/01/1961 @ 08:23 -> 08/01/1961 @ 14:11 |Pavlova's misogynist munch instability temps +08/01/1962 @ 05:08 -> 08/03/1962 @ 15:28 |Betrothals Sexton's At's winced pilings +08/10/1962 @ 00:32 -> 08/10/1962 @ 07:04 |Quadruplets Karl dicks +03/13/1963 @ 06:02 -> 03/17/1963 @ 16:26 |Revitalization's Estelle's term +03/13/1963 @ 12:23 -> 03/14/1963 @ 21:32 |Moss executors +11/17/1963 @ 04:36 -> 11/21/1963 @ 00:04 |Overdid glassware charioteered +05/18/1964 @ 08:46 -> 05/20/1964 @ 21:54 |Demonstrated Shaffer's bobbling +07/13/1964 @ 18:48 -> 07/15/1964 @ 03:11 |Wingspans positing +07/20/1964 @ 06:56 -> 07/20/1964 @ 22:49 |Gizzard's galvanizing +09/09/1965 @ 20:38 -> 09/11/1965 @ 07:58 |Locomotion +01/18/1966 @ 00:24 -> 01/18/1966 @ 05:11 |Vamoose Madeira bishopric misstatement's +08/07/1966 @ 13:43 -> 08/12/1966 @ 08:03 |Parallelled penned samba's positron +08/23/1966 @ 09:52 -> 08/24/1966 @ 14:31 |Scrapes Cameroon's attorney Garbo's +09/24/1966 @ 03:39 -> 09/26/1966 @ 06:34 |Theater hosted condescend +02/22/1967 @ 22:10 -> 02/24/1967 @ 16:39 |Crossness Angelina's +09/09/1967 @ 10:23 -> 09/13/1967 @ 14:27 |Conservatory's crestfallen pluralized ornamental +10/26/1967 @ 01:46 -> 10/29/1967 @ 11:17 |Accelerated +02/10/1968 @ 11:09 -> 02/14/1968 @ 02:02 |Factions Sharpe's +05/08/1968 @ 06:25 -> 05/09/1968 @ 16:11 |Nesselrode's hiss preached shebangs +06/04/1969 @ 02:13 -> 06/04/1969 @ 10:49 |Wavelet +06/04/1969 @ 02:18 -> 06/09/1969 @ 05:29 |Dike's daylight's subtotalling indignation +06/07/1969 @ 22:31 -> 06/10/1969 @ 16:15 |Sex's seaway witch's vagina's +11/15/1969 @ 19:40 -> 11/17/1969 @ 14:24 |Hullabaloos brute's Fern's Milken's +01/23/1970 @ 18:06 -> 01/27/1970 @ 15:14 |Cowpoke's irrelevance +07/20/1970 @ 18:04 -> 07/23/1970 @ 22:25 |Undergrad's gondolas +11/02/1970 @ 15:52 -> 11/05/1970 @ 00:19 |Venting Shoshone's mockingbird fondly +11/15/1970 @ 23:51 -> 11/17/1970 @ 06:04 |Leftovers +11/30/1970 @ 20:13 -> 12/05/1970 @ 21:53 |Rhapsodizes protuberances whiplashes +06/02/1971 @ 01:13 -> 06/03/1971 @ 19:30 |Arbitration's +08/25/1971 @ 20:19 -> 08/27/1971 @ 19:16 |Consequently +11/15/1971 @ 06:06 -> 11/15/1971 @ 17:09 |Undercharging denseness acquitted arsonists euthanasia's +01/24/1972 @ 11:48 -> 01/28/1972 @ 20:16 |Ballsiest janitor +05/05/1972 @ 07:27 -> 05/05/1972 @ 09:42 |Molders saddening tenaciously Pruitt +09/28/1972 @ 07:26 -> 10/01/1972 @ 13:48 |Yank Armstrong skull's +10/19/1972 @ 11:35 -> 10/21/1972 @ 18:55 |Sadat billowed canvasser walrus Anabaptist +10/19/1972 @ 17:12 -> 10/22/1972 @ 05:39 |Clocks chance twiggiest cobra's sparest +10/26/1972 @ 19:47 -> 10/29/1972 @ 10:51 |Fibulae +04/13/1973 @ 23:53 -> 04/17/1973 @ 11:55 |Desalinated Kirby +06/22/1973 @ 06:55 -> 06/24/1973 @ 20:44 |Gibed conduit +10/05/1973 @ 05:46 -> 10/08/1973 @ 09:47 |Merriam Babel's Noreen pesetas +01/05/1974 @ 22:10 -> 01/06/1974 @ 10:56 |Busters scenic detoxified unfamiliar +01/15/1974 @ 10:29 -> 01/20/1974 @ 05:05 |Butterfly's examine unplugs sprucer dictations +01/24/1974 @ 05:57 -> 01/25/1974 @ 08:56 |Hefner's Marie's Mafias putt's enquiring +02/06/1974 @ 14:33 -> 02/10/1974 @ 18:59 |Issuance's lassoed beasts breakfasted confusingly +11/23/1974 @ 21:06 -> 11/24/1974 @ 12:30 |Squadron's +06/18/1975 @ 01:01 -> 06/23/1975 @ 08:17 |Trolleys Cameron pianist spelt southwestern +09/18/1975 @ 23:43 -> 09/19/1975 @ 09:11 |Unbuckles misfitted Cheshire disgracing +05/21/1976 @ 02:28 -> 05/23/1976 @ 09:35 |Premised graduations +07/31/1976 @ 21:40 -> 08/05/1976 @ 00:55 |Suffocation healthfulness rallied amulets satisfactorily +09/27/1976 @ 09:04 -> 09/30/1976 @ 09:21 |Adheres disintegrated harpoon's marooning peg +12/18/1976 @ 03:04 -> 12/21/1976 @ 02:02 |Pooching cuttlefishes imposture thorny +01/11/1977 @ 08:14 -> 01/13/1977 @ 09:51 |Landlords gabbles builder's laureating +03/09/1977 @ 01:24 -> 03/12/1977 @ 16:59 |Potboiler idiomatically +03/21/1977 @ 00:47 -> 03/21/1977 @ 17:00 |Deducible mailer Consuelo winging chameleon +12/09/1977 @ 20:35 -> 12/13/1977 @ 15:44 |Sosa swings +03/24/1978 @ 11:32 -> 03/27/1978 @ 17:26 |Wars Gregorio +02/13/1979 @ 20:48 -> 02/16/1979 @ 08:19 |Fidgets liquoring syphilis +03/15/1979 @ 07:42 -> 03/18/1979 @ 20:29 |Parking shoestrings disharmony's lassie +06/22/1979 @ 18:16 -> 06/26/1979 @ 11:16 |Stieglitz indiscreet visions buntings watchtower +08/20/1979 @ 12:01 -> 08/25/1979 @ 02:19 |Flushest Nate listen +11/20/1980 @ 17:22 -> 11/25/1980 @ 02:19 |Probability's inflexible mes sluggards +01/07/1981 @ 20:55 -> 01/09/1981 @ 23:19 |Flange internee inspector's +03/31/1981 @ 18:26 -> 04/05/1981 @ 07:44 |Sextets commits expectant +07/20/1982 @ 14:09 -> 07/23/1982 @ 21:59 |Vauban +10/12/1982 @ 08:50 -> 10/16/1982 @ 20:45 |Maltreated emulates popularize +10/25/1982 @ 07:17 -> 10/27/1982 @ 08:53 |Homeboy Velázquez Caesarean Mobil's Cheyenne's +12/13/1982 @ 22:30 -> 12/19/1982 @ 01:55 |Trellises binned hanky's Eurasia's destinies +12/31/1982 @ 01:21 -> 01/02/1983 @ 17:36 |Gyration's antiperspirant's +06/20/1983 @ 12:23 -> 06/24/1983 @ 17:32 |Deerskin +07/07/1983 @ 23:24 -> 07/11/1983 @ 02:42 |Gunnysacks heiress's cantons chase Polynesia's +11/01/1983 @ 23:44 -> 11/05/1983 @ 21:00 |Alexander cashier rays lackey filaments +11/16/1983 @ 21:22 -> 11/17/1983 @ 06:34 |Deflects reprinting flotillas marksmen haughtiness +01/01/1984 @ 23:49 -> 01/03/1984 @ 12:56 |Dissolutes Mobile's Ramsay's +02/11/1984 @ 18:24 -> 02/11/1984 @ 19:51 |Liqueur's lauds plighted +12/18/1985 @ 13:45 -> 12/19/1985 @ 02:48 |Filled pyrotechnics apostolic disorders +02/06/1986 @ 12:52 -> 02/06/1986 @ 16:07 |Concentric defense's +05/17/1986 @ 03:08 -> 05/21/1986 @ 01:12 |Render +12/18/1986 @ 02:38 -> 12/18/1986 @ 19:00 |Touchdowns Emory Doubleday's +12/24/1986 @ 11:06 -> 12/29/1986 @ 06:49 |Pontiffs horsewomen +01/03/1987 @ 23:12 -> 01/05/1987 @ 21:09 |Wraparounds tittling azimuth's +04/28/1987 @ 21:52 -> 05/03/1987 @ 12:14 |Commentary +08/03/1987 @ 21:11 -> 08/05/1987 @ 12:00 |Pinafore +10/30/1987 @ 22:05 -> 11/01/1987 @ 09:32 |Scourges +11/10/1987 @ 20:57 -> 11/15/1987 @ 22:00 |Orchards +12/20/1987 @ 08:50 -> 12/25/1987 @ 12:25 |Scapula's remounted scientist's Bonaventure +01/03/1988 @ 07:50 -> 01/07/1988 @ 15:22 |Idiom's propriety's averaging +07/07/1988 @ 13:29 -> 07/08/1988 @ 16:32 |Bushelled +09/11/1988 @ 04:09 -> 09/12/1988 @ 08:42 |Confrontational Olin's hoppers cede +12/20/1988 @ 13:08 -> 12/25/1988 @ 18:58 |Handouts that's +12/22/1988 @ 00:37 -> 12/27/1988 @ 07:42 |Uptight Greta's embellishment candider inquisitively +04/03/1989 @ 21:28 -> 04/04/1989 @ 16:15 |Klondiked undergoes plagiarize immediate +04/07/1989 @ 16:08 -> 04/10/1989 @ 16:16 |Flickers manly scrawniest commitments impeaches +05/05/1989 @ 03:46 -> 05/07/1989 @ 11:48 |Caesura's teeters rainy Neva +05/24/1990 @ 04:53 -> 05/27/1990 @ 12:13 |Mamma's bullshit's agglutinating +11/19/1990 @ 01:05 -> 11/21/1990 @ 11:00 |Krasnodar nick Jewell's +11/19/1990 @ 20:16 -> 11/25/1990 @ 02:42 |Boomed +08/30/1991 @ 00:12 -> 09/02/1991 @ 04:26 |Elwood soups motherhood's +10/25/1991 @ 14:11 -> 10/29/1991 @ 02:31 |Tyrannizing +05/19/1992 @ 04:00 -> 05/19/1992 @ 20:21 |Linkage ebbing naval aspect's unfailing +07/10/1992 @ 23:56 -> 07/12/1992 @ 17:03 |Vying +10/17/1992 @ 03:20 -> 10/19/1992 @ 13:54 |Hal aster roadway gristly +12/28/1992 @ 02:03 -> 12/30/1992 @ 13:21 |Sharks length's +02/05/1994 @ 23:07 -> 02/10/1994 @ 19:24 |Ameba's rested +07/15/1994 @ 13:55 -> 07/19/1994 @ 03:34 |Comically +09/18/1994 @ 23:20 -> 09/22/1994 @ 20:30 |Modeling Troy vixen's articulating evolutionary +10/27/1995 @ 03:19 -> 10/29/1995 @ 10:55 |Hindered collapse marched emphasis's +06/26/1996 @ 18:41 -> 06/30/1996 @ 02:34 |Hear peephole's +04/07/1997 @ 23:10 -> 04/10/1997 @ 06:55 |Folio's +06/12/1997 @ 16:27 -> 06/16/1997 @ 18:19 |Instantaneously toast's agreements warp +06/19/1997 @ 08:37 -> 06/24/1997 @ 06:56 |Undefined weeder sophism's allegory's sandpapers +07/21/1997 @ 12:35 -> 07/24/1997 @ 23:14 |Collided passerby sextants landlocked prudish +08/09/1997 @ 15:38 -> 08/12/1997 @ 05:17 |Transfixt Udall numbing subvert +09/08/1997 @ 23:21 -> 09/11/1997 @ 02:18 |Debbie Bolshevist ending +05/04/1998 @ 11:27 -> 05/06/1998 @ 17:19 |Optimism Arcturus's effectuating ratcheted +09/07/1998 @ 05:25 -> 09/12/1998 @ 03:42 |Deliriums +01/10/1999 @ 05:11 -> 01/13/1999 @ 02:03 |Holographs Rambo's +02/03/1999 @ 05:07 -> 02/07/1999 @ 02:36 |Louisianans jimmying artistes leased +05/20/1999 @ 03:37 -> 05/21/1999 @ 17:01 |Freeholder's +10/01/1999 @ 05:42 -> 10/04/1999 @ 04:09 |Notepaper's Abernathy's +11/17/1999 @ 19:43 -> 11/21/1999 @ 22:14 |Suicidal shirtwaist +12/19/1999 @ 18:55 -> 12/20/1999 @ 20:30 |Libellers +10/19/2000 @ 22:39 -> 10/20/2000 @ 04:55 |Plodder's moulting smokestacks instruments vagrancy's +05/30/2001 @ 10:07 -> 06/01/2001 @ 22:58 |Bulimia yank +12/02/2001 @ 22:03 -> 12/06/2001 @ 10:51 |Serviettes +01/24/2002 @ 09:14 -> 01/29/2002 @ 06:28 |Biddy +06/02/2002 @ 06:15 -> 06/05/2002 @ 15:12 |Thermoplastic Monroe's atrocity's Brandy's demoralizes +09/20/2002 @ 05:40 -> 09/24/2002 @ 21:32 |Guinevere's inspired limitation's +12/12/2002 @ 23:48 -> 12/14/2002 @ 04:07 |Disconcerted Osage observational +12/31/2002 @ 19:41 -> 01/01/2003 @ 12:21 |Tithes gig's +03/02/2003 @ 02:20 -> 03/03/2003 @ 21:24 |Editor's hazels epiglottises repercussion +03/23/2003 @ 20:46 -> 03/26/2003 @ 23:11 |Planter's Gambia Vietnamese +08/27/2003 @ 03:52 -> 08/30/2003 @ 10:56 |Dossier's MacArthur +01/11/2004 @ 15:57 -> 01/15/2004 @ 19:29 |Spindliest +05/10/2004 @ 09:21 -> 05/12/2004 @ 22:19 |Abrupt upbeats +05/14/2004 @ 17:37 -> 05/15/2004 @ 10:39 |Ordure's +07/02/2004 @ 20:21 -> 07/05/2004 @ 06:23 |Respectful superhighway +07/03/2004 @ 15:53 -> 07/03/2004 @ 17:39 |Magdalena unzip modernest Shapiro's Guerra +09/15/2005 @ 05:22 -> 09/19/2005 @ 02:03 |Newsed tarpons Boniface jocular +05/29/2006 @ 11:54 -> 06/03/2006 @ 02:31 |Sunsetting +02/17/2007 @ 18:09 -> 02/21/2007 @ 11:20 |Zorn centennial Domitian's nations overwrites +04/03/2007 @ 10:23 -> 04/04/2007 @ 04:01 |Humerus's organdy's Borobudur's escapist evaluations +05/17/2007 @ 05:37 -> 05/18/2007 @ 10:26 |Tallow's woodcarving Beijing potables +07/28/2007 @ 00:10 -> 07/31/2007 @ 00:52 |Dispirits composting willies hygrometers presaged +03/04/2008 @ 07:26 -> 03/06/2008 @ 18:45 |Deformation boggling brooms Episcopals trademarking +09/20/2008 @ 13:10 -> 09/25/2008 @ 09:28 |Recombining mantilla's lisped revisits +07/11/2009 @ 11:18 -> 07/14/2009 @ 12:43 |Sclerosis +08/17/2009 @ 01:46 -> 08/20/2009 @ 15:21 |Awkward +08/21/2009 @ 14:26 -> 08/22/2009 @ 08:26 |Defender's Chengdu cashew's Regor Deanne's +02/25/2010 @ 10:25 -> 02/27/2010 @ 05:20 |Optimums Hafiz's +07/15/2010 @ 08:43 -> 07/16/2010 @ 15:41 |Cyanide +07/20/2010 @ 11:56 -> 07/22/2010 @ 20:21 |Croup commode's geographical Ferber's Aguilar's +02/22/2011 @ 11:23 -> 02/26/2011 @ 07:21 |Covenants useful smoker's +06/15/2011 @ 05:21 -> 06/20/2011 @ 05:07 |Formative blissful experimentation's +07/14/2011 @ 09:43 -> 07/17/2011 @ 23:13 |Opens Tutankhamen's +04/02/2012 @ 03:57 -> 04/03/2012 @ 00:10 |Reexamines mugger's zephyr's morn's +04/07/2012 @ 16:05 -> 04/10/2012 @ 07:50 |Transpiration's sellout bleeds infusions spent +01/01/2013 @ 11:53 -> 01/05/2013 @ 21:24 |Rectum's charged cucumbers bashes outpatient's +02/10/2013 @ 21:23 -> 02/16/2013 @ 00:05 |Montezuma hairpins insetting Kochab's +08/19/2013 @ 18:34 -> 08/19/2013 @ 22:38 |Meteoroids +08/25/2013 @ 18:11 -> 08/29/2013 @ 13:50 |Lobotomy's quicksand familiarize Syracuse intermediary +04/22/2014 @ 23:15 -> 04/25/2014 @ 08:47 |Eastman vomited policemen fallacy adverbs +06/28/2014 @ 05:11 -> 07/02/2014 @ 10:33 |Bellyful's apportions +10/07/2014 @ 23:24 -> 10/12/2014 @ 00:19 |Misgoverned +01/15/2015 @ 15:38 -> 01/19/2015 @ 04:48 |Electrocutes cob truncates intrigued +05/28/2015 @ 07:38 -> 05/29/2015 @ 04:49 |Remount fragrance's +06/24/1912 [1] Flurry's docks courteously McKinley's apse's +07/01/1912 [1] Abrogates fraud's empty +07/16/1912 [1] Truckles vicissitudes +09/07/1943 [1] Transplant philologist's +04/29/1944 [1] Debases ammunition's fructifying tatty localing +08/02/1944 [1] Rescinds +10/29/1944 [1] Ascension's eighths democrat's wailing +01/14/1945 [1] Bevelling +08/01/1945 [1] Mortgagee doctrines robe's valedictories hermaphrodites +10/25/1945 [1] Amplitude's punctuating extraditing Mulroney +10/28/1945 [1] Canteens +06/10/1946 [1] Vows +03/30/1947 [1] Beaumont's Rothko +04/13/1947 [1] Jimmy derivation topographical evoking +09/14/1947 [1] Ga +04/30/1948 [1] Capitalization's flutist's +06/21/1948 [1] Besieger's spasmed Alcatraz's +08/13/1948 [1] Kaboom +10/26/1948 [1] Mummifying +02/02/1949 [1] Gadding Syria's +03/08/1949 [1] Unbridled Omayyad peacemaker's holocaust's +10/18/1949 [1] Sewing's juror trusted patrimony's +10/31/1949 [1] Cheever lily aerospace's fluffs +02/03/1950 [1] Congratulate legendary renovations unison's suburbanite +01/02/1951 [1] Savorier libertarians +01/21/1951 [1] Package uptown missive sphere moreover +03/07/1951 [1] Inmate mortgagee's stings +04/19/1951 [1] Borobudur's Clinton's censor +07/11/1951 [1] Lens Marcella's delimiter southerner's +07/31/1951 [1] Cockerel's +01/24/1952 [1] Mississauga Popper trachea's +05/10/1952 [1] Paroxysm flashiness's +07/19/1952 [1] Alcyone's temerity reclaimed Segre's soloing +09/17/1952 [1] Propaganda humanism Louisianians +11/10/1952 [1] Harper's mantissa's nautiluses +12/15/1952 [1] Brueghel's buddy Batista offensiveness +01/09/1953 [1] Visage Methodist Pontianak's +02/07/1953 [1] Roquefort's +07/13/1953 [1] Gandhian parsecs biathlon's reinstated +07/25/1953 [1] Depot carboy's unbosom +08/09/1953 [1] Gullet neighbor indelicacies +02/05/1954 [1] Drains defacement's +06/17/1954 [1] Virulently restrained +07/28/1954 [1] Sup soggy radishes Kinko +11/26/1954 [1] Firetrap's Ethernet +12/21/1954 [1] Airlifted womankind's Suetonius pities repatriation +12/22/1954 [1] Maurine Fanny's +02/06/1955 [1] Asphalt Aurora squidded pawnbroker leeward +02/20/1956 [1] Falter +09/06/1956 [1] Bisquick gimpiest imperialist +03/29/1957 [1] Conservators Coriolanus's +08/31/1957 [1] Socking parallaxes wellsprings kickiest escapades +11/08/1957 [1] Miniaturizing jail +11/21/1957 [1] Flintiest poplin's Clemson +08/13/1958 [1] Stiffen Swedenborg Hungarians +09/16/1958 [1] About stabilizing causals hesitates Bacardi's +12/21/1958 [1] Seymour Minnesotans qualms grungiest +04/21/1959 [1] Rime departing +05/21/1959 [1] Sectioning subleased Crecy's sloppiest +09/17/1959 [1] Beacon annuities pollywog's +11/21/1959 [1] Decency choreographers +06/21/1960 [1] Rosendo stipulates painter's +10/03/1960 [1] Convocations Klimt haft overstuffed whereon +12/10/1960 [1] Buber's habitual unholiest slue +03/27/1961 [1] Suffragists ova's marathoners creamery's +08/31/1961 [1] Cheesecake's pelts deicer normalcy +11/28/1961 [1] Nebula aureole's dictatorship's +06/13/1962 [1] Wire's pained +07/19/1962 [1] Salacious outskirt cloakroom's +10/21/1962 [1] Matricide's Underwood's +12/04/1962 [1] Sickness smudgiest legmen +08/04/1963 [1] McKnight's +09/04/1963 [1] Praised meltdowns Somalis +12/20/1963 [1] Instrumented Cordelia +05/22/1964 [1] Macedonian Bloomingdale's +06/27/1964 [1] Propagated basement +10/22/1964 [1] Yerevan's stinting teak apostate registrants +12/15/1964 [1] Whaler ants blooding vogue leopards +01/02/1965 [1] Accumulated Lucretia's Himalaya's driveway +03/24/1965 [1] Letha's +09/15/1965 [1] Plumes sensuous exigencies +12/08/1965 [1] Console +01/28/1966 [1] Samples preventible +02/08/1966 [1] Unpronounceable presuppose +03/15/1966 [1] Nominating comma cohered Catullus networking +05/06/1966 [1] Offenbach compatible insight redistrict +06/17/1966 [1] Antagonized kickers jockstrap's Minolta's +10/23/1966 [1] Copacabana +12/09/1966 [1] Uninterrupted handmaids incalculably flatly +12/30/1966 [1] Glimmerings relocatable differentiation Chesterfield's charcoal's +04/16/1967 [1] Vendor's exhausted Essie's rod +07/17/1967 [1] Squirrelled +07/20/1967 [1] Circumnavigation wackos gays inert nonuser +08/28/1967 [1] Trays Toltec's habituation +02/13/1968 [1] Murmuring sextons publisher's Ur's +04/13/1968 [1] Conduces +05/23/1968 [1] Protoplasm Afghan's +09/04/1968 [1] Castor's blarneyed +09/29/1968 [1] Wideness payees Shylock's Wycherley's smallest +01/08/1969 [1] Ageism debased gore excursion's +01/11/1969 [1] Dalian's brashness's deciding plagiarized Senior +01/19/1969 [1] Telecommutes Verdun's tonsillectomy +02/02/1969 [1] Croatia rococo's Cuvier's acknowledgment's +02/17/1969 [1] Closet drooled rollicking Amsterdam's Hegira +03/14/1969 [1] Uric Brazilian consult sweatiest +04/15/1969 [1] Struggle Blankenship's outcroppings +07/17/1969 [1] Meaner Martial +12/16/1969 [1] Skunk safekeepings canapé extraneous Brandeis's +03/17/1970 [1] Score +03/24/1970 [1] Macerate Isis brakeman Poltava +07/18/1970 [1] Menstruate bottled +12/16/1970 [1] Frothed dialog +12/28/1970 [1] Anther +01/29/1971 [1] Handicapper reversals +05/17/1971 [1] Aquinas +12/06/1971 [1] Loot lighthearted blindsiding Cleopatra tasty +04/12/1972 [1] Sponges prosperity's noncooperation +06/12/1972 [1] Stoplights vane's patients +06/14/1972 [1] Declaims fretting dissatisfaction's +09/24/1972 [1] Ravishing vulgarizes +10/19/1972 [1] Superiority's baptistery's antedate +11/07/1972 [1] Malignant duckbills mites peroxide's +10/19/1973 [1] Squishiest avalanches lark's muezzin's +01/21/1974 [1] Bismark's +02/03/1974 [1] Kyushu websites exhortation Melba's automaton's +05/09/1974 [1] Jehoshaphat albino overkilling Desdemona's +07/05/1974 [1] Tanked genitive +11/12/1974 [1] Cautiousness calamines lithium's fervidly chaperone's +01/15/1975 [1] Wringer unblocked audio's +02/18/1975 [1] Kebab's disarm Dramamine whittler lassitude's +04/21/1975 [1] Maroons loan's waist's daffodil +09/18/1975 [1] Hickey undetermined spray +12/23/1975 [1] Subordinating Cathay shambles +09/04/1976 [1] Silks blaze +10/27/1976 [1] Venturesome revoking debit +10/29/1976 [1] Inge scherzo's +12/28/1976 [1] Psychopath's unsure +01/23/1977 [1] Ally homographs raccoon's transubstantiation +02/08/1977 [1] Executable jiggles pickup reanimating grommet's +06/28/1977 [1] Politicized crape +08/30/1977 [1] Stylist's spooking Krupp's waterbeds gadfly +09/20/1977 [1] Ito's kegging resoundingly lore's +02/12/1978 [1] Cocky wasting menaces +05/06/1978 [1] Nurserymen keened acidifies Buford's +09/20/1978 [1] Rectifier's +09/22/1978 [1] Florine's gymnasia +02/06/1980 [1] Overreaches suborbital Madeleine +05/19/1980 [1] Overstatement synergy's +08/24/1980 [1] Efface herbicide Ramiro's +09/20/1980 [1] Unlikely testify Trondheim's +09/25/1980 [1] Jingoist's +03/26/1981 [1] Traverse +04/30/1981 [1] Settee's +05/09/1981 [1] Exhortations jelly's cabal +05/29/1981 [1] Extruding moseyed effusions auditor +07/21/1981 [1] Tobacco hypocrisy's slacks +08/05/1981 [1] Gabon's collying pays +11/11/1981 [1] Pickerel aboding aptness Poland +01/24/1982 [1] Farm's +02/03/1982 [1] Pantyhose +02/10/1982 [1] Knopf's Rachelle's Opel's innovation +02/17/1982 [1] Undergarments Elnora's +03/11/1982 [1] Husserl's Cd occurrences Jill's +10/14/1982 [1] Flamingo Sèvres selfsame disavowing +07/15/1983 [1] Electromagnetic implication's attachment's demagogue plighted +11/19/1983 [1] Nocturne +01/19/1984 [1] Deputation +06/05/1984 [1] Breaching Calvinists actuality's advertisement baritones +06/29/1984 [1] Miscalculated diluted +10/16/1984 [1] Ionosphere contiguity noisiness's +02/28/1985 [1] Mac requires corona mending's carpenters +05/28/1985 [1] Sandbox processor's overdraft's +12/15/1985 [1] Spruce +01/04/1986 [1] Atherosclerosis reinvents legerdemain's notation's +02/16/1986 [1] Narcissist +05/31/1986 [1] Fun jetting marquis felicity decathlon's +09/22/1986 [1] Bellhops June's bushing +12/20/1986 [1] Cockeyed weekending Chartres +01/30/1987 [1] Cornrowing heartburn's Lynn's cup resin +04/24/1987 [1] Guyana Punjabi's roisterer +07/11/1987 [1] Copped contract knacker's +07/19/1987 [1] Fencer's birthmark's reconstruct compellingly dissipates +10/03/1987 [1] Arden continents +12/04/1987 [1] Towns +01/20/1988 [1] Impetuously seeing's +08/18/1988 [1] Abhorrent cranial Cato surplice +09/12/1988 [1] Undecipherable Esperanza's +09/02/1989 [1] Imitations +12/22/1989 [1] Transmigrate +02/18/1990 [1] Precedence JFK distributing +06/21/1990 [1] Azimuth exhibits +08/30/1990 [1] Horsetails Heinlein's +12/14/1990 [1] Annoyances valuation +03/06/1991 [1] Knob delimit +05/21/1991 [1] Patriarchies churns vulcanized +01/25/1992 [1] Rag's province warding +12/08/1992 [1] Calking Thurmond's +05/07/1993 [1] Sledged sextants chance's +09/29/1993 [1] Masaryk diminuendo's Bond Moor's Bran's +10/04/1993 [1] Farthest sticklers chutes ragouts +10/16/1993 [1] Marcella Lindbergh firmware covers +06/03/1994 [1] Humps racier teat's cross stencil +08/20/1994 [1] Griffin's coauthor's +05/14/1995 [1] Curs nerdiest +02/29/1996 [1] Moo deviants snares overgrow +11/25/1996 [1] Pleasantries endears Wharton's encroaches +03/23/1997 [1] Kenneling G retorting branching's art +07/07/1997 [1] Shillelagh keens tritely Rodin's +11/12/1997 [1] Taklamakan +12/14/1997 [1] Speakeasies lashing's cancellations Boleyn's +05/04/1998 [1] Resplendently dose insufficiency's day's +05/24/1998 [1] Expeditionary +08/29/1998 [1] Deleted richer Japura's whetstone's +11/02/1998 [1] Truncating reproof's restating dignity's chi's +11/07/1998 [1] Meaty bubbles establishing versification +12/20/1998 [1] Gladlier friendliest +03/20/1999 [1] Floating consonant's hobbyhorse's Tahiti scimitar +05/30/1999 [1] Raid insulation colorfully mandibles +04/07/2000 [1] Chapping bequeaths satellites +05/17/2000 [1] Her Peron gavels footbridge's bacchanal's +07/10/2000 [1] Leaved mime's saltwater +08/04/2000 [1] Margins charting edgy personae +01/25/2001 [1] Accurateness hoed flakiness's +02/26/2001 [1] Toolboxes circularized +12/08/2001 [1] Overspill's Waikiki's cowlicks redirecting +08/06/2003 [1] Carbide's downscales glamorized geometrical mitten +09/01/2003 [1] Pedagoguing doll's outlet's +01/15/2004 [1] Communities packers pinch +06/21/2004 [1] Rush's +07/03/2004 [1] Chariot Hornblower's +11/09/2004 [1] Unforgivable exhorting demolish irrecoverable clearing +11/21/2004 [1] Silicone +12/07/2004 [1] Rheumier easiest Andrew's abbots +04/10/2005 [1] Cindy's palette gnash +10/19/2005 [1] Mazes +03/13/2006 [1] Midwinter unobstructed Ginger's incumbents +06/08/2006 [1] Eulogistic decoding groveling Alcibiades plankton +06/27/2006 [1] Randomizes berthing hurdles +07/21/2006 [1] Montaigne's reverie's niceness beats goading +08/19/2006 [1] Northerner rebuffing impalas rooftops +09/27/2006 [1] Cargo reversion Khan's Episcopalian semicircle +08/24/2007 [1] Elucidations ritzy panting +04/30/2008 [1] Accountability +10/06/2008 [1] Cosponsor chored +11/24/2008 [1] Wizard's Galahad's +12/17/2008 [1] Incivility erratically Hermite +02/14/2009 [1] Harpsichord mortgagers oldened +02/14/2009 [1] Pliers Suzanne Johns Olga's tripling +03/13/2009 [1] Environmentalist malts toxicology's Gadsden's +03/25/2009 [1] Administered warranty whirling +09/18/2009 [1] Methanol ilks +12/08/2009 [1] Poetic cadre abasement campground's extinguish +02/26/2010 [1] Maturer wantoning +08/16/2010 [1] Esau's brainchildren +08/21/2010 [1] Agreeably Brigham's misalignment +11/12/2010 [1] Humidified Rockford's keynote churlish +02/25/2011 [1] Socket ghastlier +04/10/2011 [1] Detrimental +05/05/2011 [1] Access imbibe +09/02/2011 [1] Gorgas flaunts parched +12/28/2011 [1] Collaboration Tenochtitlan's rapscallion psychologist's extincting +05/20/2012 [1] Trots lorry +06/03/2012 [1] Hoorayed assignment +06/11/2012 [1] Ah drifter's +04/26/2013 [1] Donald's +07/19/2013 [1] Woodcutter sanctimonious nightfall's crews +03/03/2014 [1] Uncoupling cabarets gondolier's +08/22/2014 [1] Pelleted discrepancies +10/15/2014 [1] Fizzling +03/14/2015 [1] Damneder poking markdown quagmire's +01/10/2016 [1] Hireling spellers +08/30/2016 [1] Gaffe's shrinks +10/01/2016 [1] Plenipotentiaries snooker calcified fileting Bessemer's +12/18/2016 [1] Acidity vaults +02/24/2017 [1] Psyched Sondra's +03/12/2017 [1] Nark sacristan's +04/06/2017 [1] Titanium +06/22/2017 [1] Tub grenadier's longing's gram's +08/19/2017 [1] Twaddling +06/07/2018 [1] Uppity +06/28/2018 [1] Retarded Ginsburg's nonce's +12/17/2018 [1] Succored desperadoes ascend +03/02/2019 [1] Silence Joy's keener consciousnesses +04/07/2019 [1] Beck's Ariosto's +04/30/2019 [1] Stepsister's +08/25/2020 [1] Ideas Gershwin +11/07/2020 [1] Slackening slovenlier reel +11/12/2020 [1] Oration's +12/29/2020 [1] Keep +03/02/2021 [1] Stockyard's consummation equivocates +03/31/2021 [1] Irruptions blatant Monteverdi's medicinals Woolworth +04/18/2021 [1] Assailing +08/08/2021 [1] Interfaith overwhelmingly afflicts posteriors Erasmus's +04/03/2022 [1] Inundating yuckiest technician tetrahedron's foresails +08/15/2022 [1] Heralded F stroked +10/09/2022 [1] Sixes unafraid decoded +11/28/2022 [1] Stupefied blips +06/26/2023 [1] Supplicate Terri +10/11/2023 [1] Boyishness's intuitive cask's Armageddon's +06/21/2024 [1] Sepulcher Bacall +06/27/2024 [1] Slivering +08/05/2024 [1] Dempsey's Intel's +04/04/2025 [1] Directorate inoffensive +04/25/2025 [1] Waddle saintliness's Mercia's denseness +05/15/2025 [1] Intensity hydrology Peel power +11/19/2025 [1] Wingspans affluence's +02/20/2026 [1] Dicky impersonator +03/20/2026 [1] Boneless rilling +05/11/2026 [1] Carnations nigger's +11/17/2026 [1] Barrios slicker's thirty's +03/26/2027 [1] Dizziest Kerry Ndjamena's pizzicato +04/06/2027 [1] Parenthetical chemotherapy +10/02/2027 [1] Provender's limericks +03/21/2028 [1] Dent nape's unevener irradiated denizen's +03/23/2028 [1] Tailgated gawkiness's +05/07/2028 [1] Elope hammerings complexioned +07/15/2028 [1] Describe hooter Surat's paramedicals +09/11/2028 [1] Inc videotaped sixteenth eyeliner +09/12/2028 [1] Resend sake sundries rumbaing +11/03/2029 [1] Blisters willful +11/07/2029 [1] Mascaraing assertive vulnerably pruned +11/30/2029 [1] O'Hara wrench elm +01/08/2030 [1] Cashier's sherbet earwax's stiffeners +05/07/2030 [1] Compatibles Joyner asynchronous +07/01/2030 [1] Empire's entwine +03/25/2031 [1] Proverbially unwarranted effectiveness +04/16/2031 [1] Nosedives pennon's disburse scalloping +07/01/2031 [1] Surrealist guppy unabated Gwendoline +07/21/2031 [1] Casting's carelessness Anselmo's +10/03/2031 [1] Autos +11/09/2031 [1] Cockscomb's +12/18/2031 [1] Succumb Key's Cossacks blackness +01/24/2032 [1] Sidelined yell +01/31/2032 [1] Thebes determining glutting manorial Barbra +04/27/2032 [1] Cringing Osborne +05/26/2032 [1] Confine lames +08/03/2032 [1] Ceremonial straw's antelope's Mercer Kathiawar's diff --git a/test/data/conf b/test/data/conf new file mode 100644 index 0000000..de5efd0 --- /dev/null +++ b/test/data/conf @@ -0,0 +1,75 @@ +# +# Calcurse configuration file +# +# This file sets the configuration options used by Calcurse. These +# options are usually set from within Calcurse. A line beginning with +# a space or tab is considered to be a continuation of the previous line. +# For a variable to be unset its value must be blank, followed by an +# empty line. To set a variable to the empty string its value should be "". +# Lines beginning with "#" are comments, and ignored by Calcurse. + +# If this option is set to yes, automatic save is done when quitting +general.autosave=yes + +# If this option is set to yes, the GC is run automatically when quitting +general.autogc=no + +# If not null, perform automatic saves every 'periodic_save' minutes +general.periodicsave=0 + +# If this option is set to yes, confirmation is required before quitting +general.confirmquit=yes + +# If this option is set to yes, confirmation is required before deleting an event +general.confirmdelete=yes + +# If this option is set to yes, messages about loaded and saved data will not be displayed +general.systemdialogs=no + +# If this option is set to yes, progress bar appearing when saving data will not be displayed +general.progressbar=no + +# Default calendar view (0)monthly (1)weekly: +appearance.calendarview=0 + +# If this option is set to yes, monday is the first day of the week, else it is sunday +general.firstdayofweek=monday + +# This is the color theme used for menus : +appearance.theme=red on default + +# This is the layout of the calendar : +appearance.layout=1 + +# Width ( percentage, 0 being minimun width, fp) of the side bar : +appearance.sidebarwidth=1 + +# If this option is set to yes, notify-bar will be displayed : +appearance.notifybar=yes + +# Format of the date to be displayed inside notify-bar : +format.notifydate=%a %F + +# Format of the time to be displayed inside notify-bar : +format.notifytime=%T + +# Warn user if he has an appointment within next 'notify-bar_warning' seconds : +notification.warning=300 + +# Command used to notify user of an upcoming appointment : +notification.command=printf '\a' + +# Notify all appointments instead of flagged ones only +notification.notifyall=no + +# Format of the date to be displayed in non-interactive mode : +format.outputdate=%D + +# Format to be used when entering a date (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd) (4)yyyy-mm-dd: +format.inputdate=1 + +# If this option is set to yes, calcurse will run in background to get notifications after exiting +daemon.enable=no + +# If this option is set to yes, activity will be logged when running in background +daemon.log=no diff --git a/test/data/todo b/test/data/todo new file mode 100644 index 0000000..6f1c0e0 --- /dev/null +++ b/test/data/todo @@ -0,0 +1,197 @@ +[7] Wheeling predictor aggrieve dentist's vegetable +[-8] Stine's Napier's +[9] Gloriously slams +[-6] Reigning +[5] Television +[3] Aladdin ancestoring matzohs +[-8] Holloway's turnip's +[1] Nary parabled Louvre's fleetest mered +[-7] Josef heir's flake +[-4] Spins Mondrian's velveteen +[-7] Phone's backrest's +[2] Surgical handlers fodder Crimea +[-1] Finality surging studentship inversely terry +[-3] Knitwear's cruet +[-6] Scalper board coalescence's speedsters Tabatha's +[6] Apprehend domino Olivier's +[7] Acid bicepses magnetizing Trotsky's +[-9] Tugboat warrantying +[4] Restrictive Gresham clinch thunderhead +[1] Stench's approximates torus's gymnast's +[-5] Sixteen's +[-6] Pear bauble clemency's heartbreaks compresses +[-8] Bytes asters +[2] Freebasing Oppenheimer +[8] Secessionists Keogh's +[-6] Mass analog's Pharaoh's sensationalists +[-7] Dissidence +[4] Unbuttoned horsemen beggar's commander Griffin +[-6] Computations Yangtze slowpokes sourly bearskin's +[2] Finesses Sebastian's nightclubbed +[6] Rectangle mascots examiner blah screechy +[-3] Electrolyte equities infrastructure's +[2] Daydreamed +[5] Globed +[-2] Stores shamefaced slithering +[5] Reverend +[7] Proposed trespassed Bultmann +[3] Maui +[7] Restarts poisoner's Patterson's bucktooth +[3] Dislodged washboard inhabitant's +[5] Unsafer ingenuousness's supine +[-4] Ripeness's nirvana +[-7] Invigorating desserts copy's abbé +[-5] Shorthorns straddle carbons +[6] Lading +[-2] Drawling secretary's +[6] Ransom tablet +[3] Unbarring +[1] Uncorks aggression's Charmaine +[-1] Donor's mummers dunning +[-4] Leafiest tomcats crematoria Teletypes quires +[-7] Koshered numismatics's +[3] Wavelet's anapests flan +[8] Stroke farmyard's deterrent urned +[-6] Gunsmiths +[8] Chileans smirk footholds +[4] Erasmus pawnshop unmasked Andromache transgression's +[4] Heighten squirted +[-7] Hoodwinks Hector Playboy's fizzy +[1] Fillmore's ricks Federico kiloton's steamy +[5] Thor songwriters hookup +[-1] Chatty +[-6] Insensitivity shrill vainly Schindler's installs +[1] Originality channeled romantically +[-2] Advil +[9] Beefburger's +[2] Chorals incurred rediscovery's dioxide's firstly +[8] Designed breach salarying +[1] Phantom's Tagore +[-4] Harriet worlds +[5] Thereby +[-2] Edgewise +[8] Pleasanter +[1] Kindness redundant +[5] Soto's thrones tracing's +[-2] Jenner's cymbal's +[8] Surreals Zachery demonstrative athlete's +[-9] Roommate +[-1] Amening Hofstadter's excellently +[-4] Refining wildest +[2] Sudan's Ger's +[3] Yukon's expletives +[6] Cox foretold electroencephalogram gargoyle individualizing +[6] Speedier buzzer Natalia +[2] Sphinx telepathy's +[1] Nahum run debauches chambers +[-7] Extortion cacophonies +[4] Maharajas +[3] Virtuosi incompatible +[7] Timex's Semarang undercarriage gladiator +[-6] Meditates choreographing +[-2] Indianapolis career +[-8] Sensuality's pushover's bookkeeper's democrat's Establishment's +[-7] Sputtering Liz gentle +[8] Consonances wounding petties confessors blaze's +[-8] Pentateuch's acquiting clumsiest +[4] Angstrom +[7] Watson sepsis's depoliticizing wried La's +[-6] Terrapins +[9] Seasons +[-5] Bumpier drolly Sallust maws +[1] Overstayed +[-9] Sheer +[6] Arrayed jewelling +[8] Distrusted crinkly tels +[8] Wilier allegro dine dead +[-3] Sores brokerage prerecorded Clifton's +[8] Anyone Rowena's rumbled +[-1] Chairlift's abstruse Baikal mattresses dowry's +[5] Diaz's disrespected washtub's +[6] Eisner's conditioning +[-7] Ape's +[-9] Flirts provocative Liechtenstein mozzarella butterfat's +[3] Homeopathy triennials potteries ovoid +[2] Perpetrators hypnotize Iliad's personalizes dike +[5] Olympia's Esperanto's +[2] Receptors instil unripe +[7] Groggier +[-9] Journalists +[-8] Creator +[2] Brownsville +[-2] Breadwinner sulfides +[-7] Canoe impenetrable scrolled +[4] Figurehead's nurture +[7] Colombia Brahe's Johnston's spectacle jailors +[-5] Strawberries syllogism +[-1] Skimping brotherliness underscoring provendered +[-2] Augment Husserl's unselfishness apostle +[-2] Angle manipulates +[-8] Other attempts +[-6] Cook's scouring eh perimeter tomahawked +[1] Metropolises leg's ultimated inseminating minaret's +[2] Streptomycin's characterization's mercies entry's montage +[1] Hooky niggards +[-8] Embroidered Burton's cleave +[1] Sharon preponderances hostessing inimitable +[8] Briefcase +[-9] Sparta's reappraisals whiniest Jocasta's curator's +[-9] Becalm careers carotids +[4] Inundate +[6] Butchery piling's infomercial +[3] Delineated +[5] Unfinished surfs +[-8] Recourse's +[-6] Airtight overshot contest's ostentation +[8] Roadshow bit's confection pastors wenches +[-2] Saussure unselfish +[-3] Guy insulation's maria's +[7] Observers +[-2] Decomposition's registry inboards crowbars +[-1] Dahomey's facilitation's +[-8] Ehrlich laced countertenor's convergence's choices +[-2] Crochet +[1] Defiance's cliffhangers battery +[6] Multiplex +[6] Springfield directs framer's empties +[-3] Blunderbuss's +[-4] Flusters allegiance's +[-5] Trawled +[5] Carrousels Avalon's +[7] Constantine's ladings +[-1] Regencies requires monkeyshines pornographic +[7] Trolling +[1] Promontory's mutts silk disc's foot +[8] Vibrating +[-8] Homeyness hibernates sambas fierceness's +[8] Noise's quadruplicating multimedia Lyell +[3] Equilaterals shes minibuses nudity consolidates +[6] Hernia coccyges Orlon's Nirenberg +[-2] Soakings Armagnac sexuality's homelier pests +[7] Peso chalk's abiding +[-6] Portraiture littoral leavening +[-9] Boatman fleetingly radiator +[3] Sissy husks +[-7] Swearers gauntlets deepness acclaims stimulate +[-1] Comedown +[-9] Jubal's +[1] Town vigor alphabetical concluded +[-2] Baroda gazpacho's jolliness resupplies +[-9] Asked +[3] Chandrasekhar's gunfire's Earp's +[-3] Bickering's shorts eagerness +[-6] Ambiances Gagarin's milksops gargle +[-5] Rainforest rediscovered Bohemia +[-3] Syntactics smokehouses downward Quirinal reoccupy +[-9] Succored sweetbriers +[-4] Profess dismemberment fly syndicate +[-4] Billeting +[-9] Streetwalker's +[4] Haberdashery's rates tentative eBay's McCoy +[-3] Al's butterflying ovulate recitatives lumbered +[2] Eye treads Eng's Peron baize +[3] Podded +[-9] Plunderer heightened spindlier transiting +[-7] Pared +[-5] Blueprint's gemstone's ceremony anteater's +[3] Quarters diff --git a/test/day-001.sh b/test/day-001.sh new file mode 100755 index 0000000..614f6e3 --- /dev/null +++ b/test/day-001.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ "$1" = 'actual' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -d02/25/2011 +elif [ "$1" = 'expected' ]; then + cat <<EOD +02/25/11: + * Socket ghastlier + - ..:.. -> ..:.. + Covenants useful smoker's +EOD +else + ./run-test "$0" +fi diff --git a/test/day-002.sh b/test/day-002.sh new file mode 100755 index 0000000..66ebabd --- /dev/null +++ b/test/day-002.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '1912-06-23' "$CALCURSE" --read-only -D "$DATA_DIR"/ -d42 +elif [ "$1" = 'expected' ]; then + cat <<EOD +06/24/12: + * Flurry's docks courteously McKinley's apse's + +07/01/12: + * Abrogates fraud's empty + +07/10/12: + - 17:47 -> ..:.. + Impersonating integer broils blame + +07/11/12: + - ..:.. -> ..:.. + Impersonating integer broils blame + +07/12/12: + - ..:.. -> ..:.. + Impersonating integer broils blame + +07/13/12: + - ..:.. -> 03:18 + Impersonating integer broils blame + +07/16/12: + * Truckles vicissitudes +EOD +else + ./run-test "$0" +fi diff --git a/test/day-003.sh b/test/day-003.sh new file mode 100755 index 0000000..7534cd8 --- /dev/null +++ b/test/day-003.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '1912-06-23' "$CALCURSE" --read-only -D "$DATA_DIR"/ -d42 +elif [ "$1" = 'expected' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -s06/23/1912 -r42 +else + ./run-test "$0" +fi diff --git a/test/next-001.sh b/test/next-001.sh new file mode 100755 index 0000000..85ebd63 --- /dev/null +++ b/test/next-001.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '1912-07-10 04:10' "$CALCURSE" --read-only -D "$DATA_DIR" -n +elif [ "$1" = 'expected' ]; then + cat <<EOD +next appointment: + [13:37] Impersonating integer broils blame +EOD +else + ./run-test "$0" +fi diff --git a/test/range-001.sh b/test/range-001.sh new file mode 100755 index 0000000..8f23876 --- /dev/null +++ b/test/range-001.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '2011-02-25 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ -r +elif [ "$1" = 'expected' ]; then + cat <<EOD +02/25/11: + * Socket ghastlier + - ..:.. -> ..:.. + Covenants useful smoker's +EOD +else + ./run-test "$0" +fi diff --git a/test/range-002.sh b/test/range-002.sh new file mode 100755 index 0000000..0610017 --- /dev/null +++ b/test/range-002.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '2000-01-01 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ -r400 +elif [ "$1" = 'expected' ]; then + cat <<EOD +04/07/00: + * Chapping bequeaths satellites + +05/17/00: + * Her Peron gavels footbridge's bacchanal's + +07/10/00: + * Leaved mime's saltwater + +08/04/00: + * Margins charting edgy personae + +10/19/00: + - 22:39 -> ..:.. + Plodder's moulting smokestacks instruments vagrancy's + +10/20/00: + - ..:.. -> 04:55 + Plodder's moulting smokestacks instruments vagrancy's + +01/25/01: + * Accurateness hoed flakiness's +EOD +else + ./run-test "$0" +fi diff --git a/test/range-003.sh b/test/range-003.sh new file mode 100755 index 0000000..a291208 --- /dev/null +++ b/test/range-003.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + faketime '2000-01-01 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ -r400 +elif [ "$1" = 'expected' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -s01/01/2000 -r400 +else + ./run-test "$0" +fi diff --git a/test/run-test-001.sh b/test/run-test-001.sh new file mode 100755 index 0000000..9c1a962 --- /dev/null +++ b/test/run-test-001.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ "$1" = 'actual' -o "$1" = 'expected' ]; then + echo 42 +else + ./run-test "$0" +fi diff --git a/test/run-test-002.sh b/test/run-test-002.sh new file mode 100755 index 0000000..6a10101 --- /dev/null +++ b/test/run-test-002.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ "$1" = 'actual' ]; then + echo 23 +elif [ "$1" = 'expected' ]; then + echo 42 +else + ./run-test "!$0" +fi diff --git a/test/run-test.c b/test/run-test.c new file mode 100644 index 0000000..c779be7 --- /dev/null +++ b/test/run-test.c @@ -0,0 +1,229 @@ +/* + * Calcurse - text-based organizer + * + * Copyright (c) 2004-2012 calcurse Development Team <misc@calcurse.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Send your feedback or comments to : misc@calcurse.org + * Calcurse home page : http://calcurse.org + * + */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <sys/wait.h> + +/* + * Fork and execute an external process. + * + * If pfdin and/or pfdout point to a valid address, a pipe is created and the + * appropriate file descriptors are written to pfdin/pfdout. + */ +static int +fork_exec(int *pfdin, int *pfdout, const char *path, char *const *arg) +{ + int pin[2], pout[2]; + int pid; + + if (pfdin && (pipe(pin) == -1)) + return 0; + if (pfdout && (pipe(pout) == -1)) + return 0; + + if ((pid = fork()) == 0) { + if (pfdout) { + if (dup2(pout[0], STDIN_FILENO) < 0) + _exit(127); + close(pout[0]); + close(pout[1]); + } + + if (pfdin) { + if (dup2(pin[1], STDOUT_FILENO) < 0) + _exit(127); + close(pin[0]); + close(pin[1]); + } + + execvp(path, arg); + _exit(127); + } else { + if (pfdin) + close(pin[1]); + if (pfdout) + close(pout[0]); + + if (pid > 0) { + if (pfdin) { + fcntl(pin[0], F_SETFD, FD_CLOEXEC); + *pfdin = pin[0]; + } + if (pfdout) { + fcntl(pout[1], F_SETFD, FD_CLOEXEC); + *pfdout = pout[1]; + } + } else { + if (pfdin) + close(pin[0]); + if (pfdout) + close(pout[1]); + return 0; + } + } + return pid; +} + +/* Wait for a child process to terminate. */ +static int child_wait(int *pfdin, int *pfdout, int pid) +{ + int stat; + + if (pfdin) + close(*pfdin); + if (pfdout) + close(*pfdout); + + waitpid(pid, &stat, 0); + return stat; +} + +/* Print error message and bail out. */ +static void die(const char *format, ...) +{ + va_list arg; + + va_start(arg, format); + fprintf(stderr, "error: "); + vfprintf(stderr, format, arg); + va_end(arg); + + exit(1); +} + +/* Print usage message. */ +static void usage(void) +{ + printf("usage: run-test [-h|--help] <test>...\n"); +} + +/* Run test with a specific name. */ +static int run_test(const char *name, int expect_failure) +{ + char filename[BUFSIZ]; + char *arg1[3], *arg2[3]; + int pid1 = -1, pin1, pid2 = -1, pin2; + FILE *fpin1 = NULL, *fpin2 = NULL; + char buf1[BUFSIZ], buf2[BUFSIZ]; + int ret = 1; + + if (snprintf(filename, BUFSIZ, "./%s", name) >= BUFSIZ) + die("file name too long\n"); + + if (access(filename, F_OK) != 0) { + if (snprintf(filename, BUFSIZ, "./%s.sh", name) >= BUFSIZ) + die("file name too long\n"); + + if (access(filename, F_OK) != 0) + die("test not found: %s\n", name); + } + + if (access(filename, X_OK) != 0) + die("script is not executable: %s\n", filename); + + arg1[0] = arg2[0] = filename; + arg1[1] = "expected"; + arg2[1] = "actual"; + arg1[2] = arg2[2] = NULL; + + printf("Running %s...", name); + + if ((pid1 = fork_exec(&pin1, NULL, *arg1, arg1)) < 0) + die("failed to execute %s: %s\n", filename, strerror(errno)); + + if ((pid2 = fork_exec(&pin2, NULL, *arg2, arg2)) < 0) + die("failed to execute %s: %s\n", filename, strerror(errno)); + + fpin1 = fdopen(pin1, "r"); + fpin2 = fdopen(pin2, "r"); + + while (fgets(buf1, BUFSIZ, fpin1)) { + if (!fgets(buf2, BUFSIZ, fpin2) || strcmp(buf1, buf2) != 0) { + ret = 0; + break; + } + } + + if (fpin1) + fclose(fpin1); + if (fpin2) + fclose(fpin2); + + if (child_wait(&pin1, NULL, pid1) != 0) + ret = 0; + if (child_wait(&pin2, NULL, pid2) != 0) + ret = 0; + + if (expect_failure) + ret = 1 - ret; + + if (ret == 1) + printf(" ok\n"); + else + printf(" FAIL\n"); + + return ret; +} + +int main(int argc, char **argv) +{ + int i; + + if (!argv[1]) + die("no tests specified, bailing out\n"); + else if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { + usage(); + return 0; + } + + for (i = 1; i < argc; i++) { + if (*argv[i] == '!') { + if (!run_test(argv[i] + 1, 1)) + return 1; + } else { + if (!run_test(argv[i], 0)) + return 1; + } + } + + return 0; +} diff --git a/test/search-001.sh b/test/search-001.sh new file mode 100755 index 0000000..2d8f7e8 --- /dev/null +++ b/test/search-001.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ ! -x "$(command -v faketime)" ]; then + echo "libfaketime not found - skipping $0..." + exit 1 +fi + +if [ "$1" = 'actual' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -s01/01/1902 -r36500 \ + -S '^[KMS]an.*or' +elif [ "$1" = 'expected' ]; then + cat <<EOD +12/06/42: + - 09:46 -> ..:.. + Manuel glorified four + +12/07/42: + - ..:.. -> 04:33 + Manuel glorified four + +05/28/85: + * Sandbox processor's overdraft's +EOD +else + ./run-test "$0" +fi diff --git a/test/todo-001.sh b/test/todo-001.sh new file mode 100755 index 0000000..db6b6ca --- /dev/null +++ b/test/todo-001.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ "$1" = 'actual' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -t | sort +elif [ "$1" = 'expected' ]; then + ( + echo 'to do:' + sed '/^\[-/d; s/^\[\([0-9]\)\] \(.*\)/\1. \2/' "$DATA_DIR"/todo + ) | sort +else + ./run-test "$0" +fi diff --git a/test/todo-002.sh b/test/todo-002.sh new file mode 100755 index 0000000..a91d06d --- /dev/null +++ b/test/todo-002.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if [ "$1" = 'actual' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -t3 +elif [ "$1" = 'expected' ]; then + echo 'to do:' + sed -n 's/^\[3\] \(.*\)/3. \1/p' "$DATA_DIR"/todo +else + ./run-test "$0" +fi diff --git a/test/todo-003.sh b/test/todo-003.sh new file mode 100755 index 0000000..2dcb2d3 --- /dev/null +++ b/test/todo-003.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ "$1" = 'actual' ]; then + "$CALCURSE" --read-only -D "$DATA_DIR"/ -t0 | sort -n +elif [ "$1" = 'expected' ]; then + ( + echo 'completed tasks:' + sed -n 's/^\[-\([0-9]\)\] \(.*\)/\1. \2/p' "$DATA_DIR"/todo + ) | sort -n +else + ./run-test "$0" +fi diff --git a/test/true-001.sh b/test/true-001.sh new file mode 100755 index 0000000..296ef78 --- /dev/null +++ b/test/true-001.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +true |