From ba1a8ef241453abc1d5c279805029b8f4b93203a Mon Sep 17 00:00:00 2001 From: Martin Monperrus Date: Wed, 2 Feb 2022 18:17:26 +0100 Subject: [PATCH] fix and test ordering --- BibtexbrowserTest.php | 52 +++++++++++++++++++++++++--- bibtexbrowser.php | 29 ++++++++-------- reference-output-wp-publications.txt | 6 ++-- 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/BibtexbrowserTest.php b/BibtexbrowserTest.php index 33fb60e..2cfc852 100755 --- a/BibtexbrowserTest.php +++ b/BibtexbrowserTest.php @@ -653,8 +653,8 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { ob_get_clean(); // the indices have been set by SimpleDisplay - $this->assertEquals("[1]", $btb->getEntryByKey('aKey')->getAbbrv()); - $this->assertEquals("[3]", $btb->getEntryByKey('aKey-withSlash')->getAbbrv()); + $this->assertEquals("[3]", $btb->getEntryByKey('aKey')->getAbbrv()); + $this->assertEquals("[1]", $btb->getEntryByKey('aKey-withSlash')->getAbbrv()); // SimpleDisplayExt sets the indices differently, using setIndicesInIncreasingOrderChangingEveryYear $d = new SimpleDisplayExt(); @@ -662,7 +662,7 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { ob_start(); $d->display(); ob_get_clean(); - $this->assertEquals("[2]", $btb->getEntryByKey('aKey')->getAbbrv()); + $this->assertEquals("[1]", $btb->getEntryByKey('aKey')->getAbbrv()); $this->assertEquals("[1]", $btb->getEntryByKey('aKey-withSlash')->getAbbrv()); } @@ -749,6 +749,7 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { function test_before() { + // contract: the ordering is chronological $bibtex = "@article{doe2000,title={An article},author={Jane Doe},journal={The Wordpress Journal},year=2000}@book{doo2001,title={A book},author={Jane Doe},year=2001}"; $test_data = fopen('php://memory','x+'); fwrite($test_data, $bibtex); @@ -767,7 +768,7 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { } function test80() { - // entries without year are at the top + // contract: entries without year are at the top $bibtex = "@article{keyWithoutYear,title={First article},author = {Martin}},@article{key2,title={Second article},author = {Martin}, year=2007}"; $test_data = fopen('php://memory','x+'); fwrite($test_data, $bibtex); @@ -860,7 +861,48 @@ class BibtexbrowserTest extends PHPUnit_Framework_TestCase { $this->assertEquals('Preferential polarization and its reversal in polycrystalline $BiFeO_{3}$/$La_{0. 5}Sr_{0.5} CoO_{3}$ heterostructures', $db->bibdb['doe2000']->getTitle()); } - + function test_sorting_year() { + $bibtex = "@article{doe2004,year=2004},@article{doe1999,year=1999},@article{doe2000,year=2000}"; + $test_data = fopen('php://memory','x+'); + fwrite($test_data, $bibtex); + fseek($test_data,0); + $db = new BibDataBase(); + $db->update_internal("inline", $test_data); +// print_r($db); + $data = array_values($db->bibdb); + $this->assertEquals("2004", $data[0]->getYear()); + $this->assertEquals("1999", $data[1]->getYear()); + $this->assertEquals("2000", $data[2]->getYear()); + usort($data, 'compare_bib_entry_by_year'); + + $this->assertEquals("1999", $data[0]->getYear()); + $this->assertEquals("2000", $data[1]->getYear()); + $this->assertEquals("2004", $data[2]->getYear()); + + $bibtex = "@article{doe2004,year=2004},@article{doe1999,year=1999},@article{doe2000,year=2000}"; + + } + + function test_sorting_month() { + $bibtex = "@article{doe2004,year=2004, month={may}},@article{doe1999,year=2004,month={jan}},@article{doe2000,year=2000, month={dec}}"; + $test_data = fopen('php://memory','x+'); + fwrite($test_data, $bibtex); + fseek($test_data,0); + $db = new BibDataBase(); + $db->update_internal("inline", $test_data); +// print_r($db); + $data = array_values($db->bibdb); + $this->assertEquals("may", $data[0]->getField("month")); + usort($data, 'compare_bib_entry_by_month'); + + $this->assertEquals("jan", $data[0]->getField("month")); + $this->assertEquals("may", $data[1]->getField("month")); + $this->assertEquals("dec", $data[2]->getField("month")); + + $bibtex = "@article{doe2004,year=2004},@article{doe1999,year=1999},@article{doe2000,year=2000}"; + + } + } // end class diff --git a/bibtexbrowser.php b/bibtexbrowser.php index dbd6e0a..366ce86 100755 --- a/bibtexbrowser.php +++ b/bibtexbrowser.php @@ -218,10 +218,10 @@ if (defined('ENCODING')) { // define sort order for special values in 'year' field // highest number is sorted first // don't exceed 0 though, since the values are added to PHP_INT_MAX -@define('ORDER_YEAR_INPRESS', -0); -@define('ORDER_YEAR_ACCEPTED', -1); -@define('ORDER_YEAR_SUBMITTED', -2); -@define('ORDER_YEAR_OTHERNONINT', -3); +@define('ORDER_YEAR_INPRESS', 0); +@define('ORDER_YEAR_ACCEPTED', 1); +@define('ORDER_YEAR_SUBMITTED', 2); +@define('ORDER_YEAR_OTHERNONINT', 3); // in embedded mode, we still need a URL for displaying bibtex entries alone @@ -2157,38 +2157,38 @@ function compare_bib_entry_by_year($a, $b) if ($yearA === 0) { switch (strtolower($a->getYearRaw())) { case Q_YEAR_INPRESS: - $yearA = PHP_INT_MAX + ORDER_YEAR_INPRESS; + $yearA = PHP_INT_MIN + ORDER_YEAR_INPRESS; break; case Q_YEAR_ACCEPTED: - $yearA = PHP_INT_MAX + ORDER_YEAR_ACCEPTED; + $yearA = PHP_INT_MIN + ORDER_YEAR_ACCEPTED; break; case Q_YEAR_SUBMITTED: - $yearA = PHP_INT_MAX + ORDER_YEAR_SUBMITTED; + $yearA = PHP_INT_MIN + ORDER_YEAR_SUBMITTED; break; default: - $yearA = PHP_INT_MAX + ORDER_YEAR_OTHERNONINT; + $yearA = PHP_INT_MIN + ORDER_YEAR_OTHERNONINT; } } if ($yearB === 0) { switch (strtolower($b->getYearRaw())) { case Q_YEAR_INPRESS: - $yearB = PHP_INT_MAX + ORDER_YEAR_INPRESS; + $yearB = PHP_INT_MIN + ORDER_YEAR_INPRESS; break; case Q_YEAR_ACCEPTED: - $yearB = PHP_INT_MAX + ORDER_YEAR_ACCEPTED; + $yearB = PHP_INT_MIN + ORDER_YEAR_ACCEPTED; break; case Q_YEAR_SUBMITTED: - $yearB = PHP_INT_MAX + ORDER_YEAR_SUBMITTED; + $yearB = PHP_INT_MIN + ORDER_YEAR_SUBMITTED; break; default: - $yearB = PHP_INT_MAX + ORDER_YEAR_OTHERNONINT; + $yearB = PHP_INT_MIN + ORDER_YEAR_OTHERNONINT; } } if ($yearA === $yearB) return 0; - else if ($yearA > $yearB) + else if ($yearA < $yearB) return -1; else return 1; @@ -2242,7 +2242,6 @@ function compare_bib_entry_by_month($a, $b) //desired order of values $sort_order_values = array('jan','january','feb','february','mar','march','apr','april','may','jun','june','jul','july','aug','august','sep','september','oct','october','nov','november','dec','december'); //order: 1=as specified in $sort_order_values or -1=reversed - $order = -1; //first check if the search key exists @@ -2278,7 +2277,7 @@ function compare_bib_entry_by_month($a, $b) } } - return $order*$retval; + return $retval; } /** is the default sectioning for AcademicDisplay (books, articles, proceedings, etc. ) */ diff --git a/reference-output-wp-publications.txt b/reference-output-wp-publications.txt index a1dfc38..f7b1bbc 100644 --- a/reference-output-wp-publications.txt +++ b/reference-output-wp-publications.txt @@ -1,10 +1,10 @@ array ( 'rendered' => '

[wp-publications bib=sample.bib all=1] gives:
- - - + + +
2001
[2]A book (), . [bibtex]
2000
[1]An article (), In The Wordpress Journal, . [bibtex]
[2]An article (), In The Wordpress Journal, . [bibtex]
2001
[1]A book (), . [bibtex]

', 'protected' => false,