Package org.apache.avro.generic

Source Code of org.apache.avro.generic.TestDeepCopy

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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 org.apache.avro.generic;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import org.apache.avro.Foo;
import org.apache.avro.Interop;
import org.apache.avro.Kind;
import org.apache.avro.MD5;
import org.apache.avro.Node;
import org.apache.avro.Schema.Field;
import org.apache.avro.Schema.Type;
import org.apache.avro.specific.SpecificData;
import org.junit.Test;

/** Unit test for performing a deep copy of an object with a schema */
public class TestDeepCopy {
  @Test
  public void testDeepCopy() {
    // Set all non-default fields in an Interop instance:
    Interop.Builder interopBuilder = Interop.newBuilder();
    interopBuilder.setArrayField(
        Arrays.asList(new Double[] { 1.1, 1.2, 1.3, 1.4 }));
    interopBuilder.setBoolField(true);
    interopBuilder.setBytesField(ByteBuffer.wrap(new byte[] { 1, 2, 3, 4 }));
    interopBuilder.setDoubleField(3.14d);
    interopBuilder.setEnumField(Kind.B);
    interopBuilder.setFixedField(new MD5(new byte[] {
        4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1 }));
    interopBuilder.setFloatField(6.022f);
    interopBuilder.setIntField(32);
    interopBuilder.setLongField(64L);
   
    Map<java.lang.String,org.apache.avro.Foo> map =
      new HashMap<java.lang.String,org.apache.avro.Foo>(1);
    map.put("foo", Foo.newBuilder().setLabel("bar").build());
    interopBuilder.setMapField(map);
   
    interopBuilder.setNullField(null);
   
    Node.Builder rootBuilder = Node.newBuilder().setLabel("/");
    Node.Builder homeBuilder = Node.newBuilder().setLabel("home");
    homeBuilder.setChildren(new ArrayList<Node>(0));
    rootBuilder.setChildren(Arrays.asList(new Node[] { homeBuilder.build() }));
    interopBuilder.setRecordField(rootBuilder.build());
   
    interopBuilder.setStringField("Hello");
    interopBuilder.setUnionField(Arrays.asList(new ByteBuffer[] {
        ByteBuffer.wrap(new byte[] { 1, 2 }) }));
   
    Interop interop = interopBuilder.build();
   
    // Verify that deepCopy works for all fields:
    for (Field field : Interop.SCHEMA$.getFields()) {
      // Original field and deep copy should be equivalent:
      if (interop.get(field.pos()) instanceof ByteBuffer) {
        assertTrue(Arrays.equals(((ByteBuffer)interop.get(field.pos())).array(),
            ((ByteBuffer)GenericData.get().deepCopy(field.schema(),
                interop.get(field.pos()))).array()));
      }
      else {
        assertEquals(interop.get(field.pos()),
            SpecificData.get().deepCopy(
                field.schema(), interop.get(field.pos())));
      }
     
      // Original field and deep copy should be different instances:
      if ((field.schema().getType() != Type.ENUM)
           && (field.schema().getType() != Type.NULL)
           && (field.schema().getType() != Type.BOOLEAN)
           && (field.schema().getType() != Type.INT)
           && (field.schema().getType() != Type.LONG)
           && (field.schema().getType() != Type.FLOAT)
           && (field.schema().getType() != Type.DOUBLE)
           && (field.schema().getType() != Type.STRING)) {
        assertFalse("Field " + field.name() + " is same instance in deep copy",
            interop.get(field.pos()) ==
              GenericData.get().deepCopy(
                  field.schema(), interop.get(field.pos())));
      }
    }
  }
}
TOP

Related Classes of org.apache.avro.generic.TestDeepCopy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.