/*
 * SPDX-License-Identifier: Apache-2.0
 *
 * Copyright 2006-2024 the original author or authors.
 *
 * 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
 *
 *     https://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 org.kordamp.json;

import junit.framework.TestCase;

/**
 * @author Matt Small <msmall@wavemaker.com>
 */
public class TestJSONArrayCollection extends TestCase {

    public TestJSONArrayCollection(String testName) {
        super(testName);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(TestJSONArrayCollection.class);
    }

   /*
   public void testErrorInList() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringList" );

      JSONArray ja = JSONArray.fromObject( "[12, \"bar\"]" );
      JsonConfig jc = new JsonConfig();

      try{
         jc.setCollectionType( pd.getPropertyType() );
         jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0] );
         JSONArray.toCollection( ja, jc );
         fail( "didn't get exception" );
      }catch( JSONException e ){
         // ignore
      }
   }

   public void testGetCollectionType() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringSet" );
      assertEquals( 1, JSONArray.getCollectionType( pd, false ).length );
      assertEquals( String.class, JSONArray.getCollectionType( pd, false )[0] );
      assertEquals( 1, JSONArray.getCollectionType( pd, true ).length );
      assertEquals( String.class, JSONArray.getCollectionType( pd, true )[0] );

      pd = PropertyUtils.getPropertyDescriptor( gb, "stringList" );
      assertEquals( 1, JSONArray.getCollectionType( pd, false ).length );
      assertEquals( String.class, JSONArray.getCollectionType( pd, false )[0] );
      assertEquals( 1, JSONArray.getCollectionType( pd, true ).length );
      assertEquals( String.class, JSONArray.getCollectionType( pd, true )[0] );
   }

   public void testToInternalBeanList() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "genericsInternalBeanList" );

      JSONArray ja = JSONArray.fromObject( "[{\"string\": \"foo\"}, {\"string\": \"bar\"}]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );
      jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0] );

      Collection<?> c = JSONArray.toCollection( ja, jc);
      assertEquals( 2, c.size() );
      assertTrue( c instanceof ArrayList );

      for( Object o : c ){
         assertTrue( o instanceof GenericsInternalBean );
         GenericsInternalBean gib = (GenericsInternalBean) o;

         if( gib.getString()
               .equals( "foo" ) ){
            // pass
         }else if( gib.getString()
               .equals( "bar" ) ){
            // pass
         }else{
            fail( "unknown gib: " + gib.getString() );
         }
      }
   }

   public void testToStringArrayList() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringArrayList" );

      JSONArray ja = JSONArray.fromObject( "[\"foo\", \"bar\"]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );
      jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0] );

      Collection<?> c = JSONArray.toCollection( ja, jc );
      assertEquals( 2, c.size() );
      assertTrue( c instanceof ArrayList );
      assertTrue( c.contains( "foo" ) );
      assertTrue( c.contains( "bar" ) );
   }

   public void testToStringHashSet() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringHashSet" );

      JSONArray ja = JSONArray.fromObject( "[\"foo\", \"bar\"]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );
      jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0]  );

      Collection<?> c = JSONArray.toCollection( ja, jc );
      assertEquals( 2, c.size() );
      assertTrue( c instanceof HashSet );
      assertTrue( c.contains( "foo" ) );
      assertTrue( c.contains( "bar" ) );
   }

   public void testToStringList() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringList" );

      JSONArray ja = JSONArray.fromObject( "[\"foo\", \"bar\"]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );
      jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0]  );

      Collection<?> c = JSONArray.toCollection( ja, jc );
      assertEquals( 2, c.size() );
      assertTrue( c instanceof ArrayList );
      assertTrue( c.contains( "foo" ) );
      assertTrue( c.contains( "bar" ) );
   }

   public void testToStringSet() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "stringSet" );

      JSONArray ja = JSONArray.fromObject( "[\"foo\", \"bar\"]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );
      jc.setEnclosedType( JSONArray.getCollectionType( pd, false )[0] );

      Collection<?> c = JSONArray.toCollection( ja, jc);
      assertEquals( 2, c.size() );
      assertTrue( c instanceof HashSet );
      assertTrue( c.contains( "foo" ) );
      assertTrue( c.contains( "bar" ) );
   }

   public void testToUntypedList() throws Exception {
      GenericsBean gb = new GenericsBean();
      PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor( gb, "noTypeList" );

      JSONArray ja = JSONArray.fromObject( "[\"foo\", \"bar\", 12]" );
      JsonConfig jc = new JsonConfig();
      jc.setCollectionType( pd.getPropertyType() );

      Collection<?> c = JSONArray.toCollection( ja, jc );
      assertEquals( 3, c.size() );
      assertTrue( c instanceof ArrayList );
      assertTrue( c.contains( "foo" ) );
      assertTrue( c.contains( "bar" ) );
      assertTrue( c.contains( 12 ) );
   }
   */

    public void testNOOP() {
    }
}
