15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/*
294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers * Copyright (C) 2012 The Android Open Source Project
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Licensed under the Apache License, Version 2.0 (the "License");
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * you may not use this file except in compliance with the License.
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * You may obtain a copy of the License at
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *      http://www.apache.org/licenses/LICENSE-2.0
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Unless required by applicable law or agreed to in writing, software
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * distributed under the License is distributed on an "AS IS" BASIS,
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * See the License for the specific language governing permissions and
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * limitations under the License.
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * test calling through an interface
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main {
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void main(String args[]) {
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int result = 0;
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Iface2Sub1 faceObj;
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        ImplA faceObj2;
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        faceObj = new ImplBSub();
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        result = faceObj.iFunc2(5);
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.print("ImplBSub intf: ");
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println(result);
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        faceObj2 = new ImplA();
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        result = faceObj2.iFunc2(5);
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.print("ImplA: ");
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println(result);
3694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers
3794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers        objectOverrideTests();
3894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    }
3994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers
4094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  static void check(boolean z) {
4194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    if (!z) {
4294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers      throw new AssertionError();
435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
4494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  }
4594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers
4694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  static void objectOverrideTests() {
4794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    ObjectOverridingInterface o =
4894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers        new ObjectOverridingInterface() {
4994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public boolean equals(Object o) {
5094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return true;
5194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
5294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public int hashCode() {
5394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return 0xC001D00D;
5494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
5594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public String toString() {
5694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return "Mallet's Mallet";
5794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
5894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public int length() {
5994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return toString().length();
6094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
6194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public char charAt(int i) {
6294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return toString().charAt(i);
6394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
6494c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          public CharSequence subSequence(int s, int e) {
6594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers            return toString().subSequence(s, e);
6694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers          }
6794c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers        };
6894c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    doObjectOverrideTests(o);
6994c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  }
704c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers
714c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  private static interface SubInterface extends Cloneable, SubObjectOverridingInterface {
724c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  }
734c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers
744c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  private static class SubInterfaceImpl implements SubInterface {
754c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    public int length() {
764c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers      return 0;
774c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    }
784c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    public char charAt(int i) {
794c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers      return '!';
804c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    }
814c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    public CharSequence subSequence(int s, int e) {
824c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers      return "";
834c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    }
844c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  }
854c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers
864c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  static String subObjectOverrideTests(SubInterface i) {
874c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    return i.toString();
884c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers  }
894c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers
9094c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  static void doObjectOverrideTests(ObjectOverridingInterface o) {
9194c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    check(o.equals(null));
9294c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    check(o.hashCode() == 0xC001D00D);
9394c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    check(o.toString().equals("Mallet's Mallet"));
944c5b265e66bebf890b6f9e53cddeb512774b1613Ian Rogers    check(subObjectOverrideTests(new SubInterfaceImpl()) != null);
9594c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers    System.out.println("objectOverrideTests: SUCCESS");
9694c0e33ac8773f250564cd024647a65c23761fb3Ian Rogers  }
975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
98