From b165090434fa4064f186fa528946d91f24ae196c Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Tue, 27 May 2014 21:19:22 +0800 Subject: [PATCH] Bugfix:Type convert error in JsonPathSelector #129 --- .../webmagic/selector/JsonPathSelector.java | 7 +++++-- .../webmagic/selector/ExtractorsTest.java | 20 +++++++++---------- .../selector/JsonPathSelectorTest.java | 13 ++++++------ .../webmagic/selector/RegexSelectorTest.java | 4 ++-- .../webmagic/utils/UrlUtilsTest.java | 5 ----- 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/selector/JsonPathSelector.java b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/JsonPathSelector.java index f9083a8..b0b90f9 100644 --- a/webmagic-core/src/main/java/us/codecraft/webmagic/selector/JsonPathSelector.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/selector/JsonPathSelector.java @@ -46,9 +46,12 @@ public class JsonPathSelector implements Selector { return list; } if (object instanceof List) { - return (List) object; + List items = (List) object; + for (Object item : items) { + list.add(String.valueOf(item)); + } } else { - list.add(object.toString()); + list.add(String.valueOf(object)); } return list; } diff --git a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/ExtractorsTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/ExtractorsTest.java index e8da48d..bf9475d 100644 --- a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/ExtractorsTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/ExtractorsTest.java @@ -1,8 +1,8 @@ package us.codecraft.webmagic.selector; -import junit.framework.Assert; import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; import static us.codecraft.webmagic.selector.Selectors.*; /** @@ -16,19 +16,19 @@ public class ExtractorsTest { @Test public void testEach() { - Assert.assertEquals("aabbcc", $("div h1 a").select(html)); - Assert.assertEquals("xxx", $("div h1 a", "href").select(html)); - Assert.assertEquals("aabbcc", $("div h1 a", "innerHtml").select(html)); - Assert.assertEquals("xxx", xpath("//a/@href").select(html)); - Assert.assertEquals("xxx", regex("a href=\"(.*)\"").select(html)); - Assert.assertEquals("xxx", regex("(a href)=\"(.*)\"", 2).select(html)); + assertThat($("div h1 a").select(html)).isEqualTo("aabbcc"); + assertThat($("div h1 a", "href").select(html)).isEqualTo("xxx"); + assertThat($("div h1 a", "innerHtml").select(html)).isEqualTo("aabbcc"); + assertThat(xpath("//a/@href").select(html)).isEqualTo("xxx"); + assertThat(regex("a href=\"(.*)\"").select(html)).isEqualTo("xxx"); + assertThat(regex("(a href)=\"(.*)\"", 2).select(html)).isEqualTo("xxx"); } @Test public void testCombo() { - Assert.assertEquals("bb", and($("title"), regex("aa(bb)cc")).select(html2)); + assertThat(and($("title"), regex("aa(bb)cc")).select(html2)).isEqualTo("bb"); OrSelector or = or($("div h1 a", "innerHtml"), xpath("//title")); - Assert.assertEquals("aabbcc", or.select(html)); - Assert.assertEquals("aabbcc", or.select(html2)); + assertThat(or.select(html)).isEqualTo("aabbcc"); + assertThat(or.select(html2)).isEqualTo("aabbcc"); } } diff --git a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/JsonPathSelectorTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/JsonPathSelectorTest.java index c38efe9..9c705b2 100644 --- a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/JsonPathSelectorTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/JsonPathSelectorTest.java @@ -1,10 +1,11 @@ package us.codecraft.webmagic.selector; -import junit.framework.Assert; import org.junit.Test; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + /** * @author code4crafter@gmai.com
*/ @@ -32,16 +33,16 @@ public class JsonPathSelectorTest { "}"; @Test - public void test() { + public void testJsonPath() { JsonPathSelector jsonPathSelector = new JsonPathSelector("$.store.book[*].author"); String select = jsonPathSelector.select(text); List list = jsonPathSelector.selectList(text); - Assert.assertNotNull(select); - Assert.assertNotNull(list); + assertThat(select).isEqualTo("Nigel Rees"); + assertThat(list).contains("Nigel Rees","Evelyn Waugh"); jsonPathSelector = new JsonPathSelector("$.store.book[?(@.category == 'reference')]"); list = jsonPathSelector.selectList(text); select = jsonPathSelector.select(text); - Assert.assertNotNull(list); - Assert.assertNotNull(select); + assertThat(select).isEqualTo("{\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"category\":\"reference\",\"price\":8.95}"); + assertThat(list).contains("{\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"category\":\"reference\",\"price\":8.95}"); } } diff --git a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java index a0b8caf..63e8e43 100644 --- a/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/selector/RegexSelectorTest.java @@ -1,6 +1,6 @@ package us.codecraft.webmagic.selector; -import org.junit.Assert; +import org.assertj.core.api.Assertions; import org.junit.Test; /** @@ -20,6 +20,6 @@ public class RegexSelectorTest { String source = "(hello world"; RegexSelector regexSelector = new RegexSelector(regex); String select = regexSelector.select(source); - Assert.assertEquals(source,select); + Assertions.assertThat(select).isEqualTo(source); } } diff --git a/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java b/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java index 565fde4..86b9db3 100644 --- a/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java +++ b/webmagic-core/src/test/java/us/codecraft/webmagic/utils/UrlUtilsTest.java @@ -49,11 +49,6 @@ public class UrlUtilsTest { assertThat(replacedHtml).isEqualTo(""); } - @Test - public void test(){ - UrlUtils.canonicalizeUrl("start tag", "http://www.dianping.com/"); - } - @Test public void testGetDomain(){ String url = "http://www.dianping.com/aa/";