001 /***************************************************************************** 002 * Copyright (c) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the license.html file. * 007 * * 008 * Idea by Rachel Davies, Original code by Aslak Hellesoy and Paul Hammant * 009 *****************************************************************************/ 010 package org.picocontainer.testmodel; 011 012 import static org.junit.Assert.assertNotNull; 013 014 import org.picocontainer.Disposable; 015 import org.picocontainer.PicoContainer; 016 import org.picocontainer.Startable; 017 018 019 public abstract class RecordingLifecycle implements Startable, Disposable { 020 private final StringBuffer recording; 021 022 protected RecordingLifecycle(StringBuffer recording) { 023 this.recording = recording; 024 } 025 026 public void start() { 027 recording.append("<").append(code()); 028 } 029 030 public void stop() { 031 recording.append(code()).append(">"); 032 } 033 034 public void dispose() { 035 recording.append("!").append(code()); 036 } 037 038 public String recording() { 039 return recording.toString(); 040 } 041 042 private String code() { 043 String name = getClass().getName(); 044 int idx = Math.max(name.lastIndexOf('$'), name.lastIndexOf('.')); 045 return name.substring(idx + 1); 046 } 047 048 public interface Recorder extends Startable, Disposable { 049 String recording(); 050 } 051 052 public static class One extends RecordingLifecycle implements Recorder { 053 public One(StringBuffer sb) { 054 super(sb); 055 } 056 } 057 058 public static class Two extends RecordingLifecycle { 059 public Two(StringBuffer sb, One one) { 060 super(sb); 061 assertNotNull(one); 062 } 063 } 064 065 public static class Three extends RecordingLifecycle { 066 public Three(StringBuffer sb, One one, Two two) { 067 super(sb); 068 assertNotNull(one); 069 assertNotNull(two); 070 } 071 } 072 073 public static class Four extends RecordingLifecycle { 074 public Four(StringBuffer sb, Two two, Three three, One one) { 075 super(sb); 076 assertNotNull(one); 077 assertNotNull(two); 078 assertNotNull(three); 079 } 080 } 081 082 public static class FiveTriesToBeMalicious extends RecordingLifecycle { 083 public FiveTriesToBeMalicious(StringBuffer sb, PicoContainer pc) { 084 super(sb); 085 assertNotNull(pc); 086 sb.append("Whao! Should not get instantiated!!"); 087 } 088 } 089 090 }