package com.alibaba.json.bvt.bug; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import org.junit.Assert; import org.junit.Test; import com.alibaba.fastjson.JSON; public class FastJsonSerializeIterableTest { @Test public void testWithIterable() { class Person { private String name; public Person(String s) { this.name = s; } public String getName() { return name; } } final Person s1 = new Person("fast"); final Person s2 = new Person("fast"); Iterable<Person> iterable = new Iterable<Person>() { @Override public Iterator<Person> iterator() { return new Iterator<Person>() { int cursor = 0; @Override public boolean hasNext() { return cursor < 2; } @Override public Person next() { int val = cursor++; switch (val) { case 0: return s1; case 1: return s2; default: throw new NoSuchElementException(); } } @Override public void remove() { throw new UnsupportedOperationException(); } }; } }; List<Person> list = new ArrayList<Person>(); for (Person p : iterable) { list.add(p); } Assert.assertEquals("[{\"name\":\"fast\"},{\"name\":\"fast\"}]", JSON.toJSONString(list)); Assert.assertEquals("[{\"name\":\"fast\"},{\"name\":\"fast\"}]", JSON.toJSONString(iterable)); Assert.assertEquals("[{\"name\":\"fast\"},{\"name\":\"fast\"}]", JSON.toJSONString(list.iterator())); } }