vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CloneTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 412 777b9b841f15
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
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@413
    31
    @Compare
jaroslav@413
    32
    public Object notSupported() throws CloneNotSupportedException {
jaroslav@413
    33
        return this.clone();
jaroslav@355
    34
    }
jaroslav@355
    35
jaroslav@411
    36
    @Compare public String sameClass() throws CloneNotSupportedException {
jaroslav@411
    37
        return new Clnbl().clone().getClass().getName();
jaroslav@355
    38
    }
jaroslav@411
    39
jaroslav@411
    40
    @Compare public boolean differentInstance() throws CloneNotSupportedException {
jaroslav@411
    41
        Clnbl orig = new Clnbl();
jaroslav@411
    42
        return orig == orig.clone();
jaroslav@392
    43
    }
jaroslav@411
    44
jaroslav@411
    45
    @Compare public int sameReference() throws CloneNotSupportedException {
jaroslav@412
    46
        CloneTest self = this;
jaroslav@411
    47
        Clnbl orig = new Clnbl();
jaroslav@411
    48
        self.value = 33;
jaroslav@411
    49
        orig.ref = self;
jaroslav@411
    50
        return ((Clnbl)orig.clone()).ref.value;
jaroslav@394
    51
    }
jaroslav@411
    52
jaroslav@411
    53
    @Compare public int sameValue() throws CloneNotSupportedException {
jaroslav@411
    54
        Clnbl orig = new Clnbl();
jaroslav@411
    55
        orig.value = 10;
jaroslav@411
    56
        return ((Clnbl)orig.clone()).value;
jaroslav@392
    57
    }
jaroslav@355
    58
    
jaroslav@355
    59
    @Factory
jaroslav@355
    60
    public static Object[] create() {
jaroslav@411
    61
        return VMTest.create(CloneTest.class);
jaroslav@355
    62
    }
jaroslav@355
    63
    
jaroslav@411
    64
    public static final class Clnbl implements Cloneable {
jaroslav@411
    65
        public CloneTest ref;
jaroslav@411
    66
        private int value;
jaroslav@411
    67
jaroslav@411
    68
        @Override
jaroslav@411
    69
        public Object clone() throws CloneNotSupportedException {
jaroslav@411
    70
            return super.clone();
jaroslav@411
    71
        }
jaroslav@411
    72
    }
jaroslav@355
    73
}