public void testTraitFunctors() throws Exception { // Make a publisher Map<String, String> publisherMap = new LinkedHashMap<String, String>(); Publisher publisher = new Publisher(publisherMap); // Make a title with that publisher Map<String, String> titleMap = new LinkedHashMap<String, String>(); Title title = new Title(publisher, titleMap); // Make an AU with that title Au au = new Au(title); // Test AU traits au.put(Au.EDITION, EDITION_VALUE); assertEquals(EDITION_VALUE, Au.traitFunctor("au:edition").apply(au)); assertSame(Au.traitFunctor("au:edition"), Au.traitFunctor("edition")); au.put(Au.EISBN, EISBN_VALUE); assertEquals(EISBN_VALUE, Au.traitFunctor("au:eisbn").apply(au)); assertSame(Au.traitFunctor("au:eisbn"), Au.traitFunctor("eisbn")); au.put(Au.ISBN, ISBN_VALUE); assertEquals(ISBN_VALUE, Au.traitFunctor("au:isbn").apply(au)); assertSame(Au.traitFunctor("au:isbn"), Au.traitFunctor("isbn")); au.put(Au.NAME, NAME_VALUE); assertEquals(NAME_VALUE, Au.traitFunctor("au:name").apply(au)); assertSame(Au.traitFunctor("au:name"), Au.traitFunctor("name")); au.put(Au.PROVIDER, PROVIDER_VALUE); assertEquals(PROVIDER_VALUE, Au.traitFunctor("au:provider").apply(au)); assertSame(Au.traitFunctor("au:provider"), Au.traitFunctor("provider")); au.put(Au.PROXY, PROXY_VALUE); assertEquals(PROXY_VALUE, Au.traitFunctor("au:proxy").apply(au)); assertSame(Au.traitFunctor("au:proxy"), Au.traitFunctor("proxy")); au.put(Au.RIGHTS, RIGHTS_VALUE); assertEquals(RIGHTS_VALUE, Au.traitFunctor("au:rights").apply(au)); assertSame(Au.traitFunctor("au:rights"), Au.traitFunctor("rights")); au.put(Au.STATUS, STATUS_VALUE); assertEquals(STATUS_VALUE, Au.traitFunctor("au:status").apply(au)); assertSame(Au.traitFunctor("au:status"), Au.traitFunctor("status")); au.put(Au.STATUS1, STATUS1_VALUE); assertEquals(STATUS1_VALUE, Au.traitFunctor("au:status1").apply(au)); assertSame(Au.traitFunctor("au:status1"), Au.traitFunctor("status1")); au.put(Au.STATUS2, STATUS2_VALUE); assertEquals(STATUS2_VALUE, Au.traitFunctor("au:status2").apply(au)); assertSame(Au.traitFunctor("au:status2"), Au.traitFunctor("status2")); au.put(Au.VOLUME, VOLUME_VALUE); assertEquals(VOLUME_VALUE, Au.traitFunctor("au:volume").apply(au)); assertSame(Au.traitFunctor("au:volume"), Au.traitFunctor("volume")); au.put(Au.YEAR, YEAR_VALUE); assertEquals(YEAR_VALUE, Au.traitFunctor("au:year").apply(au)); assertSame(Au.traitFunctor("au:year"), Au.traitFunctor("year")); au.put(String.format("param[%s]", PARAM1_KEY), PARAM1_VALUE); assertEquals( PARAM1_VALUE, Au.traitFunctor(String.format("au:param[%s]", PARAM1_KEY)).apply(au)); assertEquals(PARAM1_VALUE, Au.traitFunctor(String.format("param[%s]", PARAM1_KEY)).apply(au)); au.put(String.format("nondefparam[%s]", NONDEFPARAM1_KEY), NONDEFPARAM1_VALUE); assertEquals( NONDEFPARAM1_VALUE, Au.traitFunctor(String.format("au:nondefparam[%s]", NONDEFPARAM1_KEY)).apply(au)); assertEquals( NONDEFPARAM1_VALUE, Au.traitFunctor(String.format("nondefparam[%s]", NONDEFPARAM1_KEY)).apply(au)); au.put(String.format("attr[%s]", ATTR1_KEY), ATTR1_VALUE); assertEquals(ATTR1_VALUE, Au.traitFunctor(String.format("au:attr[%s]", ATTR1_KEY)).apply(au)); assertEquals(ATTR1_VALUE, Au.traitFunctor(String.format("attr[%s]", ATTR1_KEY)).apply(au)); au.put(FOO_KEY, FOO_VALUE); assertEquals(FOO_VALUE, Au.traitFunctor(String.format("au:%s", FOO_KEY)).apply(au)); assertNull(Au.traitFunctor(FOO_KEY)); au.put(Au.PLUGIN, PLUGIN1); assertEquals(PLUGIN1, Au.traitFunctor("au:plugin").apply(au)); assertSame(Au.traitFunctor("au:plugin"), Au.traitFunctor("plugin")); au.put(String.format("param[%s]", PARAM2_KEY), PARAM2_VALUE); au.put(String.format("nondefparam[%s]", NONDEFPARAM2_KEY), NONDEFPARAM2_VALUE); assertEquals(AUID1, Au.traitFunctor("au:auid").apply(au)); assertSame(Au.traitFunctor("au:auid"), Au.traitFunctor("auid")); assertEquals(AUIDPLUS1, Au.traitFunctor("au:auidplus").apply(au)); assertSame(Au.traitFunctor("au:auidplus"), Au.traitFunctor("auidplus")); au.put(Au.PLUGIN_PREFIX, PLUGIN_PREFIX_VALUE); assertEquals(PLUGIN_PREFIX_VALUE, Au.traitFunctor("au:pluginPrefix").apply(au)); assertSame(Au.traitFunctor("au:pluginPrefix"), Au.traitFunctor("pluginPrefix")); au.put(Au.PLUGIN_SUFFIX, PLUGIN_SUFFIX_VALUE); assertEquals(PLUGIN_SUFFIX_VALUE, Au.traitFunctor("au:pluginSuffix").apply(au)); assertSame(Au.traitFunctor("au:pluginSuffix"), Au.traitFunctor("pluginSuffix")); // Test title traits titleMap.put(Title.NAME, TestTitle.NAME_VALUE); assertEquals(TestTitle.NAME_VALUE, Au.traitFunctor("title:name").apply(au)); assertSame(Au.traitFunctor("title:name"), Au.traitFunctor("title")); titleMap.put(Title.DOI, TestTitle.DOI_VALUE); assertEquals(TestTitle.DOI_VALUE, Au.traitFunctor("title:doi").apply(au)); assertSame(Au.traitFunctor("title:doi"), Au.traitFunctor("doi")); titleMap.put(Title.EISSN, TestTitle.EISSN_VALUE); assertEquals(TestTitle.EISSN_VALUE, Au.traitFunctor("title:eissn").apply(au)); assertSame(Au.traitFunctor("title:eissn"), Au.traitFunctor("eissn")); titleMap.put(Title.ISSN, TestTitle.ISSN_VALUE); assertEquals(TestTitle.ISSN_VALUE, Au.traitFunctor("title:issn").apply(au)); assertSame(Au.traitFunctor("title:issn"), Au.traitFunctor("issn")); titleMap.put(Title.ISSNL, TestTitle.ISSNL_VALUE); assertEquals(TestTitle.ISSNL_VALUE, Au.traitFunctor("title:issnl").apply(au)); assertSame(Au.traitFunctor("title:issnl"), Au.traitFunctor("issnl")); titleMap.put(Title.TYPE, TestTitle.TYPE_VALUE); assertEquals(TestTitle.TYPE_VALUE, Au.traitFunctor("title:type").apply(au)); assertSame(Au.traitFunctor("title:type"), Au.traitFunctor("type")); titleMap.put(TestTitle.FOO_KEY, TestTitle.FOO_VALUE); assertEquals( TestTitle.FOO_VALUE, Au.traitFunctor(String.format("title:%s", TestTitle.FOO_KEY)).apply(au)); assertNull(Au.traitFunctor(String.format("title:X%s", TestTitle.FOO_KEY)).apply(au)); // Test publisher traits publisherMap.put(Publisher.NAME, TestPublisher.NAME_VALUE); assertEquals(TestPublisher.NAME_VALUE, Au.traitFunctor("publisher:name").apply(au)); assertSame(Au.traitFunctor("publisher:name"), Au.traitFunctor("publisher")); publisherMap.put(TestPublisher.FOO_KEY, TestPublisher.FOO_VALUE); assertEquals( TestPublisher.FOO_VALUE, Au.traitFunctor(String.format("publisher:%s", TestPublisher.FOO_KEY)).apply(au)); assertNull(Au.traitFunctor(String.format("publisher:X%s", TestPublisher.FOO_KEY)).apply(au)); }