content: /*
   * Copyright 1999-2101 Alibaba Group.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.alibaba.json.bvt;
  
  import java.io.StringWriter;
  import java.math.BigDecimal;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.List;
  import java.util.ListIterator;
  import java.util.concurrent.atomic.AtomicInteger;
  
  import junit.framework.Assert;
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONArray;
  import com.alibaba.fastjson.JSONObject;
  
  public class JSONArrayTest extends TestCase {
  
      public void test_toString() throws Exception {
          StringWriter out = new StringWriter();
          new JSONArray().writeJSONString(out);
          Assert.assertEquals("[]", out.toString());
          Assert.assertEquals("[]", new JSONArray().toString());
      }
  
      public void test_toJSONString() throws Exception {
          Assert.assertEquals("null", JSONArray.toJSONString(null));
          Assert.assertEquals("[null]", JSONArray.toJSONString(Collections.singletonList(null)));
      }
  
      public void test_1() throws Exception {
          JSONArray array = new JSONArray(3);
          Assert.assertEquals(true, array.isEmpty());
          array.add(1);
          Assert.assertEquals(false, array.isEmpty());
          Assert.assertEquals(true, array.contains(1));
          Assert.assertEquals(1, array.toArray()[0]);
          {
              Object[] items = new Object[1];
              array.toArray(items);
              Assert.assertEquals(1, items[0]);
          }
          Assert.assertEquals(true, array.containsAll(Collections.singletonList(1)));
          Assert.assertEquals(true, array.remove(Integer.valueOf(1)));
          Assert.assertEquals(true, array.isEmpty());
          array.addAll(Collections.singletonList(1));
          Assert.assertEquals(1, array.size());
          array.removeAll(Collections.singletonList(1));
          Assert.assertEquals(0, array.size());
          array.addAll(0, Arrays.asList(1, 2, 3));
          Assert.assertEquals(3, array.size());
          array.clear();
          array.addAll(0, Arrays.asList(1, 2, 3));
          Assert.assertEquals(true, array.retainAll(Arrays.asList(1, 2)));
          Assert.assertEquals(2, array.size());
          Assert.assertEquals(true, array.retainAll(Arrays.asList(2, 4)));
          Assert.assertEquals(1, array.size());
          array.set(0, 4);
          Assert.assertEquals(4, array.toArray()[0]);
          array.add(0, 4);
          Assert.assertEquals(4, array.toArray()[0]);
          array.remove(0);
          array.remove(0);
          Assert.assertEquals(0, array.size());
          array.addAll(Arrays.asList(1, 2, 3, 4, 5, 4, 3));
          Assert.assertEquals(2, array.indexOf(3));
          Assert.assertEquals(6, array.lastIndexOf(3));
          {
              AtomicInteger count = new AtomicInteger();
              for (ListIterator<Object> iter = array.listIterator(); iter.hasNext(); iter.next()) {
                  count.incrementAndGet();
              }
              Assert.assertEquals(7, count.get());
          }
          {
              AtomicInteger count = new AtomicInteger();
              for (ListIterator<Object> iter = array.listIterator(2); iter.hasNext(); iter.next()) {
                  count.incrementAndGet();
              }
              Assert.assertEquals(5, count.get());
          }
          {
              Assert.assertEquals(2, array.subList(2, 4).size());
          }
      }
  
      public void test_2() throws Exception {
          JSONArray array = new JSONArray();
          array.add(123);
          array.add("222");
          array.add(3);
          array.add(true);
          array.add("true");
          array.add(null);
  
          Assert.assertEquals(123, array.getByte(0).byteValue());
          Assert.assertEquals(123, array.getByteValue(0));
  
          Assert.assertEquals(123, array.getShort(0).shortValue());
          Assert.assertEquals(123, array.getShortValue(0));
  
          Assert.assertEquals(123F, array.getFloat(0).floatValue());
          Assert.assertEquals(123F, array.getFloatValue(0));
  
          Assert.assertEquals(123D, array.getDouble(0).doubleValue());
          Assert.assertEquals(123D, array.getDoubleValue(0));
  
          Assert.assertEquals(123, array.getIntValue(0));
          Assert.assertEquals(123, array.getLongValue(0));
          Assert.assertEquals(new BigDecimal("123"), array.getBigDecimal(0));
  
          Assert.assertEquals(222, array.getIntValue(1));
          Assert.assertEquals(new Integer(222), array.getInteger(1));
          Assert.assertEquals(new Long(222), array.getLong(1));
          Assert.assertEquals(new BigDecimal("222"), array.getBigDecimal(1));
  
          Assert.assertEquals(true, array.getBooleanValue(4));
          Assert.assertEquals(Boolean.TRUE, array.getBoolean(4));
  
          Assert.assertEquals(0, array.getIntValue(5));
          Assert.assertEquals(0, array.getLongValue(5));
          Assert.assertEquals(null, array.getInteger(5));
          Assert.assertEquals(null, array.getLong(5));
          Assert.assertEquals(null, array.getBigDecimal(5));
          Assert.assertEquals(null, array.getBoolean(5));
          Assert.assertEquals(false, array.getBooleanValue(5));
      }
  
      public void test_getObject_null() throws Exception {
          JSONArray array = new JSONArray();
          array.add(null);
  
          Assert.assertTrue(array.getJSONObject(0) == null);
      }
  
      public void test_getObject() throws Exception {
          JSONArray array = new JSONArray();
          array.add(new JSONObject());
  
          Assert.assertEquals(0, array.getJSONObject(0).size());
      }
  
      public void test_getObject_map() throws Exception {
          JSONArray array = new JSONArray();
          array.add(new HashMap());
  
          Assert.assertEquals(0, array.getJSONObject(0).size());
      }
  
      public void test_getArray() throws Exception {
          JSONArray array = new JSONArray();
          array.add(new ArrayList());
  
          Assert.assertEquals(0, array.getJSONArray(0).size());
      }
  
      public void test_getArray_1() throws Exception {
          JSONArray array = new JSONArray();
          array.add(new JSONArray());
  
          Assert.assertEquals(0, array.getJSONArray(0).size());
      }
  
      public void test_constructor() throws Exception {
          List<Object> list = new ArrayList();
          JSONArray array = new JSONArray(list);
          array.add(3);
          Assert.assertEquals(1, list.size());
          Assert.assertEquals(3, list.get(0));
      }
  
      public void test_getJavaBean() throws Exception {
          JSONArray array = JSON.parseArray("[{id:123, name:'aaa'}]");
          Assert.assertEquals(1, array.size());
          Assert.assertEquals(123, array.getObject(0, User.class).getId());
      }
  
      public static class User {
  
          private long   id;
          private String name;
  
          public long getId() {
              return id;
          }
  
          public void setId(long id) {
              this.id = id;
          }
  
          public String getName() {
              return name;
          }
  
          public void setName(String name) {
              this.name = name;
          }
  
      }
  }
  