diff options
author | Jesse Wilson <jesse@swank.ca> | 2009-09-28 06:59:02 +0000 |
---|---|---|
committer | Jesse Wilson <jesse@swank.ca> | 2009-09-28 06:59:02 +0000 |
commit | 52dbf8ba09761c48f5381214a36ad7a6613ab5b1 (patch) | |
tree | f33fbeea3bd35d8b590548bea63e2fd0dccbbebc | |
parent | eedff3dfab100dc291a3fb3d34022dcd80ab7592 (diff) | |
download | platform_external_jsr330-52dbf8ba09761c48f5381214a36ad7a6613ab5b1.tar.gz platform_external_jsr330-52dbf8ba09761c48f5381214a36ad7a6613ab5b1.tar.bz2 platform_external_jsr330-52dbf8ba09761c48f5381214a36ad7a6613ab5b1.zip |
Adding several more tests to the TCK.
git-svn-id: https://atinject.googlecode.com/svn/trunk@31 3bc8319c-20ab-11de-9edc-3f40a397ab60
-rw-r--r-- | tck/com/googlecode/atinject/Candidate.java | 11 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/Tck.java | 7 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/Tester.java | 13 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Car.java | 7 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Convertible.java | 121 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Drivers.java | 7 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/DriversSeat.java | 16 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Engine.java | 41 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/FuelTank.java | 8 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/GasEngine.java (renamed from tck/com/googlecode/atinject/auto/Vin.java) | 19 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Seat.java | 21 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Seatbelt.java | 7 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/Tire.java | 51 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/V8Engine.java | 42 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/accessories/Cupholder.java | 31 | ||||
-rw-r--r-- | tck/com/googlecode/atinject/auto/accessories/SpareTire.java | 41 |
16 files changed, 331 insertions, 112 deletions
diff --git a/tck/com/googlecode/atinject/Candidate.java b/tck/com/googlecode/atinject/Candidate.java index 75e8192..6a707c2 100644 --- a/tck/com/googlecode/atinject/Candidate.java +++ b/tck/com/googlecode/atinject/Candidate.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject; import com.googlecode.atinject.auto.Car; @@ -35,6 +34,10 @@ import com.googlecode.atinject.auto.Car; * Cupholder}, {@link com.googlecode.atinject.auto.Tire Tire} and {@link com.googlecode.atinject.auto.FuelTank * FuelTank}. * </ul> + * + * <p>The static members of the following types shall also be injected: {@link com.googlecode.atinject.auto.Convertible + * Convertible}, {@link com.googlecode.atinject.auto.Tire Tire}, and {@link + * com.googlecode.atinject.auto.accessories.SpareTire SpareTire}. */ public interface Candidate { diff --git a/tck/com/googlecode/atinject/Tck.java b/tck/com/googlecode/atinject/Tck.java index e77dec1..7392481 100644 --- a/tck/com/googlecode/atinject/Tck.java +++ b/tck/com/googlecode/atinject/Tck.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject; import com.googlecode.atinject.auto.Car; diff --git a/tck/com/googlecode/atinject/Tester.java b/tck/com/googlecode/atinject/Tester.java index 898f2a8..0f37e6e 100644 --- a/tck/com/googlecode/atinject/Tester.java +++ b/tck/com/googlecode/atinject/Tester.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject; import java.util.List; @@ -25,8 +24,7 @@ public class Tester { private final List<String> problems = new ArrayList<String>(); /** - * @param problem a description of what went wrong; often of the form, - * "Expected two injections to yield the same instance of Vin". + * @param problem a brief description of what went wrong. */ public void addProblem(String problem) { problems.add(problem); @@ -35,8 +33,7 @@ public class Tester { /** * Adds a problem if {@code condition} is not true. * - * @param problem a description of what went wrong; often of the form, - * "Expected two injections to yield the same instance of Vin". + * @param problem a brief description of what went wrong. */ public void test(boolean condition, String problem) { if (!condition) { diff --git a/tck/com/googlecode/atinject/auto/Car.java b/tck/com/googlecode/atinject/auto/Car.java index 77185b9..c3832da 100644 --- a/tck/com/googlecode/atinject/auto/Car.java +++ b/tck/com/googlecode/atinject/auto/Car.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; import com.googlecode.atinject.Tester; diff --git a/tck/com/googlecode/atinject/auto/Convertible.java b/tck/com/googlecode/atinject/auto/Convertible.java index 0b18cb1..fdb2181 100644 --- a/tck/com/googlecode/atinject/auto/Convertible.java +++ b/tck/com/googlecode/atinject/auto/Convertible.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,11 +14,11 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; import com.googlecode.atinject.Tester; import com.googlecode.atinject.auto.accessories.SpareTire; +import com.googlecode.atinject.auto.accessories.Cupholder; import javax.inject.Inject; import javax.inject.Named; @@ -30,8 +30,9 @@ public class Convertible implements Car { @Inject DriversSeat driversSeatA; @Inject DriversSeat driversSeatB; - @Inject V8Engine engine; @Inject SpareTire spareTire; + @Inject Cupholder cupholder; + @Inject Provider<Engine> engineProvider; private boolean methodWithZeroParamsInjected; private boolean methodWithMultipleParamsInjected; @@ -43,28 +44,46 @@ public class Convertible implements Car { private Seat constructorDriversSeat; private Tire constructorPlainTire; private Tire constructorSpareTire; - private Provider<Seat> constructorPlainSeatProvider; - private Provider<Seat> constructorDriversSeatProvider; - private Provider<Tire> constructorPlainTireProvider; - private Provider<Tire> constructorSpareTireProvider; + private Provider<Seat> constructorPlainSeatProvider = nullProvider(); + private Provider<Seat> constructorDriversSeatProvider = nullProvider(); + private Provider<Tire> constructorPlainTireProvider = nullProvider(); + private Provider<Tire> constructorSpareTireProvider = nullProvider(); @Inject Seat fieldPlainSeat; @Inject @Drivers Seat fieldDriversSeat; @Inject Tire fieldPlainTire; @Inject @Named("spare") Tire fieldSpareTire; - @Inject Provider<Seat> fieldPlainSeatProvider; - @Inject @Drivers Provider<Seat> fieldDriversSeatProvider; - @Inject Provider<Tire> fieldPlainTireProvider; - @Inject @Named("spare") Provider<Tire> fieldSpareTireProvider; + @Inject Provider<Seat> fieldPlainSeatProvider = nullProvider(); + @Inject @Drivers Provider<Seat> fieldDriversSeatProvider = nullProvider(); + @Inject Provider<Tire> fieldPlainTireProvider = nullProvider(); + @Inject @Named("spare") Provider<Tire> fieldSpareTireProvider = nullProvider(); private Seat methodPlainSeat; private Seat methodDriversSeat; private Tire methodPlainTire; private Tire methodSpareTire; - private Provider<Seat> methodPlainSeatProvider; - private Provider<Seat> methodDriversSeatProvider; - private Provider<Tire> methodPlainTireProvider; - private Provider<Tire> methodSpareTireProvider; + private Provider<Seat> methodPlainSeatProvider = nullProvider(); + private Provider<Seat> methodDriversSeatProvider = nullProvider(); + private Provider<Tire> methodPlainTireProvider = nullProvider(); + private Provider<Tire> methodSpareTireProvider = nullProvider(); + + @Inject static Seat staticFieldPlainSeat; + @Inject @Drivers static Seat staticFieldDriversSeat; + @Inject static Tire staticFieldPlainTire; + @Inject @Named("spare") static Tire staticFieldSpareTire; + @Inject static Provider<Seat> staticFieldPlainSeatProvider = nullProvider(); + @Inject @Drivers static Provider<Seat> staticFieldDriversSeatProvider = nullProvider(); + @Inject static Provider<Tire> staticFieldPlainTireProvider = nullProvider(); + @Inject @Named("spare") static Provider<Tire> staticFieldSpareTireProvider = nullProvider(); + + private static Seat staticMethodPlainSeat; + private static Seat staticMethodDriversSeat; + private static Tire staticMethodPlainTire; + private static Tire staticMethodSpareTire; + private static Provider<Seat> staticMethodPlainSeatProvider = nullProvider(); + private static Provider<Seat> staticMethodDriversSeatProvider = nullProvider(); + private static Provider<Tire> staticMethodPlainTireProvider = nullProvider(); + private static Provider<Tire> staticMethodSpareTireProvider = nullProvider(); @Inject Convertible( Seat plainSeat, @@ -102,7 +121,7 @@ public class Convertible implements Car { return "unused"; } - @Inject void injectMethodWithManyArgs( + @Inject void injectInstanceMethodWithManyArgs( Seat plainSeat, @Drivers Seat driversSeat, Tire plainTire, @@ -123,22 +142,62 @@ public class Convertible implements Car { methodSpareTireProvider = spareTireProvider; } + @Inject static void injectStaticMethodWithManyArgs( + Seat plainSeat, + @Drivers Seat driversSeat, + Tire plainTire, + @Named("spare") Tire spareTire, + Provider<Seat> plainSeatProvider, + @Drivers Provider<Seat> driversSeatProvider, + Provider<Tire> plainTireProvider, + @Named("spare") Provider<Tire> spareTireProvider) { + staticMethodPlainSeat = plainSeat; + staticMethodDriversSeat = driversSeat; + staticMethodPlainTire = plainTire; + staticMethodSpareTire = spareTire; + staticMethodPlainSeatProvider = plainSeatProvider; + staticMethodDriversSeatProvider = driversSeatProvider; + staticMethodPlainTireProvider = plainTireProvider; + staticMethodSpareTireProvider = spareTireProvider; + } + + /** + * Returns a provider that always returns null. This is used as a default + * value to avoid null checks for omitted provider injections. + */ + private static <T> Provider<T> nullProvider() { + return new Provider<T>() { + public T get() { + return null; + } + }; + } + public void check(Tester tester) { tester.addProblems(moreProblems); - // values are injected tester.test(methodWithZeroParamsInjected, "Zero-parmeter method not injected"); tester.test(methodWithMultipleParamsInjected, "Multi-parameter method not injected"); tester.test(methodWithNonVoidReturnInjected, "Non-void method not injected"); - - // singleton is not @Inherited tester.test(driversSeatA != driversSeatB, "@Singleton inherited from supertype"); testInjectedValues(tester); testProviders(tester); - spareTire.check(tester); - engine.check(tester); + Engine engine = engineProvider.get(); + + if (spareTire == null || cupholder == null || engineProvider == null) { + tester.addProblem("Fields not injected"); + } else { + spareTire.check(tester); + cupholder.check(tester); + + if (engine == null) { + tester.addProblem("Provider returned null"); + } else { + engine.check(tester); + } + } } private void testInjectedValues(Tester tester) { @@ -154,6 +213,14 @@ public class Convertible implements Car { methodPlainSeat, methodDriversSeat, methodPlainTire, methodSpareTire); testExpectedValues(tester, "provider injected into a method", methodPlainSeatProvider.get(), methodDriversSeatProvider.get(), methodPlainTireProvider.get(), methodSpareTireProvider.get()); + testExpectedValues(tester, "injected static field", + staticFieldPlainSeat, staticFieldDriversSeat, staticFieldPlainTire, staticFieldSpareTire); + testExpectedValues(tester, "provider injected into a static field", staticFieldPlainSeatProvider.get(), + staticFieldDriversSeatProvider.get(), staticFieldPlainTireProvider.get(), staticFieldSpareTireProvider.get()); + testExpectedValues(tester, "injected static method", + staticMethodPlainSeat, staticMethodDriversSeat, staticMethodPlainTire, staticMethodSpareTire); + testExpectedValues(tester, "provider injected into a static method", staticMethodPlainSeatProvider.get(), + staticMethodDriversSeatProvider.get(), staticMethodPlainTireProvider.get(), staticMethodSpareTireProvider.get()); } private void testProviders(Tester tester) { @@ -176,13 +243,13 @@ public class Convertible implements Car { private void testExpectedValues(Tester tester, String injectionMechanism, Seat plainSeat, Seat driversSeat, Tire plainTire, Tire spareTire) { tester.test(!(plainSeat instanceof DriversSeat), - "Wrong type injected for " + injectionMechanism); + "Wrong value injected for " + injectionMechanism); tester.test(driversSeat instanceof DriversSeat, - "Wrong type injected for qualified " + injectionMechanism); + "Wrong value injected for qualified " + injectionMechanism); tester.test(!(plainTire instanceof SpareTire), - "Wrong type injected for " + injectionMechanism); + "Wrong value injected for " + injectionMechanism); tester.test(spareTire instanceof SpareTire, - "Wrong type injected for @Named " + injectionMechanism); + "Wrong value injected for @Named " + injectionMechanism); } private void testProviderProvidesNewValuesEachTime(Tester tester, Provider<?>... providers) { diff --git a/tck/com/googlecode/atinject/auto/Drivers.java b/tck/com/googlecode/atinject/auto/Drivers.java index f59c3fa..fded2bb 100644 --- a/tck/com/googlecode/atinject/auto/Drivers.java +++ b/tck/com/googlecode/atinject/auto/Drivers.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; import javax.inject.Qualifier; diff --git a/tck/com/googlecode/atinject/auto/DriversSeat.java b/tck/com/googlecode/atinject/auto/DriversSeat.java index 521fc0f..d8bffd5 100644 --- a/tck/com/googlecode/atinject/auto/DriversSeat.java +++ b/tck/com/googlecode/atinject/auto/DriversSeat.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,8 +14,16 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; +import com.googlecode.atinject.auto.accessories.Cupholder; + +import javax.inject.Inject; + public class DriversSeat extends Seat { + + @Inject + public DriversSeat(Cupholder cupholder) { + super(cupholder); + } } diff --git a/tck/com/googlecode/atinject/auto/Engine.java b/tck/com/googlecode/atinject/auto/Engine.java index c427b04..4ee0902 100644 --- a/tck/com/googlecode/atinject/auto/Engine.java +++ b/tck/com/googlecode/atinject/auto/Engine.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,10 +14,13 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; +import com.googlecode.atinject.auto.accessories.SpareTire; +import com.googlecode.atinject.Tester; + import javax.inject.Inject; +import javax.inject.Named; import java.util.List; import java.util.ArrayList; @@ -25,9 +28,18 @@ public abstract class Engine { protected final List<String> moreProblems = new ArrayList<String>(); + protected boolean publicNoArgsConstructorInjected; protected boolean packagePrivateMethodInjected; protected boolean packagePrivateMethodForOverrideInjected; + protected boolean overriddenTwiceWithOmissionInMiddleInjected; + protected boolean overriddenTwiceWithOmissionInSubclassInjected; + + protected Seat seatA; + protected Seat seatB; + protected Tire tireA; + protected Tire tireB; + @Inject void injectPackagePrivateMethod() { moreProblems.add("Unexpected call to supertype package private method"); } @@ -35,4 +47,25 @@ public abstract class Engine { @Inject void injectPackagePrivateMethodForOverride() { moreProblems.add("Unexpected call to supertype package private method"); } + + @Inject public void injectQualifiers(@Drivers Seat seatA, Seat seatB, + @Named("spare") Tire tireA, Tire tireB) { + if (!(seatA instanceof DriversSeat) + || (seatB instanceof DriversSeat) + || !(tireA instanceof SpareTire) + || (tireB instanceof SpareTire)) { + moreProblems.add("Qualifiers inherited from overridden methods"); + } + } + + @Inject public void injectTwiceOverriddenWithOmissionInMiddle() { + overriddenTwiceWithOmissionInMiddleInjected = true; + } + + @Inject public void injectTwiceOverriddenWithOmissionInSubclass() { + overriddenTwiceWithOmissionInSubclassInjected = true; + } + + public abstract void check(Tester tester); + } diff --git a/tck/com/googlecode/atinject/auto/FuelTank.java b/tck/com/googlecode/atinject/auto/FuelTank.java index 49eaae2..19a00a6 100644 --- a/tck/com/googlecode/atinject/auto/FuelTank.java +++ b/tck/com/googlecode/atinject/auto/FuelTank.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,8 +14,8 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; public class FuelTank { + } diff --git a/tck/com/googlecode/atinject/auto/Vin.java b/tck/com/googlecode/atinject/auto/GasEngine.java index cde592c..951c4ca 100644 --- a/tck/com/googlecode/atinject/auto/Vin.java +++ b/tck/com/googlecode/atinject/auto/GasEngine.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,12 +14,17 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; -public class Vin { +import javax.inject.Inject; + +public abstract class GasEngine extends Engine { + + public void injectTwiceOverriddenWithOmissionInMiddle() { + overriddenTwiceWithOmissionInMiddleInjected = true; + } - static Integer nextVin() { - return 0; + @Inject public void injectTwiceOverriddenWithOmissionInSubclass() { + overriddenTwiceWithOmissionInSubclassInjected = true; } } diff --git a/tck/com/googlecode/atinject/auto/Seat.java b/tck/com/googlecode/atinject/auto/Seat.java index be61b2c..ac23b78 100644 --- a/tck/com/googlecode/atinject/auto/Seat.java +++ b/tck/com/googlecode/atinject/auto/Seat.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,11 +14,24 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; +import com.googlecode.atinject.auto.accessories.Cupholder; + import javax.inject.Singleton; +import javax.inject.Inject; @Singleton public class Seat { + + private final Cupholder cupholder; + + @Inject + Seat(Cupholder cupholder) { + this.cupholder = cupholder; + } + + public Cupholder getCupholder() { + return cupholder; + } } diff --git a/tck/com/googlecode/atinject/auto/Seatbelt.java b/tck/com/googlecode/atinject/auto/Seatbelt.java index b2188f9..885cf4e 100644 --- a/tck/com/googlecode/atinject/auto/Seatbelt.java +++ b/tck/com/googlecode/atinject/auto/Seatbelt.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; public class Seatbelt { diff --git a/tck/com/googlecode/atinject/auto/Tire.java b/tck/com/googlecode/atinject/auto/Tire.java index a4a2f3e..74dca17 100644 --- a/tck/com/googlecode/atinject/auto/Tire.java +++ b/tck/com/googlecode/atinject/auto/Tire.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,22 +14,25 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; +import com.googlecode.atinject.auto.accessories.SpareTire; + import javax.inject.Inject; -import java.util.List; -import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.Set; public class Tire { - protected static final V8Engine NEVER_INJECTED = new V8Engine(); + protected static final FuelTank NEVER_INJECTED = new FuelTank(); - protected final List<String> moreProblems = new ArrayList<String>(); + protected static final Set<String> moreProblems = new LinkedHashSet<String>(); - V8Engine constructorInjection = NEVER_INJECTED; - @Inject V8Engine fieldInjection = NEVER_INJECTED; - V8Engine methodInjection = NEVER_INJECTED; + FuelTank constructorInjection = NEVER_INJECTED; + @Inject FuelTank fieldInjection = NEVER_INJECTED; + FuelTank methodInjection = NEVER_INJECTED; + @Inject static FuelTank staticFieldInjection = NEVER_INJECTED; + static FuelTank staticMethodInjection = NEVER_INJECTED; boolean constructorInjected; @@ -49,12 +52,11 @@ public class Tire { protected boolean protectedMethodForOverrideInjected; protected boolean publicMethodForOverrideInjected; - @Inject - public Tire(V8Engine constructorInjection) { + @Inject public Tire(FuelTank constructorInjection) { this.constructorInjection = constructorInjection; } - @Inject void supertypeMethodInjection(V8Engine methodInjection) { + @Inject void supertypeMethodInjection(FuelTank methodInjection) { if (!hasTireBeenFieldInjected()) { moreProblems.add("Method injected before fields"); } @@ -67,6 +69,19 @@ public class Tire { this.methodInjection = methodInjection; } + @Inject static void supertypeStaticMethodInjection(FuelTank methodInjection) { + if (!Tire.hasBeenStaticFieldInjected()) { + moreProblems.add("Static method injected before static fields"); + } + if (SpareTire.hasBeenStaticFieldInjected()) { + moreProblems.add("Subtype static field injected before supertype static method"); + } + if (SpareTire.hasBeenStaticMethodInjected()) { + moreProblems.add("Subtype static method injected before supertype static method"); + } + staticMethodInjection = methodInjection; + } + @Inject private void injectPrivateMethod() { if (superPrivateMethodInjected) { moreProblems.add("Overridden private method injected twice"); @@ -123,6 +138,14 @@ public class Tire { return methodInjection != NEVER_INJECTED; } + protected static boolean hasBeenStaticFieldInjected() { + return staticFieldInjection != NEVER_INJECTED; + } + + protected static boolean hasBeenStaticMethodInjected() { + return staticMethodInjection != NEVER_INJECTED; + } + protected boolean hasSpareTireBeenMethodInjected() { return false; } diff --git a/tck/com/googlecode/atinject/auto/V8Engine.java b/tck/com/googlecode/atinject/auto/V8Engine.java index 9762903..17e9ed4 100644 --- a/tck/com/googlecode/atinject/auto/V8Engine.java +++ b/tck/com/googlecode/atinject/auto/V8Engine.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,14 +14,19 @@ * limitations under the License. */ - package com.googlecode.atinject.auto; import com.googlecode.atinject.Tester; +import com.googlecode.atinject.auto.accessories.SpareTire; import javax.inject.Inject; +import javax.inject.Named; + +public class V8Engine extends GasEngine { -public class V8Engine extends Engine { + public V8Engine() { + publicNoArgsConstructorInjected = true; + } @Inject void injectPackagePrivateMethod() { if (packagePrivateMethodInjected) { @@ -30,15 +35,42 @@ public class V8Engine extends Engine { packagePrivateMethodInjected = true; } + /** + * Qualifiers are swapped from how they appear in the superclass. + */ + public void injectQualifiers(Seat seatA, @Drivers Seat seatB, + Tire tireA, @Named("spare") Tire tireB) { + if ((seatA instanceof DriversSeat) + || !(seatB instanceof DriversSeat) + || (tireA instanceof SpareTire) + || !(tireB instanceof SpareTire)) { + moreProblems.add("Qualifiers inherited from overridden methods"); + } + } + void injectPackagePrivateMethodForOverride() { packagePrivateMethodForOverrideInjected = true; } + @Inject public void injectTwiceOverriddenWithOmissionInMiddle() { + overriddenTwiceWithOmissionInMiddleInjected = true; + } + + public void injectTwiceOverriddenWithOmissionInSubclass() { + overriddenTwiceWithOmissionInSubclassInjected = true; + } + public void check(Tester tester) { tester.addProblems(moreProblems); + tester.test(publicNoArgsConstructorInjected, "Public no-args constructor not injected"); tester.test(packagePrivateMethodInjected, "Packge private method not injected"); tester.test(!packagePrivateMethodForOverrideInjected, "Package private method injected, even though its override lacks @Inject"); + + tester.test(overriddenTwiceWithOmissionInMiddleInjected, + "Twice-overridden method not injected; middle override lacks @Inject"); + tester.test(!overriddenTwiceWithOmissionInSubclassInjected, + "Twice-overridden method injected, even though its override lacks @Inject"); } } diff --git a/tck/com/googlecode/atinject/auto/accessories/Cupholder.java b/tck/com/googlecode/atinject/auto/accessories/Cupholder.java index b024eb6..22dbd0d 100644 --- a/tck/com/googlecode/atinject/auto/accessories/Cupholder.java +++ b/tck/com/googlecode/atinject/auto/accessories/Cupholder.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,9 +14,32 @@ * limitations under the License. */ - package com.googlecode.atinject.auto.accessories; +import com.googlecode.atinject.auto.Seat; +import com.googlecode.atinject.Tester; + +import javax.inject.Singleton; +import javax.inject.Provider; +import javax.inject.Inject; +import java.util.List; +import java.util.ArrayList; + +@Singleton public class Cupholder { + + protected final List<String> moreProblems = new ArrayList<String>(); + + private final Provider<Seat> seatProvider; + + @Inject + public Cupholder(Provider<Seat> seatProvider) { + this.seatProvider = seatProvider; + } + + public void check(Tester tester) { + tester.addProblems(moreProblems); + tester.test(seatProvider.get().getCupholder() == this, "Circularly dependent singletons not singleton"); + } } diff --git a/tck/com/googlecode/atinject/auto/accessories/SpareTire.java b/tck/com/googlecode/atinject/auto/accessories/SpareTire.java index 00ad9e6..71848c3 100644 --- a/tck/com/googlecode/atinject/auto/accessories/SpareTire.java +++ b/tck/com/googlecode/atinject/auto/accessories/SpareTire.java @@ -1,11 +1,11 @@ -/** - * Copyright (C) 2009 Google Inc. +/* + * Copyright (C) 2009 The JSR-330 Expert Group * * Licensed 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 + * 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, @@ -14,34 +14,41 @@ * limitations under the License. */ - package com.googlecode.atinject.auto.accessories; import com.googlecode.atinject.Tester; +import com.googlecode.atinject.auto.FuelTank; import com.googlecode.atinject.auto.Tire; -import com.googlecode.atinject.auto.V8Engine; import javax.inject.Inject; public class SpareTire extends Tire { - V8Engine constructorInjection = NEVER_INJECTED; - @Inject V8Engine fieldInjection = NEVER_INJECTED; - V8Engine methodInjection = NEVER_INJECTED; - + FuelTank constructorInjection = NEVER_INJECTED; + @Inject FuelTank fieldInjection = NEVER_INJECTED; + FuelTank methodInjection = NEVER_INJECTED; + @Inject static FuelTank staticFieldInjection = NEVER_INJECTED; + static FuelTank staticMethodInjection = NEVER_INJECTED; - @Inject public SpareTire(V8Engine forSupertype, V8Engine forSubtype) { + @Inject public SpareTire(FuelTank forSupertype, FuelTank forSubtype) { super(forSupertype); this.constructorInjection = forSubtype; } - @Inject void subtypeMethodInjection(V8Engine methodInjection) { + @Inject void subtypeMethodInjection(FuelTank methodInjection) { if (!hasSpareTireBeenFieldInjected()) { moreProblems.add("Methods injected before fields"); } this.methodInjection = methodInjection; } + @Inject static void subtypeStaticMethodInjection(FuelTank methodInjection) { + if (!hasBeenStaticFieldInjected()) { + moreProblems.add("Static methods injected before static fields"); + } + staticMethodInjection = methodInjection; + } + @Inject private void injectPrivateMethod() { if (subPrivateMethodInjected) { moreProblems.add("Overridden private method injected twice"); @@ -94,6 +101,14 @@ public class SpareTire extends Tire { return methodInjection != NEVER_INJECTED; } + public static boolean hasBeenStaticFieldInjected() { + return staticFieldInjection != NEVER_INJECTED; + } + + public static boolean hasBeenStaticMethodInjected() { + return staticMethodInjection != NEVER_INJECTED; + } + /** * This class is used to check inheritance. By existing in a separate package * from Tire, it can make sure the injector does the right thing with overrides @@ -106,6 +121,10 @@ public class SpareTire extends Tire { tester.test(hasSpareTireBeenMethodInjected(), "Subtype methods not injected"); tester.test(hasTireBeenFieldInjected(), "Supertype fields not injected"); tester.test(hasTireBeenMethodInjected(), "Supertype methods not injected"); + tester.test(SpareTire.hasBeenStaticFieldInjected(), "Subtype static fields not injected"); + tester.test(SpareTire.hasBeenStaticMethodInjected(), "Subtype static methods not injected"); + tester.test(Tire.hasBeenStaticFieldInjected(), "Supertype static fields not injected"); + tester.test(Tire.hasBeenStaticMethodInjected(), "Supertype static methods not injected"); tester.test(superPrivateMethodInjected, "Supertype private method not injected"); tester.test(superPackagePrivateMethodInjected, "Supertype private method not injected"); |