vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CloneTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 07 Jan 2013 16:46:09 +0100
changeset 411 6506d5132e03
parent 394 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java@31ca8ea998a9
child 412 777b9b841f15
permissions -rw-r--r--
Object.clone seems to be well supported
jaroslav@355
     1
/**
jaroslav@355
     2
 * Back 2 Browser Bytecode Translator
jaroslav@355
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@355
     4
 *
jaroslav@355
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@355
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@355
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@355
     8
 *
jaroslav@355
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@355
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@355
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@355
    12
 * GNU General Public License for more details.
jaroslav@355
    13
 *
jaroslav@355
    14
 * You should have received a copy of the GNU General Public License
jaroslav@355
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@355
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@355
    17
 */
jaroslav@355
    18
package org.apidesign.bck2brwsr.tck;
jaroslav@355
    19
jaroslav@355
    20
import org.apidesign.bck2brwsr.vmtest.Compare;
jaroslav@355
    21
import org.apidesign.bck2brwsr.vmtest.VMTest;
jaroslav@355
    22
import org.testng.annotations.Factory;
jaroslav@355
    23
jaroslav@355
    24
/**
jaroslav@355
    25
 *
jaroslav@355
    26
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@355
    27
 */
jaroslav@411
    28
public class CloneTest {
jaroslav@411
    29
    private int value;
jaroslav@411
    30
    
jaroslav@411
    31
    @Compare public Object notSupported() {
jaroslav@411
    32
        try {
jaroslav@411
    33
            return new CloneTest().clone();
jaroslav@411
    34
        } catch (CloneNotSupportedException ex) {
jaroslav@411
    35
            return ex.getClass().getName() + ":" + ex.getMessage();
jaroslav@411
    36
        }
jaroslav@355
    37
    }
jaroslav@355
    38
jaroslav@411
    39
    @Compare public String sameClass() throws CloneNotSupportedException {
jaroslav@411
    40
        return new Clnbl().clone().getClass().getName();
jaroslav@355
    41
    }
jaroslav@411
    42
jaroslav@411
    43
    @Compare public boolean differentInstance() throws CloneNotSupportedException {
jaroslav@411
    44
        Clnbl orig = new Clnbl();
jaroslav@411
    45
        return orig == orig.clone();
jaroslav@392
    46
    }
jaroslav@411
    47
jaroslav@411
    48
    @Compare public int sameReference() throws CloneNotSupportedException {
jaroslav@411
    49
        CloneTest self = new CloneTest();
jaroslav@411
    50
        Clnbl orig = new Clnbl();
jaroslav@411
    51
        self.value = 33;
jaroslav@411
    52
        orig.ref = self;
jaroslav@411
    53
        return ((Clnbl)orig.clone()).ref.value;
jaroslav@394
    54
    }
jaroslav@411
    55
jaroslav@411
    56
    @Compare public int sameValue() throws CloneNotSupportedException {
jaroslav@411
    57
        Clnbl orig = new Clnbl();
jaroslav@411
    58
        orig.value = 10;
jaroslav@411
    59
        return ((Clnbl)orig.clone()).value;
jaroslav@392
    60
    }
jaroslav@355
    61
    
jaroslav@355
    62
    @Factory
jaroslav@355
    63
    public static Object[] create() {
jaroslav@411
    64
        return VMTest.create(CloneTest.class);
jaroslav@355
    65
    }
jaroslav@355
    66
    
jaroslav@411
    67
    public static final class Clnbl implements Cloneable {
jaroslav@411
    68
        public CloneTest ref;
jaroslav@411
    69
        private int value;
jaroslav@411
    70
jaroslav@411
    71
        @Override
jaroslav@411
    72
        public Object clone() throws CloneNotSupportedException {
jaroslav@411
    73
            return super.clone();
jaroslav@411
    74
        }
jaroslav@411
    75
    }
jaroslav@355
    76
}