[webbeans-commits] Webbeans SVN: r1110 - in tck/trunk/impl/src/main: java/org/jboss/webbeans/tck/tests and 37 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Tue Jan 20 01:39:39 EST 2009


Author: shane.bryzak at jboss.com
Date: 2009-01-20 01:39:37 -0500 (Tue, 20 Jan 2009)
New Revision: 1110

Added:
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextManagementTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/NormalContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/application/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/application/ApplicationContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/conversation/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/conversation/ConversationContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlyAnimal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlySpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DependentContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Fox.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/FoxRun.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Spider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Tarantula.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/City.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityBinding.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityInterface.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer2.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer3.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Espoo_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Forssa_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hamina_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Helsinki.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hyvinkaa.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jamsa_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Joensuu.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jyvaskyla.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kaarina_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kotka_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kuopio_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Loviisa_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Maarianhamina_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Mikkeli_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Nokia_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/PassivatingContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Peraseinajoki.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Pietarsaari_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Porvoo_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Raisio_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Salo_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Turku.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Uusikaupunki_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vaasa.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vantaa_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation2.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/request/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/request/RequestContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/session/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/session/SessionContextTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/BeanDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlyAnimal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlySpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DependentFinalTuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/FishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Spider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Tarantula.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/WolfSpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Barn.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BindingDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BorderCollie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cat.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Chunky.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ClippedBorderCollie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cod.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlyAnimal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlySpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DefangedTarantula.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Hairy.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Horse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/LongHairedDog.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Order.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ScottishFish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ShetlandPony.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Species.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Spider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Synchronous.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tame.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tarantula.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Whitefish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BeanWithTooManyDeploymentTypes_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BlackWidow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BorderCollie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlyAnimal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlySpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DefaultDeploymentTypeTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Dog.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/FishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Gazelle_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenLabrador.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenRetriever.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedAnimalDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedMammalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Horse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/InheritedDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Labrador.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/MammalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/NotInheritedDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Reindeer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Retriever.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Rhinoceros.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/ShetlandPony.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Spider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/FishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Haddock.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/MammalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Minnow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Moose.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/NameDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RiverFishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/SeaBass.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScope.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScopeType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BeanWithTooManyScopeTypes.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BorderCollie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Dog.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/FishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenLabrador.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenRetriever.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Grayling.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Horse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Labrador.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Minnow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Mullet.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/NotInheritedScope.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Order.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Pollock.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Retriever.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RiverFishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Scallop_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ScopeDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/SeaBass.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ShetlandPony.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Antelope_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ApplicationScopedHornedMammalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Asynchronous.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/BorderCollie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Bovine.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Carp_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Chair_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Elk_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/FallowDeer_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Gazelle_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goat_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goldfish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HighlandCow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedAnimalDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedMammalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Horse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/LongHairedDog.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Mammal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Moose.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Reindeer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RequestScopedAnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RoeDeer_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ShetlandPony.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Springbok.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithBindingTypes_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithNonEmptyNamed_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyDeploymentTypes_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyScopeTypes_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Tame.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/ApiTypeDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Haddock.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotypeAnnotationLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AuroraFinch.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AustralianTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BananaSpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BirdCage.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlackRumpedWaxbill_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlueFacedParrotFinch.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BorderTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BostonTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Boxer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BullTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CairnsTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CommonWaxbill_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Egg.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/EventTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Farmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FinchKeeper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FiresBinding.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FoxTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/GoldbreastWaxbill_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/JavaSparrow_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/LazyFarmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OrangeCheekedWaxbill.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OwlFinch_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Pomeranian.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/PomeranianInterface.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RecluseSpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Role.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RoleBinding.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/StarFinch.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/SweeWaxbill_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Tame.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TameAnnotationLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TeaCupPomeranian.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Terrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TibetanTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/YorkshireTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/commonAnnotations/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/commonAnnotations/ResourceInjectionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/decorator/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/decorator/DecoratorDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/deployment/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/deployment/BeanDeploymentTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedConstructorParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedField.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedInitializerParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedProducerParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Armant_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Beagle_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Boxer_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Bullmastiff_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Dachshund_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanDeclarationTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanLifecycleTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanRemoveMethodTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanSpecializationTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Giraffe.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoldenRetriever.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoodDoggie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreatDane.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreaterDane.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Greyhound_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Hound.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/HoundOfBaskerville.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Husky_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/IrishTerrier_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/JackRussellTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Koirus.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Labrador.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Laika.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Leopard.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/LocalGoodDoggie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewAndOtherBindingType_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewEnterpriseBeanTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pekingese_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pitbull.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pug_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pumi_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Rottweiler.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/RussellTerrier.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Saluki.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Spitz.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Tame.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Toller.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WelshCorgie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WrappedEnterpriseBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Capercaillie.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Chicken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/ChickenHutch.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/DangerCall.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Dottrel.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Fox.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Grouse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/InitializerMethodTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Pheasant.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Shrike.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/interceptor/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/interceptor/InterceptorDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/jms/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/jms/JmsDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/producer/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedConstructorParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedField.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedInitializerParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedProducerParameter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/BookOrderProcessor.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/CdOrderProcessor.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Cow_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Donkey.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Duck.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/EntityBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Farm.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FarmOffice.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishPond.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goldfish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goose_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/HeavyDuty.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Leopard_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockEnterpriseBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockFilter.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockHttpSessionListener.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServlet.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletContextListener.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletRequestListener.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockUIComponent.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Modern.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Motorized.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewAndOtherBindingType_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewSimpleBeanTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NovelOrderProcessor.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Order.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OrderProcessor.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OuterBean_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/ParameterizedBean_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Plough.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RedSnapper.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RequestScopedAnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Sheep.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanDefinitionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanLifecycleTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Synchronous.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SynchronousAnnotationLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tiger.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tractor.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/TunaFarm.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Turkey.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/WrappedSimpleBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractCow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractFarmHouse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractHorse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractKennel.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractStable.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cuddly.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dog.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dung.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmAnimalDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmHouse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Horse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/LabradorKennel.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Smelly.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Stable.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Tame.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameCow.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameHorse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/Farmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/OrganicFarmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/SpecializationTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Chunky.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Cod.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Haddock.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/InstantiationByNameTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Plaice.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ResolutionByNameTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Salmon.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ScottishFish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/SeaBass.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Sole.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Whitefish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/ClientProxyTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/FinalTuna_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Fox.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/TunedTuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithFinalBoundField_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithStaticBoundField_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/DeluxeHenHouse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouseProducer_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouse_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Fox.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FoxRun.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/HenHouse.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/InjectionTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderNest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/TunaFarm.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotype.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotypeAnnotationLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/BeanWithInjectionPointMetadata.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/ConstructorInjectionPointBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/FieldInjectionPointBean.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/InjectionPointTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/FishFarmOffice.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/ManagerTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Animal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnimalFarmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentType.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentTypeLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMemberLiteral_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMember_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMemberLiteral_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMember_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Chunky.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ChunkyLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Cod.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DaddyLongLegs.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlyAnimal.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlySpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Expensive.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ExpensiveLiteral.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Farmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/FinalTuna_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Haddock.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Halibut.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/InstantiationByTypeTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/LadybirdSpider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ParameterizedBean_Broken.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Plaice.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ResolutionByTypeTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/RoundWhitefish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Salmon.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFish.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFishFarmer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SeaBass.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Sole.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Spider.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SpiderProducer.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tarantula.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tuna.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Whitefish.java
Removed:
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/AbstractTest.java
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/context/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/definition/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/event/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/implementation/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/inheritance/
   tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/lookup/
Modified:
   tck/trunk/impl/src/main/resources/tck-unit-tests.xml
Log:
refactored

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/AbstractTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,139 @@
+package org.jboss.webbeans.tck;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import javax.webbeans.Production;
+import javax.webbeans.Standard;
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Manager;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+
+ at SuppressWarnings("unchecked")
+public class AbstractTest
+{
+   
+   protected abstract static class RunInDependentContext 
+   {
+      
+      protected void setup()
+      {
+         AbstractTest.activateDependentContext();
+      }
+      
+      protected void cleanup()
+      {
+         AbstractTest.deactivateDependentContext();
+      }
+      
+      public final void run() throws Exception
+      {
+         try
+         {
+            setup();
+            execute();
+         }
+         finally
+         {
+            cleanup();
+         }
+      }
+      
+      protected abstract void execute() throws Exception;
+      
+   }
+   
+   private static final List<Class<? extends Annotation>> STANDARD_DEPLOYMENT_TYPES = Collections.unmodifiableList(Arrays.asList(Standard.class, Production.class));
+   
+   protected static final int BUILT_IN_BEANS = 3;
+   
+   protected Manager manager;
+
+   public static boolean visited = false;
+
+   @BeforeMethod
+   public final void before()
+   {
+      manager = configuration().getManagers().createManager();
+      configuration().getManagers().setEnabledDeploymentTypes(getEnabledDeploymentTypes());
+   }
+   
+   @AfterMethod
+   public void after()
+   {
+      manager = null;
+   }
+   
+   public <T> Bean<T> createSimpleBean(Class<T> beanClass)
+   {
+      return configuration().getBeans().createSimpleBean(beanClass);
+   }
+   
+   public <T> Bean<T> createEnterpriseBean(Class<T> beanClass)
+   {
+      return configuration().getBeans().createEnterpriseBean(beanClass);
+   }
+   
+   public <T> Bean<T> createProducerMethodBean(Method method, Bean<?> producerBean)
+   {
+      return configuration().getBeans().createProducerMethodBean(method, producerBean);
+   }
+   
+   public <T> Bean<T> createProducerFieldBean(Field field, Bean<?> producerBean)
+   {
+      return configuration().getBeans().createProducerFieldBean(field, producerBean);
+   }
+
+   protected void deployBeans(Class<?>... classes)
+   {
+      manager = configuration().getContainers().deploy(classes);
+   }
+   
+   protected List<Class<? extends Annotation>> getStandardDeploymentTypes()
+   {
+      return new ArrayList<Class<? extends Annotation>>(STANDARD_DEPLOYMENT_TYPES); 
+   }
+   
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      return getStandardDeploymentTypes();
+   }
+
+   protected byte[] serialize(Object instance) throws IOException
+   {
+      ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+      ObjectOutputStream out = new ObjectOutputStream(bytes);
+      out.writeObject(instance);
+      return bytes.toByteArray();
+   }
+
+   protected Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException
+   {
+      ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
+      return in.readObject();
+   }
+
+   protected static void activateDependentContext()
+   {
+      configuration().getContexts().setActive(configuration().getContexts().getDependentContext());
+   }
+   
+   protected static  void deactivateDependentContext()
+   {
+      configuration().getContexts().setInactive(configuration().getContexts().getDependentContext());
+   }
+}
\ No newline at end of file

Deleted: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/AbstractTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/AbstractTest.java	2009-01-20 06:00:29 UTC (rev 1109)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/tests/AbstractTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -1,139 +0,0 @@
-package org.jboss.webbeans.tck.tests;
-
-import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import javax.webbeans.Production;
-import javax.webbeans.Standard;
-import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Manager;
-
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-
- at SuppressWarnings("unchecked")
-public class AbstractTest
-{
-   
-   protected abstract static class RunInDependentContext 
-   {
-      
-      protected void setup()
-      {
-         AbstractTest.activateDependentContext();
-      }
-      
-      protected void cleanup()
-      {
-         AbstractTest.deactivateDependentContext();
-      }
-      
-      public final void run() throws Exception
-      {
-         try
-         {
-            setup();
-            execute();
-         }
-         finally
-         {
-            cleanup();
-         }
-      }
-      
-      protected abstract void execute() throws Exception;
-      
-   }
-   
-   private static final List<Class<? extends Annotation>> STANDARD_DEPLOYMENT_TYPES = Collections.unmodifiableList(Arrays.asList(Standard.class, Production.class));
-   
-   protected static final int BUILT_IN_BEANS = 3;
-   
-   protected Manager manager;
-
-   public static boolean visited = false;
-
-   @BeforeMethod
-   public final void before()
-   {
-      manager = configuration().getManagers().createManager();
-      configuration().getManagers().setEnabledDeploymentTypes(getEnabledDeploymentTypes());
-   }
-   
-   @AfterMethod
-   public void after()
-   {
-      manager = null;
-   }
-   
-   public <T> Bean<T> createSimpleBean(Class<T> beanClass)
-   {
-      return configuration().getBeans().createSimpleBean(beanClass);
-   }
-   
-   public <T> Bean<T> createEnterpriseBean(Class<T> beanClass)
-   {
-      return configuration().getBeans().createEnterpriseBean(beanClass);
-   }
-   
-   public <T> Bean<T> createProducerMethodBean(Method method, Bean<?> producerBean)
-   {
-      return configuration().getBeans().createProducerMethodBean(method, producerBean);
-   }
-   
-   public <T> Bean<T> createProducerFieldBean(Field field, Bean<?> producerBean)
-   {
-      return configuration().getBeans().createProducerFieldBean(field, producerBean);
-   }
-
-   protected void deployBeans(Class<?>... classes)
-   {
-      manager = configuration().getContainers().deploy(classes);
-   }
-   
-   protected List<Class<? extends Annotation>> getStandardDeploymentTypes()
-   {
-      return new ArrayList<Class<? extends Annotation>>(STANDARD_DEPLOYMENT_TYPES); 
-   }
-   
-   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
-   {
-      return getStandardDeploymentTypes();
-   }
-
-   protected byte[] serialize(Object instance) throws IOException
-   {
-      ByteArrayOutputStream bytes = new ByteArrayOutputStream();
-      ObjectOutputStream out = new ObjectOutputStream(bytes);
-      out.writeObject(instance);
-      return bytes.toByteArray();
-   }
-
-   protected Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException
-   {
-      ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
-      return in.readObject();
-   }
-
-   protected static void activateDependentContext()
-   {
-      configuration().getContexts().setActive(configuration().getContexts().getDependentContext());
-   }
-   
-   protected static  void deactivateDependentContext()
-   {
-      configuration().getContexts().setInactive(configuration().getContexts().getDependentContext());
-   }
-}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextManagementTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextManagementTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextManagementTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,75 @@
+package org.jboss.webbeans.tck.unit.context;
+
+import javax.webbeans.ContextNotActiveException;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Nicklas Karlsson
+ * 
+ */
+ at SpecVersion("20081206")
+public class ContextManagementTest extends AbstractTest
+{
+   /**
+    * For each of the built-in normal scopes, contexts propagate across any Java
+    * method call, including invocation of EJB local business methods.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6")
+   public void testBuiltInNormalScopedContextsPropagateAcrossAnyJavaMethodCall()
+   {
+      assert false;
+   }
+
+   /**
+    * The built-in contexts do not propagate across remote method invocations or
+    * to asynchronous processes such as JMS message listeners or EJB timer
+    * service timeouts
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6")
+   public void testBuiltInNormalScopedContextsDoNotPropagateAcrossRemoteMethodInvocations()
+   {
+      assert false;
+   }
+
+   /**
+    * The built-in contexts do not propagate across remote method invocations or
+    * to asynchronous processes such as JMS message listeners or EJB timer
+    * service timeouts
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6")
+   public void testBuiltInNormalScopedContextsDoNotPropagateAcrossAsynchronousMethodInvocations()
+   {
+      assert false;
+   }
+
+   /**
+    * If no active context object exists for the given scope type, getContext()
+    * must throw a ContextNotActiveException.
+    */
+   @Test(groups = { "stub", "contexts" }, expectedExceptions = ContextNotActiveException.class)
+   @SpecAssertion(section = "9.7")
+   public void testGettingContextNotActiveFails()
+   {
+      assert false;
+   }
+
+   /**
+    * If more than one active context object exists for the given scope type,
+    * getContext() must throw an IllegalStateException.
+    */
+   @Test(groups = { "stub", "contexts" }, expectedExceptions = ContextNotActiveException.class)
+   @SpecAssertion(section = "9.7")
+   public void testGettingContextWithTooManyActiveFails()
+   {
+      assert false;
+   }
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/ContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,74 @@
+package org.jboss.webbeans.tck.unit.context;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.lang.annotation.Annotation;
+
+import javax.webbeans.ContextNotActiveException;
+import javax.webbeans.RequestScoped;
+import javax.webbeans.manager.Context;
+import javax.webbeans.manager.Contextual;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class ContextTest extends AbstractTest
+{
+   
+   private @interface Dummy
+   {
+      
+   }
+   
+   private static class DummyContext implements Context
+   {
+
+      public <T> T get(Contextual<T> bean, boolean create)
+      {
+         throw new UnsupportedOperationException();
+      }
+
+      public Class<? extends Annotation> getScopeType()
+      {
+         return Dummy.class;
+      }
+
+      public boolean isActive()
+      {
+         return true;
+      }
+      
+   }
+   
+   @Test(expectedExceptions={ContextNotActiveException.class}, groups={"manager"}) @SpecAssertion(section="8.6")
+   public void testGetContextWithNoActiveContextsFails()
+   {
+      configuration().getContexts().setInactive(configuration().getContexts().getRequestContext());
+      manager.getContext(RequestScoped.class);
+   }
+
+   @Test(expectedExceptions={IllegalArgumentException.class}, groups={"manager"}) @SpecAssertion(section="8.6")
+   public void testGetContextWithTooManyActiveContextsFails()
+   {
+      Context firstContext = new DummyContext() {};
+      Context secondContext = new DummyContext() {};
+      manager.addContext(firstContext);
+      manager.addContext(secondContext);
+      manager.getContext(Dummy.class);
+   }
+
+   @Test(expectedExceptions={ContextNotActiveException.class}, groups={"stub", "manager"}) @SpecAssertion(section="8.6")
+   public void testGetContextWithNoRegisteredContextsFails()
+   {
+      manager.getContext(RequestScoped.class);
+      assert false;
+   }
+
+   @Test(groups={"manager"}) @SpecAssertion(section="8.6")
+   public void testGetContextReturnsActiveContext()
+   {
+      manager.getContext(RequestScoped.class);
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/NormalContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/NormalContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/NormalContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,202 @@
+package org.jboss.webbeans.tck.unit.context;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.webbeans.ScopeType;
+import javax.webbeans.manager.Context;
+import javax.webbeans.manager.Contextual;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Nicklas Karlsson
+ * @author Pete Muir
+ * 
+ *         This class tests a basic context against section 8 of the
+ *         specification
+ * 
+ */
+ at SpecVersion("20081206")
+public class NormalContextTest extends AbstractTest
+{
+   
+   @ScopeType
+   @Retention(RetentionPolicy.RUNTIME)
+   private @interface Dummy {}
+   
+   private static class DummyContext implements Context
+   {
+
+      public <T> T get(Contextual<T> bean, boolean create)
+      {
+         throw new UnsupportedOperationException();
+      }
+
+      public Class<? extends Annotation> getScopeType()
+      {
+         return Dummy.class;
+      }
+
+      public boolean isActive()
+      {
+         return true;
+      }
+      
+   }
+   
+   Context context;
+
+   @BeforeMethod
+   public void initContext()
+   {
+      context = new DummyContext();
+   }
+
+   /**
+    * return an existing instance of the given contextual type, or
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testGetReturnsExistingInstace()
+   {
+      assert false;
+   }
+
+   /**
+    * if the value of the create parameter is false, return a null value, or
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testGetWithCreateFalseReturnsNull()
+   {
+      assert false;
+   }
+
+   /**
+    * if the value of the create parameter is true, create a new instance of the
+    * given contextual type by calling Bean.create() and return the new
+    * instance.
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testGetWithCreateTrueReturnsNewInstance()
+   {
+      assert false;
+   }
+
+   /**
+    * The get() method may not return a null value unless the create parameter
+    * is false or Contextual.create() returns a null value
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testGetMayNotReturnNullUnlessCreateIsFalseOrContextualCreateReturnsNull()
+   {
+      assert false;
+   }
+
+   /**
+    * The get() method may not create a new instance of the given contextual
+    * type unless the create parameter is true
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testGetMayNotCreateNewInstanceUnlessCreateIsTrue()
+   {
+      assert false;
+   }
+
+   /**
+    * The Context implementation is responsible for destroying any contextual
+    * instance it creates by passing the instance to the destroy() method of the
+    * Contextual object representing the contextual type.
+    */
+   public void testContextDestroysBeansWhenDestroyed()
+   {
+      assert false;
+   }
+
+   /**
+    * A destroyed instance must not subsequently be returned by the get()
+    * method.
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testDestroyedInstanceMustNotBeReturnedByGet()
+   {
+      assert false;
+   }
+
+   /**
+    * When a scope is inactive, any invocation of the get() from the current
+    * thread upon the Context object for that scope results in a
+    * ContextNotActiveException.
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.2")
+   public void testInvokingGetOnInactiveContextFails()
+   {
+      assert false;
+   }
+
+   /**
+    * There may be no more than one mapped instance per contextual type per
+    * thread
+    */
+   @Test(groups = { "contexts", "stub" })
+   @SpecAssertion(section = "9.3")
+   public void testOnlyMappedInstancePerContextualTypePerThread()
+   {
+      assert false;
+   }
+
+   /*
+    * @Test(groups = "contexts")
+    * 
+    * @SpecAssertion(section = "9.3") public void
+    * testGetWithCreateFalseReturnsNull() { Bean<Tuna> tunaBean =
+    * BeanFactory.createSimpleBean(Tuna.class, manager); assert
+    * context.get(tunaBean, false) == null; }
+    * 
+    * @Test(groups = "contexts")
+    * 
+    * @SpecAssertion(section = "8.1") public void
+    * testGetWithCreateTrueReturnsBean() { Bean<Tuna> tunaBean =
+    * BeanFactory.createSimpleBean(Tuna.class, manager); assert
+    * context.get(tunaBean, true) != null; }
+    * 
+    * @Test(groups = "contexts", expectedExceptions =
+    * ContextNotActiveException.class)
+    * 
+    * @SpecAssertion(section = "8.1") public void
+    * testInactiveContextThrowsContextNotActiveException() { ((AbstractContext)
+    * context).setActive(false); context.get(null, false); assert true; }
+    * 
+    * @Test(groups = "contexts")
+    * 
+    * @SpecAssertion(section = "8.1") public void
+    * testReturnsCorrectExistingBean() { Bean<Tuna> tunaBean =
+    * BeanFactory.createSimpleBean(Tuna.class, manager); Tuna firstTuna =
+    * context.get(tunaBean, true); Tuna secondTuna = context.get(tunaBean,
+    * false); assert firstTuna == secondTuna; }
+    * 
+    * @Test(groups = { "contexts", "producerMethod" })
+    * 
+    * @SpecAssertion(section = "8.1") public void
+    * testProducerMethodReturningNullOK() throws SecurityException,
+    * NoSuchMethodException { SimpleBean<SpiderProducer> producer =
+    * createSimpleBean(SpiderProducer.class, manager);
+    * manager.addBean(producer); Method nullProducer =
+    * SpiderProducer.class.getMethod("produceShelob");
+    * ProducerMethodBean<Tarantula> shelobBean =
+    * createProducerMethodBean(Tarantula.class, nullProducer, producer,
+    * manager); assert shelobBean.create() == null; }
+    */
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/application/ApplicationContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/application/ApplicationContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/application/ApplicationContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,92 @@
+package org.jboss.webbeans.tck.unit.context.application;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class ApplicationContextTest extends AbstractTest
+{
+
+   /**
+    * The application scope is active during the service() method of any servlet
+    * in the web application.
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeActiveDuringServiceMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The application scope is active during any Java EE web service invocation.
+    */
+   @Test(groups = { "stub", "contexts", "webservice" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeActiveDuringWebSericeInvocation()
+   {
+      assert false;
+   }
+
+   /**
+    * The application scope is also active during any remote method invocation
+    * of any EJB bean, during any call to an EJB timeout method and during
+    * message delivery to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeActiveDuringRemoteMethodInvocationOfEjb()
+   {
+      assert false;
+   }
+
+   /**
+    * The application scope is also active during any remote method invocation
+    * of any EJB bean, during any call to an EJB timeout method and during
+    * message delivery to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeActiveDuringCallToEjbTimeoutMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The application scope is also active during any remote method invocation
+    * of any EJB bean, during any call to an EJB timeout method and during
+    * message delivery to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeActiveDuringEjbMessageDelivery()
+   {
+      assert false;
+   }
+
+   /**
+    * The application context is shared between all servlet requests, web
+    * service invocations, EJB remote method invocations, EJB timeouts and
+    * message deliveries to message driven beans that execute within the same
+    * application
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationContextSharedBetweenInvokationsInApplication()
+   {
+      assert false;
+   }
+
+   /**
+    * The application context is destroyed when the application is undeployed.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.3")
+   public void testApplicationScopeDestroyedWhenApplicationIsUndeployed()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/conversation/ConversationContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/conversation/ConversationContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/conversation/ConversationContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,231 @@
+package org.jboss.webbeans.tck.unit.context.conversation;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Nicklas Karlsson
+ * 
+ */
+ at SpecVersion("20081206")
+public class ConversationContextTest extends AbstractTest
+{
+   /**
+    * For a JSF faces request, the context is active from the beginning of the
+    * apply request values phase, until the response is complete.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testContextActiveFromBeginningOfApplyRequestValuesPhasetoResponseCompleteForJsfRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * For a JSF non-faces request, the context is active during the render
+    * response phase
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testContextActiveDuringRenderResponsePhaseForNonFacesJsfRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * Any JSF request has exactly one associated conversation
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testJsfRequestHasExactlyOneAssociatedConversation()
+   {
+      assert false;
+   }
+
+   /**
+    * The conversation associated with a JSF request is determined at the end of
+    * the restore view phase and does not change during the request
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testAssociatedConversationOfJsfRequestIsDeterminedAtEndOfRestoreViewPhase()
+   {
+      assert false;
+   }
+
+   /**
+    * The conversation associated with a JSF request is determined at the end of
+    * the restore view phase and does not change during the request
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testAssociatedConversationOfJsfRequestDoesNotChangeDuringRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * By default, a conversation is transient
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testDefaultConversationIsTransient()
+   {
+      assert false;
+   }
+
+   /**
+    * All long-running conversations have a string-valued unique identifier
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testConversationsHaveUniqueStringIdentifiers()
+   {
+      assert false;
+   }
+
+   /**
+    * If the conversation associated with the current JSF request is in the
+    * transient state at the end of a JSF request, it is destroyed, and the
+    * conversation context is also destroyed.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testTransientConversationIsDestroyedAtEndOfJsfRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * If the conversation associated with the current JSF request is in the
+    * transient state at the end of a JSF request, it is destroyed, and the
+    * conversation context is also destroyed.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testTransientConversationContextIsDestroyedAtEndOfJsfRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * If the conversation associated with the current JSF request is in the
+    * long-running state at the end of a JSF request, it is not destroyed
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testLongRunningConversationNotDestroyedAtEndOfJsfRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * The long-running conversation context associated with a request that
+    * renders a JSF view is automatically propagated to any faces request (JSF
+    * form submission) that originates from that rendered page.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testLongRunningConversationOfJsfRenderingRequestIsPropagatedToRequestFromRenderedPage()
+   {
+      assert false;
+   }
+
+   /**
+    * The long-running conversation context associated with a request that
+    * results in a JSF redirect (via a navigation rule) is automatically
+    * propagated to the resulting non-faces request, and to any other subsequent
+    * request to the same URL. This is accomplished via use of a GET request
+    * parameter named cid containing the unique identifier of the conversation.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testLongRunningConversationOfJsfRedirectIsPropagatedToNonFacesRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * The long-running conversation associated with a request may be propagated
+    * to any non-faces request via use of a GET request parameter named cid
+    * containing the unique identifier of the conversation. In this case, the
+    * application must manage this request parameter
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testLongRunningConversationManuallyPropagatedToNonFacesRequest()
+   {
+      assert false;
+   }
+
+   /**
+    * When no conversation is propagated to a JSF request, the request is
+    * associated with a new transient conversation.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testNewTransientRequestIsCreatedWhenNoConversationIsPropagated()
+   {
+      assert false;
+   }
+
+   /**
+    * All long-running conversations are scoped to a particular HTTP servlet
+    * session and may not cross session boundaries
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testLongRunningConversationsMayNotCrossHttpSessions()
+   {
+      assert false;
+   }
+
+   /**
+    * When the HTTP servlet session is invalidated, all long-running
+    * conversation contexts created during the current session are destroyed
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testAllLongRunningConversationContextsOfInvalidatedHttpSessionAreDestroyed()
+   {
+      assert false;
+   }
+
+   /**
+    * The Web Bean manager is permitted to arbitrarily destroy any long-running
+    * conversation that is associated with no current JSF request, in order to
+    * conserve resources
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testManagerCanDestroyOrphanedLongRunningConversations()
+   {
+      assert false;
+   }
+
+   /**
+    * If the propagated conversation cannot be restored, the request is
+    * associated with a new transient conversation
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testNewTransientConversationIsCreatedWhenConversationCannotBeRestored()
+   {
+      assert false;
+   }
+
+   /**
+    * The Web Bean manager ensures that a long-running conversation may be
+    * associated with at most one request at a time, by blocking or rejecting
+    * concurrent requests.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.4")
+   public void testConcurrentRequestsToLongRunningConversationsAreHandled()
+   {
+      assert false;
+   }
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlyAnimal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlyAnimal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlyAnimal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+interface DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlySpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlySpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DeadlySpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+interface DeadlySpider extends DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DependentContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DependentContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/DependentContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,601 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+import java.lang.reflect.Method;
+import java.util.Set;
+
+import javax.webbeans.ContextNotActiveException;
+import javax.webbeans.Dependent;
+import javax.webbeans.manager.Bean;
+import javax.webbeans.manager.Context;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class DependentContextTest extends AbstractTest
+{
+
+   /**
+    * No injected instance of the Web Bean is ever shared between multiple
+    * injection points.
+    */
+   @Test(groups = { "contexts", "injection" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceNotSharedBetweenInjectionPoints()
+   {
+      deployBeans(Fox.class, FoxRun.class);
+      Set<Bean<Fox>> foxBeans = manager.resolveByType(Fox.class);
+      assert foxBeans.size() == 1;
+      Bean<Fox> foxBean = foxBeans.iterator().next();
+      Set<Bean<FoxRun>> foxRunBeans = manager.resolveByType(FoxRun.class);
+      assert foxRunBeans.size() == 1;
+      Bean<FoxRun> foxRunBean = foxRunBeans.iterator().next();
+      manager.addBean(foxBean);
+      FoxRun foxRun = foxRunBean.create();
+      assert !foxRun.fox.equals(foxRun.anotherFox);
+   }
+
+   /**
+    * Any instance of the Web Bean that is used to evaluate a Unified EL
+    * expression exists to service that evaluation only.
+    */
+   @Test(groups = { "stub", "contexts", "el" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceUsedForElEvalutionNotShared()
+   {
+      assert false;
+   }
+
+   /**
+    * Any instance of the Web Bean that receives a producer method, producer
+    * field, disposal method or observer method invocation exists to service
+    * that invocation only
+    */
+   @Test(groups = { "contexts", "producerMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceUsedForProducerMethodNotShared() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducer = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducer);
+      Method method = SpiderProducer.class.getMethod("produceTarantula");
+      Bean<Tarantula> tarantulaBean = createProducerMethodBean(method, spiderProducer);
+      Tarantula tarantula = tarantulaBean.create();
+      Tarantula tarantula2 = tarantulaBean.create();
+      assert tarantula != null;
+      assert tarantula2 != null;
+      assert tarantula != tarantula2;
+   }
+
+   /**
+    * Any instance of the Web Bean that receives a producer method, producer
+    * field, disposal method or observer method invocation exists to service
+    * that invocation only
+    */
+   @Test(groups = { "contexts", "producerMethod", "stub" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceUsedForProducerFieldNotShared() throws Exception
+   {
+      assert false;
+   }
+
+   /**
+    * Any instance of the Web Bean that receives a producer method, producer
+    * field, disposal method or observer method invocation exists to service
+    * that invocation only
+    */
+   @Test(groups = { "stub", "contexts", "disposalMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceUsedForDisposalMethodNotShared()
+   {
+      assert false;
+   }
+
+   /**
+    * Any instance of the Web Bean that receives a producer method, producer
+    * field, disposal method or observer method invocation exists to service
+    * that invocation only
+    */
+   @Test(groups = { "stub", "contexts", "observerMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testInstanceUsedForObserverMethodNotShared()
+   {
+      assert false;
+   }
+
+   /**
+    * Every invocation of the get() operation of the Context object for the @Dependent
+    * scope with the value true for the create parameter returns a new instance
+    * of the given Web Bean
+    */
+   @Test(groups = "contexts")
+   @SpecAssertion(section = "9.4")
+   public void testContextGetWithCreateTrueReturnsNewInstance() throws Exception 
+   {
+      deployBeans(Fox.class);
+      new RunInDependentContext()
+      {
+         
+         @Override
+         protected void execute() throws Exception
+         {
+            Set<Bean<Fox>> foxBeans = manager.resolveByType(Fox.class);
+            assert foxBeans.size() == 1;
+            Bean<Fox> foxBean = foxBeans.iterator().next();
+            Context context = manager.getContext(Dependent.class);
+            assert context.get(foxBean, true) != null;
+            assert context.get(foxBean, true) instanceof Fox;
+         }
+         
+      }.run();
+      
+   }
+
+   /**
+    * Every invocation of the get() operation of the Context object for the @Dependent
+    * scope with the value false for the create parameter returns a null value
+    */
+   @Test(groups = "contexts")
+   @SpecAssertion(section = "9.4")
+   public void testContextGetWithCreateFalseReturnsNull() throws Exception
+   {
+      deployBeans(Fox.class);
+      new RunInDependentContext()
+      {
+         
+         @Override
+         protected void execute() throws Exception
+         {
+            Set<Bean<Fox>> foxBeans = manager.resolveByType(Fox.class);
+            assert foxBeans.size() == 1;
+            Bean<Fox> foxBean = foxBeans.iterator().next();
+            Context context = manager.getContext(Dependent.class);
+            assert context.get(foxBean, false) == null;
+         }
+         
+      }.run();
+      
+      
+   }
+
+   /**
+    * The @Dependent scope is inactive except:
+    */
+   @Test(groups = {"contexts"}, expectedExceptions = ContextNotActiveException.class)
+   @SpecAssertion(section = "9.4")
+   public void testContextIsInactive()
+   {
+      manager.getContext(Dependent.class).isActive();
+   }
+
+   /**
+    * when an instance of a Web Bean with scope @Dependent is created by the Web
+    * Bean manager to receive a producer method, producer field, disposal method
+    * or observer method invocation, or
+    */
+   @Test(groups = { "stub", "contexts", "producerMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveWhenInvokingProducerMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * when an instance of a Web Bean with scope @Dependent is created by the Web
+    * Bean manager to receive a producer method, producer field, disposal method
+    * or observer method invocation, or
+    */
+   @Test(groups = { "stub", "contexts", "producerField" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveWhenInvokingProducerField()
+   {
+      assert false;
+   }
+
+   /**
+    * when an instance of a Web Bean with scope @Dependent is created by the Web
+    * Bean manager to receive a producer method, producer field, disposal method
+    * or observer method invocation, or
+    */
+   @Test(groups = { "stub", "contexts", "disposalMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveWhenInvokingDisposalMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * when an instance of a Web Bean with scope @Dependent is created by the Web
+    * Bean manager to receive a producer method, producer field, disposal method
+    * or observer method invocation, or
+    */
+   @Test(groups = { "stub", "contexts", "observerMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveWhenInvokingObserverMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * while a Unified EL expression is evaluated, or
+    */
+   @Test(groups = { "stub", "contexts", "el" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveWhenEvaluatingElExpression()
+   {
+      assert false;
+   }
+
+   /**
+    * when the Web Bean manager is creating or destroying a Web Bean instance or
+    * injecting its dependencies, or
+    */
+   @Test(groups = { "contexts", "beanLifecycle" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringBeanCreation()
+   {
+      // Slightly roundabout, but I can't see a better way to test atm
+      Bean<FoxRun> foxRunBean = createSimpleBean(FoxRun.class);
+      Bean<Fox> foxBean = createSimpleBean(Fox.class);
+      manager.addBean(foxBean);
+      FoxRun foxRun = foxRunBean.create();
+      assert foxRun.fox != null;
+   }
+
+   /**
+    * when the Web Bean manager is creating or destroying a Web Bean instance or
+    * injecting its dependencies, or
+    */
+   @Test(groups = { "stub", "contexts", "beanDestruction" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringBeanDestruction()
+   {
+      assert false;
+   }
+
+   /**
+    * when the Web Bean manager is creating or destroying a Web Bean instance or
+    * injecting its dependencies, or
+    */
+   @Test(groups = { "contexts", "injection" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringInjection()
+   {
+      Bean<FoxRun> foxRunBean = createSimpleBean(FoxRun.class);
+      Bean<Fox> foxBean = createSimpleBean(Fox.class);
+      manager.addBean(foxBean);
+      FoxRun foxRun = foxRunBean.create();
+      assert foxRun.fox != null;
+   }
+
+   /**
+    * when the Web Bean manager is injecting dependencies of an EJB bean or
+    * Servlet or when an EJB bean @PostConstruct or @PreDestroy callback is
+    * invoked by the EJB container
+    */
+   @Test(groups = { "contexts", "injection", "stub", "ejb3" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringEJBDependencyInjection()
+   {
+      assert false;
+   }
+
+   /**
+    * when the Web Bean manager is injecting dependencies of an EJB bean or
+    * Servlet or when an EJB bean @PostConstruct or @PreDestroy callback is
+    * invoked by the EJB container
+    */
+   @Test(groups = { "contexts", "injection", "stub", "servlet" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringServletDependencyInjection()
+   {
+      assert false;
+   }
+
+   /**
+    * when the Web Bean manager is injecting dependencies of an EJB bean or
+    * Servlet or when an EJB bean @PostConstruct or @PreDestroy callback is
+    * invoked by the EJB container
+    */
+   @Test(groups = { "contexts", "postconstruct", "stub", "ejb3" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringEJBPostConstruct()
+   {
+      assert false;
+   }
+
+   /**
+    * when the Web Bean manager is injecting dependencies of an EJB bean or
+    * Servlet or when an EJB bean @PostConstruct or @PreDestroy callback is
+    * invoked by the EJB container
+    */
+   @Test(groups = { "contexts", "predestroy", "stub", "ejb3" })
+   @SpecAssertion(section = "9.4")
+   public void testContextIsActiveDuringEJBPreDestroy()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "constructor" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromConstructor()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "removeMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromRemoveMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "initalizerMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromInitializerMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "producerMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromProducerMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "disposalMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromDisposalMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "preDestroy" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromPreDestroy()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "postConstruct" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromPostConstruct()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "interceptor" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromInterceptorOfActiveMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Web Bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from the Web Bean constructor, from the
+    * Web Bean remove method, from initializer methods, from producer methods,
+    * from disposal methods, from @PostConstruct and @PreDestroy callbacks and
+    * from Web Beans interceptors or decorators for any of these methods
+    */
+   @Test(groups = { "stub", "contexts", "decorator" })
+   @SpecAssertion(section = "9.4.1")
+   public void testWebBeanMayCreateInstanceFromDecoratorOfActiveMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * An EJB bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from initializer methods, from @PostConstruct
+    * and @PreDestroy callbacks and from Web Beans interceptors for these
+    * methods.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3", "initializerMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testEjbBeanMayCreateInstanceFromInitializer()
+   {
+      assert false;
+   }
+
+   /**
+    * An EJB bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from initializer methods, from @PostConstruct
+    * and @PreDestroy callbacks and from Web Beans interceptors for these
+    * methods.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3", "postConstruct" })
+   @SpecAssertion(section = "9.4.1")
+   public void testEjbBeanMayCreateInstanceFromPostConstruct()
+   {
+      assert false;
+   }
+
+   /**
+    * An EJB bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from initializer methods, from @PostConstruct
+    * and @PreDestroy callbacks and from Web Beans interceptors for these
+    * methods.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3", "preDestroy" })
+   @SpecAssertion(section = "9.4.1")
+   public void testEjbBeanMayCreateInstanceFromPreDestroy()
+   {
+      assert false;
+   }
+
+   /**
+    * An EJB bean may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from initializer methods, from @PostConstruct
+    * and @PreDestroy callbacks and from Web Beans interceptors for these
+    * methods.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3", "interceptor" })
+   @SpecAssertion(section = "9.4.1")
+   public void testEjbBeanMayCreateInstanceFromInterceptorOfActiveMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * A Servlet may create an instance of a Web Bean with scope type @Dependent
+    * by calling Manager.getInstance() from initializer methods
+    */
+   @Test(groups = { "stub", "contexts", "servlet", "initializerMethod" })
+   @SpecAssertion(section = "9.4.1")
+   public void testServletBeanMayCreateInstanceFromInitializer()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy all dependent objects of a Web Bean instance when the instance is
+    * destroyed,
+    */
+   @Test(groups = { "stub", "contexts", "beanDestruction" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDestroyingParentDestroysDependents()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy all dependent objects of an EJB bean or Servlet when the EJB bean
+    * or Servlet is destroyed,
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDestroyingEjbDestroysDependents()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy all dependent objects of an EJB bean or Servlet when the EJB bean
+    * or Servlet is destroyed,
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDestroyingServletDestroysDependents()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy all @Dependent scoped contextual instances created during an EL
+    * expression evaluation when the evaluation completes, and
+    */
+   @Test(groups = { "stub", "contexts", "el" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDependentsDestroyedWhenElEvaluationCompletes()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy any @Dependent scoped contextual instance created to receive a
+    * producer method, producer field, disposal method or observer method
+    * invocation when the invocation completes
+    */
+   @Test(groups = { "stub", "contexts", "producerMethod" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDependentsDestroyedWhenProducerMethodCompletes()
+   {
+      assert false;
+   }
+   
+   /**
+    * destroy any @Dependent scoped contextual instance created to receive a
+    * producer method, producer field, disposal method or observer method
+    * invocation when the invocation completes
+    */
+   @Test(groups = { "stub", "contexts", "producerField" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDependentsDestroyedWhenProducerFieldCompletes()
+   {
+      assert false;
+   }
+
+   /**
+    * destroy any @Dependent scoped contextual instance created to receive a
+    * producer method, producer field, disposal method or observer method
+    * invocation when the invocation completes
+    */
+   @Test(groups = { "stub", "contexts", "disposalMethod" })
+   @SpecAssertion(section = "9.4.2")
+   public void testDependentsDestroyedWhenDisposalMethodCompletes()
+   {
+      assert false;
+   }
+   
+   /**
+    * destroy any @Dependent scoped contextual instance created to receive a
+    * producer method, producer field, disposal method or observer method
+    * invocation when the invocation completes
+    */
+   @Test(groups = { "stub", "contexts", "observerMethod" })
+   @SpecAssertion(section = "9.4")
+   public void testDependentsDestroyedWhenObserverMethodEvaluationCompletes()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Fox.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Fox.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Fox.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Fox
+{
+   
+   public String getName()
+   {
+      return "gavin";
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/FoxRun.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/FoxRun.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/FoxRun.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+import javax.webbeans.Current;
+
+class FoxRun
+{
+   
+   @Current
+   public Fox fox;
+   
+   @Current
+   public Fox anotherFox;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Spider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Spider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Spider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+
+
+class Spider implements Animal
+{
+
+   public final void layEggs()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+import javax.webbeans.Produces;
+
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   @Produces public Tarantula produceTarantula()
+   {
+      return new Tarantula();
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Tarantula.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Tarantula.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/dependent/Tarantula.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.context.dependent;
+
+
+class Tarantula extends Spider implements DeadlySpider
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/City.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/City.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/City.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+class City
+{
+   public void ping() {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityBinding.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityBinding.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityBinding.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Dependent;
+import javax.webbeans.InterceptorBindingType;
+
+ at InterceptorBindingType
+ at Dependent
+ at Target({TYPE, METHOD})
+ at Retention(RUNTIME)
+ at interface CityBinding
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityInterface.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityInterface.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityInterface.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+interface CityInterface
+{
+   public void foo();
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Dependent;
+import javax.webbeans.Produces;
+
+class CityProducer
+{
+   @Produces @Dependent public Violation reference = new Violation();
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer2.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer2.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer2.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Dependent;
+import javax.webbeans.Produces;
+
+class CityProducer2
+{
+   @Produces
+   @Dependent
+   public Violation create()
+   {
+      return new Violation();
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer3.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer3.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/CityProducer3.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Current;
+import javax.webbeans.Dependent;
+import javax.webbeans.Produces;
+
+
+class CityProducer3
+{
+   @Produces
+   @Dependent
+   public Violation create(@Current Violation reference)
+   {
+      return new Violation();
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Espoo_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Espoo_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Espoo_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Espoo_Broken
+{
+   @Current
+   Violation reference;
+   
+   @Remove
+   public void bye() {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Forssa_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Forssa_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Forssa_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.Initializer;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Forssa_Broken implements Serializable
+{
+   public Forssa_Broken() {
+   }
+   
+   @Initializer
+   public Forssa_Broken(@Current Violation reference) {
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hamina_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hamina_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hamina_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Hamina_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Helsinki.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Helsinki.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Helsinki.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Dependent;
+
+ at Dependent
+ at Stateful
+class Helsinki
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hyvinkaa.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hyvinkaa.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Hyvinkaa.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SuppressWarnings("serial")
+ at SessionScoped
+class Hyvinkaa implements Serializable
+{
+   @SuppressWarnings("unused")
+   @Current
+   private transient Violation reference;
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jamsa_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jamsa_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jamsa_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.Produces;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Jamsa_Broken extends City implements Serializable
+{
+   public Jamsa_Broken()
+   {
+   }
+
+   @Produces
+   @SessionScoped
+   public Violation create(@Current Violation violation)
+   {
+      return violation;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Joensuu.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Joensuu.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Joensuu.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SuppressWarnings("serial")
+ at SessionScoped
+class Joensuu implements Serializable
+{
+   @SuppressWarnings("unused")
+   @Current
+   private transient Violation reference;
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jyvaskyla.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jyvaskyla.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Jyvaskyla.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.SessionScoped;
+
+ at SuppressWarnings("serial")
+ at SessionScoped
+class Jyvaskyla implements Serializable
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kaarina_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kaarina_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kaarina_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Kaarina_Broken
+{
+   @CityBinding
+   public void foo()
+   {
+   }
+
+   @Remove
+   public void bye()
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kotka_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kotka_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kotka_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Kotka_Broken implements Serializable
+{
+   @CityBinding
+   public void foo() {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kuopio_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kuopio_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Kuopio_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.Initializer;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Kuopio_Broken extends City implements Serializable
+{
+   public Kuopio_Broken() {
+      
+   }
+   
+   @Initializer
+   public void init(@Current Violation reference) {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Loviisa_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Loviisa_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Loviisa_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.Initializer;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Loviisa_Broken extends City implements Serializable
+{
+   public Loviisa_Broken() {
+   }
+   
+   @Initializer
+   public Loviisa_Broken(@Current Violation reference) {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Maarianhamina_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Maarianhamina_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Maarianhamina_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Maarianhamina_Broken
+{
+   @Current
+   private Violation reference;
+   
+   @Remove
+   public void bye() {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Mikkeli_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Mikkeli_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Mikkeli_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.Initializer;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Mikkeli_Broken extends City implements Serializable
+{
+   public Mikkeli_Broken()
+   {
+   }
+
+   @Initializer
+   public Mikkeli_Broken(@Current Violation reference)
+   {
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Nokia_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Nokia_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Nokia_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Nokia_Broken extends City implements Serializable
+{
+   @Current
+   private Violation reference;
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/PassivatingContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/PassivatingContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/PassivatingContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,479 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.IOException;
+import java.util.Set;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.IllegalProductException;
+import javax.webbeans.UnserializableDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Nicklas Karlsson 
+ * 
+ */
+ at SpecVersion("20081206")
+public class PassivatingContextTest extends AbstractTest
+{
+
+   /**
+    * EJB local objects are serializable. Therefore, an enterprise Web Bean may
+    * declare any passivating scope.
+    */
+   @Test(groups = { "contexts", "passivation", "enterpriseBean", "integration" })
+   @SpecAssertion(section = "9.5")
+   public void testEJBWebBeanCanDeclarePassivatingScope()
+   {
+      deployBeans(Turku.class);
+   }
+
+   /**
+    * Simple Web Beans are not required to be serializable. If a simple Web Bean
+    * declares a passivating scope, and the implementation class is not
+    * serializable, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleWebBeanWithNonSerializableImplementationClassFails()
+   {
+      deployBeans(Hamina_Broken.class);
+   }
+
+   /**
+    * Simple Web Beans are not required to be serializable. If a simple Web Bean
+    * declares a passivating scope, and the implementation class is not
+    * serializable, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time.
+    */
+   @Test(groups = {"contexts", "passivation" })
+   @SpecAssertion(section = "9.5")
+   public void testSimpleWebBeanWithSerializableImplementationClassOK()
+   {
+      createSimpleBean(Jyvaskyla.class);
+   }
+
+   /**
+    * the Web Bean declares a passivating scope type, and context passivation
+    * occurs, or
+    * 
+    * @throws IOException
+    * @throws ClassNotFoundException
+    */
+   @Test(groups = { "contexts", "passivation" , "stub" })
+   @SpecAssertion(section = "9.5")
+   public void testSimpleWebBeanDeclaringPassivatingScopeIsSerializedWhenContextIsPassivated() throws IOException, ClassNotFoundException
+   {
+      assert false;
+   }
+
+   @SuppressWarnings("unchecked")
+   private <T> boolean testSerialize(Bean<T> bean) throws IOException, ClassNotFoundException
+   {
+      manager.addBean(bean);
+      T instance = manager.getInstance(bean);
+      byte[] data = serialize(instance);
+      T resurrected = (T) deserialize(data);
+      return resurrected.toString().equals(instance.toString());
+   }
+
+   /**
+    * the Web Bean is an EJB stateful session bean, and it is passivated by the
+    * EJB container.
+    * 
+    * @throws ClassNotFoundException
+    * @throws IOException
+    */
+   // TODO requires an EJB instance
+   @Test(groups = { "contexts", "passivation", "broken", "stub" })
+   @SpecAssertion(section = "9.5")
+   public void testStatefulEJBIsSerializedWhenPassivatedByEJBContainer() throws IOException, ClassNotFoundException
+   {
+      assert false;
+   }
+
+   /**
+    * On the other hand, dependent objects (including interceptors and
+    * decorators with scope @Dependent) of a stateful session bean or of a Web
+    * Bean with a passivating scope must be serialized and deserialized along
+    * with their owner
+    */
+   @Test(groups = { "stub", "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentInterceptorsOfStatefulEnterpriseBeanMustBeSerializable()
+   {
+      deployBeans(Kaarina_Broken.class);
+   }
+
+   /**
+    * On the other hand, dependent objects (including interceptors and
+    * decorators with scope @Dependent) of a stateful session bean or of a Web
+    * Bean with a passivating scope must be serialized and deserialized along
+    * with their owner
+    */
+   @Test(groups = { "stub", "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentDecoratorsOfStatefulEnterpriseBeanMustBeSerializable()
+   {
+      deployBeans(Porvoo_Broken.class);
+   }
+
+   /**
+    * On the other hand, dependent objects (including interceptors and
+    * decorators with scope @Dependent) of a stateful session bean or of a Web
+    * Bean with a passivating scope must be serialized and deserialized along
+    * with their owner
+    */
+   @Test(groups = { "stub", "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentInterceptorsOfWebBeanWithPassivatingScopeMustBeSerializable()
+   {
+      deployBeans(Kotka_Broken.class);
+   }
+
+   /**
+    * On the other hand, dependent objects (including interceptors and
+    * decorators with scope @Dependent) of a stateful session bean or of a Web
+    * Bean with a passivating scope must be serialized and deserialized along
+    * with their owner
+    */
+   @Test(groups = { "stub", "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentDecoratorsOfWebBeansWithPassivatingScopeMustBeSerializable()
+   {
+      deployBeans(Raisio_Broken.class);
+   }
+
+   /**
+    * EJB local objects are serializable. Therefore, any reference to an
+    * enterprise Web Bean of scope @Dependent is serializable.
+    * 
+    * @throws ClassNotFoundException
+    * @throws IOException
+    */
+   @Test(groups = { "contexts", "passivation" })
+   @SpecAssertion(section = "9.5")
+   public void testDependentEJBsAreSerializable() throws IOException, ClassNotFoundException
+   {
+      deployBeans(Vaasa.class, Helsinki.class);
+      Set<Bean<Vaasa>> vaasaBeans = manager.resolveByType(Vaasa.class);
+      assert vaasaBeans.size() == 1;
+      assert testSerialize(vaasaBeans.iterator().next());
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "stub", "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoStatefulSessionBeanFails()
+   {
+      deployBeans(Violation.class, Espoo_Broken.class);
+      manager.getInstanceByType(Espoo_Broken.class);
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoNonTransientFieldOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(Vantaa_Broken.class, Violation.class);
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" })
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoTransientFieldOK()
+   {
+      createSimpleBean(Joensuu.class);
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoConstructorParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(Loviisa_Broken.class, Violation.class);
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoInitializerParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(Forssa_Broken.class, Violation.class);
+   }
+
+   /**
+    * If a simple Web Bean of scope @Dependent and a non-serializable
+    * implementation class is injected into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * UnserializableDependencyException must be thrown by the Web Bean manager
+    * at initialization time.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = UnserializableDependencyException.class)
+   @SpecAssertion(section = "9.5")
+   public void testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoProducerMethodParameterWithPassivatingScopeFails()
+   {
+      deployBeans(Peraseinajoki.class, Violation.class,  Violation2.class);
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    * 
+    * @throws NoSuchMethodException
+    * @throws SecurityException
+    */
+   @Test(groups = { "contexts", "passivation", "integration", "broken" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoStatefulSessionBeanFails() throws SecurityException, NoSuchMethodException
+   {
+      deployBeans(CityProducer2.class, Maarianhamina_Broken.class);
+      manager.getInstanceByType(Maarianhamina_Broken.class);
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoNonTransientFieldOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer2.class, Nokia_Broken.class);
+      manager.getInstanceByType(Nokia_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" })
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoTransientFieldOfWebBeanWithPassivatingScopeOK()
+   {
+      createSimpleBean(CityProducer2.class);
+      createSimpleBean(Hyvinkaa.class);
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoConstructorParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer2.class, Loviisa_Broken.class);
+      manager.getInstanceByType(Loviisa_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoInitializerParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer2.class, Kuopio_Broken.class);
+      manager.getInstanceByType(Kuopio_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" , "broken"}, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoProducerMethodParameterWithPassivatingScopeFails()
+   {
+      // TODO Not quite sure what this test is doing
+      //deployBeans(CityProducer3.class, Jamsa_Broken.class);
+      //manager.getInstanceByType(Jamsa_Broken.class).ping();
+      assert false;
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    * 
+    */
+   @Test(groups = { "contexts", "passivation", "stub"}, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoStatefulSessionBeanFails() throws Exception
+   {
+      // TODO This doesn't test injction in a SFSB, but into a Enterprise bean
+      //deployBeans(CityProducer.class, Pietarsaari_Broken.class);
+      //manager.getInstanceByType(Pietarsaari_Broken.class);
+      assert false;
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoNonTransientFieldOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer.class, Uusikaupunki_Broken.class);
+      manager.getInstanceByType(Uusikaupunki_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation"})
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoTransientFieldOfWebBeanWithPassivatingScopeOK()
+   {
+      deployBeans(CityProducer.class, Salo_Broken.class);
+      manager.getInstanceByType(Salo_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoConstructorParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer.class, Loviisa_Broken.class);
+      manager.getInstanceByType(Loviisa_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoInitializerParameterOfWebBeanWithPassivatingScopeFails()
+   {
+      deployBeans(CityProducer.class, Mikkeli_Broken.class);
+      manager.getInstanceByType(Mikkeli_Broken.class).ping();
+   }
+
+   /**
+    * If a producer method or field of scope @Dependent returns a
+    * non-serializable object for injection into a stateful session bean, into a
+    * non-transient field, Web Bean constructor parameter or initializer method
+    * parameter of a Web Bean which declares a passivating scope type, or into a
+    * parameter of a producer method which declares a passivating scope type, an
+    * IllegalProductException is thrown by the Web Bean manager.
+    */
+   @Test(groups = { "contexts", "passivation", "broken" }, expectedExceptions = IllegalProductException.class)
+   @SpecAssertion(section = "9.5")
+   public void testDependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoProducerMethodParameterWithPassivatingScopeFails()
+   {
+      // TODO Not quite sure what this test is doing
+      deployBeans(CityProducer.class, Jamsa_Broken.class);
+      manager.getInstanceByType(Jamsa_Broken.class).ping();
+      assert false;
+   }
+
+   /**
+    * The Web Bean manager must guarantee that JMS endpoint proxy objects are
+    * serializable.
+    */
+   @Test(groups = { "stub", "contexts", "passivation", "jms" })
+   @SpecAssertion(section = "9.5")
+   public void testJMSEndpointProxyIsSerializable()
+   {
+      assert false;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Peraseinajoki.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Peraseinajoki.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Peraseinajoki.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Current;
+import javax.webbeans.Produces;
+import javax.webbeans.SessionScoped;
+
+class Peraseinajoki extends City
+{
+
+   @Produces @SessionScoped
+   public Violation2 create(@Current Violation reference)
+   {
+      return new Violation2();
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Pietarsaari_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Pietarsaari_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Pietarsaari_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Pietarsaari_Broken extends City implements Serializable
+{
+   @Current
+   private Violation reference;
+   
+   @Remove
+   public void bye() {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Porvoo_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Porvoo_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Porvoo_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Porvoo_Broken implements CityInterface
+{
+   public void foo()
+   {
+   }
+
+   @Remove
+   public void bye()
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Raisio_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Raisio_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Raisio_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Raisio_Broken implements CityInterface, Serializable
+{
+   public void foo()
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Salo_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Salo_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Salo_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Salo_Broken extends City implements Serializable
+{
+   @Current
+   private transient Violation reference;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Turku.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Turku.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Turku.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.SessionScoped;
+
+ at Stateful
+ at SessionScoped
+class Turku
+{
+   @Remove
+   public void bye() {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Uusikaupunki_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Uusikaupunki_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Uusikaupunki_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Uusikaupunki_Broken extends City implements Serializable
+{
+   @Current
+   private Violation reference;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vaasa.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vaasa.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vaasa.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SuppressWarnings("serial")
+ at SessionScoped
+class Vaasa implements Serializable
+{
+   @SuppressWarnings("unused")
+   @Current private Helsinki ejb;
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vantaa_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vantaa_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Vantaa_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import java.io.Serializable;
+
+import javax.webbeans.Current;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+class Vantaa_Broken implements Serializable
+{
+   @Current
+   private Violation reference;
+
+   public Violation getReference()
+   {
+      return reference;
+   }
+
+   public void setReference(Violation reference)
+   {
+      this.reference = reference;
+   }
+
+   public String test() {
+      return reference.toString();
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Violation
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation2.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation2.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/passivating/Violation2.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.context.passivating;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Violation2
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/request/RequestContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/request/RequestContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/request/RequestContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,124 @@
+package org.jboss.webbeans.tck.unit.context.request;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class RequestContextTest extends AbstractTest
+{
+
+   /**
+    * The request scope is active during the service() method of any Servlet in
+    * the web application.
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeActiveDuringServiceMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The request context is destroyed at the end of the servlet request, after
+    * the Servlet service() method returns.
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeIsDestroyedAfterServiceMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The request scope is active during any Java EE web service invocation.
+    */
+   @Test(groups = { "stub", "contexts", "webservice" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeActiveDuringWebSericeInvocation()
+   {
+      assert false;
+   }
+
+   /**
+    * The request context is destroyed after the web service invocation
+    * completes
+    */
+   @Test(groups = { "stub", "contexts", "webservice" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeIsDestroyedAfterWebServiceInvocation()
+   {
+      assert false;
+   }
+
+   /**
+    * The request scope is active during any remote method invocation of any EJB
+    * bean, during any call to an EJB timeout method and during message delivery
+    * to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeActiveDuringRemoteMethodInvocationOfEjb()
+   {
+      assert false;
+   }
+
+   /**
+    * The request scope is active during any remote method invocation of any EJB
+    * bean, during any call to an EJB timeout method and during message delivery
+    * to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeActiveDuringCallToEjbTimeoutMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The request scope is active during any remote method invocation of any EJB
+    * bean, during any call to an EJB timeout method and during message delivery
+    * to any EJB message driven bean.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeActiveDuringEjbMessageDelivery()
+   {
+      assert false;
+   }
+
+   /**
+    * The request context is destroyed after the remote method invocation,
+    * timeout or message delivery completes.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeDestroyedAfterRemoteMethodInvocationOfEjb()
+   {
+      assert false;
+   }
+
+   /**
+    * The request context is destroyed after the remote method invocation,
+    * timeout or message delivery completes.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeDestroyedAfterCallToEjbTimeoutMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The request context is destroyed after the remote method invocation,
+    * timeout or message delivery completes.
+    */
+   @Test(groups = { "stub", "contexts", "ejb3" })
+   @SpecAssertion(section = "9.6.1")
+   public void testRequestScopeDestroyedAfterEjbMessageDelivery()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/session/SessionContextTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/session/SessionContextTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/context/session/SessionContextTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,45 @@
+package org.jboss.webbeans.tck.unit.context.session;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("2001206")
+public class SessionContextTest extends AbstractTest
+{
+
+   /**
+    * The session scope is active during the service() method of any servlet in
+    * the web application
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.6.2")
+   public void testSessionScopeActiveDuringServiceMethod()
+   {
+      assert false;
+   }
+
+   /**
+    * The session context is shared between all servlet requests that occur in
+    * the same HTTP servlet session
+    */
+   @Test(groups = { "stub", "contexts", "servlet" })
+   @SpecAssertion(section = "9.6.2")
+   public void testSessionContextSharedBetweenServletRequestsInSameHttpSession()
+   {
+      assert false;
+   }
+
+   /**
+    * The session context is destroyed when the HTTPSession is invalidated or
+    * times out.
+    */
+   @Test(groups = { "stub", "contexts" })
+   @SpecAssertion(section = "9.6.2")
+   public void testSessionContextDestroyedWhenHttpSessionInvalidatedOrTimesOut()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at interface AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/BeanDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/BeanDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/BeanDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,95 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import java.lang.reflect.Method;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * This test class should be used for common assertions about Web Beans
+ * 
+ * @author Pete Muir
+ * 
+ */
+ at SpecVersion("20081206")
+public class BeanDefinitionTest extends AbstractTest
+{
+   
+   // TODO This should actually somehow test the reverse - that the container
+   // throws a definition exception if any of these occur
+   
+   @Test
+   @SpecAssertion(section = "2")
+   public void testApiTypesNonEmpty()
+   {
+      Bean<?> model = createSimpleBean(RedSnapper.class);
+      assert model.getTypes().size() > 0;
+   }
+   
+   @Test
+   @SpecAssertion(section = "2")
+   public void testBindingTypesNonEmpty()
+   {
+      Bean<?> model = createSimpleBean(RedSnapper.class);
+      assert model.getBindings().size() > 0;
+   }
+   
+   @Test
+   @SpecAssertion(section = "2")
+   public void testHasScopeType()
+   {
+      Bean<?> model = createSimpleBean(RedSnapper.class);
+      assert model.getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = "2")
+   public void testHasDeploymentType()
+   {
+      Bean<?> model = createSimpleBean(RedSnapper.class);
+      assert model.getDeploymentType().equals(Production.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test(groups = "producerMethod")
+   @SpecAssertion(section = "5.2")
+   public void testIsNullable() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducerBean = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducerBean);
+      Method method = SpiderProducer.class.getMethod("getWolfSpiderSize");
+      Bean<Integer> bean = createProducerMethodBean(method, spiderProducerBean);
+      assert !bean.isNullable();
+      method = SpiderProducer.class.getMethod("makeASpider");
+      Bean<Spider> spiderBean = createProducerMethodBean(method, spiderProducerBean);
+      assert spiderBean.isNullable();
+   }
+   
+   @Test
+   @SpecAssertion(section = { "3.2.2", "2.2" })
+   public void testApiTypes()
+   {
+      Bean<Tarantula> bean = createSimpleBean(Tarantula.class);
+      assert bean.getTypes().size() == 6;
+      assert bean.getTypes().contains(Tarantula.class);
+      assert bean.getTypes().contains(Spider.class);
+      assert bean.getTypes().contains(Animal.class);
+      assert bean.getTypes().contains(Object.class);
+      assert bean.getTypes().contains(DeadlySpider.class);
+      assert bean.getTypes().contains(DeadlyAnimal.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = "2.2")
+   public void testFinalApiType()
+   {
+      createSimpleBean(DependentFinalTuna.class);
+   }
+   
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlyAnimal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlyAnimal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlyAnimal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+interface DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlySpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlySpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DeadlySpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+interface DeadlySpider extends DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DependentFinalTuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DependentFinalTuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/DependentFinalTuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+ at AnotherDeploymentType
+final class DependentFinalTuna
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/FishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/FishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/FishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at Named
+ at interface FishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/RedSnapper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/RedSnapper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import javax.webbeans.RequestScoped;
+
+ at FishStereotype
+ at RequestScoped
+class RedSnapper implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Spider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Spider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Spider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+
+class Spider implements Animal
+{
+
+   public final void layEggs()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+import javax.webbeans.Produces;
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   @Produces @AnimalStereotype public WolfSpider produceWolfSpider()
+   {
+      return new WolfSpider();
+   }
+   
+   @Produces public Animal makeASpider()
+   {
+      return new WolfSpider();
+   }
+   
+   @Produces public int getWolfSpiderSize()
+   {
+      return 4;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Tarantula.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Tarantula.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/Tarantula.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+class Tarantula extends Spider implements DeadlySpider
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/WolfSpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/WolfSpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/bean/WolfSpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.bean;
+
+class WolfSpider implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Barn.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Barn.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Barn.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+
+class Barn
+{   
+   @Tame
+   public Tarantula petSpider;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BindingDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BindingDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BindingDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,198 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+import javax.webbeans.Current;
+import javax.webbeans.Production;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.CurrentBinding;
+import org.jboss.webbeans.tck.impl.util.Reflections;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class BindingDefinitionTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test @SpecAssertion(section={"2.3.3", "2.3.1"}) 
+   public void testDefaultBindingDeclaredInJava()
+   {      
+      Bean<Order> order = createSimpleBean(Order.class);
+      assert order.getBindings().size() == 1;
+      order.getBindings().iterator().next().annotationType().equals(Production.class);
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.3.2")
+   public void testBindingHasCorrectTarget()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.3.2")
+   public void testBindingHasCorrectRetention()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.3.2")
+   public void testBindingDeclaresBindingAnnotation()
+   {
+      assert false;
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test @SpecAssertion(section="2.3.3")
+   public void testBindingsDeclaredInJava()
+   {     
+      Bean<Cat> cat = createSimpleBean(Cat.class);
+      assert cat.getBindings().size() == 1;
+      assert Reflections.annotationSetMatches(cat.getBindings(), Synchronous.class);
+   }
+   
+   @Test @SpecAssertion(section="2.3.3") 
+   public void testMultipleBindings()
+   {      
+      Bean<?> model = createSimpleBean(Cod.class);
+      assert model.getBindings().size() == 2;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.3.4")
+   public void testBindingsDeclaredInXml()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //annotations.put(Asynchronous.class, new AsynchronousAnnotationLiteral());
+      //AnnotatedClass annotatedItem = new SimpleAnnotatedClass(Antelope.class, annotations);
+      
+      //SimpleBean<Antelope> antelope = createSimpleBean(Antelope.class, annotatedItem, manager);
+      // assert Reflections.annotationSetMatches(antelope.getBindingTypes(), Asynchronous.class);
+      assert false;
+   }
+
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.3.4")
+   public void testXmlBindingOverridesAndIgnoresJava()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //annotations.put(Asynchronous.class, new AsynchronousAnnotationLiteral());
+      //AnnotatedClass<Cat> annotatedItem = new SimpleAnnotatedClass<Cat>(Cat.class, annotations);
+      
+      //SimpleBean<Cat> cat = createSimpleBean(Cat.class, annotatedItem, manager);
+      //assert cat.getBindingTypes().size() == 1;
+      //assert cat.getBindingTypes().contains(new AnnotationLiteral<Asynchronous>() {});
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.3.4")
+   public void testNoBindingsDeclaredInXml()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //AnnotatedClass<Cat> annotatedItem = new SimpleAnnotatedClass<Cat>(Cat.class, annotations);
+      
+      //SimpleBean<Cat> cat = createSimpleBean(Cat.class, annotatedItem, manager);
+      //assert cat.getBindingTypes().size() == 1;
+      //assert cat.getBindingTypes().contains(new AnnotationLiteral<Synchronous>() {});
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section={"2.3.4", "2.3.1"}) 
+   public void testDefaultBindingDeclaredInXml()
+   {
+      Bean<?> model = createSimpleBean(Tuna.class);
+      assert model.getBindings().size() == 1;
+      assert model.getBindings().contains(new CurrentBinding());
+      assert false;
+   }
+   
+   @Test(groups={"injection", "producerMethod"}) @SpecAssertion(section="2.3.5") 
+   public void testFieldInjectedFromProducerMethod() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducer = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducer);
+      Method method = SpiderProducer.class.getMethod("produceTameTarantula");
+      manager.addBean(createProducerMethodBean(method, spiderProducer));
+      Barn barn = createSimpleBean(Barn.class).create();
+      assert barn.petSpider != null;
+      assert barn.petSpider instanceof DefangedTarantula;
+   }
+   
+   @Test(groups={"stub", "injection", "webbeansxml"}) @SpecAssertion(section="2.3.5") 
+   public void testFieldWithBindingInXml()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "injection", "webbeansxml"}) @SpecAssertion(section="2.3.5") 
+   public void testFieldWithBindingInXmlIgnoresAnnotations()
+   {
+      assert false;
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test(groups={"injection", "producerMethod"})
+   public void testMethodWithBindingAnnotationsOnParametersAreInjected() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducer = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducer);
+      Method method = SpiderProducer.class.getMethod("produceTameTarantula");
+      manager.addBean(createProducerMethodBean(method, spiderProducer));
+      method = SpiderProducer.class.getMethod("produceSpiderFromInjection", Tarantula.class);
+      Bean<Spider> spiderBean = createProducerMethodBean(method, spiderProducer);
+      Spider spider = spiderBean.create();
+      assert spider != null;
+      assert spider instanceof DefangedTarantula;
+   }
+   
+   @Test(groups={"stub", "injection", "webbeansxml"}) @SpecAssertion(section="2.3.6") 
+   public void testMethodWithBindingAnnotationsOnParametersDeclaredInXml()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "injection", "webbeansxml"}) @SpecAssertion(section="2.3.6") 
+   public void testMethodWithBindingAnnotationsOnParametersDeclaredInXmlIgnoresAnnotations()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testBindingDeclaredInheritedIsInherited() throws Exception
+   {
+      Set<? extends Annotation> bindings = createSimpleBean(BorderCollie.class).getBindings();
+      assert bindings.size() == 1;
+      assert bindings.iterator().next().annotationType().equals(Hairy.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testBindingNotDeclaredInheritedIsNotInherited()
+   {
+      Set<? extends Annotation> bindings = createSimpleBean(ShetlandPony.class).getBindings();
+      assert bindings.size() == 1;
+      assert bindings.iterator().next().annotationType().equals(Current.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testBindingDeclaredInheritedIsBlockedByIntermediateClass()
+   {
+      Set<? extends Annotation> bindings = createSimpleBean(ClippedBorderCollie.class).getBindings();
+      assert bindings.size() == 1;
+      Annotation binding = bindings.iterator().next();
+      assert binding.annotationType().equals(Hairy.class);
+      Hairy hairy = (Hairy) binding;
+      assert hairy.clipped();
+   }
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BorderCollie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BorderCollie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/BorderCollie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+class BorderCollie extends LongHairedDog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cat.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cat.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cat.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import javax.webbeans.Production;
+
+
+ at Production
+ at Synchronous
+class Cat
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Chunky.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Chunky.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Chunky.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Chunky
+{
+   
+   boolean realChunky();
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ClippedBorderCollie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ClippedBorderCollie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ClippedBorderCollie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+ at Hairy(clipped=true)
+class ClippedBorderCollie extends BorderCollie
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cod.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cod.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Cod.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Whitefish
+ at Chunky(realChunky=true)
+ at Named("whitefish")
+class Cod implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlyAnimal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlyAnimal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlyAnimal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+interface DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlySpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlySpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DeadlySpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+interface DeadlySpider extends DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DefangedTarantula.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DefangedTarantula.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/DefangedTarantula.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+class DefangedTarantula extends Tarantula
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Hairy.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Hairy.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Hairy.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,26 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at Inherited
+ at interface Hairy
+{
+   
+   public boolean clipped();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Horse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Horse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Horse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+ at Species
+class Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/LongHairedDog.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/LongHairedDog.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/LongHairedDog.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+ at Hairy(clipped=false)
+class LongHairedDog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Order.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Order.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Order.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import javax.webbeans.Production;
+
+ at Production
+class Order
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ScottishFish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ScottishFish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ScottishFish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+
+interface ScottishFish extends Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ShetlandPony.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ShetlandPony.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/ShetlandPony.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+class ShetlandPony extends Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Species.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Species.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Species.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Species
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Spider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Spider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Spider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+
+class Spider implements Animal
+{
+
+   public final void layEggs()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import javax.webbeans.Produces;
+
+
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   @Produces @Tame public Tarantula produceTameTarantula()
+   {
+      return new DefangedTarantula();
+   }
+   
+   @Produces public Spider produceSpiderFromInjection(@Tame Tarantula tarantula) 
+   {
+      return tarantula;
+   }
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Synchronous.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Synchronous.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Synchronous.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Synchronous
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tame.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tame.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tame.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tarantula.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tarantula.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tarantula.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+class Tarantula extends Spider implements DeadlySpider
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Whitefish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Whitefish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/binding/Whitefish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.binding;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Whitefish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at Inherited
+ at interface AnotherDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BeanWithTooManyDeploymentTypes_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BeanWithTooManyDeploymentTypes_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BeanWithTooManyDeploymentTypes_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import javax.webbeans.Production;
+
+ at Production
+ at AnotherDeploymentType
+class BeanWithTooManyDeploymentTypes_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BlackWidow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BlackWidow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BlackWidow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+class BlackWidow extends Spider implements DeadlySpider
+{
+
+}
Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BorderCollie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BorderCollie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/BorderCollie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+class BorderCollie extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlyAnimal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlyAnimal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlyAnimal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+interface DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlySpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlySpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeadlySpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+interface DeadlySpider extends DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DefaultDeploymentTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DefaultDeploymentTypeTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DefaultDeploymentTypeTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import javax.webbeans.Production;
+import javax.webbeans.Standard;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+
+public class DefaultDeploymentTypeTest extends AbstractTest
+{
+   
+   @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
+   public void testDefaultEnabledDeploymentTypes()
+   {
+      assert configuration().getManagers().getEnabledDeploymentTypes().size() == 2;
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(Production.class);
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/DeploymentTypeDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,187 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.DeploymentException;
+import javax.webbeans.Production;
+import javax.webbeans.Standard;
+import javax.webbeans.UnsatisfiedDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class DeploymentTypeDefinitionTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      deploymentTypes.add(HornedAnimalDeploymentType.class);
+      deploymentTypes.add(NotInheritedDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="2.5.1")
+   public void testNonBuiltInComponentUsesStandard()
+   {
+      createSimpleBean(Gazelle_Broken.class);
+   }
+   
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.5.2")
+   public void testDeploymentTypeHasCorrectTarget()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.5.2")
+   public void testDeploymentTypeHasCorrectRetention()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.5.2")
+   public void testDeploymentTypeDeclaresScopeTypeAnnotation()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="2.5.3")
+   public void testTooManyDeploymentTypes()
+   {
+      createSimpleBean(BeanWithTooManyDeploymentTypes_Broken.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test @SpecAssertion(section="2.5.3")
+   public void testDeploymentTypeInhertitedFromDeclaringBean() throws Exception
+   {
+      Bean<SpiderProducer> bean = createSimpleBean(SpiderProducer.class);
+      manager.addBean(bean);
+      Method method = SpiderProducer.class.getMethod("produceBlackWidow");
+      Bean<BlackWidow> blackWidowSpiderModel = createProducerMethodBean(method, bean);
+      assert blackWidowSpiderModel.getDeploymentType().equals(AnotherDeploymentType.class);
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.5.4")
+   public void testXmlDeploymentTypeOverridesJava()
+   {
+      //Map<Class<? extends Annotation>, Annotation> xmlDefinedDeploymentTypeAnnotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //xmlDefinedDeploymentTypeAnnotations.put(AnotherDeploymentType.class, new AnotherDeploymentTypeAnnotationLiteral());
+      //AnnotatedClass<BeanWithTooManyDeploymentTypes> xmlDefinedDeploymentTypeAnnotatedItem = new SimpleAnnotatedClass<BeanWithTooManyDeploymentTypes>(BeanWithTooManyDeploymentTypes.class, xmlDefinedDeploymentTypeAnnotations);
+      
+      //SimpleBean<BeanWithTooManyDeploymentTypes> model = createSimpleBean(BeanWithTooManyDeploymentTypes.class, xmlDefinedDeploymentTypeAnnotatedItem, manager);
+      //assert model.getDeploymentType().equals(AnotherDeploymentType.class);
+      assert false;
+   }
+   
+
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.5.4")
+   public void testXmlRespectsJavaDeploymentType()
+   {
+      //AnnotatedClass<Tuna> annotatedItem = new SimpleAnnotatedClass<Tuna>(Tuna.class, new HashMap<Class<? extends Annotation>, Annotation>());
+      //SimpleBean<Tuna> tuna = createSimpleBean(Tuna.class, annotatedItem, manager);
+      //assert tuna.getDeploymentType().equals(AnotherDeploymentType.class);
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.5.5")
+   public void testXmlDefaultDeploymentType()
+   {
+      //AnnotatedClass<Antelope> antelopeAnnotatedItem = new SimpleAnnotatedClass<Antelope>(Antelope.class, new HashMap<Class<? extends Annotation>, Annotation>());
+      //SimpleBean<Antelope> antelope = createSimpleBean(Antelope.class, antelopeAnnotatedItem, manager);
+      // assert antelope.getDeploymentType().equals(Production.class);
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="2.5.5")
+   public void testHighestPrecedenceDeploymentTypeFromStereotype()
+   {
+      Bean<?> bean = createSimpleBean(Rhinoceros.class);
+      assert bean.getDeploymentType().equals(HornedAnimalDeploymentType.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test(groups="beanLifecycle", expectedExceptions=UnsatisfiedDependencyException.class) @SpecAssertion(section="2.5.6")
+   public void testBeanWithDisabledDeploymentTypeNotInstantiated()
+   {
+      configuration().getManagers().setEnabledDeploymentTypes(
+            Arrays.asList(Standard.class, AnotherDeploymentType.class, 
+                  HornedAnimalDeploymentType.class));
+      
+      Bean<RedSnapper> bean = createSimpleBean(RedSnapper.class);
+      manager.addBean(bean);
+      manager.getInstanceByType(RedSnapper.class);
+   }
+
+   @SuppressWarnings("unchecked")
+   @Test @SpecAssertion(section={"2.5.6", "2.5.7"})
+   public void testCustomDeploymentTypes()
+   {
+      configuration().getManagers().setEnabledDeploymentTypes(
+            Arrays.asList(Standard.class, AnotherDeploymentType.class, 
+                  HornedAnimalDeploymentType.class));
+      assert configuration().getManagers().getEnabledDeploymentTypes().size() == 3;
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(0).equals(Standard.class);
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(1).equals(AnotherDeploymentType.class);
+      assert configuration().getManagers().getEnabledDeploymentTypes().get(2).equals(HornedAnimalDeploymentType.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test(expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
+   public void testStandardMustBeDeclared()
+   {
+      configuration().getManagers().setEnabledDeploymentTypes(
+            Arrays.asList(AnotherDeploymentType.class, HornedAnimalDeploymentType.class));
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}, expectedExceptions=DeploymentException.class) @SpecAssertion(section="2.5.6")
+   public void testMultipleDeployElementsCannotBeDefined()
+   {
+      
+   }
+   
+   @Test @SpecAssertion(section={"2.5.5", "2.7.2", "4.1"})
+   public void testWebBeanDeploymentTypeOverridesStereotype()
+   {
+      Bean<Reindeer> bean = createSimpleBean(Reindeer.class);
+      assert bean.getDeploymentType().equals(Production.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testDeploymentTypeDeclaredInheritedIsInherited() throws Exception
+   {
+      assert createSimpleBean(BorderCollie.class).getDeploymentType().equals(AnotherDeploymentType.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testDeploymentTypeNotDeclaredInheritedIsNotInherited()
+   {
+      assert createSimpleBean(ShetlandPony.class).getDeploymentType().equals(Production.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testDeploymentTypeDeclaredInheritedIsBlockedByIntermediateDeploymentTypeNotMarkedInherited()
+   {
+      assert createSimpleBean(GoldenRetriever.class).getDeploymentType().equals(Production.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testDeploymentTypeDeclaredInheritedIsBlockedByIntermediateDeploymentTypeMarkedInherited()
+   {
+      assert createSimpleBean(GoldenLabrador.class).getDeploymentType().equals(InheritedDeploymentType.class);
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Dog.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Dog.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Dog.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+
+ at AnotherDeploymentType
+class Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/FishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/FishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/FishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at Named
+ at interface FishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Gazelle_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Gazelle_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Gazelle_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import javax.webbeans.Standard;
+
+ at Standard
+class Gazelle_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenLabrador.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenLabrador.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenLabrador.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+class GoldenLabrador extends Labrador
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenRetriever.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenRetriever.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/GoldenRetriever.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+class GoldenRetriever extends Retriever
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedAnimalDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedAnimalDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedAnimalDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface HornedAnimalDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedMammalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedMammalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/HornedMammalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at HornedAnimalDeploymentType
+ at interface HornedMammalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Horse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Horse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Horse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+
+ at NotInheritedDeploymentType
+class Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/InheritedDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/InheritedDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/InheritedDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at Inherited
+ at interface InheritedDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Labrador.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Labrador.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Labrador.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+
+ at InheritedDeploymentType
+class Labrador extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/MammalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/MammalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/MammalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at AnotherDeploymentType
+ at interface MammalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/NotInheritedDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/NotInheritedDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/NotInheritedDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface NotInheritedDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/RedSnapper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import javax.webbeans.RequestScoped;
+
+ at FishStereotype
+ at RequestScoped
+class RedSnapper implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Reindeer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Reindeer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Reindeer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import javax.webbeans.Production;
+
+ at HornedMammalStereotype
+ at Production
+class Reindeer implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Retriever.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Retriever.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Retriever.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+ at NotInheritedDeploymentType
+class Retriever extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Rhinoceros.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Rhinoceros.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Rhinoceros.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+ at HornedMammalStereotype
+ at MammalStereotype
+class Rhinoceros implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/ShetlandPony.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/ShetlandPony.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/ShetlandPony.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+class ShetlandPony extends Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Spider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Spider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/Spider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+
+class Spider implements Animal
+{
+
+   public final void layEggs()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/deployment/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.definition.deployment;
+
+import javax.webbeans.Named;
+import javax.webbeans.Produces;
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   @Produces @Named("blackWidow") public BlackWidow produceBlackWidow()
+   {
+      return new BlackWidow();
+   }
+   
+
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/FishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/FishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/FishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at Named
+ at interface FishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Haddock.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Haddock.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Haddock.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Haddock implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/MammalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/MammalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/MammalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at AnotherDeploymentType
+ at interface MammalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Minnow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Minnow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Minnow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import javax.webbeans.RequestScoped;
+
+ at RiverFishStereotype
+ at RequestScoped
+class Minnow implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Moose.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Moose.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/Moose.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import javax.webbeans.Named;
+
+ at MammalStereotype
+ at Named("aMoose")
+class Moose implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/NameDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/NameDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/NameDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,144 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class NameDefinitionTest extends AbstractTest
+{
+
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test(groups="stub", expectedExceptions=DefinitionException.class) @SpecAssertion(section="2.6")
+   public void testInvalidElIdentifierUsedAsWebBeanName()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="2.6.1")
+   public void testNonDefaultNamed()
+   {
+      Bean<Moose> moose = createSimpleBean(Moose.class);
+      assert moose.getName().equals("aMoose");
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.6.2")
+   public void testNonDefaultXmlNamed()
+   {
+      /*Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      annotations.put(Named.class, new NamedAnnotationLiteral(){
+         
+         public String value()
+         {
+            return "aTrout";
+         }
+         
+      });
+      AnnotatedClass<SeaBass> annotatedItem = new SimpleAnnotatedClass<SeaBass>(SeaBass.class, annotations);*/
+      //SimpleBean<SeaBass> trout = createSimpleBean(SeaBass.class, annotatedItem, manager);
+      
+      //assert trout.getName().equals("aTrout");
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.6.2")
+   public void testXmlNamedOverridesJavaNamed()
+   {
+      /*Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      annotations.put(Named.class, new NamedAnnotationLiteral(){
+         
+         public String value()
+         {
+            return "aTrout";
+         }
+         
+      });
+      AnnotatedClass<Cod> annotatedItem = new SimpleAnnotatedClass<Cod>(Cod.class, annotations);*/
+      //SimpleBean<Cod> cod = createSimpleBean(Cod.class, annotatedItem, manager);
+      
+      //assert cod.getName().equals("aTrout");
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section={"2.6.2", "2.6.3"})
+   public void testJavaNamedUsedWhenNoXmlSpecified()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //AnnotatedClass<Cod> annotatedItem = new SimpleAnnotatedClass<Cod>(Cod.class, annotations);
+      //SimpleBean<Cod> cod = createSimpleBean(Cod.class, annotatedItem, manager);
+      
+      //assert cod.getName().equals("whitefish");
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section={"2.6.3", "3.2.7"})
+   public void testDefaultNamed()
+   {
+      Bean<Haddock> haddock = createSimpleBean(Haddock.class);
+      assert haddock.getName() != null;
+      assert haddock.getName().equals("haddock");
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.6.3")
+   public void testDefaultXmlNamed()
+   {
+      /*Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      annotations.put(Named.class, new NamedAnnotationLiteral() {
+         
+         public String value()
+         {
+            return "";
+         }
+         
+      });
+      AnnotatedClass<SeaBass> annotatedItem = new SimpleAnnotatedClass<SeaBass>(SeaBass.class, annotations);*/
+      //SimpleBean<SeaBass> trout = createSimpleBean(SeaBass.class, annotatedItem, manager);
+      
+      //assert trout.getName() != null;
+      //assert trout.getName().equals("seaBass");
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section={"2.6.3", "2.7"})
+   public void testSterotypeDefaultsName()
+   {
+      Bean<RedSnapper> model = createSimpleBean(RedSnapper.class);
+      assert model.getName().equals("redSnapper");
+   }
+   
+   @Test @SpecAssertion(section="2.6.4")
+   public void testNotNamedInJava()
+   {
+      Bean<SeaBass> model = createSimpleBean(SeaBass.class);
+      assert model.getName() == null;
+   }
+   
+   @Test @SpecAssertion(section="2.6.4")
+   public void testNotNamedInXml()
+   {
+      Bean<SeaBass> model = createSimpleBean(SeaBass.class);
+      assert model.getName() == null;
+   }
+   
+   @Test @SpecAssertion(section="2.6.4")
+   public void testNotNamedInStereotype()
+   {
+      Bean<Minnow> model = createSimpleBean(Minnow.class);
+      assert model.getName() == null;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RedSnapper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RedSnapper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import javax.webbeans.RequestScoped;
+
+ at FishStereotype
+ at RequestScoped
+class RedSnapper implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RiverFishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RiverFishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/RiverFishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at interface RiverFishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/SeaBass.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/SeaBass.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/name/SeaBass.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.name;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at Production
+ at RequestScoped
+class SeaBass implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at interface AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScope.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScope.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScope.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ScopeType;
+
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at ScopeType
+ at interface AnotherScope
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScopeType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScopeType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/AnotherScopeType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ScopeType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at ScopeType
+ at interface AnotherScopeType
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BeanWithTooManyScopeTypes.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BeanWithTooManyScopeTypes.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BeanWithTooManyScopeTypes.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.ConversationScoped;
+import javax.webbeans.RequestScoped;
+
+ at RequestScoped
+ at ConversationScoped
+class BeanWithTooManyScopeTypes
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BorderCollie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BorderCollie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/BorderCollie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+class BorderCollie extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Dog.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Dog.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Dog.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.RequestScoped;
+
+ at RequestScoped
+class Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/FishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/FishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/FishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at Named
+ at interface FishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenLabrador.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenLabrador.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenLabrador.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+class GoldenLabrador extends Labrador
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenRetriever.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenRetriever.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/GoldenRetriever.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+class GoldenRetriever extends Retriever
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Grayling.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Grayling.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Grayling.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+ at RiverFishStereotype
+ at FishStereotype
+class Grayling implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Horse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Horse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Horse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+
+ at AnotherScope
+class Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Labrador.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Labrador.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Labrador.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+
+ at NotInheritedScope
+class Labrador extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Minnow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Minnow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Minnow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.RequestScoped;
+
+ at RiverFishStereotype
+ at RequestScoped
+class Minnow implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Mullet.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Mullet.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Mullet.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+ at AnotherScopeType
+class Mullet
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/NotInheritedScope.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/NotInheritedScope.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/NotInheritedScope.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ScopeType;
+
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at ScopeType
+ at interface NotInheritedScope
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Order.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Order.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Order.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.Production;
+
+ at Production
+class Order
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Pollock.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Pollock.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Pollock.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.Dependent;
+
+ at AnimalStereotype
+ at FishStereotype
+ at Dependent
+class Pollock implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RedSnapper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RedSnapper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.RequestScoped;
+
+ at FishStereotype
+ at RequestScoped
+class RedSnapper implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Retriever.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Retriever.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Retriever.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.ApplicationScoped;
+
+ at ApplicationScoped
+class Retriever extends Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RiverFishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RiverFishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/RiverFishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at interface RiverFishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Scallop_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Scallop_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/Scallop_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+ at AnimalStereotype
+ at FishStereotype
+class Scallop_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ScopeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ScopeDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ScopeDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,165 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.DefinitionException;
+import javax.webbeans.Dependent;
+import javax.webbeans.RequestScoped;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class ScopeDefinitionTest extends AbstractTest
+{
+   
+   @Test @SpecAssertion(section="2.4")
+   public void testScopeTypesAreExtensible()
+   {
+      Bean<Mullet> mullet = createSimpleBean(Mullet.class);
+      assert mullet.getScopeType().equals(AnotherScopeType.class);
+   }
+   
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.4.2")
+   public void testScopeTypeHasCorrectTarget()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.4.2")
+   public void testScopeTypeHasCorrectRetention()
+   {
+      assert false;
+   }
+
+   @Test(groups={"stub", "annotationDefinition"}) @SpecAssertion(section="2.4.2")
+   public void testScopeTypeDeclaresScopeTypeAnnotation()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="2.4.3")
+   public void testScopeDeclaredInJava()
+   {
+      Bean<SeaBass> trout = createSimpleBean(SeaBass.class);
+      assert trout.getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="2.4.3")
+   public void testTooManyScopesSpecifiedInJava()
+   {
+      createSimpleBean(BeanWithTooManyScopeTypes.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "webbeansxml"})
+   public void testTooManyScopesSpecifiedInXml()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //annotations.put(RequestScoped.class, new RequestScopedAnnotationLiteral());
+      //annotations.put(ConversationScoped.class, new ConversationScopedAnnotationLiteral());
+      //AnnotatedClass<Antelope> antelopeAnnotatedItem = new SimpleAnnotatedClass<Antelope>(Antelope.class, annotations);
+      //createSimpleBean(null, antelopeAnnotatedItem, manager);
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.4.4")
+   public void testScopeDeclaredInXml()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //annotations.put(RequestScoped.class, new RequestScopedAnnotationLiteral());
+      //AnnotatedClass<Order> annotatedItem = new SimpleAnnotatedClass<Order>(Order.class, annotations);
+      
+      //SimpleBean<Order> order = createSimpleBean(Order.class, annotatedItem, manager);
+      //assert order.getScopeType().equals(RequestScoped.class);
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.4.4")
+   public void testScopeMissingInXml()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //AnnotatedClass<SeaBass> annotatedItem = new SimpleAnnotatedClass<SeaBass>(SeaBass.class, annotations);
+      
+      //SimpleBean<SeaBass> trout =createSimpleBean(SeaBass.class, annotatedItem, manager);
+      //assert trout.getScopeType().equals(RequestScoped.class);
+      assert false;
+   }
+
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="2.4.4")
+   public void testScopeDeclaredInXmlOverridesJava()
+   {
+      //Map<Class<? extends Annotation>, Annotation> annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+      //annotations.put(ConversationScoped.class, new ConversationScopedAnnotationLiteral());
+      //AnnotatedClass<SeaBass> annotatedItem = new SimpleAnnotatedClass<SeaBass>(SeaBass.class, annotations);
+      //SimpleBean<SeaBass> trout = createSimpleBean(SeaBass.class, annotatedItem, manager);
+      //assert trout.getScopeType().equals(ConversationScoped.class);
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="2.4.5")
+   public void testDefaultScope()
+   {
+      Bean<Order> order = createSimpleBean(Order.class);
+      assert order.getScopeType().equals(Dependent.class);
+   }
+   
+   @Test @SpecAssertion(section={"2.4.5", "2.7.2"})
+   public void testScopeSpecifiedAndStereotyped()
+   {
+      Bean<Minnow> minnow = createSimpleBean(Minnow.class);
+      assert minnow.getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="2.4.5")
+   public void testMutipleIncompatibleScopeStereotypes()
+   {
+      createSimpleBean(Scallop_Broken.class);
+   }
+   
+   @Test @SpecAssertion(section="2.4.5")
+   public void testMutipleIncompatibleScopeStereotypesWithScopeSpecified()
+   {
+      Bean<Pollock> pollock = createSimpleBean(Pollock.class);
+      assert pollock.getScopeType().equals(Dependent.class);
+   }
+   
+   @Test @SpecAssertion(section="2.4.5")
+   public void testMutipleCompatibleScopeStereotypes()
+   {
+      Bean<Grayling> grayling = createSimpleBean(Grayling.class);
+      assert grayling.getScopeType().equals(ApplicationScoped.class);
+   }
+   
+   @Test @SpecAssertion(section={"2.7.2", "4.1"})
+   public void testWebBeanScopeTypeOverridesStereotype()
+   {
+      Bean<RedSnapper> bean = createSimpleBean(RedSnapper.class);
+      assert bean.getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testScopeTypeDeclaredInheritedIsInherited() throws Exception
+   {
+      assert createSimpleBean(BorderCollie.class).getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testScopeTypeNotDeclaredInheritedIsNotInherited()
+   {
+      assert createSimpleBean(ShetlandPony.class).getScopeType().equals(Dependent.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testScopeTypeDeclaredInheritedIsBlockedByIntermediateScopeTypeMarkedInherited()
+   {
+      assert createSimpleBean(GoldenRetriever.class).getScopeType().equals(ApplicationScoped.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testScopeTypeDeclaredInheritedIsBlockedByIntermediateScopeTypeNotMarkedInherited()
+   {
+      assert createSimpleBean(GoldenLabrador.class).getScopeType().equals(Dependent.class);
+   }
+   
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/SeaBass.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/SeaBass.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/SeaBass.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at Production
+ at RequestScoped
+class SeaBass implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ShetlandPony.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ShetlandPony.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/scope/ShetlandPony.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.scope;
+
+class ShetlandPony extends Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,23 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at Inherited
+ at interface AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/AnotherStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at AnotherDeploymentType
+ at interface AnotherStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Antelope_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Antelope_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Antelope_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at HornedMammalStereotype
+ at Bovine
+class Antelope_Broken implements Mammal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ApplicationScopedHornedMammalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ApplicationScopedHornedMammalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ApplicationScopedHornedMammalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(supportedScopes=ApplicationScoped.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at HornedAnimalDeploymentType
+ at interface ApplicationScopedHornedMammalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Asynchronous.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Asynchronous.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Asynchronous.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Asynchronous
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/BorderCollie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/BorderCollie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/BorderCollie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+class BorderCollie extends LongHairedDog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Bovine.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Bovine.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Bovine.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Mammal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at interface Bovine
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Carp_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Carp_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Carp_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at RequestScopedAnimalStereotype
+class Carp_Broken implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Chair_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Chair_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Chair_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at AnimalStereotype
+class Chair_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Elk_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Elk_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Elk_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at StereotypeWithTooManyScopeTypes_Broken
+class Elk_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/FallowDeer_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/FallowDeer_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/FallowDeer_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at StereotypeWithNonEmptyNamed_Broken
+class FallowDeer_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Gazelle_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Gazelle_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Gazelle_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at StereotypeWithTooManyDeploymentTypes_Broken
+class Gazelle_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goat_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goat_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goat_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at HornedMammalStereotype
+ at AnotherStereotype
+class Goat_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goldfish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goldfish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Goldfish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at RequestScopedAnimalStereotype
+ at RequestScoped
+ at Production
+class Goldfish implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HighlandCow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HighlandCow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HighlandCow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import javax.webbeans.RequestScoped;
+
+ at HornedMammalStereotype
+ at RequestScopedAnimalStereotype
+ at RequestScoped
+ at Tame
+class HighlandCow implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedAnimalDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedAnimalDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedAnimalDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface HornedAnimalDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedMammalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedMammalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/HornedMammalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at HornedAnimalDeploymentType
+ at interface HornedMammalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Horse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Horse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Horse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at AnotherStereotype
+class Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/LongHairedDog.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/LongHairedDog.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/LongHairedDog.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at AnimalStereotype
+class LongHairedDog implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Mammal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Mammal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Mammal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+interface Mammal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Moose.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Moose.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Moose.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at AnimalStereotype
+class Moose implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Reindeer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Reindeer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Reindeer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at HornedMammalStereotype
+class Reindeer implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RequestScopedAnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RequestScopedAnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RequestScopedAnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class, supportedScopes=RequestScoped.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at interface RequestScopedAnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RoeDeer_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RoeDeer_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/RoeDeer_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+ at StereotypeWithBindingTypes_Broken
+class RoeDeer_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ShetlandPony.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ShetlandPony.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/ShetlandPony.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+class ShetlandPony extends Horse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Springbok.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Springbok.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Springbok.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import javax.webbeans.ApplicationScoped;
+
+ at ApplicationScopedHornedMammalStereotype
+ at RequestScopedAnimalStereotype
+ at ApplicationScoped
+class Springbok implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,237 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.DefinitionException;
+import javax.webbeans.Dependent;
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class StereotypeDefinitionTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      deploymentTypes.add(HornedAnimalDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test(groups = { "stub", "annotationDefinition" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1")
+   public void testHasCorrectTarget()
+   {
+      assert false;
+   }
+   
+   @Test(groups = { "stub", "annotationDefinition" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1")
+   public void testHasCorrectRetention()
+   {
+      assert false;
+   }
+   
+   @Test(groups = { "stub", "annotationDefinition" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1")
+   public void testHasStereotypeAnnotation()
+   {
+      assert false;
+   }
+   
+   @Test
+   @SpecAssertion(section = "2.7.1.1")
+   public void testStereotypeWithScopeType()
+   {
+      Bean<Moose> moose = createSimpleBean(Moose.class);
+      assert moose.getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = "2.7.1.1")
+   public void testStereotypeWithoutScopeType()
+   {
+      Bean<Reindeer> reindeer = createSimpleBean(Reindeer.class);
+      assert reindeer.getScopeType().equals(Dependent.class);
+   }
+   
+   @Test(groups = "stub")
+   @SpecAssertion(section = "2.7.1.2")
+   public void testStereotypeWithoutInterceptors()
+   {
+      assert false;
+   }
+   
+   @Test(groups = { "stub", "interceptors" })
+   @SpecAssertion(section = "2.7.1.2")
+   public void testStereotypeWithInterceptors()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1.1")
+   public void testStereotypeWithTooManyScopeTypes()
+   {
+      deployBeans(Elk_Broken.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1.1")
+   public void testStereotypeWithTooManyDeploymentTypes()
+   {
+      deployBeans(Gazelle_Broken.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1.3")
+   public void testStereotypeWithNonEmptyNamed()
+   {
+      deployBeans(FallowDeer_Broken.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "2.7.1")
+   public void testStereotypeWithBindingTypes()
+   {
+      deployBeans(RoeDeer_Broken.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = { "2.7.2", "2.7.4" })
+   public void testMultipleStereotypes()
+   {
+      Bean<HighlandCow> highlandCow = createSimpleBean(HighlandCow.class);
+      assert highlandCow.getName() == null;
+      assert highlandCow.getBindings().iterator().next().annotationType().equals(Tame.class);
+      assert highlandCow.getScopeType().equals(RequestScoped.class);
+      assert highlandCow.getDeploymentType().equals(HornedAnimalDeploymentType.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = { "2.7.2", "2.7.4" })
+   public void testMultipleStereotypesMergesScopes()
+   {
+      Bean<Springbok> springbok = createSimpleBean(Springbok.class);
+      assert springbok.getScopeType().equals(ApplicationScoped.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = { "2.7.2", "2.7.4" })
+   public void testMultipleStereotypesMergesRequiredTypes()
+   {
+      deployBeans(Antelope_Broken.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = { "2.7.2", "2.7.4" })
+   public void testMultipleStereotypesWithMultipleDeploymentTypes()
+   {
+      deployBeans(Goat_Broken.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class, groups = "stub")
+   @SpecAssertion(section = { "2.7.2", "2.7.4" })
+   public void testMultipleStereotypesWithMultipleScopeTypes()
+   {
+      assert false;
+   }
+   
+   @Test(groups = { "stub", "webbeansxml" })
+   @SpecAssertion(section = "2.7.3")
+   public void testStereotypeDeclaredInXmlIgnoresJavaStereotypes()
+   {
+      // Map<Class<? extends Annotation>, Annotation> cooXmlAnnotations = new
+      // HashMap<Class<? extends Annotation>, Annotation>();
+      // cooXmlAnnotations.put(HornedMammalStereotype.class, new
+      // HornedMamalStereotypeAnnotationLiteral());
+      // AnnotatedClass<HighlandCow> cooXmlAnnotatedItem = new
+      // SimpleAnnotatedClass<HighlandCow>(HighlandCow.class,
+      // cooXmlAnnotations);
+      
+      /*
+       * SimpleBean<HighlandCow> coo = createSimpleBean(HighlandCow.class,
+       * cooXmlAnnotatedItem); assert
+       * coo.getDeploymentType().equals(HornedAnimalDeploymentType.class);
+       * assert coo.getScopeType().equals(RequestScoped.class); assert
+       * coo.getMergedStereotypes().getRequiredTypes().size() == 1; assert
+       * coo.getMergedStereotypes().getRequiredTypes().contains(Animal.class);
+       * assert coo.getMergedStereotypes().getSupportedScopes().size() == 0;
+       */
+      assert false;
+   }
+   
+   @Test(groups = { "stub", "webbeansxml" })
+   @SpecAssertion(section = "2.7.3")
+   public void testStereotypeDeclaredInXmlIgnoresJavaBindingTypes()
+   {
+      // Map<Class<? extends Annotation>, Annotation> cooXmlAnnotations = new
+      // HashMap<Class<? extends Annotation>, Annotation>();
+      // cooXmlAnnotations.put(HornedMammalStereotype.class, new
+      // HornedMamalStereotypeAnnotationLiteral());
+      // cooXmlAnnotations.put(Synchronous.class, new
+      // SynchronousAnnotationLiteral());
+      // AnnotatedClass<HighlandCow> cooXmlAnnotatedItem = new
+      // SimpleAnnotatedClass<HighlandCow>(HighlandCow.class,
+      // cooXmlAnnotations);
+      
+      /*
+       * SimpleBean<HighlandCow> coo = createSimpleBean(HighlandCow.class,
+       * cooXmlAnnotatedItem); assert coo.getBindingTypes().size() == 1; assert
+       * coo.getBindingTypes().contains(new SynchronousAnnotationLiteral());
+       */
+      assert false;
+      
+   }
+   
+   @Test
+   @SpecAssertion(section = { "2.7.1.4", "2.7.4" })
+   public void testRequiredTypeIsImplemented()
+   {
+      assert createSimpleBean(HighlandCow.class).getTypes().contains(Animal.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = { "2.7.1.4", "2.7.4" })
+   public void testRequiredTypeIsNotImplemented()
+   {
+      deployBeans(Chair_Broken.class);
+   }
+   
+   @Test
+   @SpecAssertion(section = { "2.7.1.4", "2.7.4" })
+   public void testScopeIsSupported()
+   {
+      assert createSimpleBean(Goldfish.class).getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = { "2.7.1.4", "2.7.4" })
+   public void testScopeIsNotSupported()
+   {
+      createSimpleBean(Carp_Broken.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testStereotypeDeclaredInheritedIsInherited() throws Exception
+   {
+      assert createSimpleBean(BorderCollie.class).getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test @SpecAssertion(section="4.1")
+   public void testStereotypeNotDeclaredInheritedIsNotInherited()
+   {
+      assert createSimpleBean(ShetlandPony.class).getDeploymentType().equals(Production.class);
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithBindingTypes_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithBindingTypes_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithBindingTypes_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at Asynchronous
+ at interface StereotypeWithBindingTypes_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithNonEmptyNamed_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithNonEmptyNamed_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithNonEmptyNamed_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at Named("foo")
+ at interface StereotypeWithNonEmptyNamed_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyDeploymentTypes_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyDeploymentTypes_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyDeploymentTypes_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.Production;
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at Production
+ at AnotherDeploymentType
+ at interface StereotypeWithTooManyDeploymentTypes_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyScopeTypes_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyScopeTypes_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/StereotypeWithTooManyScopeTypes_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at RequestScoped
+ at interface StereotypeWithTooManyScopeTypes_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Tame.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Tame.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/stereotype/Tame.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.definition.stereotype;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.definition.type;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/ApiTypeDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/ApiTypeDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/ApiTypeDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.definition.type;
+
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class ApiTypeDefinitionTest extends AbstractTest
+{
+
+   @Test @SpecAssertion(section="2.6.3")
+   public void testDefaultNamed()
+   {
+      Bean<Haddock> haddock = createSimpleBean(Haddock.class);
+      assert haddock.getName() != null;
+      assert haddock.getName().equals("haddock");
+   }
+   
+}
+

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Haddock.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Haddock.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/definition/type/Haddock.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.definition.type;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Haddock implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype()
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at interface AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotypeAnnotationLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotypeAnnotationLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AnimalStereotypeAnnotationLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.AnnotationLiteral;
+
+class AnimalStereotypeAnnotationLiteral extends AnnotationLiteral<AnimalStereotype> implements AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AuroraFinch.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AuroraFinch.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AuroraFinch.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,26 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Initializer;
+
+import org.jboss.webbeans.tck.unit.event.StarFinch.Mess;
+
+class AuroraFinch
+{
+
+   private Mess someMess;
+
+   @Initializer
+   public AuroraFinch(@Fires Event<Mess> eventObject)
+   {
+      // Create a new mess and fire the event for it
+      someMess = new Mess();
+      eventObject.fire(someMess);
+   }
+
+   public Mess getSomeMess()
+   {
+      return someMess;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AustralianTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AustralianTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/AustralianTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Initializer;
+import javax.webbeans.Observes;
+import javax.webbeans.manager.Initialized;
+import javax.webbeans.manager.Manager;
+
+ at Stateless
+class AustralianTerrier
+{
+   @Initializer
+   public void observeInitialized(@Observes @Initialized Manager manager)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BananaSpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BananaSpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BananaSpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import java.util.Set;
+
+import javax.webbeans.Current;
+import javax.webbeans.Observer;
+import javax.webbeans.Observes;
+import javax.webbeans.manager.Manager;
+
+/**
+ * Simple bean with observer method and another injectable parameter.
+ *
+ */
+class BananaSpider
+{
+   public void observeStringEvent(@Observes String someEvent, @Current Manager manager)
+   {
+      assert someEvent != null;
+      assert manager != null;
+      Set<Observer<String>> allStringObservers = manager.resolveObservers(someEvent);
+      assert allStringObservers != null;
+      assert allStringObservers.size() > 0;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BirdCage.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BirdCage.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BirdCage.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Current;
+import javax.webbeans.Named;
+import javax.webbeans.RequestScoped;
+
+import org.jboss.webbeans.tck.unit.event.StarFinch.Mess;
+
+ at RequestScoped
+ at Named("BirdCage")
+class BirdCage
+{
+   @Current
+   private Mess someMess;
+
+   public BirdCage()
+   {
+   }
+   
+   public Mess getSomeMess()
+   {
+      return someMess;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlackRumpedWaxbill_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlackRumpedWaxbill_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlackRumpedWaxbill_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+
+class BlackRumpedWaxbill_Broken
+{
+   @SuppressWarnings("unchecked")
+   @Fires
+   private Event simpleEvent;
+
+   public void eliminateWarning()
+   {
+      assert simpleEvent != null;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlueFacedParrotFinch.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlueFacedParrotFinch.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BlueFacedParrotFinch.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,31 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Observer;
+
+class BlueFacedParrotFinch
+{
+   @Fires
+   private Event<String> simpleEvent;
+
+   public void methodThatFiresEvent()
+   {
+      simpleEvent.fire("An event");
+   }
+
+   public void methodThatRegistersObserver()
+   {
+      simpleEvent.observe(new Observer<String>()
+      {
+         public void notify(String event)
+         {
+         }
+      });
+   }
+
+   public Event<String> getSimpleEvent()
+   {
+      return simpleEvent;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BorderTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BorderTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BorderTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Observes;
+import javax.webbeans.Produces;
+import javax.webbeans.manager.Initialized;
+import javax.webbeans.manager.Manager;
+
+ at Stateless
+class BorderTerrier
+{
+   @Produces
+   public void observeInitialized(@Observes @Initialized Manager manager)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BostonTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BostonTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BostonTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Observes;
+
+ at Stateless
+class BostonTerrier
+{
+   public void observesBadEvent(@Observes List<String> someArray)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Boxer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Boxer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Boxer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.ConversationScoped;
+
+ at Stateless
+ at ConversationScoped
+class Boxer
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BullTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BullTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/BullTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Observes;
+
+ at Stateless
+class BullTerrier
+{
+   public void observesBadEvent(@Observes @Role("Admin") @Tame String someEvent)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CairnsTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CairnsTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CairnsTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Destructor;
+import javax.webbeans.Observes;
+import javax.webbeans.manager.Initialized;
+import javax.webbeans.manager.Manager;
+
+ at Stateless
+class CairnsTerrier
+{
+   @Destructor
+   public void observeInitialized(@Observes @Initialized Manager manager)
+   {
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CommonWaxbill_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CommonWaxbill_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/CommonWaxbill_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import java.util.ArrayList;
+
+import javax.webbeans.Fires;
+
+class CommonWaxbill_Broken
+{
+   @Fires
+   private ArrayList<String> simpleEvent;
+
+   public void eliminateWarning()
+   {
+      assert simpleEvent != null;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Egg.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Egg.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Egg.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.event;
+
+class Egg
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/EventTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/EventTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/EventTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,980 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Set;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.Dependent;
+import javax.webbeans.DuplicateBindingTypeException;
+import javax.webbeans.Event;
+import javax.webbeans.Observer;
+import javax.webbeans.ObserverException;
+import javax.webbeans.Standard;
+import javax.webbeans.TypeLiteral;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * Event bus tests
+ * 
+ * @author Nicklas Karlsson
+ * @author David Allen
+ * 
+ */
+ at SpecVersion("20081206")
+public class EventTest extends AbstractTest
+{
+   public static class AnEventType
+   {
+   }
+
+   public static class ATemplatedEventType<T>
+   {
+   }
+
+   public static class AnObserver implements Observer<AnEventType>
+   {
+      public boolean wasNotified = false;
+
+      public void notify(AnEventType event)
+      {
+         wasNotified = true;
+      }
+   }
+
+   public static class AListObserver implements Observer<ArrayList<String>>
+   {
+      public boolean wasNotified = false;
+
+      public void notify(ArrayList<String> event)
+      {
+         wasNotified = true;
+      }
+   }
+
+   public static class AnObserverWithException implements Observer<AnEventType>
+   {
+      public boolean wasNotified = false;
+      public RuntimeException theException = new RuntimeException("RE1");
+
+      public void notify(AnEventType event)
+      {
+         wasNotified = true;
+         throw theException;
+      }
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.1")
+   public void testEventTypeIncludesAllSuperclassesAndInterfacesOfEventObject()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.2")
+   public void testManagerFireEvent()
+   {
+      // First a simple event with no bindings is fired
+      AnEventType anEvent = new AnEventType();
+      manager.fireEvent(anEvent);
+
+      // Next an event with some event bindings is fired
+      manager.fireEvent(anEvent, new RoleBinding("Admin"));
+   }
+
+   /**
+    * If the type of the event object passed to fireEvent() contains type
+    * variables or wildcards, an IllegalArgumentException is thrown
+    */
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = { "8.1", "8.2" })
+   public void testManagerFireEventWithEventTypeParametersFails()
+   {
+      ATemplatedEventType<String> anEvent = new ATemplatedEventType<String>();
+      manager.fireEvent(anEvent);
+   }
+
+   /**
+    * If the type of the event object passed to fireEvent() contains type
+    * variables or wildcards, an IllegalArgumentException is thrown
+    */
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = { "8.1", "8.2" })
+   public void testManagerFireEventWithEventTypeWildcardsFails()
+   {
+      // Although the above test is really the same as with a wildcard, we will
+      // test
+      // it anyhow since the specification calls it out separately.
+      ATemplatedEventType<?> anEventOnAnyType = new ATemplatedEventType<String>();
+      manager.fireEvent(anEventOnAnyType);
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = { "8.1", "8.2" })
+   public void testManagerFireEventWithNonBindingAnnotationsFails()
+   {
+      // The specs are not exactly clear on what is supposed to happen here,
+      // but borrowing from Section 8.3, we'll expect the same behavior here
+      // for a consistent API.
+      // TODO Verify that fireEvent should fail on non-binding annotations
+      AnEventType anEvent = new AnEventType();
+      manager.fireEvent(anEvent, new AnimalStereotypeAnnotationLiteral());
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.3")
+   public void testManagerAddObserver()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+
+      // First test with the Class<T> of the event type
+      manager.addObserver(observer, AnEventType.class);
+      Set<Observer<AnEventType>> resolvedObservers = manager.resolveObservers(new AnEventType());
+      assert !resolvedObservers.isEmpty();
+      assert resolvedObservers.size() == 1;
+      assert resolvedObservers.iterator().next() == observer;
+
+      // Now test with the TypeLiteral<T> of the event type
+      observer = new AnObserver();
+      manager.addObserver(observer, new TypeLiteral<AnEventType>()
+      {
+      });
+      resolvedObservers = manager.resolveObservers(new AnEventType());
+      assert !resolvedObservers.isEmpty();
+      assert resolvedObservers.size() == 2;
+      boolean foundObserver = false;
+      for (Observer<AnEventType> obs : resolvedObservers)
+      {
+         if (obs == observer)
+         {
+            foundObserver = true;
+            break;
+         }
+      }
+      assert foundObserver;
+
+      // Try adding an observer with some binding types
+      observer = new AnObserver();
+      Annotation[] bindingTypes = new Annotation[] { new RoleBinding("Admin"), new RoleBinding("Manager") };
+      manager.addObserver(observer, AnEventType.class, bindingTypes);
+      resolvedObservers = manager.resolveObservers(new AnEventType(), bindingTypes);
+      assert !resolvedObservers.isEmpty();
+      assert resolvedObservers.size() == 3;
+      foundObserver = false;
+      for (Observer<AnEventType> obs : resolvedObservers)
+      {
+         if (obs == observer)
+         {
+            foundObserver = true;
+            break;
+         }
+      }
+      assert foundObserver;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.3")
+   public void testManagerRemoveObserver()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+
+      // First test with the Class<T> of the event type
+      manager.addObserver(observer, AnEventType.class);
+      manager.removeObserver(observer, AnEventType.class);
+      Set<Observer<AnEventType>> resolvedObservers = manager.resolveObservers(new AnEventType());
+      assert resolvedObservers.isEmpty();
+
+      // Now test with the TypeLiteral<T> of the event type
+      observer = new AnObserver();
+      manager.addObserver(observer, new TypeLiteral<AnEventType>()
+      {
+      });
+      manager.removeObserver(observer, new TypeLiteral<AnEventType>()
+      {
+      });
+      resolvedObservers = manager.resolveObservers(new AnEventType());
+      assert resolvedObservers.isEmpty();
+
+      // Also test with binding types
+      Annotation[] bindings = new Annotation[] { new RoleBinding("Admin") };
+      manager.addObserver(observer, AnEventType.class, bindings);
+      manager.removeObserver(observer, AnEventType.class);
+      resolvedObservers = manager.resolveObservers(new AnEventType(), bindings);
+      assert !resolvedObservers.isEmpty();
+      manager.removeObserver(observer, AnEventType.class, new RoleBinding("Admin"));
+      resolvedObservers = manager.resolveObservers(new AnEventType(), bindings);
+      assert resolvedObservers.isEmpty();
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DuplicateBindingTypeException.class })
+   @SpecAssertion(section = "8.3")
+   public void testMultipleInstancesOfSameBindingTypeWhenAddingObserverFails()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+      manager.addObserver(observer, AnEventType.class, new RoleBinding("Admin"), new TameAnnotationLiteral(), new TameAnnotationLiteral());
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = "8.3")
+   public void testNonBindingTypePassedToAddObserverFails()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+      manager.addObserver(observer, AnEventType.class, new AnimalStereotypeAnnotationLiteral());
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DuplicateBindingTypeException.class })
+   @SpecAssertion(section = "8.3")
+   public void testMultipleInstancesOfSameBindingTypeWhenRemovingObserverFails()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+      manager.addObserver(observer, AnEventType.class);
+      manager.removeObserver(observer, AnEventType.class, new RoleBinding("Admin"), new TameAnnotationLiteral(), new TameAnnotationLiteral());
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = "8.3")
+   public void testNonBindingTypePassedToRemoveObserverFails()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+      manager.addObserver(observer, AnEventType.class);
+      manager.removeObserver(observer, AnEventType.class, new AnimalStereotypeAnnotationLiteral());
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = { "8.1", "8.4" })
+   public void testConsumerNotifiedWhenEventTypeAndAllBindingsMatch()
+   {
+      AnObserver observer1 = new AnObserver();
+      AnObserver observer2 = new AnObserver();
+      manager.addObserver(observer1, AnEventType.class);
+      manager.addObserver(observer2, AnEventType.class);
+
+      // Fire an event that will be delivered to the two above observers
+      AnEventType anEvent = new AnEventType();
+      manager.fireEvent(anEvent);
+
+      assert observer1.wasNotified;
+      assert observer2.wasNotified;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.4")
+   public void testObserverThrowsExceptionAbortsNotifications()
+   {
+      AnObserver observer = new AnObserver();
+      AnObserverWithException anotherObserver = new AnObserverWithException();
+      manager.addObserver(anotherObserver, AnEventType.class);
+      manager.addObserver(observer, AnEventType.class);
+
+      // Fire an event that will be delivered to the two above observers
+      AnEventType anEvent = new AnEventType();
+      boolean fireFailed = false;
+      try
+      {
+         manager.fireEvent(anEvent);
+      }
+      catch (Exception e)
+      {
+         if (anotherObserver.theException.equals(e))
+            fireFailed = true;
+      }
+      assert fireFailed;
+
+      assert anotherObserver.wasNotified;
+      // TODO This cannot properly test for event processing abort
+      // assert !observer.wasNotified;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.4")
+   public void testObserverCalledBeforeTransactionCompleteMaySetRollbackOnly()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.4")
+   public void testObserverManipulatingJTATransactionsDirectlyFails()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5")
+   public void testObserverMethodOnEnterpriseBeanIsBusinessMethodOrStatic()
+   {
+      deployBeans(Pomeranian.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans.size() >= 2;
+      Set<Observer<String>> observers = manager.resolveObservers("An event");
+      assert observers.size() == 2;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5")
+   public void testObserverMethodOnEnterpriseBeanNotBusinessMethodOrStaticFails()
+   {
+      deployBeans(TibetanTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans.size() >= 2;
+      Set<Observer<String>> observers = manager.resolveObservers("An event");
+      assert observers.size() == 1;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5")
+   public void testMultipleObserverMethodsOK()
+   {
+      // Somewhat of a cheat, but this other test already does have 2 observer
+      // methods
+      // for the same event type and event bindings.
+      testObserverMethodOnEnterpriseBeanIsBusinessMethodOrStatic();
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = { "8.5.1", "8.5.2" })
+   public void testObserverMethodMustHaveOnlyOneEventParameter()
+   {
+      deployBeans(YorkshireTerrier.class);
+
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.5.1")
+   public void testObserverMethodCannotObserveParameterizedEvents()
+   {
+      deployBeans(BostonTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5.1")
+   public void testObserverMethodWithoutBindingTypesObservesEventsWithoutBindingTypes()
+   {
+      // This observer has no binding types specified
+      deployBeans(Pomeranian.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans.size() >= 2;
+
+      // Resolve registered observers with an event containing no binding types
+      Set<Observer<String>> resolvedObservers = manager.resolveObservers("A new event");
+      assert !resolvedObservers.isEmpty();
+      assert resolvedObservers.size() == 2;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.5.2")
+   public void testObserverMethodAnnotatedProducesFails()
+   {
+      deployBeans(BorderTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.5.2")
+   public void testObserverMethodAnnotatedInitializerFails()
+   {
+      deployBeans(AustralianTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.5.2")
+   public void testObserverMethodAnnotatedDestructorFails()
+   {
+      deployBeans(CairnsTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.5.2")
+   public void testObserverMethodWithDisposesParamFails()
+   {
+      deployBeans(FoxTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5.2")
+   public void testObserverMethodMayHaveMultipleBindingTypes()
+   {
+      deployBeans(BullTerrier.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+      // If we can resolve the observer with the two binding types,
+      // then it worked
+      Set<Observer<String>> resolvedObservers = manager.resolveObservers("An event object", new RoleBinding("Admin"), new TameAnnotationLiteral());
+      assert !resolvedObservers.isEmpty();
+      assert resolvedObservers.size() == 1;
+
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.3")
+   public void testXMLDefinedObserverMethodIgnoresBindingAnnotations()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.3")
+   public void testXMLDefinedObserverNotFindingImplementationMethodFails()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5.4")
+   public void testObserverMethodReceivesInjectionsOnNonObservesParameters()
+   {
+      deployBeans(BananaSpider.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans != null;
+   }
+
+   /**
+    * Tests that a conditional observer is not notified of events until after it
+    * is created by some other separate action.
+    */
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5.5")
+   public void testConditionalObserver()
+   {
+      deployBeans(RecluseSpider.class);
+
+      manager.fireEvent("New string event");
+      // Should not be notified since bean is not instantiated yet
+      assert !RecluseSpider.isNotified();
+
+      // Now instantiate the bean and fire another event
+      try
+      {
+         activateDependentContext();
+         RecluseSpider bean = manager.getInstanceByType(RecluseSpider.class);
+         assert bean != null;
+
+         manager.fireEvent("Another event");
+         assert RecluseSpider.isNotified();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.1")
+   public void testTransactionalObserverCanOnlyObserveSinglePhase()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.6")
+   public void testTransactionalObserverNotifiedImmediatelyWhenNoTransactionInProgress()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.6")
+   public void testAfterTransactionCompletionObserver()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.6")
+   public void testAfterTransactionSuccessObserver()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.6")
+   public void testAfterTransactionFailureObserver()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.6")
+   public void testBeforeTransactionCompletionObserver()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.5.7")
+   public void testObserverMethodRegistration()
+   {
+      // For now, this test is checking the registration of methods
+      testObserverMethodOnEnterpriseBeanIsBusinessMethodOrStatic();
+   }
+
+   /**
+    * 
+    */
+   @Test(groups = { "broken", "events" })
+   @SpecAssertion(section = "8.5.7")
+   public void testEnterpriseBeanObserverMethodCalledWithCallerContext()
+   {
+      deployBeans(Pomeranian.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert beans.size() >= 1;
+      String event = "A new event";
+      Set<Observer<String>> observers = manager.resolveObservers(event);
+      assert observers.size() == 2;
+
+      manager.fireEvent(event);
+      assert Thread.currentThread().equals(Pomeranian.notificationThread);
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.5.7")
+   public void testTransactionalObserverThrownExceptionIsCaughtAndLogged()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { TeaCupPomeranian.OversizedException.class })
+   @SpecAssertion(section = "8.5.7")
+   public void testNonTransactionalObserverThrownNonCheckedExceptionIsRethrown()
+   {
+      deployBeans(TeaCupPomeranian.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert !beans.isEmpty();
+      manager.fireEvent("Another event");
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { ObserverException.class })
+   @SpecAssertion(section = "8.5.7")
+   public void testNonTransactionalObserverThrownCheckedExceptionIsWrappedAndRethrown()
+   {
+      deployBeans(TeaCupPomeranian.class);
+      Set<Bean<Object>> beans = manager.resolveByType(Object.class);
+      assert !beans.isEmpty();
+      manager.fireEvent(new Integer(1));
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DuplicateBindingTypeException.class })
+   @SpecAssertion(section = "8.6")
+   public void testDuplicateBindingsToFireFails()
+   {
+      deployBeans(SweeWaxbill_Broken.class);
+      try
+      {
+         activateDependentContext();
+         SweeWaxbill_Broken bean = manager.getInstanceByType(SweeWaxbill_Broken.class);
+         bean.methodThatFiresEvent();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DuplicateBindingTypeException.class })
+   @SpecAssertion(section = "8.6")
+   public void testDuplicateBindingsToObservesFails()
+   {
+      deployBeans(SweeWaxbill_Broken.class);
+      try
+      {
+         activateDependentContext();
+         SweeWaxbill_Broken bean = manager.getInstanceByType(SweeWaxbill_Broken.class);
+         bean.methodThatRegistersObserver();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = "8.6")
+   public void testNonBindingTypePassedToFireFails()
+   {
+      deployBeans(OwlFinch_Broken.class);
+      try
+      {
+         activateDependentContext();
+         OwlFinch_Broken bean = manager.getInstanceByType(OwlFinch_Broken.class);
+         bean.methodThatFiresEvent();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = "8.6")
+   public void testNonBindingTypePassedToObservesFails()
+   {
+      deployBeans(OwlFinch_Broken.class);
+      try
+      {
+         activateDependentContext();
+         OwlFinch_Broken bean = manager.getInstanceByType(OwlFinch_Broken.class);
+         bean.methodThatRegistersObserver();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.6")
+   public void testFiresAnnotationOnEventTypes()
+   {
+      deployBeans(BlueFacedParrotFinch.class);
+      try
+      {
+         activateDependentContext();
+         BlueFacedParrotFinch bean = manager.getInstanceByType(BlueFacedParrotFinch.class);
+         bean.methodThatRegistersObserver();
+
+         Set<Observer<String>> observers = manager.resolveObservers("String type event");
+         assert observers.size() == 1;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+      deployBeans(StarFinch.class, FinchKeeper.class, BirdCage.class);
+      try
+      {
+         activateDependentContext();
+         StarFinch starFinch = manager.getInstanceByType(StarFinch.class);
+         FinchKeeper birdKeeper = manager.getInstanceByType(FinchKeeper.class);
+         BirdCage birdCage = manager.getInstanceByType(BirdCage.class);
+         assert starFinch != null;
+         assert birdCage != null;
+         assert birdCage.getSomeMess() != null;
+         assert birdKeeper.isNewMessDetected();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+      deployBeans(OrangeCheekedWaxbill.class, FinchKeeper.class);
+      try
+      {
+         activateDependentContext();
+         OrangeCheekedWaxbill bird = manager.getInstanceByType(OrangeCheekedWaxbill.class);
+         FinchKeeper birdKeeper = manager.getInstanceByType(FinchKeeper.class);
+         assert bird != null;
+         assert bird.getSomeMess() != null;
+         assert birdKeeper.isNewMessDetected();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+      deployBeans(AuroraFinch.class, FinchKeeper.class);
+      try
+      {
+         activateDependentContext();
+         AuroraFinch bird = manager.getInstanceByType(AuroraFinch.class);
+         FinchKeeper birdKeeper = manager.getInstanceByType(FinchKeeper.class);
+         assert bird != null;
+         assert birdKeeper.isNewMessDetected();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.6")
+   public void testFiresAnnotationOnNonEventTypeInjectionPointFails()
+   {
+      deployBeans(CommonWaxbill_Broken.class);
+      try
+      {
+         activateDependentContext();
+         CommonWaxbill_Broken bean = manager.getInstanceByType(CommonWaxbill_Broken.class);
+         assert bean != null;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.6")
+   public void testFiresAnnotationOnInjectionPointWithoutTypeParameterFails()
+   {
+      deployBeans(BlackRumpedWaxbill_Broken.class);
+      try
+      {
+         activateDependentContext();
+         BlackRumpedWaxbill_Broken bean = manager.getInstanceByType(BlackRumpedWaxbill_Broken.class);
+         assert bean != null;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.6")
+   public void testFiresAnnotationOnInjectionPointWithWildcardedTypeParameterFails()
+   {
+      deployBeans(GoldbreastWaxbill_Broken.class);
+      try
+      {
+         activateDependentContext();
+         GoldbreastWaxbill_Broken bean = manager.getInstanceByType(GoldbreastWaxbill_Broken.class);
+         assert bean != null;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { DefinitionException.class })
+   @SpecAssertion(section = "8.6")
+   public void testFiresAnnotationOnInjectionPointWithTypeVariabledTypeParameterFails()
+   {
+      deployBeans(JavaSparrow_Broken.class);
+      try
+      {
+         activateDependentContext();
+         JavaSparrow_Broken bean = manager.getInstanceByType(JavaSparrow_Broken.class);
+         assert bean != null;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.6")
+   public void testImplicitEventBeanMatchesAPITypeOfInectionPoint()
+   {
+      deployBeans(BlueFacedParrotFinch.class);
+      try
+      {
+         activateDependentContext();
+         BlueFacedParrotFinch bean = manager.getInstanceByType(BlueFacedParrotFinch.class);
+         assert bean != null;
+         // Retrieve the implicit event bean from the manager only by its API
+         // type
+         Set<?> eventBeans = manager.resolveByType(Event.class, new FiresBinding());
+         assert !eventBeans.isEmpty();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.6")
+   public void testImplicitEventBeanMatchesBindingAnnotationsOfInjectionPoint()
+   {
+      deployBeans(OrangeCheekedWaxbill.class);
+      try
+      {
+         activateDependentContext();
+         OrangeCheekedWaxbill bean = manager.getInstanceByType(OrangeCheekedWaxbill.class);
+         assert bean != null;
+         // Retrieve the implicit event bean from the manager by its binding
+         // types
+         Set<?> eventBeans = manager.resolveByType(Event.class, new FiresBinding(), new TameAnnotationLiteral());
+         assert !eventBeans.isEmpty();
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.6")
+   public void testImplicitEventBeanHasStandardDeploymentType()
+   {
+      deployBeans(BlueFacedParrotFinch.class);
+      try
+      {
+         activateDependentContext();
+         BlueFacedParrotFinch bean = manager.getInstanceByType(BlueFacedParrotFinch.class);
+         assert bean != null;
+         // Retrieve the implicit event bean from the manager only by its API
+         // type
+         Set<?> eventBeans = manager.resolveByType(Event.class, new FiresBinding());
+         assert eventBeans.size() == 1;
+         Bean<?> eventBean = (Bean<?>) eventBeans.iterator().next();
+         assert eventBean.getDeploymentType().equals(Standard.class);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.6")
+   public void testImplicitEventBeanHasDependentScope()
+   {
+      deployBeans(BlueFacedParrotFinch.class);
+      try
+      {
+         activateDependentContext();
+         BlueFacedParrotFinch bean = manager.getInstanceByType(BlueFacedParrotFinch.class);
+         assert bean != null;
+         // Retrieve the implicit event bean from the manager only by its API
+         // type
+         Set<?> eventBeans = manager.resolveByType(Event.class, new FiresBinding());
+         assert eventBeans.size() == 1;
+         Bean<?> eventBean = (Bean<?>) eventBeans.iterator().next();
+         assert eventBean.getScopeType().equals(Dependent.class);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testFireMethodCallsManagerFireWithEventObject()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testFireMethodCallsManagerFireWithBindingAnnotationsExceptObservable()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testFireMethodCallsManagerFireWithAllBindingAnnotationInstances()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testObserveMethodCallsManagerAddObserverWithObserverObject()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testObserveMethodCallsManagerAddObserverWithAllBindingAnnotationsExceptObservable()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.6")
+   public void testObserveMethodCallsManagerAddObserverWithAllBindingAnnotationInstance()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testEventObjectContainsTypeVariablesWhenResolvingFails()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testEventObjectContainsWildcardsWhenResolvingFails()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testDuplicateBindingTypesWhenResolvingFails()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "events" }, expectedExceptions = { IllegalArgumentException.class })
+   @SpecAssertion(section = "8.7")
+   public void testNonBindingTypeAnnotationWhenResolvingFails()
+   {
+      AnObserver observer = new AnObserver();
+      manager.addObserver(observer, new TypeLiteral<AnEventType>()
+      {
+      });
+      Set<Observer<AnEventType>> resolvedObservers = manager.resolveObservers(new AnEventType(), new AnimalStereotypeAnnotationLiteral());
+      assert !resolvedObservers.isEmpty();
+   }
+
+   @Test(groups = { "events" })
+   @SpecAssertion(section = "8.7")
+   public void testResolvingChecksEventType()
+   {
+      Observer<AnEventType> observer = new AnObserver();
+      manager.addObserver(observer, AnEventType.class);
+      Set<Observer<AnEventType>> resolvedObservers = manager.resolveObservers(new AnEventType());
+      assert !resolvedObservers.isEmpty();
+      Set<?> emptyObserverSet = manager.resolveObservers("A string event");
+      assert emptyObserverSet.isEmpty();
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testResolvingChecksTypeParameters()
+   {
+      AListObserver observer = new AListObserver();
+      manager.addObserver(observer, new TypeLiteral<ArrayList<String>>()
+      {
+      });
+      Set<Observer<ArrayList<String>>> resolvedObservers = manager.resolveObservers(new ArrayList<String>(), new AnimalStereotypeAnnotationLiteral());
+      assert !resolvedObservers.isEmpty();
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testResolvingChecksBindingTypes()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "events" })
+   @SpecAssertion(section = "8.7")
+   public void testResolvingChecksBindingTypeMembers()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testNonStaticProducerMethodNotInherited()
+   {
+      deployBeans(LazyFarmer.class);
+      assert manager.resolveObservers(new Egg()).isEmpty();
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Farmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Farmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Farmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Observes;
+
+class Farmer
+{
+   
+   public void observeEggLaying(@Observes Egg egg)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FinchKeeper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FinchKeeper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FinchKeeper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Named;
+import javax.webbeans.Observes;
+import javax.webbeans.RequestScoped;
+
+import org.jboss.webbeans.tck.unit.event.StarFinch.Mess;
+
+ at RequestScoped
+ at Named("FinchKeeper")
+class FinchKeeper
+{
+   public FinchKeeper()
+   {
+   }
+
+   private boolean newMessDetected = false;
+
+   public void observesMesses(@Observes Mess aNewMess)
+   {
+      newMessDetected = true;
+   }
+   
+   public boolean isNewMessDetected()
+   {
+      return newMessDetected;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FiresBinding.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FiresBinding.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FiresBinding.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.Fires;
+
+public class FiresBinding extends AnnotationLiteral<Fires> implements Fires
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FoxTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FoxTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/FoxTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Disposes;
+import javax.webbeans.Observes;
+import javax.webbeans.manager.Initialized;
+import javax.webbeans.manager.Manager;
+
+ at Stateless
+class FoxTerrier
+{
+   public void observeInitialized(@Observes @Initialized Manager manager, @Disposes String badParam)
+   {
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/GoldbreastWaxbill_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/GoldbreastWaxbill_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/GoldbreastWaxbill_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+
+class GoldbreastWaxbill_Broken
+{
+   @Fires
+   private Event<?> simpleEvent;
+
+   public void eliminateWarning()
+   {
+      assert simpleEvent != null;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/JavaSparrow_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/JavaSparrow_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/JavaSparrow_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import java.util.ArrayList;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+
+class JavaSparrow_Broken
+{
+   @Fires
+   private Event<ArrayList<String>> simpleEvent;
+
+   public void eliminateWarning()
+   {
+      assert simpleEvent != null;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/LazyFarmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/LazyFarmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/LazyFarmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.event;
+
+public class LazyFarmer extends Farmer
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OrangeCheekedWaxbill.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OrangeCheekedWaxbill.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OrangeCheekedWaxbill.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,36 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Initializer;
+
+import org.jboss.webbeans.tck.unit.event.StarFinch.Mess;
+
+class OrangeCheekedWaxbill
+{
+
+   private Mess someMess;
+   private Event<Mess> injectedEvent;
+
+   public OrangeCheekedWaxbill()
+   {
+   }
+
+   @Initializer
+   public void theInitializerMethod(@Fires @Tame Event<Mess> eventObject)
+   {
+      // Create a new mess and fire the event for it
+      someMess = new Mess();
+      eventObject.fire(someMess);
+   }
+
+   public Event<Mess> getInjectedEvent()
+   {
+      return injectedEvent;
+   }
+
+   public Mess getSomeMess()
+   {
+      return someMess;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OwlFinch_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OwlFinch_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/OwlFinch_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,27 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Observer;
+
+
+class OwlFinch_Broken
+{
+   @Fires
+   private Event<String> simpleEvent;
+
+   public void methodThatFiresEvent()
+   {
+      simpleEvent.fire("An event", new AnimalStereotypeAnnotationLiteral());
+   }
+
+   public void methodThatRegistersObserver()
+   {
+      simpleEvent.observe(new Observer<String>()
+      {
+         public void notify(String event)
+         {
+         }
+      }, new AnimalStereotypeAnnotationLiteral());
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Pomeranian.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Pomeranian.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Pomeranian.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Named;
+import javax.webbeans.Observes;
+
+ at Stateful
+ at Tame
+ at Named("Teddy")
+class Pomeranian implements PomeranianInterface
+{
+   public static Thread notificationThread;
+   
+   public void observeSimpleEvent(@Observes String someEvent)
+   {
+      notificationThread = Thread.currentThread();
+   }
+
+   public static void staticallyObserveEvent(@Observes String someEvent)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/PomeranianInterface.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/PomeranianInterface.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/PomeranianInterface.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.event;
+
+public interface PomeranianInterface
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RecluseSpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RecluseSpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RecluseSpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.IfExists;
+import javax.webbeans.Observes;
+import javax.webbeans.RequestScoped;
+
+/**
+ * Simple web bean that conditionally listens to events.
+ *
+ */
+ at RequestScoped
+class RecluseSpider
+{
+   private static boolean notified = false;
+   
+   public void observe(@Observes @IfExists String someEvent)
+   {
+      notified = true;
+   }
+
+   public static boolean isNotified()
+   {
+      return notified;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Role.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Role.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Role.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+
+import javax.webbeans.BindingType;
+
+ at BindingType
+ at Retention(RUNTIME)
+ at interface Role
+{
+   String value();
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RoleBinding.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RoleBinding.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/RoleBinding.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.AnnotationLiteral;
+
+
+class RoleBinding extends AnnotationLiteral<Role> implements Role
+{
+   private String value = null;
+
+   public RoleBinding(String value)
+   {
+      this.value = value;
+   }
+
+   public String value()
+   {
+      return value;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/StarFinch.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/StarFinch.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/StarFinch.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Named;
+import javax.webbeans.Produces;
+import javax.webbeans.RequestScoped;
+
+ at RequestScoped
+ at Named("StarFinch")
+class StarFinch
+{
+   public static class Mess
+   {
+   }
+
+   public StarFinch()
+   {
+   }
+
+   @Produces
+   public Mess producerOfMesses(@Fires Event<Mess> messEvent)
+   {
+      Mess newMess = new Mess();
+      messEvent.fire(newMess);
+      return newMess;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/SweeWaxbill_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/SweeWaxbill_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/SweeWaxbill_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Event;
+import javax.webbeans.Fires;
+import javax.webbeans.Observer;
+
+
+class SweeWaxbill_Broken
+{
+   @Fires @Role("Admin")
+   private Event<String> simpleEvent;
+
+   public void methodThatFiresEvent()
+   {
+      simpleEvent.fire("An event", new RoleBinding("Admin"));
+   }
+
+   public void methodThatRegistersObserver()
+   {
+      simpleEvent.observe(new Observer<String>()
+      {
+
+         public void notify(String event)
+         {
+         }
+      }, new RoleBinding("Admin"));
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Tame.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Tame.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Tame.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TameAnnotationLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TameAnnotationLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TameAnnotationLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.AnnotationLiteral;
+
+class TameAnnotationLiteral extends AnnotationLiteral<Tame> implements Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TeaCupPomeranian.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TeaCupPomeranian.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TeaCupPomeranian.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.webbeans.Named;
+import javax.webbeans.Observes;
+
+ at Tame
+ at Named("Teddy")
+class TeaCupPomeranian
+{
+   public static class OversizedException extends RuntimeException
+   {
+      private static final long serialVersionUID = 1L;
+      
+   }
+   
+   public static class TooSmallException extends Exception
+   {
+      private static final long serialVersionUID = 1L;
+   }
+   
+   public void observeSimpleEvent(@Observes String someEvent)
+   {
+      throw new OversizedException();
+   }
+   
+   public void observeAnotherSimpleEvent(@Observes Integer someEvent) throws TooSmallException
+   {
+      throw new TooSmallException();
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Terrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Terrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/Terrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Local;
+
+ at Local
+public interface Terrier
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TibetanTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TibetanTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/TibetanTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Observes;
+
+ at Stateless
+class TibetanTerrier implements Terrier
+{
+   public void observeInitialized(@Observes String someEvent)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/YorkshireTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/YorkshireTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/event/YorkshireTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.event;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Observes;
+import javax.webbeans.manager.Initialized;
+import javax.webbeans.manager.Manager;
+
+ at Stateless
+class YorkshireTerrier
+{
+   public void observeInitialized(@Observes @Initialized Manager manager, @Observes Boxer anotherDog)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/commonAnnotations/ResourceInjectionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/commonAnnotations/ResourceInjectionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/commonAnnotations/ResourceInjectionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.implementation.commonAnnotations;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class ResourceInjectionTest extends AbstractTest
+{
+   
+   @Test(groups="stub") @SpecAssertion(section="3.10")
+   public void testInjectionOfPersistenceContext()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="3.10")
+   public void testInjectionOfResource()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="3.10")
+   public void testInjectionOfEJB()
+   {
+      assert false;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/decorator/DecoratorDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/decorator/DecoratorDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/decorator/DecoratorDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.decorator;
+
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class DecoratorDefinitionTest
+{
+   
+   @Test(groups="stub") @SpecAssertion(section="4.2")
+   public void testDecoratorBindingInherited()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.2")
+   public void testDecoratorBindingBlockedByIntermediateClass()
+   {
+      assert false;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/deployment/BeanDeploymentTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/deployment/BeanDeploymentTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/deployment/BeanDeploymentTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,108 @@
+package org.jboss.webbeans.tck.unit.implementation.deployment;
+
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081222")
+public class BeanDeploymentTest
+{
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testOnlySpecializedSimpleBeanDeployed()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testSpecializedSimpleBeanExtends()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testSpecializedSimpleBeanHasSameBindingAnnotations()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testSpecializedSimpleBeanHasSameName()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testOnlySpecializedEnterpriseBeanDeployed()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testSpecializedEnterpriseBeanExtends()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testSpecializedEnterpriseBeanHasSameBindingAnnotations()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testSpecializedEnterpriseBeanHasSameName()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testSpecializedEnterpriseBeanAllLocalInterfaces()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.6")
+   public void testSpecializedEnterpriseBeanSupportsBeanClassLocalView()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.3")
+   public void testOnlySpecializedProducerMethodBeanDeployed()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.3")
+   public void testSpecializedProducerMethodBeanDirectlyOverrides()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.3")
+   public void testSpecializedProducerMethodBeanHasSameBindingAnnotations()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.3.3")
+   public void testSpecializedProducerMethodBeanHasSameName()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+   
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedConstructorParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedConstructorParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedConstructorParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.New;
+
+
+class AnnotatedConstructorParameter
+{
+   @Initializer
+   public AnnotatedConstructorParameter(@New WrappedEnterpriseBean reference)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedField.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedField.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedField.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.New;
+
+
+class AnnotatedField
+{
+   @New
+   WrappedEnterpriseBean reference;
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedInitializerParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedInitializerParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedInitializerParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.New;
+
+
+class AnnotatedInitializerParameter
+{
+   @Initializer
+   public void init(@New WrappedEnterpriseBean reference)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedProducerParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedProducerParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/AnnotatedProducerParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.New;
+import javax.webbeans.Produces;
+
+
+class AnnotatedProducerParameter
+{
+   @Produces
+   Object produce(@New WrappedEnterpriseBean reference)
+   {
+      return new Object();
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Armant_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Armant_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Armant_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateless;
+import javax.webbeans.Destructor;
+
+ at Stateless
+class Armant_Broken
+{
+   @Destructor @Remove
+   public void bye() {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Beagle_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Beagle_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Beagle_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.RequestScoped;
+
+ at Stateless
+ at RequestScoped
+class Beagle_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Boxer_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Boxer_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Boxer_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.ConversationScoped;
+
+ at Stateless
+ at ConversationScoped
+class Boxer_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Bullmastiff_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Bullmastiff_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Bullmastiff_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.SessionScoped;
+
+ at Stateless
+ at SessionScoped
+class Bullmastiff_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Dachshund_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Dachshund_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Dachshund_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.ApplicationScoped;
+
+ at Stateless
+ at ApplicationScoped
+class Dachshund_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanDeclarationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanDeclarationTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanDeclarationTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,363 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.DeploymentException;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * Sections
+ * 
+ * 3.3. Enterprise Web Beans
+ * 3.3.1. Which EJBs are enterprise Web Beans?
+ * 3.3.2. API types of an enterprise Web Bean
+ * 3.3.3. Declaring an enterprise Web Bean using annotations
+ * 3.3.4. Declaring an enterprise Web Bean using XML
+ * 
+ * @author Nicklas Karlsson
+ */
+ at SpecVersion("20081206")
+public class EnterpriseBeanDeclarationTest extends AbstractTest
+{
+
+   /**
+    * An EJB stateless session bean must belong to the @Dependent pseudo-scope.
+    * If an enterprise Web Bean specifies an illegal scope, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time
+    */
+   @Test(groups = { "enterpriseBeans" })
+   @SpecAssertion(section = "3.3")
+   public void testStatelessWithDependentScopeOK()
+   {
+      deployBeans(Giraffe.class);
+   }
+
+   /**
+    * An EJB stateless session bean must belong to the @Dependent pseudo-scope.
+    * If an enterprise Web Bean specifies an illegal scope, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time
+    */
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testStatelessWithRequestScopeFails()
+   {
+      deployBeans(Beagle_Broken.class);
+   }
+
+   /**
+    * An EJB stateless session bean must belong to the @Dependent pseudo-scope.
+    * If an enterprise Web Bean specifies an illegal scope, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time
+    */
+
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testStatelessWithConversationScopeFails()
+   {
+      deployBeans(Boxer_Broken.class);
+   }
+
+   /**
+    * An EJB stateless session bean must belong to the @Dependent pseudo-scope.
+    * If an enterprise Web Bean specifies an illegal scope, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time
+    */
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testStatelessWithSessionScopeFails()
+   {
+      deployBeans(Bullmastiff_Broken.class);
+   }
+
+   /**
+    * An EJB stateless session bean must belong to the @Dependent pseudo-scope.
+    * If an enterprise Web Bean specifies an illegal scope, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time
+    */
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testStatelessWithApplicationScopeFails()
+   {
+      deployBeans(Dachshund_Broken.class);
+   }
+
+   /**
+    * An EJB singleton bean must belong to either the @ApplicationScoped scope
+    * or to the @Dependent pseudo-scope. If an enterprise Web Bean specifies an
+    * illegal scope, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "enterpriseBeans" ,"broken"})
+   @SpecAssertion(section = "3.3")
+   public void testSingletonWithDependentScopeOK()
+   {
+      deployBeans(Labrador.class);
+      assert false;
+   }
+
+   /**
+    * An EJB singleton bean must belong to either the @ApplicationScoped scope
+    * or to the @Dependent pseudo-scope. If an enterprise Web Bean specifies an
+    * illegal scope, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "enterpriseBeans" , "broken"}, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testSingletonWithRequestScopeFails()
+   {
+      deployBeans(Greyhound_Broken.class);
+      assert false;
+   }
+
+   /**
+    * An EJB singleton bean must belong to either the @ApplicationScoped scope
+    * or to the @Dependent pseudo-scope. If an enterprise Web Bean specifies an
+    * illegal scope, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testSingletonWithConversationScopeFails()
+   {
+      deployBeans(Husky_Broken.class);
+      assert false;
+   }
+
+   /**
+    * An EJB singleton bean must belong to either the @ApplicationScoped scope
+    * or to the @Dependent pseudo-scope. If an enterprise Web Bean specifies an
+    * illegal scope, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "enterpriseBeans" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testSingletonWithSessionScopeFails()
+   {
+      deployBeans(IrishTerrier_Broken.class);
+   }
+
+   /**
+    * An EJB singleton bean must belong to either the @ApplicationScoped scope
+    * or to the @Dependent pseudo-scope. If an enterprise Web Bean specifies an
+    * illegal scope, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "enterpriseBeans" })
+   @SpecAssertion(section = "3.3")
+   public void testSingletonWithApplicationScopeOK()
+   {
+      deployBeans(Laika.class);
+   }
+
+   /**
+    * However, in any deployment, there may be at most one most specialized
+    * enabled enterprise Web Bean for any particular EJB enterprise bean.
+    * Therefore, for each distinct EJB name in a module, there is at most one
+    * Web Bean that may be called at runtime. If there is more than one most
+    * specialized enabled enterprise Web Bean for a particular EJB enterprise
+    * bean, a DeploymentException is thrown by the Web Bean manager at
+    * initialization time.
+    */
+   @Test(groups = { "enterpriseBeans", "stub" }, expectedExceptions = DeploymentException.class)
+   @SpecAssertion(section = "3.3")
+   public void testOnlyOneEnabledSpecializedEnterpriseBeanForImplmentation()
+   {
+      assert false;
+   }
+
+   /**
+    * If the implementation class of an enterprise Web Bean is annotated @Interceptor
+    * or @Decorator, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time.
+    */
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testEnterpriseBeanInterceptorFails()
+   {
+      deployBeans(Pug_Broken.class);
+   }
+
+   /**
+    * If the implementation class of an enterprise Web Bean is annotated @Interceptor
+    * or @Decorator, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time.
+    */
+   @Test(expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.3")
+   public void testEnterpriseBeanDecoratorFails()
+   {
+      deployBeans(Pekingese_Broken.class);
+   }
+
+   /**
+    * Only one Web Bean per implementation class may be defined using
+    * annotations.
+    */
+   @Test(expectedExceptions = DefinitionException.class, groups = { "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3")
+   public void testMultipleAnnotationDefinedEnterpriseBeansWithSameImplementationClassFails()
+   {
+      // TODO: testable?
+      assert false;
+   }
+
+   /**
+    * Note that multiple enterprise Web Beans may share the same implementation
+    * class. This occurs when Web Beans are defined using XML
+    */
+   @Test(groups = { "webbeansxml", "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3")
+   public void testMultipleXMLDefinedEnterpriseBeansWithSameImplementationClassOK()
+   {
+      assert false;
+   }
+
+   /**
+    * All session beans exposing an EJB 3.x client view and declared via an EJB
+    * component defining annotation on the EJB bean class are Web Beans, and
+    * thus no special declaration is required.
+    */
+   @Test(groups = { "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void testAnnotatedEnterpriseBean()
+   {
+      // TODO: dupe?
+      assert false;
+   }
+
+   /**
+    * Additional enterprise Web Beans for these EJBs may be defined using XML,
+    * by specifying the bean class in web-beans.xml.
+    */
+   @Test(groups = { "enterpriseBeans", "webbeansxml", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void testAnnotatedEnterpriseBeanComplementedWithXML()
+   {
+      // TODO dupe?
+      assert false;
+   }
+
+   /**
+    * All session beans exposing an EJB 3.x client view and declared in
+    * ejb-jar.xml are also Web Beans.
+    */
+   @Test(groups = { "enterpriseBeans", "ejbjarxml", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void testEJBJARDefinedEnterpriseBean()
+   {
+      // TODO dupe?
+      assert false;
+   }
+
+   /**
+    * Additional enterprise Web Beans for these EJBs may be defined using XML,
+    * by specifying the bean class and EJB name in web-beans.xml
+    */
+   @Test(groups = { "enterpriseBeans", "ejbjarxml", "webbeansxml", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void testEJBJARDefinedEnterpriseBeanComplementedWithXML()
+   {
+      // TODO dupe?
+      assert false;
+   }
+
+   /**
+    * The set of API types for an enterprise Web Bean contains all local
+    * interfaces of the bean that do not have wildcard type parameters or type
+    * variables and their superinterfaces
+    */
+   @Test(groups = { "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3.2")
+   public void testAPITypesAreLocalInterfacesWithoutWildcardTypesOrTypeVariablesWithSuperInterfaces()
+   {
+      assert false;
+   }
+
+   /**
+    * If the EJB bean has a bean class local view and the bean class is not a
+    * parameterized type, the set of API types contains the bean class and all
+    * superclasses
+    */
+   @Test(groups = { "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3.2")
+   public void testEnterpriseBeanWithLocalViewAndParameterizedTypeIncludesBeanClassAndSuperclassesInAPITypes()
+   {
+      assert false;
+   }
+
+   /**
+    * In addition, java.lang.Object is an API type of every enterprise Web Bean.
+    */
+   @Test(groups = "enterpriseBeans")
+   @SpecAssertion(section = "3.3.2")
+   public void testObjectIsInAPITypes()
+   {
+      assert createEnterpriseBean(Laika.class).getTypes().contains(Object.class);
+   }
+
+   /**
+    * Remote interfaces are not included in the set of API types.
+    */
+   @Test(groups = { "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3.2")
+   public void testRemoteInterfacesAreNotInAPITypes()
+   {
+      assert false;
+   }
+
+   /**
+    * Enterprise Web Beans may be declared in web-beans.xml using the bean class
+    * name (for EJBs defined using a component- defining annotation) or bean
+    * class and EJB name (for EJBs defined in ejb-jar.xml). The ejbName
+    * attribute declares the EJB name of an EJB defined in ejb-jar.xml
+    */
+   @Test(groups = { "enterpriseBeans", "webbeansxml", "ejbjarxml", "stub" })
+   @SpecAssertion(section = "3.3")
+   public void testXMLFilesEJBNameUsage()
+   {
+      assert false;
+   }
+
+   /**
+    * Enterprise Web Beans may not be message-driven beans. If an enterprise Web
+    * Bean declared in XML is a message-driven bean, a DefinitionException is
+    * thrown by the Web Bean manager at initialization time.
+    */
+   @Test(expectedExceptions = DefinitionException.class, groups = {"enterpriseBeans", "broken"})
+   @SpecAssertion(section = "3.3")
+   public void testMessageDrivenBeansNotOK()
+   {
+      deployBeans(Leopard.class);
+   }
+
+   /**
+    * The default name for an enterprise Web Bean is the unqualified class name
+    * of the Web Bean implementation class, after converting the first character
+    * to lower case.
+    */
+   @Test(groups = "enterpriseBeans")
+   @SpecAssertion(section = "3.3.7")
+   public void testDefaultName()
+   {
+      assert createEnterpriseBean(Pitbull.class).getName().equals("pitbull");
+   }
+
+   /**
+    * An enterprise bean proxy implements all local interfaces of the EJB.
+    */
+   @Test(groups = { "specialization", "enterpriseBeans", "clientProxy", "stub" })
+   @SpecAssertion(section = "3.3.8")
+   public void testEnterpriseBeanProxyImplementsAllLocalInterfaces()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanLifecycleTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanLifecycleTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanLifecycleTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,181 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import java.util.Set;
+
+import javax.webbeans.UnremovedException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * Sections
+ * 
+ * 6.4. Lifecycle of stateful session enterprise Web beans
+ * 6.5. Lifecycle of stateless session and singleton enterprise Web Beans
+ * 6.9. Lifecycle of EJB beans
+ * 
+ * Mostly overlapping with other tests...
+ * 
+ * @author Nicklas Karlsson 
+ */
+
+ at SpecVersion("20081206")
+public class EnterpriseBeanLifecycleTest extends AbstractTest
+{
+   
+   /**
+    * When the create() method is called, the Web Bean manager creates and
+    * returns an enterprise bean proxy
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "stub" })
+   @SpecAssertion(section = "6.4")
+   public void testProxyCreated()
+   {
+      assert false;
+   }
+
+   /**
+    * When the destroy() method is called, the Web Bean manager calls the Web
+    * Bean remove method upon the proxy
+    */
+   @Test(groups = { "enterpriseBeans", "clientProxy", "lifecycle", "stub"})
+   @SpecAssertion(section = "6.4")
+   public void testRemoveMethodCalled() throws Exception
+   {
+      GoodDoggie.destructorCalled = false;
+      deployBeans(GoodDoggie.class);
+      new RunInDependentContext()
+      {
+         
+         @Override
+         protected void execute() throws Exception
+         {
+            Set<Bean<LocalGoodDoggie>> goodDoggieBeans = manager.resolveByType(LocalGoodDoggie.class);
+            assert goodDoggieBeans.size() == 1;
+            Bean<LocalGoodDoggie> bean = goodDoggieBeans.iterator().next();
+            LocalGoodDoggie doggie = manager.getInstance(bean);
+            bean.destroy(doggie);
+         }
+         
+      }.run();
+   }
+
+   /**
+    * For each remove method parameter, the Web Bean manager passes the object
+    * returned by Manager.getInstanceByType()
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "removeMethod", "stub" })
+   @SpecAssertion(section = "6.4")
+   public void testFieldInjections()
+   {
+      assert false;
+   }
+
+   /**
+    * If the enterprise Web Bean has no Web Bean remove method, the Web Bean
+    * manager throws an UnremovedException.
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "removeMethod", "stub" }, expectedExceptions = UnremovedException.class)
+   @SpecAssertion(section = "6.4")
+   public void testNoRemoveMethodFails()
+   {
+      assert false;
+   }
+
+   /**
+    * If the underlying EJB was already destroyed by direct invocation of a
+    * remove method by the application, the Web Bean manager ignores the
+    * instance, and is not required to call any remove method
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "removeMethod", "stub" })
+   @SpecAssertion(section = "6.4")
+   public void testNoRemoveMethodsCalledIfEnterpriseBeanAlreadyRemoved()
+   {
+      assert false;
+   }
+
+   /**
+    * When the destroy() method is called, the Web Bean manager simply discards
+    * the proxy and all EJB local object references.
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "removeMethod", "stub" })
+   @SpecAssertion(section = "6.5")
+   public void testProxyAndLocalObjectReferencesDiscardedForStatelessEnterpriseBeans()
+   {
+      assert false;
+   }
+   
+   /**
+    * The Web Bean manager initializes the values of all injected fields. For
+    * each injected field, the Web Bean manager sets the value to the object
+    * returned by Manager.getInstanceByType().
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testFieldInjectionsOnRemoveMethods()
+   {
+      assert false;
+   }   
+
+   /**
+    * Next, if the EJB bean instance is an instance of a Web Bean, the Web Bean
+    * manager initializes the values of any fields with initial values specified
+    * in XML,
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testInitXMLDefinedValuesOnWebWeanEnterpriseBeans()
+   {
+      assert false;
+   }
+
+   /**
+    * Next, the Web Bean manager calls all initializer methods. For each
+    * initializer method parameter, the Web Bean manager passes the object
+    * returned by Manager.getInstanceByType().
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testInitializerMethodsCalledWithCurrentParameterValues()
+   {
+      assert false;
+   }
+
+   /**
+    * Finally, the Web Bean manager builds the interceptor and decorator stacks
+    * for the instance
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "interceptors", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testInterceptorStackIsBuilt()
+   {
+      assert false;
+   }
+
+   /**
+    * Finally, the Web Bean manager builds the interceptor and decorator stacks
+    * for the instance
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "decorators", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testDecoratorStackIsBuilt()
+   {
+      assert false;
+   }
+
+   /**
+    * When the EJB container destroys an instance of an EJB bean, the Web Bean
+    * manager intercepts the @PreDestroy callback and destroys all dependent
+    * objects, after the callback returns from the bean instance
+    */
+   @Test(groups = { "enterpriseBeans", "lifecycle", "stub" })
+   @SpecAssertion(section = "6.9")
+   public void testDependentObjectsDestroyed()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanRemoveMethodTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanRemoveMethodTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanRemoveMethodTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,58 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * Sections
+ * 
+ * 3.3.5. Web Bean remove methods 3.3.5.1. Declaring a Web Bean remove method
+ * using annotations. 3.3.5.2. Declaring a Web Bean remove method using XML
+ * 3.3.5.3. Remove method parameters
+ * 
+ * @author Nicklas Karlsson
+ */
+ at SpecVersion("20090116")
+public class EnterpriseBeanRemoveMethodTest extends AbstractTest
+{
+
+   /**
+    * If the scope is @Dependent, the application may call any EJB remove method
+    * of an instance of the enterprise Web Bean, but then no parameters will be
+    * passed to the method by the Web Bean manager
+    */
+   @Test(groups = { "enterpriseBeans", "removeMethod", "lifecycle", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void applicationMayCallRemoveMethodOnDependentScopedSessionEnterpriseBeansButNoParametersArePassed()
+   {
+      assert false;
+   }
+
+   /**
+    * If the application directly calls an EJB remove method of an instance of
+    * an enterprise Web Bean that is a stateful session bean and declares any
+    * scope other than @Dependent, an UnsupportedOperationException is thrown.
+    */
+   @Test(groups = { "enterpriseBeans", "removeMethod", "lifecycle", "stub" }, expectedExceptions = UnsupportedOperationException.class)
+   @SpecAssertion(section = "3.3.1")
+   public void applicationCannotCallRemoveMethodOnNonDependentScopedSessionEnterpriseBean()
+   {
+      assert false;
+   }
+
+   /**
+    * If the application directly calls an EJB remove method of an instance of
+    * an enterprise Web Bean that is a stateful session bean and has scope
+    * @Dependent, the Web Bean manager ignores the instance when instead of
+    * destroying it
+    */
+   @Test(groups = { "enterpriseBeans", "removeMethod", "lifecycle", "stub" })
+   @SpecAssertion(section = "3.3.1")
+   public void applicationMayCallRemoveMethodOnDependentScopedSessionEnterpriseBeansButInstanceIsNotDestroyed()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanSpecializationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanSpecializationTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/EnterpriseBeanSpecializationTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,144 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.DeploymentException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+/**
+ * Sections
+ * 
+ * 3.3.6. Specializing an enterprise Web Bean
+ * 
+ * @author Nicklas Karlsson
+ */
+ at SpecVersion("20081206")
+public class EnterpriseBeanSpecializationTest extends AbstractTest
+{
+   
+   /**
+    * If an implementation class of an enterprise Web Bean X defined using
+    * annotations is annotated @Specializes, then the implementation class of X
+    * must directly extend the implementation class of another enterprise Web
+    * Bean Y defined using annotations. If the implementation class of X does
+    * not directly extend the implementation class of another enterprise Web
+    * Bean, a DefinitionException is thrown by the Web Bean manager at
+    * initialization time
+    */
+   @Test(groups = { "specialization", "enterpriseBeans", "stub" })
+   @SpecAssertion(section = "3.3.6")
+   public void testAnnotationDefinedSpecializingEnterpriseBeanMustDirectlyExtendAnotherAnnotationDefinedEnterpriseBean()
+   {
+      assert false;
+   }
+
+   /**
+    * X inherits all binding types of Y
+    */
+   @Test(groups = { "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testSpecializingBeanInheritsBindingTypes()
+   {
+      Bean<Hound> hound = createEnterpriseBean(Hound.class);
+      Bean<HoundOfBaskerville> houndOfBaskerville = createEnterpriseBean(HoundOfBaskerville.class);
+      assert compareBindingTypesOK(hound, houndOfBaskerville);
+   }
+
+   private boolean compareBindingTypesOK(Bean<Hound> hound, Bean<HoundOfBaskerville> houndOfBaskerville)
+   {
+      if (hound.getBindings().size() != houndOfBaskerville.getBindings().size())
+      {
+         return false;
+      }
+      if (!hound.getBindings().containsAll(houndOfBaskerville.getBindings()))
+      {
+         return false;
+      }
+      if (!houndOfBaskerville.getBindings().containsAll(hound.getBindings()))
+      {
+         return false;
+      }
+      return true;
+   }
+
+   /**
+    * if Y has a name, X has the same name as Y.
+    */
+   @Test(groups = { "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testSpecializingBeanInheritsNameIfAny()
+   {
+      // Create the specialized class
+      createEnterpriseBean(Hound.class);
+      Bean<HoundOfBaskerville> houndOfBaskerville = createEnterpriseBean(HoundOfBaskerville.class);
+      assert houndOfBaskerville.getName().equals("Pongo");
+   }
+
+   /**
+    * X must support all local interfaces supported by Y. Otherwise, a
+    * DefinitionException is thrown by the Web Bean manager at initialization
+    * time.
+    */
+   @Test(expectedExceptions = DefinitionException.class, groups = { "stub", "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testSpecializingNotSupportingLocalInterfacesOfSpecializedFails()
+   {
+      assert false;
+   }
+
+   /**
+    * if Y supports a bean-class local view, X must also support a bean-class
+    * local view. Otherwise, a DefinitionException is thrown by the Web Bean
+    * manager at initialization time.
+    */
+   @Test(expectedExceptions = DefinitionException.class, groups = { "stub", "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testSpecializingNotSupportingLocalViewOfSpecializedFails()
+   {
+      assert false;
+   }
+
+   /**
+    * We say that X directly specializes Y, and we can be certain that Y will
+    * never be instantiated or called by the Web Bean manager if X is enabled.
+    */
+   @Test(expectedExceptions = DefinitionException.class, groups = { "stub", "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testEnabledSpecializationOverridesSpecialized()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testXMLDefinedSpecializationOnAnnotationDefinedBean()
+   {
+      assert false;
+   }
+
+   @Test(expectedExceptions = DeploymentException.class, groups = { "stub", "enterpriseBeans", "specialization" })
+   @SpecAssertion(section = "3.3")
+   public void testMultipleEnabledSpecializedEnterpriseBeanFails()
+   {
+      assert false;
+   }
+
+   @Test(expectedExceptions = DefinitionException.class, groups = { "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testAnnotationDefinedSpecializingEnterpriseBeanNotDirectlyExtendingAnnotationDefinedEnterpriseBeanFails()
+   {
+      createEnterpriseBean(GreaterDane.class);
+   }
+
+   @Test(expectedExceptions = DefinitionException.class, groups = { "stub", "specialization", "enterpriseBeans" })
+   @SpecAssertion(section = "3.3.6")
+   public void testXMLDefinedSpecializingEnterpriseBeanNotImplementingAnnotationDefinedEnterpriseBeanFails()
+   {
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Giraffe.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Giraffe.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Giraffe.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+
+ at Stateless
+class Giraffe
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoldenRetriever.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoldenRetriever.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoldenRetriever.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Destructor;
+import javax.webbeans.Disposes;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class GoldenRetriever
+{
+   @Remove @Destructor
+   public void bye(@Disposes Object something) {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoodDoggie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoodDoggie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GoodDoggie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Destructor;
+
+ at Stateful
+class GoodDoggie implements LocalGoodDoggie
+{
+   
+   public static boolean destructorCalled = false;
+   
+   @Destructor @Remove
+   public void bye() {
+      destructorCalled = true;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreatDane.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreatDane.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreatDane.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+
+class GreatDane
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreaterDane.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreaterDane.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/GreaterDane.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Specializes;
+
+ at Specializes
+ at Stateless
+class GreaterDane extends GreatDane
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Greyhound_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Greyhound_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Greyhound_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.RequestScoped;
+
+//@Singleton
+ at RequestScoped
+class Greyhound_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Hound.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Hound.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Hound.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Named;
+
+ at Stateful
+ at Tame
+ at Named("Pongo")
+class Hound
+{ 
+   @Remove
+   public void bye() {
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/HoundOfBaskerville.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/HoundOfBaskerville.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/HoundOfBaskerville.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Specializes;
+
+ at Specializes
+ at Stateful
+class HoundOfBaskerville extends Hound
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Husky_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Husky_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Husky_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.ConversationScoped;
+
+
+//@Singleton
+ at ConversationScoped
+class Husky_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/IrishTerrier_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/IrishTerrier_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/IrishTerrier_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.SessionScoped;
+
+//@Singleton
+ at SessionScoped
+class IrishTerrier_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/JackRussellTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/JackRussellTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/JackRussellTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Destructor;
+import javax.webbeans.Observes;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class JackRussellTerrier
+{
+   @Remove @Destructor
+   public void bye(@Observes Object something) {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Koirus.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Koirus.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Koirus.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Dependent;
+
+ at Stateful
+ at Dependent
+class Koirus
+{
+   
+   public static boolean removeCalled = false;
+   
+   @Remove
+   public void bye(Object param) 
+   {
+      removeCalled = true;
+   }
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Labrador.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Labrador.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Labrador.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.Dependent;
+
+//@Singleton
+ at Dependent
+class Labrador
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Laika.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Laika.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Laika.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.webbeans.ApplicationScoped;
+
+//@Singleton
+ at ApplicationScoped
+class Laika
+{
+
+   @Remove
+   public void remove()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Leopard.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Leopard.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Leopard.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.Production;
+
+ at Production
+//@MessageDriven
+class Leopard /*implements javax.jms.MessageListener*/
+{
+
+   public void onMessage(/*Message message*/)
+   {
+      // TODO Auto-generated method stub
+      
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/LocalGoodDoggie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/LocalGoodDoggie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/LocalGoodDoggie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Local;
+import javax.ejb.Remove;
+
+ at Local
+public interface LocalGoodDoggie
+{
+   @Remove
+   public void bye();
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewAndOtherBindingType_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewAndOtherBindingType_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewAndOtherBindingType_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.webbeans.Current;
+import javax.webbeans.New;
+
+class NewAndOtherBindingType_Broken
+{
+   public @New @Current WrappedEnterpriseBean violation;
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewEnterpriseBeanTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewEnterpriseBeanTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/NewEnterpriseBeanTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,371 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.Dependent;
+import javax.webbeans.Standard;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.NewBinding;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081222")
+public class NewEnterpriseBeanTest extends AbstractTest
+{
+   private Bean<WrappedEnterpriseBean> newEnterpriseBean;
+   
+   @BeforeMethod
+   public void initNewBean() {
+      deployBeans(WrappedEnterpriseBean.class);
+      Set<Bean<WrappedEnterpriseBean>> beans = manager.resolveByType(WrappedEnterpriseBean.class, new NewBinding());
+      assert beans.size() == 1;
+      newEnterpriseBean = beans.iterator().next();
+   }
+   
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsDependentScoped()
+   {
+      assert Dependent.class.equals(newEnterpriseBean.getScopeType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsOfStandardDeploymentType()
+   {
+      assert Standard.class.equals(newEnterpriseBean.getDeploymentType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsHasOnlyNewBinding()
+   {
+      assert newEnterpriseBean.getBindings().size() == 1;
+      assert newEnterpriseBean.getBindings().iterator().next().annotationType().equals(new NewBinding().annotationType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoWebBeanName()
+   {
+      assert newEnterpriseBean.getName() == null;
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "stub", "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoStereotypes()
+   {
+      assert false;
+   }
+
+   /**
+    * If the parameter type satisfies the definition of a simple Web Bean
+    * implementation class, Section 3.2.1, “Which Java classes are simple Web
+    * Beans?”, then the Web Bean is a simple Web Bean. If the parameter type
+    * satisfies the definition of an enterprise Web Bean implementation class,
+    * Section 3.3.2, “Which EJBs are enterprise Web Beans?”, then the Web Bean
+    * is an enterprise Web Bean.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsEnterpriseWebBeanIfParameterTypeIsEnterpriseWebBean()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasSameInitializerMethodsAsWrappedBean()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasSameInjectedFieldsAsWrappedBean()
+   {
+      assert false;
+   }
+   
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = {"new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoObservers()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoProducerFields()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoProducerMethods()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoDisposalMethods()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "stub", "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasSameInterceptorMethodsAsWrappedBean()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoDecorators()
+   {
+      Annotation[] bindingTypes = newEnterpriseBean.getBindings().toArray(new Annotation[0]);
+      assert manager.resolveDecorators(newEnterpriseBean.getTypes(), bindingTypes).isEmpty();
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToField()
+   {
+      deployBeans(AnnotatedField.class, WrappedEnterpriseBean.class);
+      assert manager.resolveByType(WrappedEnterpriseBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToProducerMethodParameter()
+   {
+      deployBeans(AnnotatedProducerParameter.class, WrappedEnterpriseBean.class);
+      assert manager.resolveByType(WrappedEnterpriseBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToInitializerMethodParameter()
+   {
+      deployBeans(AnnotatedInitializerParameter.class, WrappedEnterpriseBean.class);
+      assert manager.resolveByType(WrappedEnterpriseBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToConstructorMethodParameter()
+   {
+      deployBeans(AnnotatedConstructorParameter.class, WrappedEnterpriseBean.class);
+      assert manager.resolveByType(WrappedEnterpriseBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * If the @New binding type appears in conjunction with some other binding
+    * type, or is specified for a field or parameter of a type which does not
+    * satisfy the definition of a simple Web Bean implementation class or
+    * enterprise Web Bean implementation class, a DefinitionException is thrown
+    * by the container at deployment time.
+    */
+   @Test(groups = { "new" , "broken"}, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotAppearInConjunctionWithOtherBindingType()
+   {
+      deployBeans(NewAndOtherBindingType_Broken.class);
+   }
+
+   /**
+    * If the @New binding type appears in conjunction with some other binding
+    * type, or is specified for a field or parameter of a type which does not
+    * satisfy the definition of a simple Web Bean implementation class or
+    * enterprise Web Bean implementation class, a DefinitionException is thrown
+    * by the container at deployment time.
+    */
+   @Test(groups = { "stub", "new" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotBeAppliedToNonWebBeanImplementationClass()
+   {
+      assert false;
+   }
+
+   /**
+    * No Web Bean defined using annotations or XML may explicitly declare @New
+    * as a binding type
+    */
+   @Test(groups = { "stub", "new" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotBeExplicitlyDeclared()
+   {
+      assert false;
+   }
+   
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pekingese_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pekingese_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pekingese_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Decorator;
+
+ at Stateless
+ at Decorator
+class Pekingese_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pitbull.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pitbull.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pitbull.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Destructor;
+import javax.webbeans.Named;
+
+ at Stateful
+ at ApplicationScoped
+ at Named
+class Pitbull
+{
+   
+   public static boolean destructorCalled = false;
+
+   @Remove @Destructor
+   public void bye() 
+   {
+      destructorCalled = true;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pug_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pug_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pug_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateless;
+import javax.webbeans.Interceptor;
+
+ at Stateless
+ at Interceptor
+class Pug_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pumi_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pumi_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Pumi_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateful;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class Pumi_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Rottweiler.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Rottweiler.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Rottweiler.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Destructor;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class Rottweiler
+{
+   @Destructor
+   public void bye() {
+      
+   }
+   
+   @Destructor
+   public void bye2() {
+      
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/RussellTerrier.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/RussellTerrier.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/RussellTerrier.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Destructor;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class RussellTerrier
+{
+   @Destructor
+   public void bye() {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Saluki.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Saluki.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Saluki.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Initializer;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class Saluki
+{
+   @Remove @Initializer
+   public void bye() {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Spitz.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Spitz.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Spitz.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Produces;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class Spitz
+{
+   @Remove @Produces
+   public void bye() {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Tame.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Tame.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Tame.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Toller.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Toller.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/Toller.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.RequestScoped;
+
+ at Stateful
+ at RequestScoped
+class Toller
+{
+   
+   public static boolean removeCalled = false;
+   
+   @Remove
+   public void bye() 
+   {
+      removeCalled = true;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WelshCorgie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WelshCorgie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WelshCorgie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Stateful;
+import javax.webbeans.Dependent;
+
+ at Stateful
+ at Dependent
+class WelshCorgie
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WrappedEnterpriseBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WrappedEnterpriseBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/enterprise/WrappedEnterpriseBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.implementation.enterprise;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.webbeans.Named;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+ at Stateful
+ at Named("John")
+class WrappedEnterpriseBean
+{
+   @Remove
+   public void bye() {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Capercaillie.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Capercaillie.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Capercaillie.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Disposes;
+import javax.webbeans.Initializer;
+
+class Capercaillie
+{
+   
+   @Initializer
+   public void setName(String name, @Disposes ChickenHutch chickenHutch)
+   {
+      // No-op
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Chicken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Chicken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Chicken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Production;
+
+ at Production
+class Chicken
+{
+   
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/ChickenHutch.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/ChickenHutch.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/ChickenHutch.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,23 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Initializer;
+
+class ChickenHutch
+{
+   
+   public Fox fox;
+   public Chicken chicken;
+   
+   @Initializer
+   public void setFox(Fox fox)
+   {
+      this.fox = fox;
+   }
+   
+   @Initializer
+   public void setChicken(Chicken chicken)
+   {
+      this.chicken = chicken;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/DangerCall.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/DangerCall.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/DangerCall.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Production;
+
+ at Production
+class DangerCall
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Dottrel.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Dottrel.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Dottrel.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Initializer;
+
+class Dottrel
+{
+   
+   @Initializer
+   public static void setName(String name)
+   {
+      // No-op
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Fox.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Fox.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Fox.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Fox
+{
+   
+   public String getName()
+   {
+      return "gavin";
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Grouse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Grouse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Grouse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Observes;
+
+class Grouse
+{
+   
+   @Initializer
+   public void setName(String name, @Observes DangerCall dangerCall)
+   {
+      // No-op
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/InitializerMethodTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/InitializerMethodTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/InitializerMethodTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,128 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.NonexistentMethodException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class InitializerMethodTest extends AbstractTest
+{
+   
+   @Test(expectedExceptions=DefinitionException.class, groups="initializerMethod") @SpecAssertion(section="3.8")
+   public void testStaticInitializerMethodNotAllowed()
+   {
+      createSimpleBean(Dottrel.class);
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "servlet"}) @SpecAssertion(section="3.8")
+   public void testInitializerMethodCalledOnServlet()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "ejb3"}) @SpecAssertion(section="3.8")
+   public void testInitializerMethodCalledOnEJBSessionBean()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "ejb3"}) @SpecAssertion(section="3.8")
+   public void testInitializerMethodCalledOnEJBMDB()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "ejb3", "singletons"}) @SpecAssertion(section="3.8")
+   public void testInitializerMethodCalledOnEJBSingleton()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "ejb3"}) @SpecAssertion(section="3.8")
+   public void testInitializerMethodNotABusinessMethod()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "interceptors"}) @SpecAssertion(section="3.8")
+   public void testMethodInterceptorNotCalledOnInitializerMethod()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"initializerMethod"}) @SpecAssertion(section={"3.8", "5.3", "3.8.2", "3.8.3"})
+   public void testMultipleInitializerMethodsAreCalled()
+   {
+      manager.addBean(createSimpleBean(Fox.class));
+      manager.addBean(createSimpleBean(Chicken.class));
+      
+      Bean<ChickenHutch> chickenHutchBean = createSimpleBean(ChickenHutch.class);
+      ChickenHutch chickenHutch = chickenHutchBean.create();
+      assert chickenHutch.fox != null;
+      assert chickenHutch.chicken != null;
+   }
+   
+   @Test(groups="initializerMethod", expectedExceptions=DefinitionException.class) @SpecAssertion(section={"3.8.1", "3.4.2"})
+   public void testInitializerMethodAnnotatedProduces()
+   {
+      createSimpleBean(Pheasant.class);
+   }
+   
+   @Test(groups="initializerMethod", expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.8.1")
+   public void testInitializerMethodAnnotatedDestructor()
+   {
+      createSimpleBean(Shrike.class);
+   }
+   
+   @Test(groups="initializerMethod", expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.8.1")
+   public void testInitializerMethodHasParameterAnnotatedDisposes()
+   {
+      createSimpleBean(Capercaillie.class);
+   }
+   
+   @Test(groups="initializerMethod", expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.8.1")
+   public void testInitializerMethodHasParameterAnnotatedObserves()
+   {
+      createSimpleBean(Grouse.class);
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "webbeansxml"}) @SpecAssertion(section="3.8.2")
+   public void testInitializerMethodDeclaredInXml()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "webbeansxml"}) @SpecAssertion(section="3.8.2")
+   public void testInitializerMethodDeclaredInXmlIgnoresBindingAnnotationsInJava()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "webbeansxml"}, expectedExceptions=NonexistentMethodException.class) @SpecAssertion(section="3.8.2")
+   public void testInitializerMethodDeclaredInXmlDoesNotExist()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "initializerMethod", "webbeansxml"}) @SpecAssertion(section="3.8.2")
+   public void testBeanHasAllInitializerMethodsDeclaredInJavaAndXml()
+   {
+      assert false;
+   }
+   
+   /*
+
+   @Test(groups="initializerMethod") @SpecAssertion(section="3.8")
+   public void test
+   {
+      assert false;
+   }
+
+    */
+   
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Pheasant.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Pheasant.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Pheasant.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Produces;
+
+class Pheasant
+{
+ 
+   @Initializer
+   @Produces
+   public void setName(String name)
+   {
+      // No-op
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Shrike.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Shrike.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/initializer/Shrike.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.initializer;
+
+import javax.webbeans.Destructor;
+import javax.webbeans.Initializer;
+
+class Shrike
+{
+ 
+   
+   @Initializer
+   @Destructor
+   public void setName(String name)
+   {
+      // No-op
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/interceptor/InterceptorDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/interceptor/InterceptorDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/interceptor/InterceptorDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.interceptor;
+
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class InterceptorDefinitionTest
+{
+   
+   @Test(groups="stub") @SpecAssertion(section="4.2")
+   public void testNonStaticWithInterceptorBindingInherited()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.2")
+   public void testNonStaticWithInterceptorBindingBlockedByIntermediateClass()
+   {
+      assert false;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/jms/JmsDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/jms/JmsDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/jms/JmsDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.jms;
+
+import javax.webbeans.DefinitionException;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class JmsDefinitionTest extends AbstractTest
+{
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "jms"}) @SpecAssertion(section="2.6")
+   public void testJmsEndpointHasName()
+   {
+      assert false;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedConstructorParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedConstructorParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedConstructorParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.New;
+
+
+class AnnotatedConstructorParameter
+{
+   @Initializer
+   public AnnotatedConstructorParameter(@New WrappedSimpleBean reference)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedField.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedField.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedField.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.New;
+
+
+class AnnotatedField
+{
+   @New
+   WrappedSimpleBean reference;
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedInitializerParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedInitializerParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedInitializerParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.New;
+
+
+class AnnotatedInitializerParameter
+{
+   @Initializer
+   public void init(@New WrappedSimpleBean reference)
+   {
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedProducerParameter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedProducerParameter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnnotatedProducerParameter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.New;
+import javax.webbeans.Produces;
+
+
+class AnnotatedProducerParameter
+{
+   @Produces
+   Object produce(@New WrappedSimpleBean reference)
+   {
+      return new Object();
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/BookOrderProcessor.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/BookOrderProcessor.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/BookOrderProcessor.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+class BookOrderProcessor extends OrderProcessor
+{
+   
+   @Override
+   public void postConstruct() {}
+   
+   @Override
+   public void preDestroy() {}
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/CdOrderProcessor.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/CdOrderProcessor.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/CdOrderProcessor.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+class CdOrderProcessor extends OrderProcessor
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Cow_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Cow_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Cow_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Production;
+
+ at Production
+abstract class Cow_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Donkey.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Donkey.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Donkey.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Production;
+
+ at Production
+class Donkey
+{
+   
+   public static boolean constructedCorrectly = false;
+   
+   public Donkey()
+   {
+      constructedCorrectly = true;
+   }
+   
+   public Donkey(String foo)
+   {
+      
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Duck.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Duck.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Duck.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,29 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Produces;
+import javax.webbeans.Production;
+
+
+ at Production
+class Duck
+{
+   
+   @Produces public static String foo = "foo";
+   
+   @Produces public static Integer bar = 1;
+   
+   @Produces @Synchronous public static Integer synchronousBar = 2;
+   
+   public static boolean constructedCorrectly = false;
+   
+   @Initializer
+   public Duck(String foo, @Synchronous Integer bar)
+   {
+      if (foo.equals(Duck.foo) && bar.equals(Duck.synchronousBar))
+      {
+         constructedCorrectly = true;
+      }
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/EntityBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/EntityBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/EntityBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+class EntityBean
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Farm.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Farm.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Farm.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,32 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.util.Date;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.webbeans.Current;
+
+class Farm
+{
+   
+   public Date founded;
+   public Date closed;
+   public int initialStaff;
+   
+   @Current
+   FarmOffice farmOffice;
+   
+   @PostConstruct
+   private void postConstruct() 
+   {
+      founded = new Date();
+      initialStaff = farmOffice.noOfStaff;
+   }
+   
+   @PreDestroy
+   private void preDestroy() 
+   {
+      closed = new Date();
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FarmOffice.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FarmOffice.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FarmOffice.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+
+class FarmOffice
+{
+   
+   public int noOfStaff = 20;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishPond.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishPond.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishPond.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+
+class FishPond
+{
+   
+   public Animal goldfish;
+   
+   @Initializer
+   public FishPond(Goldfish goldfish)
+   {
+      this.goldfish = goldfish;
+   }
+   
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/FishStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.ApplicationScoped;
+import javax.webbeans.Named;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at ApplicationScoped
+ at Named
+ at interface FishStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goldfish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goldfish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goldfish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at RequestScopedAnimalStereotype
+ at RequestScoped
+ at Production
+class Goldfish implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goose_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goose_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Goose_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Production;
+
+ at Production
+class Goose_Broken
+{
+   
+   @Initializer
+   public Goose_Broken(String foo)
+   {
+   }
+   
+   @Initializer
+   public Goose_Broken(String foo, Double bar)
+   {
+      
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/HeavyDuty.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/HeavyDuty.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/HeavyDuty.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface HeavyDuty
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Leopard_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Leopard_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Leopard_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.RequestScoped;
+
+ at RequestScoped
+class Leopard_Broken
+{
+   
+   public String name = "pete";
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockEnterpriseBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockEnterpriseBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockEnterpriseBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.ejb.EnterpriseBean;
+
+class MockEnterpriseBean implements EnterpriseBean
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockFilter.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockFilter.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockFilter.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,30 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+class MockFilter implements Filter
+{
+   
+   public void destroy()
+   {
+      
+   }
+   
+   public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException
+   {
+      
+   }
+   
+   public void init(FilterConfig arg0) throws ServletException
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockHttpSessionListener.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockHttpSessionListener.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockHttpSessionListener.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.servlet.http.HttpSessionEvent;
+
+class MockHttpSessionListener implements javax.servlet.http.HttpSessionListener
+{
+   
+   public void sessionCreated(HttpSessionEvent arg0)
+   {
+      
+   }
+   
+   public void sessionDestroyed(HttpSessionEvent arg0)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServlet.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServlet.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServlet.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,39 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.io.IOException;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+class MockServlet implements Servlet
+{
+
+   public void destroy()
+   {
+      
+   }
+
+   public ServletConfig getServletConfig()
+   {
+      return null;
+   }
+
+   public String getServletInfo()
+   {
+      return null;
+   }
+
+   public void init(ServletConfig arg0) throws ServletException
+   {
+      
+   }
+
+   public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletContextListener.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletContextListener.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletContextListener.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+class MockServletContextListener implements ServletContextListener
+{
+   
+   public void contextDestroyed(ServletContextEvent arg0)
+   {
+      
+   }
+   
+   public void contextInitialized(ServletContextEvent arg0)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletRequestListener.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletRequestListener.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockServletRequestListener.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,19 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+
+class MockServletRequestListener implements ServletRequestListener
+{
+   
+   public void requestDestroyed(ServletRequestEvent arg0)
+   {
+      
+   }
+   
+   public void requestInitialized(ServletRequestEvent arg0)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockUIComponent.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockUIComponent.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/MockUIComponent.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,255 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+import javax.faces.render.Renderer;
+
+class MockUIComponent extends UIComponent
+{
+   
+   @Override
+   protected void addFacesListener(FacesListener arg0)
+   {
+      
+   }
+   
+   @Override
+   public void broadcast(FacesEvent arg0) throws AbortProcessingException
+   {
+      
+   }
+   
+   @Override
+   public void decode(FacesContext arg0)
+   {
+      
+   }
+   
+   @Override
+   public void encodeBegin(FacesContext arg0) throws IOException
+   {
+      
+   }
+   
+   @Override
+   public void encodeChildren(FacesContext arg0) throws IOException
+   {
+      
+   }
+   
+   @Override
+   public void encodeEnd(FacesContext arg0) throws IOException
+   {
+      
+   }
+   
+   @Override
+   public UIComponent findComponent(String arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public Map<String, Object> getAttributes()
+   {
+      return null;
+   }
+   
+   @Override
+   public int getChildCount()
+   {
+      return 0;
+   }
+   
+   @Override
+   public List<UIComponent> getChildren()
+   {
+      return null;
+   }
+   
+   @Override
+   public String getClientId(FacesContext arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   protected FacesContext getFacesContext()
+   {
+      return null;
+   }
+   
+   @Override
+   protected FacesListener[] getFacesListeners(Class arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public UIComponent getFacet(String arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public Map<String, UIComponent> getFacets()
+   {
+      return null;
+   }
+   
+   @Override
+   public Iterator<UIComponent> getFacetsAndChildren()
+   {
+      return null;
+   }
+   
+   @Override
+   public String getFamily()
+   {
+      return null;
+   }
+   
+   @Override
+   public String getId()
+   {
+      return null;
+   }
+   
+   @Override
+   public UIComponent getParent()
+   {
+      return null;
+   }
+   
+   @Override
+   protected Renderer getRenderer(FacesContext arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public String getRendererType()
+   {
+      return null;
+   }
+   
+   @Override
+   public boolean getRendersChildren()
+   {
+      return false;
+   }
+   
+   @Override
+   public ValueBinding getValueBinding(String arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public boolean isRendered()
+   {
+      return false;
+   }
+   
+   @Override
+   public void processDecodes(FacesContext arg0)
+   {
+      
+   }
+   
+   @Override
+   public void processRestoreState(FacesContext arg0, Object arg1)
+   {
+      
+   }
+   
+   @Override
+   public Object processSaveState(FacesContext arg0)
+   {
+      return null;
+   }
+   
+   @Override
+   public void processUpdates(FacesContext arg0)
+   {
+      
+   }
+   
+   @Override
+   public void processValidators(FacesContext arg0)
+   {
+      
+   }
+   
+   @Override
+   public void queueEvent(FacesEvent arg0)
+   {
+      
+   }
+   
+   @Override
+   protected void removeFacesListener(FacesListener arg0)
+   {
+      
+   }
+   
+   @Override
+   public void setId(String arg0)
+   {
+      
+   }
+   
+   @Override
+   public void setParent(UIComponent arg0)
+   {
+      
+   }
+   
+   @Override
+   public void setRendered(boolean arg0)
+   {
+      
+   }
+   
+   @Override
+   public void setRendererType(String arg0)
+   {
+      
+   }
+   
+   @Override
+   public void setValueBinding(String arg0, ValueBinding arg1)
+   {
+      
+   }
+   
+   public boolean isTransient()
+   {
+      return false;
+   }
+   
+   public void restoreState(FacesContext arg0, Object arg1)
+   {
+      
+   }
+   
+   public Object saveState(FacesContext arg0)
+   {
+      return null;
+   }
+   
+   public void setTransient(boolean arg0)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Modern.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Modern.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Modern.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface Modern
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Motorized.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Motorized.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Motorized.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Motorized
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewAndOtherBindingType_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewAndOtherBindingType_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewAndOtherBindingType_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Current;
+import javax.webbeans.New;
+
+class NewAndOtherBindingType_Broken
+{
+   public @New @Current WrappedSimpleBean violation;
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewSimpleBeanTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewSimpleBeanTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NewSimpleBeanTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,324 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.Dependent;
+import javax.webbeans.Standard;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.NewBinding;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081222")
+public class NewSimpleBeanTest extends AbstractTest
+{
+   
+   private Bean<WrappedSimpleBean> newSimpleBean;
+   
+   @BeforeMethod
+   public void initNewBean() 
+   {
+      deployBeans(WrappedSimpleBean.class);
+      Set<Bean<WrappedSimpleBean>> beans = manager.resolveByType(WrappedSimpleBean.class, new NewBinding());
+      assert beans.size() == 1;
+      newSimpleBean = beans.iterator().next();
+   }
+   
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsDependentScoped()
+   {
+      assert Dependent.class.equals(newSimpleBean.getScopeType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsOfStandardDeploymentType()
+   {
+      assert Standard.class.equals(newSimpleBean.getDeploymentType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanIsHasOnlyNewBinding()
+   {
+      assert newSimpleBean.getBindings().size() == 1;
+      assert newSimpleBean.getBindings().iterator().next().annotationType().equals(new NewBinding().annotationType());
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoWebBeanName()
+   {
+      assert newSimpleBean.getName() == null;
+   }
+
+   /**
+    * When the built-in binding type @New is applied to an injection point, a
+    * Web Bean is implicitly defined with: • scope @Dependent, • deployment type
+    * 
+    * @Standard, • @New as the only binding annotation, • no Web Bean name, • no
+    *            stereotypes, and such that • the implementation class is the
+    *            declared type of the injection point.
+    */
+   @Test(groups = { "stub", "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoStereotypes()
+   {
+      assert false;
+   }
+   
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = {"new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoObservers()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoProducerFields()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new", "stub" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoProducerMethods()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new" , "stub"})
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoDisposalMethods()
+   {
+      //Class<?> type = TypeInfo.ofTypes(newSimpleBean.getTypes()).getSuperClass();
+      //assert manager.resolveDisposalMethods(type, newSimpleBean.getBindings().toArray(new Annotation[0])).isEmpty();
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "stub", "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasSameInterceptorMethodsAsWrappedBean()
+   {
+      assert false;
+   }
+
+   /**
+    * Furthermore, this Web Bean: • has the same Web Bean constructor,
+    * initializer methods and injected fields as a Web Bean defined using
+    * annotations— that is, it has any Web Bean constructor, initializer method
+    * or injected field declared by annotations that appear on the
+    * implementation class, • has no observer methods, producer methods or
+    * fields or disposal methods, • has the same interceptors as a Web Bean
+    * defined using annotations—that is, it has all the interceptor binding
+    * types declared by annotations that appear on the implementation class, and
+    * • has no decorators.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewBeanHasNoDecorators()
+   {
+      Annotation[] bindingTypes = newSimpleBean.getBindings().toArray(new Annotation[0]);
+      assert manager.resolveDecorators(newSimpleBean.getTypes(), bindingTypes).isEmpty();
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToField()
+   {
+      deployBeans(AnnotatedField.class, WrappedSimpleBean.class);
+      assert manager.resolveByType(WrappedSimpleBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToProducerMethodParameter()
+   {
+      deployBeans(AnnotatedProducerParameter.class, WrappedSimpleBean.class);
+      assert manager.resolveByType(WrappedSimpleBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToInitializerMethodParameter()
+   {
+      deployBeans(AnnotatedInitializerParameter.class, WrappedSimpleBean.class);
+      assert manager.resolveByType(WrappedSimpleBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * The @New annotation or <New> element may be applied to any field of a Web
+    * Bean implementation class or to any parameter of a producer method,
+    * initializer method, disposal method or Web Bean constructor where the type
+    * of the field or parameter is a concrete Java type which satisfies the
+    * requirements of a simple Web Bean implementation class or enterprise Web
+    * Bean implementation class.
+    */
+   @Test(groups = { "new" })
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationMayBeAppliedToConstructorMethodParameter()
+   {
+      deployBeans(AnnotatedConstructorParameter.class, WrappedSimpleBean.class);
+      assert manager.resolveByType(WrappedSimpleBean.class, new NewBinding()).size() == 1;
+   }
+
+   /**
+    * If the @New binding type appears in conjunction with some other binding
+    * type, or is specified for a field or parameter of a type which does not
+    * satisfy the definition of a simple Web Bean implementation class or
+    * enterprise Web Bean implementation class, a DefinitionException is thrown
+    * by the container at deployment time.
+    */
+   @Test(groups = { "new", "broken" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotAppearInConjunctionWithOtherBindingType()
+   {
+      deployBeans(NewAndOtherBindingType_Broken.class);
+   }
+
+   /**
+    * If the @New binding type appears in conjunction with some other binding
+    * type, or is specified for a field or parameter of a type which does not
+    * satisfy the definition of a simple Web Bean implementation class or
+    * enterprise Web Bean implementation class, a DefinitionException is thrown
+    * by the container at deployment time.
+    */
+   @Test(groups = { "stub", "new" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotBeAppliedToNonWebBeanImplementationClass()
+   {
+      assert false;
+   }
+
+   /**
+    * No Web Bean defined using annotations or XML may explicitly declare @New
+    * as a binding type
+    */
+   @Test(groups = { "stub", "new" }, expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.9")
+   public void testNewAnnotationCannotBeExplicitlyDeclared()
+   {
+      assert false;
+   }
+   
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NovelOrderProcessor.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NovelOrderProcessor.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/NovelOrderProcessor.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+class NovelOrderProcessor extends BookOrderProcessor
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Order.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Order.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Order.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Production;
+
+ at Production
+class Order
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OrderProcessor.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OrderProcessor.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OrderProcessor.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,25 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+class OrderProcessor
+{
+   
+   public static boolean postConstructCalled = false;
+   
+   public static boolean preDestroyCalled = true;
+   
+   @PostConstruct
+   public void postConstruct()
+   {
+      postConstructCalled = true;
+   }
+   
+   @PreDestroy
+   public void preDestroy()
+   {
+      preDestroyCalled = true;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OuterBean_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OuterBean_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/OuterBean_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Production;
+
+class OuterBean_Broken
+{
+
+   @Production
+   class InnerBean_Broken
+   {
+      
+      public InnerBean_Broken()
+      {
+         
+      }
+      
+   }
+   
+   static class StaticInnerBean_Broken
+   {
+      
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/ParameterizedBean_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/ParameterizedBean_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/ParameterizedBean_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+class ParameterizedBean_Broken<T>
+{
+   
+}
\ No newline at end of file

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Plough.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Plough.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Plough.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Named;
+
+
+ at HeavyDuty
+ at Named("plough")
+class Plough
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RedSnapper.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RedSnapper.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RedSnapper.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.RequestScoped;
+
+ at FishStereotype
+ at RequestScoped
+class RedSnapper implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RequestScopedAnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RequestScopedAnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/RequestScopedAnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,18 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class, supportedScopes=RequestScoped.class)
+ at Target( { TYPE })
+ at Retention(RUNTIME)
+ at interface RequestScopedAnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Sheep.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Sheep.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Sheep.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,27 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Produces;
+import javax.webbeans.Production;
+
+ at Production
+class Sheep
+{
+   
+   public static boolean constructedCorrectly = false;
+   
+   @Produces
+   public static String foo = "foo";
+   
+   @Produces public static Double bar = 5.5;
+   
+   @Initializer
+   public Sheep(String foo, Double bar)
+   {
+      if (foo.equals(Sheep.foo) && bar.equals(Sheep.bar))
+      {
+         constructedCorrectly = true;
+      }
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanDefinitionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanDefinitionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanDefinitionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,327 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.DefinitionException;
+import javax.webbeans.NonexistentConstructorException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.unit.implementation.simple.OuterBean_Broken.InnerBean_Broken;
+import org.jboss.webbeans.tck.unit.implementation.simple.OuterBean_Broken.StaticInnerBean_Broken;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class SimpleBeanDefinitionTest extends AbstractTest
+{   
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   //*** BEAN CLASS CHECKS ****//
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.2")
+   public void testAbstractClassDeclaredInJavaIsNotAllowed()
+   {
+      createSimpleBean(Cow_Broken.class);
+   }
+   
+   @Test(groups="innerClass") @SpecAssertion(section="3.2")
+   public void testStaticInnerClassDeclaredInJavaAllowed()
+   {
+      createSimpleBean(StaticInnerBean_Broken.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups="innerClass") @SpecAssertion(section="3.2")
+   public void testNonStaticInnerClassDeclaredInJavaNotAllowed()
+   {
+      createSimpleBean(InnerBean_Broken.class);
+   }
+   
+   @SuppressWarnings("unchecked")
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.2")
+   public void testParameterizedClassDeclaredInJavaIsNotAllowed()
+   {
+      createSimpleBean(ParameterizedBean_Broken.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "interceptors", "decorators"}) @SpecAssertion(section="3.2")
+   public void testClassCannotBeInterceptorAndDecorator()
+   {
+      
+   }
+   
+   @Test(groups="stub")
+   public void testEntitiesNotDiscoveredAsSimpleBeans()
+   {
+      assert false;
+   }
+   
+   @Test
+   public void testClassesImplementingServletInterfacesNotDiscoveredAsSimpleBeans()
+   {
+      deployBeans(MockFilter.class, MockHttpSessionListener.class, MockServlet.class, MockServletContextListener.class, MockServletRequestListener.class);
+      assert manager.resolveByType(MockFilter.class).size() == 0;
+      assert manager.resolveByType(MockHttpSessionListener.class).size() == 0;
+      assert manager.resolveByType(MockServlet.class).size() == 0;
+      assert manager.resolveByType(MockServletContextListener.class).size() == 0;
+      assert manager.resolveByType(MockServletRequestListener.class).size() == 0;
+   }
+   
+   @Test
+   public void testClassesImplementingEnterpriseBeanInterfaceNotDiscoveredAsSimpleBean()
+   {
+      deployBeans(MockEnterpriseBean.class);
+      assert manager.resolveByType(MockEnterpriseBean.class).size() == 0;
+   }
+   
+   @Test
+   public void testClassExtendingUiComponentNotDiscoveredAsSimpleBean()
+   {
+      deployBeans(MockUIComponent.class);
+      assert manager.resolveByType(MockUIComponent.class).size() == 0;
+   }
+   
+   @Test(groups="stub")
+   public void testEjbsNotDiscoveredAsSimpleBean()
+   {
+      
+   }
+   
+   @Test(groups={"stub", "producerMethod", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testBeanDeclaredInXmlIgnoresProducerMethodDeclaredInJava()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "disposalMethod", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testBeanDeclaredInXmlIgnoresDisposalMethodDeclaredInJava()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "observerMethod", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testBeanDeclaredInXmlIgnoresObserverMethodDeclaredInJava()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testAbstractClassDeclaredInXmlIsNotAllowed()
+   {
+      
+   }
+   
+   @Test(groups={"stub", "innerClass", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testStaticInnerClassDeclaredInXmlAllowed()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "innerClass", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testNonStaticInnerClassDeclaredInXmlNotAllowed()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "webbeansxml"}) @SpecAssertion(section="3.2.4")
+   public void testParameterizedClassDeclaredInXmlIsNotAllowed()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "interceptors"}) @SpecAssertion(section="3.2.4")
+   public void testClassHasInterceptorInJavaMustHaveInterceptorInXml()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "interceptors"}) @SpecAssertion(section="3.2.4")
+   public void testClassHasDecoratorInJavaMustHaveDecoratorInXml()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="3.2.5.1")
+   public void testInitializerAnnotatedConstructor() throws Exception
+   {
+      deployBeans(Sheep.class);
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            manager.getInstanceByType(Sheep.class);
+            assert Sheep.constructedCorrectly;
+            
+         }
+      }.run();
+      
+   }
+   
+   @Test @SpecAssertion(section="3.2.5.1")
+   public void testImplicitConstructorUsed()
+   {
+      Bean<Order> order = createSimpleBean(Order.class);
+      // TODO Test this properly!
+   }
+   
+   @Test @SpecAssertion(section="3.2.5.1")
+   public void testEmptyConstructorUsed()
+   {
+      createSimpleBean(Donkey.class).create();
+      assert Donkey.constructedCorrectly;
+   }
+   
+   @Test @SpecAssertion(section="3.2.5.1")
+   public void testInitializerAnnotatedConstructorUsedOverEmptyConstuctor() throws Exception
+   {
+      deployBeans(Turkey.class);
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            manager.getInstanceByType(Turkey.class);
+            assert Turkey.constructedCorrectly;
+         }
+      }.run();
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.2.5.1")
+   public void testTooManyInitializerAnnotatedConstructor()
+   {
+      createSimpleBean(Goose_Broken.class);
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "disposalMethod"}) @SpecAssertion(section="3.2.5.1")
+   public void testConstructorHasDisposesParameter()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class, groups={"stub", "observerMethod"}) @SpecAssertion(section="3.2.5.1")
+   public void testConstructorHasObservesParameter()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="3.2.5.2")
+   public void testImplicitConstructorDeclaredInXmlUsed()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"})  @SpecAssertion(section="3.2.5.2")
+   public void testEmptyConstructorDeclaredInXmlUsed()
+   {
+      assert false;
+   }
+   
+   @Test(expectedExceptions=NonexistentConstructorException.class, groups={"stub", "webbeansxml"}) @SpecAssertion(section="3.2.5.2")
+   public void testConstructorDeclaredInXmlDoesNotExist()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "webbeansxml"}) @SpecAssertion(section="3.2.5.2")
+   public void testConstructorDeclaredInXmlIgnoresBindingTypesDeclaredInJava()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="3.2.5.3")
+   public void testBindingTypeAnnotatedConstructor() throws Exception
+   {
+      deployBeans(Duck.class);
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            manager.getInstanceByType(Duck.class);
+            assert Duck.constructedCorrectly;
+         }
+      }.run();
+   }
+   
+   @Test(groups="specializationInherit") @SpecAssertion(section="3.2.6")
+   public void testSpecializedClassInheritsBindingTypes()
+   {
+      Bean<Tractor> bean = createSimpleBean(Tractor.class);
+      assert bean.getBindings().size()==2;
+      assert bean.getBindings().contains( new AnnotationLiteral<Motorized>() {} );
+      assert bean.getBindings().contains( new AnnotationLiteral<HeavyDuty>() {} );
+   }
+   
+   @Test(groups="specializationInherit") @SpecAssertion(section="3.2.6")
+   public void testSpecializedClassInheritsName()
+   {
+      Bean<Tractor> bean = createSimpleBean(Tractor.class);
+      assert bean.getName()!=null;
+      assert bean.getName().equals("plough");
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testLessSpecializedClassNotInstantiated()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"},expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.2.6")
+   public void testSpecializedClassMustExtendAnotherWebBean()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testSpecializedClassDeclaredInXmlInheritsBindingTypes()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testSpecializedClassDeclaredInXmlInheritsName()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.2.6")
+   public void testLessSpecializedClassDeclaredInXmlNotInstantiated()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="3.2")
+   public void testDependentScopedBeanCanHavePublicField() throws Exception
+   {
+      deployBeans(Tiger.class);
+      new RunInDependentContext()
+      {
+         
+         @Override
+         protected void execute() throws Exception
+         {
+            assert manager.getInstanceByType(Tiger.class).name.equals("pete");
+         }
+         
+      }.run();
+      
+   }
+   
+   @Test(expectedExceptions=DefinitionException.class) @SpecAssertion(section="3.2")
+   public void testNonDependentScopedBeanCanNotHavePublicField()
+   {
+      deployBeans(Leopard_Broken.class);
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanLifecycleTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanLifecycleTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SimpleBeanLifecycleTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,183 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class SimpleBeanLifecycleTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+	
+	@Test(groups="beanConstruction") @SpecAssertion(section="3.1.3")
+	public void testInjectionOfParametersIntoBeanConstructor()
+	{
+	   Bean<FishPond> goldfishPondBean = createSimpleBean(FishPond.class);
+	   Bean<Goldfish> goldfishBean = createSimpleBean(Goldfish.class);
+	   manager.addBean(goldfishBean);
+	   manager.addBean(goldfishPondBean);
+	   FishPond fishPond = goldfishPondBean.create();
+	   assert fishPond.goldfish != null;
+	}
+	
+	@Test(groups={"stub", "specialization"}) @SpecAssertion(section="3.1.4")
+   public void testSpecializedBeanAlwaysUsed()
+   {
+      // TODO Placeholder
+      assert false;
+   }
+	
+   @Test(groups="beanLifecycle") @SpecAssertion(section="5.3")
+   public void testCreateReturnsInstanceOfBean()
+   {
+      Bean<RedSnapper> bean = createSimpleBean(RedSnapper.class);
+      assert bean.create() instanceof RedSnapper;
+   }
+   
+   @Test(groups={"stub", "beanLifecycle", "interceptors"}) @SpecAssertion(section="5.3")
+   public void testCreateBindsInterceptorStack()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "beanLifecycle", "decorators"}) @SpecAssertion(section="5.3")
+   public void testCreateBindsDecoratorStack()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "beanLifecycle", "commonAnnotations"}) @SpecAssertion(section="5.3")
+   public void testCreateInjectsEjb()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "beanLifecycle", "commonAnnotations"}) @SpecAssertion(section="5.3")
+   public void testCreateInjectsPersistenceContext()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "beanLifecycle", "commonAnnotations"}) @SpecAssertion(section="5.3")
+   public void testCreateInjectsResource()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"beanLifecycle", "lifecycleCallbacks"}) @SpecAssertion(section="5.3")
+   public void testPostConstructPreDestroy() throws Exception
+   {
+      Bean<FarmOffice> farmOfficeBean = createSimpleBean(FarmOffice.class);
+      Bean<Farm> farmBean = createSimpleBean(Farm.class);
+      manager.addBean(farmOfficeBean);
+      manager.addBean(farmBean);
+      Farm farm = farmBean.create();
+      assert farm.founded!=null;
+      assert farm.initialStaff==20;
+      assert farm.closed==null;
+      farmBean.destroy(farm);
+      assert farm.closed!=null;
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testSubClassInheritsPostConstructOnSuperclass() throws Exception
+   {
+      OrderProcessor.postConstructCalled = false;
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            Bean<CdOrderProcessor> bean = createSimpleBean(CdOrderProcessor.class);
+            bean.create();
+         }
+      }.run();
+      assert OrderProcessor.postConstructCalled;
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testSubClassInheritsPreDestroyOnSuperclass() throws Exception
+   {
+      OrderProcessor.preDestroyCalled = false;
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            Bean<CdOrderProcessor> bean = createSimpleBean(CdOrderProcessor.class);
+            CdOrderProcessor instance = bean.create();
+            bean.destroy(instance);
+         }
+      }.run();
+      assert OrderProcessor.preDestroyCalled;
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testSubClassDoesNotInheritPostConstructOnSuperclassBlockedByIntermediateClass() throws Exception
+   {
+      
+      OrderProcessor.postConstructCalled = false;
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            Bean<NovelOrderProcessor> bean = createSimpleBean(NovelOrderProcessor.class);
+            bean.create();
+         }
+      }.run();
+      assert !OrderProcessor.postConstructCalled;
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testSubClassDoesNotInheritPreDestroyConstructOnSuperclassBlockedByIntermediateClass() throws Exception
+   {
+      OrderProcessor.preDestroyCalled = false;
+      new RunInDependentContext()
+      {
+         @Override
+         protected void execute() throws Exception
+         {
+            Bean<NovelOrderProcessor> bean = createSimpleBean(NovelOrderProcessor.class);
+            NovelOrderProcessor instance = bean.create();
+            bean.destroy(instance);
+         }
+      }.run();
+      assert !OrderProcessor.preDestroyCalled;
+
+   }
+   
+   @Test(groups="injection") @SpecAssertion(section="5.3")
+   public void testCreateInjectsFieldsDeclaredInJava()
+   {
+      Bean<TunaFarm> tunaFarmBean = createSimpleBean(TunaFarm.class);
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      TunaFarm tunaFarm = tunaFarmBean.create();
+      assert tunaFarm.tuna != null;
+   }
+   
+   @Test(groups="injection") 
+   public void testFieldMissingBindingAnnotationsAreNotInjected()
+   {
+      Bean<TunaFarm> tunaFarmBean = createSimpleBean(TunaFarm.class);
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      TunaFarm tunaFarm = tunaFarmBean.create();
+      assert tunaFarm.notInjectedTuna != manager.getInstance(tunaBean);
+   }
+	
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Synchronous.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Synchronous.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Synchronous.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Synchronous
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SynchronousAnnotationLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SynchronousAnnotationLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/SynchronousAnnotationLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.AnnotationLiteral;
+
+class SynchronousAnnotationLiteral extends AnnotationLiteral<Synchronous> implements Synchronous
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tiger.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tiger.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tiger.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Tiger
+{
+   
+   public String name = "pete";
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tractor.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tractor.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tractor.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Specializes;
+
+ at Modern @Motorized @Specializes
+class Tractor extends Plough
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/TunaFarm.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/TunaFarm.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/TunaFarm.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Current;
+import javax.webbeans.Production;
+
+ at Production
+class TunaFarm
+{
+
+   @SuppressWarnings("unused")
+   @Current
+   public Tuna tuna;
+   
+   public Tuna notInjectedTuna = new Tuna();
+
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Turkey.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Turkey.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/Turkey.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,31 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import javax.webbeans.Initializer;
+import javax.webbeans.Produces;
+import javax.webbeans.Production;
+
+ at Production
+class Turkey
+{
+   
+   @Produces public static String foo = "foo";
+   
+   @Produces static Integer bar = 1;
+   
+   public static boolean constructedCorrectly = false;
+   
+   public Turkey()
+   {
+      
+   }
+   
+   @Initializer
+   public Turkey(String foo, Integer bar)
+   {
+      if (foo.equals(Turkey.foo) && bar.equals(Turkey.bar))
+      {
+         constructedCorrectly = true;
+      }
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/WrappedSimpleBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/WrappedSimpleBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/implementation/simple/WrappedSimpleBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.implementation.simple;
+
+import java.io.Serializable;
+
+import javax.webbeans.Named;
+import javax.webbeans.SessionScoped;
+
+ at SessionScoped
+ at Named("Fred")
+class WrappedSimpleBean implements Serializable
+{
+   public WrappedSimpleBean() {
+      
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractCow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractCow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractCow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Produces;
+import javax.webbeans.RequestScoped;
+
+abstract class AbstractCow
+{
+   
+   @Produces @RequestScoped @Smelly @FarmAnimalDeploymentType Dung getDung()
+   {
+      return new Dung();
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractFarmHouse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractFarmHouse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractFarmHouse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Observes;
+
+abstract class AbstractFarmHouse
+{
+   
+   public void observeTameCows(@Observes @Tame Cow cow)
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractHorse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractHorse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractHorse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Produces;
+import javax.webbeans.RequestScoped;
+
+abstract class AbstractHorse
+{
+   
+   @Produces @Smelly @RequestScoped @FarmAnimalDeploymentType private Dung dung = new Dung();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractKennel.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractKennel.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractKennel.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Produces;
+
+class AbstractKennel
+{
+ 
+   @Produces @Cuddly public Dog get()
+   {
+      return new Dog() {};
+   }
+   
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractStable.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractStable.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AbstractStable.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Produces;
+import javax.webbeans.RequestScoped;
+
+abstract class AbstractStable
+{
+   
+   private @Produces @Cuddly Horse horse = new Horse();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Realizes;
+
+ at Realizes @AnotherDeploymentType
+class Cow extends AbstractCow
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cuddly.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cuddly.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Cuddly.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at interface Cuddly
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dog.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dog.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dog.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+interface Dog
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dung.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dung.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Dung.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+class Dung
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmAnimalDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmAnimalDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmAnimalDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface FarmAnimalDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmHouse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmHouse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/FarmHouse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+class FarmHouse extends AbstractFarmHouse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Horse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Horse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Horse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+ at AnotherDeploymentType
+class Horse extends AbstractHorse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/LabradorKennel.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/LabradorKennel.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/LabradorKennel.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Realizes;
+
+ at Realizes
+class LabradorKennel extends AbstractKennel
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/RealizationTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,130 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static org.jboss.webbeans.tck.impl.util.Reflections.annotationSetMatches;
+
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.RequestScoped;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class RealizationTest extends AbstractTest
+{
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasSameScope()
+   {
+      deployBeans(Cow.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasScopeOfRealizingClass()
+   {
+      deployBeans(Cow.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getDeploymentType().equals(AnotherDeploymentType.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasSameBindings()
+   {
+      deployBeans(Cow.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().iterator().next().annotationType().equals(Smelly.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasBindingsOfMethodAndRealizingType()
+   {
+      deployBeans(TameCow.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().size() == 2;
+      assert annotationSetMatches(manager.resolveByType(Dung.class).iterator().next().getBindings(), Smelly.class, Tame.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasSameStereotypes()
+   {
+      deployBeans(LabradorKennel.class);
+      assert manager.resolveByType(Dog.class).size() == 1;
+      assert manager.resolveByType(Dog.class).iterator().next().getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerMethodHasSameInterceptorBindings()
+   {
+      assert false;
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasSameScope()
+   {
+      deployBeans(Horse.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasScopeOfRealizingClass()
+   {
+      deployBeans(Horse.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getDeploymentType().equals(AnotherDeploymentType.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasSameBindings()
+   {
+      deployBeans(Horse.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().iterator().next().annotationType().equals(Smelly.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasBindingsOfMethodAndRealizingType()
+   {
+      deployBeans(TameHorse.class);
+      assert manager.resolveByType(Dung.class).size() == 1;
+      assert manager.resolveByType(Dung.class).iterator().next().getBindings().size() == 2;
+      assert annotationSetMatches(manager.resolveByType(Dung.class).iterator().next().getBindings(), Smelly.class, Tame.class);
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasSameStereotypes()
+   {
+      deployBeans(Stable.class);
+      assert manager.resolveByType(Horse.class).size() == 1;
+      assert manager.resolveByType(Horse.class).iterator().next().getScopeType().equals(RequestScoped.class);
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.1")
+   public void testRealizedBeanWithProducerFieldHasSameInterceptorBindings()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.1")
+   public void testDisposalMethodInherited()
+   {
+      assert false;
+   }
+   
+   @Test(groups="stub") @SpecAssertion(section="4.1")
+   public void testRealizedDisposalMethodHasBindingsOfMethodAndRealizingType()
+   {
+      assert false;
+   }
+   
+   @Test(groups="broken") @SpecAssertion(section="4.1")
+   public void testObserverMethodInheritedAndHasSameBindings()
+   {
+      deployBeans(FarmHouse.class);
+      assert manager.resolveObservers(new Cow(), new AnnotationLiteral<Tame>(){}).size() == 1;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Smelly.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Smelly.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Smelly.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Smelly
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Stable.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Stable.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Stable.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+public class Stable
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Tame.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Tame.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/Tame.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Tame
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameCow.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameCow.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameCow.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Realizes;
+
+ at Realizes @Tame
+class TameCow extends Cow
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameHorse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameHorse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/realization/TameHorse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.inheritance.realization;
+
+import javax.webbeans.Realizes;
+
+ at Realizes @Tame
+class TameHorse extends AbstractHorse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/Farmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/Farmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/Farmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.inheritance.specialization;
+
+public class Farmer
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/OrganicFarmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/OrganicFarmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/OrganicFarmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.inheritance.specialization;
+
+import javax.webbeans.Specializes;
+
+ at Specializes
+public class OrganicFarmer extends Farmer
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/SpecializationTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/SpecializationTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/inheritance/specialization/SpecializationTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,23 @@
+package org.jboss.webbeans.tck.unit.inheritance.specialization;
+
+import javax.webbeans.InconsistentSpecializationException;
+
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class SpecializationTest
+{
+   
+   @Test(expectedExceptions=InconsistentSpecializationException.class, groups={"stub", "specialization"})
+   public void testInconsistentSpecialization()
+   {
+      
+   }
+   
+   @Test @SpecAssertion(section="4.3")
+   public void testSpecializedBeanDirectlyExtendsLowerPriorityBean()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Chunky.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Chunky.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Chunky.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Chunky
+{
+   
+   boolean realChunky();
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Cod.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Cod.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Cod.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Whitefish
+ at Chunky(realChunky=true)
+ at Named("whitefish")
+class Cod implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Haddock.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Haddock.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Haddock.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Haddock implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/InstantiationByNameTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/InstantiationByNameTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/InstantiationByNameTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,85 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.AmbiguousDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class InstantiationByNameTest extends AbstractTest
+{
+   
+   @Test(groups="resolution") @SpecAssertion(section="4.10")
+   public void testNoWebBeansFound() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      
+      assert manager.getInstanceByName("foo") == null;
+   }
+   
+   @Test(expectedExceptions=AmbiguousDependencyException.class) @SpecAssertion(section="4.10.1")
+   public void testAmbiguousDependencies() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      manager.getInstanceByName("whitefish");
+   }
+   
+   @Test(groups={"resolution", "beanLifecycle"}) @SpecAssertion(section="4.10.1")
+   public void testGetInstanceByName()
+   {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      Bean<SeaBass> seaBassBean = createSimpleBean(SeaBass.class);
+      Bean<Haddock> haddockBean = createSimpleBean(Haddock.class);
+      Bean<Plaice> plaiceBean = createSimpleBean(Plaice.class);
+      
+      manager.addBean(tunaBean);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      manager.addBean(haddockBean);
+      manager.addBean(seaBassBean);
+      manager.addBean(plaiceBean);
+      
+      try
+      {
+         activateDependentContext();
+         assert manager.getInstanceByName("salmon") instanceof Salmon;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+   
+   @Test(groups={"stub", "resolution", "el"}) @SpecAssertion(section="4.10")
+   public void testGetInstanceByNameCalledOncePerDistinctNameInElExpression()
+   {
+      assert false;
+   }
+   
+   /*
+
+   @Test(groups="el") @SpecAssertion(section="4.10")
+   public void test
+   {
+      assert false;
+   }
+
+    */
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Plaice.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Plaice.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Plaice.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Named;
+
+ at AnotherDeploymentType
+ at Whitefish
+ at Named("whitefish")
+final class Plaice implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ResolutionByNameTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ResolutionByNameTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ResolutionByNameTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,168 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.AmbiguousDependencyException;
+import javax.webbeans.UnsatisfiedDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class ResolutionByNameTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+
+   /**
+    * The getInstanceByName() method must:
+    * 
+    *  • Identify the Web Bean by calling Manager.resolveByName(), passing the name.
+    *  • If resolveByName() returned an empty set, return a null value.
+    *  • Otherwise, if exactly one Web Bean was returned, obtain an instance of the 
+    *    Web Bean by calling Manager.getInstance(), passing the Bean instance representing 
+    *    the Web Bean
+    */
+   @Test(groups={"stub", "el"}) @SpecAssertion(section="5.11")
+   public void testELResolver()
+   {           
+      assert manager.getInstanceByName("nonexistant") == null;
+                
+      try
+      {
+         activateDependentContext();
+         Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);      
+         manager.addBean(salmonBean);      
+         assert manager.getInstanceByName("salmon") instanceof Salmon;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   /**
+    *  • Otherwise, if resolveByName() returned more than one Web Bean, throw an 
+    *    AmbiguousDependencyException.
+    */
+   @Test(expectedExceptions=AmbiguousDependencyException.class) @SpecAssertion(section="5.11")
+   public void testDuplicateNamedBeans()
+   {
+      try
+      {
+         activateDependentContext();
+         
+         Bean<Cod> codBean = createSimpleBean(Cod.class);
+         Bean<Sole> soleBean = createSimpleBean(Sole.class);
+         manager.addBean(codBean);
+         manager.addBean(soleBean);
+         
+         assert manager.resolveByName("whitefish").size() == 2;
+         manager.getInstanceByName("whitefish");
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+   
+   @Test(groups={"stub", "el"})  @SpecAssertion(section="5.11.2")
+   public void testELResolverRegisteredWithJsf()
+   {
+      assert false;
+   }
+   
+   @Test(groups={"stub", "el"})  @SpecAssertion(section="5.11.2")
+   public void testELResolverRegisteredWithServlet()
+   {
+      assert false;
+   }
+   
+   @Test @SpecAssertion(section="5.11.1")
+   public void testNamedBasedResolution()
+   {
+      
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      Bean<SeaBass> seaBassBean = createSimpleBean(SeaBass.class);
+      Bean<Haddock> haddockBean = createSimpleBean(Haddock.class);
+      Bean<Plaice> plaiceBean = createSimpleBean(Plaice.class);
+      
+      manager.addBean(tunaBean);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      manager.addBean(haddockBean);
+      manager.addBean(seaBassBean);
+      
+      assert manager.resolveByName("salmon").size() == 1;
+      assert manager.resolveByName("salmon").contains(salmonBean);
+      
+      assert manager.resolveByName("whitefish").size() == 2;
+      assert manager.resolveByName("whitefish").contains(codBean);
+      assert manager.resolveByName("whitefish").contains(soleBean);
+      
+      manager.addBean(plaiceBean);
+      
+      assert manager.resolveByName("whitefish").size() == 1;
+      assert manager.resolveByName("whitefish").contains(plaiceBean);
+   }
+   
+   @Test(groups="resolution") @SpecAssertion(section="5.11.1")
+   public void testNoWebBeansFound() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      
+      assert manager.resolveByName("foo").size() == 0;
+   }
+   
+   /**
+    * The following algorithm must be used by the Web Bean manager when resolving a Web Bean by name:
+    * 
+    *  • The Web Bean manager identifies the set of matching enabled Web Beans which have the given name.
+    *  • Next, the Web Bean manager examines the deployment types of the matching Web Beans, as defined 
+    *    in Section 2.5.7, “Deployment type precedence”, and returns the set of Web Beans with the 
+    *    highest precedence deployment type that occurs in the set. If there are no matching Web Beans, 
+    *    an empty set is returned.
+    */
+   @Test(groups="stub") @SpecAssertion(section="5.11.1")
+   public void testOnlyHighestPrecedenceResolved()
+   {
+      // Both Cod and Plaice are named "whitefish" - Plaice has the highest deployment type (AnotherDeploymentType)
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Plaice> plaiceBean = createSimpleBean(Plaice.class);
+      manager.addBean(codBean);
+      manager.addBean(plaiceBean); 
+      
+      assert manager.resolveByName("whitefish").size() == 1;
+      assert !manager.resolveByName("whitefish").contains(codBean);
+      assert manager.resolveByName("whitefish").contains(plaiceBean);
+   }
+   
+   /*
+
+   @Test(groups="el") @SpecAssertion(section="5.11")
+   public void test
+   {
+      assert false;
+   }
+
+    */
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Salmon.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Salmon.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Salmon.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Salmon implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ScottishFish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ScottishFish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/ScottishFish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+
+interface ScottishFish extends Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/SeaBass.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/SeaBass.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/SeaBass.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at Production
+ at RequestScoped
+class SeaBass implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Sole.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Sole.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Sole.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Whitefish
+ at Named("whitefish")
+class Sole implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Whitefish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Whitefish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/byname/Whitefish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.lookup.byname;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Whitefish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/ClientProxyTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/ClientProxyTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/ClientProxyTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,101 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.DefinitionException;
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class ClientProxyTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+
+   @Test(groups = "configuration().getBeans()")
+   @SpecAssertion(section = { "5.4" })
+   public void testClientProxyUsedForNormalScope()
+   {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      Tuna tuna = manager.getInstance(tunaBean);
+      assert configuration().getBeans().isProxy(tuna);
+   }
+
+   @Test(groups = "configuration().getBeans()")
+   @SpecAssertion(section = { "5.4" })
+   public void testClientProxyNotUsedForPseudoScope()
+   {
+      Bean<Fox> foxBean = createSimpleBean(Fox.class);
+      try
+      {
+         activateDependentContext();
+         Fox fox = manager.getInstance(foxBean);
+         assert !configuration().getBeans().isProxy(fox);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+   
+   @Test(groups = "configuration().getBeans()")
+   @SpecAssertion(section = "5.4")
+   public void testSimpleWebBeanClientProxyIsSerializable() throws IOException, ClassNotFoundException
+   {
+      Bean<TunedTuna> tunaBean = createSimpleBean(TunedTuna.class);
+      manager.addBean(tunaBean);
+      TunedTuna tuna = manager.getInstance(tunaBean);
+      assert configuration().getBeans().isProxy(tuna);
+      byte[] bytes = serialize(tuna);
+      tuna = (TunedTuna) deserialize(bytes);
+      assert configuration().getBeans().isProxy(tuna);
+      assert tuna.getState().equals("tuned");
+   }
+
+   @Test(groups = "configuration().getBeans()", expectedExceptions = UnproxyableDependencyException.class)
+   @SpecAssertion(section = "5.4.1")
+   public void testInjectionPointWithUnproxyableTypeWhichResolvesToNormalScopedWebBean()
+   {
+      Bean<FinalTuna_Broken> tunaBean = createSimpleBean(FinalTuna_Broken.class);
+      manager.addBean(tunaBean);
+      @SuppressWarnings("unused")
+      FinalTuna_Broken tuna = manager.getInstanceByType(FinalTuna_Broken.class);      
+      assert false;
+   }
+
+   @Test(groups = "configuration().getBeans()")
+   @SpecAssertion(section = "5.4.2")
+   public void testClientProxyInvocation()
+   {
+      Bean<TunedTuna> tunaBean = createSimpleBean(TunedTuna.class);
+      manager.addBean(tunaBean);
+      TunedTuna tuna = manager.getInstance(tunaBean);
+      assert configuration().getBeans().isProxy(tuna);
+      assert tuna.getState().equals("tuned");
+   }
+   
+   @Test(groups = "configuration().getBeans()", expectedExceptions=DefinitionException.class)
+   public void testGettingUnknownBeanFails() {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      @SuppressWarnings("unused")
+      Tuna tuna = manager.getInstance(tunaBean);
+      assert false;
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/FinalTuna_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/FinalTuna_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/FinalTuna_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+final class FinalTuna_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Fox.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Fox.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Fox.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Fox
+{
+   
+   public String getName()
+   {
+      return "gavin";
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/TunedTuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/TunedTuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/clientProxy/TunedTuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.lookup.clientProxy;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class TunedTuna
+{
+   public String getState()
+   {
+      return "tuned";
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithFinalBoundField_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithFinalBoundField_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithFinalBoundField_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+
+class BeanWithFinalBoundField_Broken
+{
+   
+   @Current
+   public final Tuna tuna = null;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithStaticBoundField_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithStaticBoundField_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/BeanWithStaticBoundField_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+
+class BeanWithStaticBoundField_Broken
+{
+   
+   @Current
+   public static Tuna tuna;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/DeluxeHenHouse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/DeluxeHenHouse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/DeluxeHenHouse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+
+public class DeluxeHenHouse extends HenHouse
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouseProducer_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouseProducer_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouseProducer_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Produces;
+
+class FarmHouseProducer_Broken
+{
+   
+   @Produces public Integer getNumberOfBedrooms()
+   {
+      return null;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouse_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouse_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FarmHouse_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+
+class FarmHouse_Broken
+{
+
+   @Current
+   public int noOfBedrooms;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Fox.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Fox.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Fox.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Dependent;
+
+ at Dependent
+class Fox
+{
+   
+   public String getName()
+   {
+      return "gavin";
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FoxRun.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FoxRun.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/FoxRun.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+
+class FoxRun
+{
+   
+   @Current
+   public Fox fox;
+   
+   @Current
+   public Fox anotherFox;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/HenHouse.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/HenHouse.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/HenHouse.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+
+public class HenHouse
+{
+   
+   @Current
+   public Fox fox;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/InjectionTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/InjectionTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/InjectionTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,153 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import static org.jboss.webbeans.tck.impl.WebBeansTCKImpl.configuration;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.ContextNotActiveException;
+import javax.webbeans.DefinitionException;
+import javax.webbeans.NonexistentFieldException;
+import javax.webbeans.NullableDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class InjectionTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+
+   @Test(groups = { "injection", "producerMethod" })
+   @SpecAssertion(section = "5.2")
+   public void testInjectionPerformsBoxingIfNecessary() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducer = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducer);
+      Bean<SpiderNest> spiderNestBean = createSimpleBean(SpiderNest.class);
+      manager.addBean(createProducerMethodBean(SpiderProducer.class.getMethod("getWolfSpiderSize"), spiderProducer));
+      SpiderNest spiderNest = spiderNestBean.create();
+      assert spiderNest.numberOfSpiders != null;
+      assert spiderNest.numberOfSpiders.equals(4);
+   }
+
+   @Test(groups = { "injection", "producerMethod" }, expectedExceptions = NullableDependencyException.class)
+   @SpecAssertion(section = "5.2")
+   public void testPrimitiveInjectionPointResolvesToNullableWebBean() throws Exception
+   {
+      deployBeans(FarmHouseProducer_Broken.class, FarmHouse_Broken.class);
+   }
+
+   @Test(groups = { "injection", "clientProxy" }, expectedExceptions = ContextNotActiveException.class)
+   @SpecAssertion(section = "5.3")
+   public void testInvokeNormalInjectedWebBeanWhenContextNotActive()
+   {
+      Bean<TunaFarm> tunaFarmBean = createSimpleBean(TunaFarm.class);
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      TunaFarm tunaFarm = tunaFarmBean.create();
+      assert tunaFarm.tuna != null;
+      configuration().getContexts().setInactive(configuration().getContexts().getRequestContext());
+      tunaFarm.tuna.getName();
+   }
+
+   @Test(groups = "injection")
+   @SpecAssertion(section = "5.3")
+   public void testInvokeDependentScopeWhenContextNotActive()
+   {
+      Bean<FoxRun> foxRunBean = createSimpleBean(FoxRun.class);
+      Bean<Fox> foxBean = createSimpleBean(Fox.class);
+      manager.addBean(foxBean);
+      FoxRun foxRun = foxRunBean.create();
+      assert foxRun.fox.getName().equals("gavin");
+   }
+
+   @Test(groups = "injection", expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.7")
+   public void testInjectingStaticField()
+   {
+      Bean<BeanWithStaticBoundField_Broken> bean = createSimpleBean(BeanWithStaticBoundField_Broken.class);
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      bean.create();
+   }
+
+   @Test(groups = "injection", expectedExceptions = DefinitionException.class)
+   @SpecAssertion(section = "3.7")
+   public void testInjectingFinalField()
+   {
+      Bean<BeanWithFinalBoundField_Broken> bean = createSimpleBean(BeanWithFinalBoundField_Broken.class);
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      bean.create();
+   }
+   
+   @Test @SpecAssertion(section="4.2")
+   public void testFieldDeclaredInSuperclassInjected() throws Exception
+   {
+      deployBeans(Fox.class, DeluxeHenHouse.class, HenHouse.class);
+      
+      new RunInDependentContext()
+      {
+        @Override
+         protected void execute() throws Exception
+         {
+           DeluxeHenHouse henHouse = manager.getInstanceByType(DeluxeHenHouse.class);
+           assert henHouse.fox != null;
+           assert henHouse.fox.getName().equals("gavin");
+         }
+      }.run();
+   }
+
+   @Test(groups = { "stub", "injection", "webbeansxml" })
+   @SpecAssertion(section = "3.7.2")
+   public void testInjectFieldsDeclaredInXml()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "injection", "webbeansxml" })
+   @SpecAssertion(section = "3.7.2")
+   public void testInjectedFieldDeclaredInXmlIgnoresJavaAnnotations()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "injection", "webbeansxml" })
+   @SpecAssertion(section = "3.7.2")
+   public void testInjectedFieldDeclaredInXmlAssumesCurrent()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "injection", "webbeansxml" }, expectedExceptions = NonexistentFieldException.class)
+   @SpecAssertion(section = "3.7.2")
+   public void testNonexistentFieldDefinedInXml()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "stub", "injection", "webbeansxml" })
+   @SpecAssertion(section = "3.7.2")
+   public void testInjectFieldsDeclaredInXmlAndJava()
+   {
+      assert false;
+   }
+
+   /*
+    * 
+    * @Test(groups="injection") @SpecAssertion(section="4.2") public void test {
+    * assert false; }
+    */
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderNest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderNest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderNest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,16 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Initializer;
+
+class SpiderNest
+{
+   
+   public Integer numberOfSpiders;
+   
+   @Initializer
+   public SpiderNest(Integer numberOfSpiders)
+   {
+      this.numberOfSpiders = numberOfSpiders; 
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Produces;
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   @Produces public int getWolfSpiderSize()
+   {
+      return 4;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/TunaFarm.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/TunaFarm.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injection/TunaFarm.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,17 @@
+package org.jboss.webbeans.tck.unit.lookup.injection;
+
+import javax.webbeans.Current;
+import javax.webbeans.Production;
+
+ at Production
+class TunaFarm
+{
+
+   @SuppressWarnings("unused")
+   @Current
+   public Tuna tuna;
+   
+   public Tuna notInjectedTuna = new Tuna();
+
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotype.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotype.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotype.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.RequestScoped;
+import javax.webbeans.Stereotype;
+
+ at Stereotype(requiredTypes=Animal.class)
+ at Target( { TYPE, METHOD, FIELD })
+ at Retention(RUNTIME)
+ at RequestScoped
+ at interface AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotypeAnnotationLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotypeAnnotationLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/AnimalStereotypeAnnotationLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import javax.webbeans.AnnotationLiteral;
+
+class AnimalStereotypeAnnotationLiteral extends AnnotationLiteral<AnimalStereotype> implements AnimalStereotype
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/BeanWithInjectionPointMetadata.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/BeanWithInjectionPointMetadata.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/BeanWithInjectionPointMetadata.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * 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
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import javax.webbeans.Current;
+import javax.webbeans.InjectionPoint;
+
+/**
+ * Test bean with injection point on the constructor of the bean
+ * 
+ * @author David Allen
+ * 
+ */
+class BeanWithInjectionPointMetadata
+{
+   @Current
+   private InjectionPoint injectedMetadata;
+
+   public InjectionPoint getInjectedMetadata()
+   {
+      return injectedMetadata;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/ConstructorInjectionPointBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/ConstructorInjectionPointBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/ConstructorInjectionPointBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * 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
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import javax.webbeans.Current;
+import javax.webbeans.Initializer;
+
+/**
+ * Test bean to inject a bean using injection point metadata into a constructor
+ * 
+ * @author David Allen
+ * 
+ */
+class ConstructorInjectionPointBean
+{
+   private BeanWithInjectionPointMetadata injectedBean;
+
+   @Initializer
+   public ConstructorInjectionPointBean(@Current BeanWithInjectionPointMetadata injectedBean)
+   {
+      this.injectedBean = injectedBean;
+   }
+   
+   public BeanWithInjectionPointMetadata getInjectedBean()
+   {
+      return injectedBean;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/FieldInjectionPointBean.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/FieldInjectionPointBean.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/FieldInjectionPointBean.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * 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
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import javax.webbeans.Current;
+import javax.webbeans.RequestScoped;
+
+/**
+ * Test bean to inject another bean which uses injection point metadata in a
+ * field
+ * 
+ * @author David Allen
+ * 
+ */
+ at RequestScoped
+class FieldInjectionPointBean
+{
+   @Current @AnimalStereotype
+   private BeanWithInjectionPointMetadata injectedBean;
+
+   public BeanWithInjectionPointMetadata getInjectedBean()
+   {
+      return injectedBean;
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/InjectionPointTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/InjectionPointTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/injectionpoint/InjectionPointTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,298 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * 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
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.tck.unit.lookup.injectionpoint;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.webbeans.Current;
+import javax.webbeans.Dependent;
+import javax.webbeans.InjectionPoint;
+import javax.webbeans.Standard;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.CurrentBinding;
+import org.testng.annotations.Test;
+
+/**
+ * Injection point metadata tests
+ * 
+ * @author David Allen
+ * 
+ */
+ at SpecVersion("20081222")
+public class InjectionPointTest extends AbstractTest
+{
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetBean()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+
+         Set<Bean<FieldInjectionPointBean>> resolvedBeans = manager.resolveByType(FieldInjectionPointBean.class);
+         assert resolvedBeans.size() == 1;
+         assert beanWithInjectionPoint.getInjectedMetadata().getBean().equals(resolvedBeans.iterator().next());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetType()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert beanWithInjectionPoint.getInjectedMetadata().getType().equals(BeanWithInjectionPointMetadata.class);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetBindingTypes()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         Set<Annotation> bindingTypes = beanWithInjectionPoint.getInjectedMetadata().getBindings();
+         assert bindingTypes.size() == 1;
+         assert Current.class.isAssignableFrom(bindingTypes.iterator().next().annotationType());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetMemberField()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert Field.class.isAssignableFrom(beanWithInjectionPoint.getInjectedMetadata().getMember().getClass());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "stub", "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetMemberMethod()
+   {
+      assert false;
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetMemberConstructor()
+   {
+      deployBeans(ConstructorInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         ConstructorInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(ConstructorInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert Constructor.class.isAssignableFrom(beanWithInjectionPoint.getInjectedMetadata().getMember().getClass());
+
+         // Since the type and bindings must correspond to the parameter, check
+         // them
+         assert beanWithInjectionPoint.getInjectedMetadata().getType().equals(BeanWithInjectionPointMetadata.class);
+         assert beanWithInjectionPoint.getInjectedMetadata().getBindings().contains(new CurrentBinding());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetAnnotation()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert beanWithInjectionPoint.getInjectedMetadata().getAnnotation(AnimalStereotype.class) != null;
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testGetAnnotations()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         Set<Annotation> annotations = new HashSet<Annotation>(Arrays.asList(beanWithInjectionPoint.getInjectedMetadata().getAnnotations()));
+         assert annotations.size() > 0;
+         assert annotations.contains(new CurrentBinding());
+         assert annotations.contains(new AnimalStereotypeAnnotationLiteral());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testStandardDeployment()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert beanWithInjectionPoint.getInjectedMetadata().getClass().isAnnotationPresent(Standard.class);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testDependentScope()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert beanWithInjectionPoint.getInjectedMetadata().getClass().isAnnotationPresent(Dependent.class);
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testApiTypeInjectionPoint()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert InjectionPoint.class.isAssignableFrom(beanWithInjectionPoint.getInjectedMetadata().getClass());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+
+   @Test(groups = { "injectionPoint" })
+   @SpecAssertion(section = "5.11")
+   public void testCurrentBinding()
+   {
+      deployBeans(FieldInjectionPointBean.class, BeanWithInjectionPointMetadata.class);
+
+      // Get an instance of the bean which has another bean injected into it
+      try
+      {
+         activateDependentContext();
+         FieldInjectionPointBean beanWithInjectedBean = manager.getInstanceByType(FieldInjectionPointBean.class, new CurrentBinding());
+         BeanWithInjectionPointMetadata beanWithInjectionPoint = beanWithInjectedBean.getInjectedBean();
+         assert beanWithInjectionPoint.getInjectedMetadata() != null;
+         assert beanWithInjectionPoint.getInjectedMetadata().getBindings().contains(new CurrentBinding());
+      }
+      finally
+      {
+         deactivateDependentContext();
+      }
+   }
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/FishFarmOffice.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/FishFarmOffice.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/FishFarmOffice.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.manager;
+
+import javax.webbeans.Current;
+import javax.webbeans.manager.Manager;
+
+class FishFarmOffice
+{
+   
+   @Current public Manager manager;
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/ManagerTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/ManagerTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/manager/ManagerTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.lookup.manager;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.testng.annotations.Test;
+
+public class ManagerTest extends AbstractTest
+{
+   
+   @Test(groups={"manager", "injection", "deployment"}) @SpecAssertion(section="5.8")
+   public void testInjectingManager()
+   {
+      FishFarmOffice fishFarmOffice = createSimpleBean(FishFarmOffice.class).create();
+      assert fishFarmOffice.manager != null;
+   }
+   
+
+   @Test(groups={"stub", "manager", "ejb3"}) @SpecAssertion(section="5.8")
+   public void testManagerLookupInJndi()
+   {
+      assert false;
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Animal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Animal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Animal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+interface Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnimalFarmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnimalFarmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnimalFarmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+class AnimalFarmer extends Farmer<Animal>
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentType.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentType.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentType.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.DeploymentType;
+
+ at Target( { TYPE, METHOD })
+ at Retention(RUNTIME)
+ at Documented
+ at DeploymentType
+ at interface AnotherDeploymentType
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentTypeLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentTypeLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/AnotherDeploymentTypeLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.AnnotationLiteral;
+
+class AnotherDeploymentTypeLiteral extends AnnotationLiteral<AnotherDeploymentType> implements AnotherDeploymentType
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMemberLiteral_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMemberLiteral_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMemberLiteral_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.AnnotationLiteral;
+
+abstract class BindingTypeWithBindingAnnotationMemberLiteral_Broken extends AnnotationLiteral<BindingTypeWithBindingAnnotationMember_Broken> implements BindingTypeWithBindingAnnotationMember_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMember_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMember_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingAnnotationMember_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface BindingTypeWithBindingAnnotationMember_Broken
+{
+   
+   Expensive expensive();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMemberLiteral_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMemberLiteral_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMemberLiteral_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.AnnotationLiteral;
+
+abstract class BindingTypeWithBindingArrayTypeMemberLiteral_Broken extends AnnotationLiteral<BindingTypeWithBindingArrayTypeMember_Broken> implements BindingTypeWithBindingArrayTypeMember_Broken
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMember_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMember_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/BindingTypeWithBindingArrayTypeMember_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface BindingTypeWithBindingArrayTypeMember_Broken
+{
+   
+   boolean[] bool();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Chunky.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Chunky.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Chunky.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Chunky
+{
+   
+   boolean realChunky();
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ChunkyLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ChunkyLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ChunkyLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.AnnotationLiteral;
+
+abstract class ChunkyLiteral extends AnnotationLiteral<Chunky> implements Chunky
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Cod.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Cod.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Cod.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,13 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Whitefish
+ at Chunky(realChunky=true)
+ at Named("whitefish")
+class Cod implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DaddyLongLegs.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DaddyLongLegs.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DaddyLongLegs.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+class DaddyLongLegs extends Spider
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlyAnimal.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlyAnimal.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlyAnimal.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+interface DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlySpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlySpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/DeadlySpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+interface DeadlySpider extends DeadlyAnimal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Expensive.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Expensive.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Expensive.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,28 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+import javax.webbeans.NonBinding;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Expensive
+{
+   
+   boolean veryExpensive();
+   
+   @NonBinding
+   int cost();
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ExpensiveLiteral.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ExpensiveLiteral.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ExpensiveLiteral.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.AnnotationLiteral;
+
+abstract class ExpensiveLiteral extends AnnotationLiteral<Expensive> implements Expensive
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Farmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Farmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Farmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Production;
+
+ at Production
+class Farmer<T>
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/FinalTuna_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/FinalTuna_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/FinalTuna_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,10 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+final class FinalTuna_Broken
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Haddock.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Haddock.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Haddock.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Haddock implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Halibut.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Halibut.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Halibut.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+
+ at Expensive(cost=50, veryExpensive=true)
+ at Whitefish
+class Halibut implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/InstantiationByTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/InstantiationByTypeTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/InstantiationByTypeTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,106 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import javax.webbeans.AmbiguousDependencyException;
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.DuplicateBindingTypeException;
+import javax.webbeans.TypeLiteral;
+import javax.webbeans.UnproxyableDependencyException;
+import javax.webbeans.UnsatisfiedDependencyException;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.CurrentBinding;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class InstantiationByTypeTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test(groups={"resolution", "beanLifecycle"}) @SpecAssertion(section="5.9")
+   public void testCurrentBindingTypeAssumed()
+   {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      assert manager.getInstanceByType(Tuna.class) != null;
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9")
+   public void testParameterizedTypeWithWildcardParameter()
+   {
+      manager.getInstanceByType(new TypeLiteral<ParameterizedBean_Broken<?>>(){});
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9")
+   public  <T> void testParameterizedTypeWithTypeParameter()
+   {
+      manager.getInstanceByType(new TypeLiteral<ParameterizedBean_Broken<T>>(){});
+   }
+   
+   
+   @Test(groups="resolution", expectedExceptions=DuplicateBindingTypeException.class) @SpecAssertion(section="5.9")
+   public void testDuplicateBindingTypesUsed()
+   {
+      manager.getInstanceByType(Tuna.class, new CurrentBinding(), new CurrentBinding());
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9")
+   public void testNonBindingTypeUsed()
+   {
+      manager.getInstanceByType(Tuna.class, new AnotherDeploymentTypeLiteral());
+   }
+   
+   @Test(expectedExceptions=AmbiguousDependencyException.class) @SpecAssertion(section="5.9")
+   public void testAmbiguousDependencies() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      manager.getInstanceByType(ScottishFish.class, new AnnotationLiteral<Whitefish>(){});
+   }
+   
+   @Test(expectedExceptions=UnsatisfiedDependencyException.class) @SpecAssertion(section="5.9")
+   public void testUnsatisfiedDependencies() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      manager.getInstanceByType(Tuna.class, new CurrentBinding());
+   }
+   
+   @Test(expectedExceptions=UnproxyableDependencyException.class) @SpecAssertion(section="5.9")
+   public void testUnproxyableDependencies() throws Exception
+   {
+      deployBeans(FinalTuna_Broken.class);
+      manager.getInstanceByType(FinalTuna_Broken.class, new AnnotationLiteral<Whitefish>(){});
+   }
+   
+   /*
+
+   @Test(groups="resolution") @SpecAssertion(section="5.9")
+   public void test
+   {
+      assert false;
+   }
+
+   */  
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/LadybirdSpider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/LadybirdSpider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/LadybirdSpider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,14 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.ApplicationScoped;
+
+ at ApplicationScoped
+class LadybirdSpider extends Spider
+{
+
+   public void spinWeb()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ParameterizedBean_Broken.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ParameterizedBean_Broken.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ParameterizedBean_Broken.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+class ParameterizedBean_Broken<T>
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Plaice.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Plaice.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Plaice.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Named;
+
+ at AnotherDeploymentType
+ at Whitefish
+ at Named("whitefish")
+final class Plaice implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ResolutionByTypeTest.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ResolutionByTypeTest.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ResolutionByTypeTest.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,250 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+import javax.webbeans.AnnotationLiteral;
+import javax.webbeans.DefinitionException;
+import javax.webbeans.DuplicateBindingTypeException;
+import javax.webbeans.TypeLiteral;
+import javax.webbeans.manager.Bean;
+
+import org.jboss.webbeans.tck.AbstractTest;
+import org.jboss.webbeans.tck.impl.SpecAssertion;
+import org.jboss.webbeans.tck.impl.SpecVersion;
+import org.jboss.webbeans.tck.impl.literals.CurrentBinding;
+import org.testng.annotations.Test;
+
+ at SpecVersion("20081206")
+public class ResolutionByTypeTest extends AbstractTest
+{
+   
+   @Override
+   protected List<Class<? extends Annotation>> getEnabledDeploymentTypes()
+   {
+      List<Class<? extends Annotation>> deploymentTypes = super.getStandardDeploymentTypes();
+      deploymentTypes.add(AnotherDeploymentType.class);
+      return deploymentTypes;
+   }
+   
+   @Test(groups="resolution") @SpecAssertion(section="5.9.2")
+   public void testDefaultBindingTypeAssumed() throws Exception
+   {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      manager.addBean(tunaBean);
+      Set<Bean<Tuna>> possibleTargets = manager.resolveByType(Tuna.class);
+      assert possibleTargets.size() == 1;
+      assert possibleTargets.contains(tunaBean);
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9")
+   public void testParameterizedTypeWithWildcardParameter()
+   {
+      manager.resolveByType(new TypeLiteral<ParameterizedBean_Broken<?>>(){});
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9")
+   public  <T> void testParameterizedTypeWithTypeParameter()
+   {
+      manager.resolveByType(new TypeLiteral<ParameterizedBean_Broken<T>>(){});
+   }
+   
+   @Test(groups="resolution", expectedExceptions=DuplicateBindingTypeException.class) @SpecAssertion(section="5.9.2")
+   public void testDuplicateBindingTypesUsed()
+   {
+      manager.resolveByType(Tuna.class, new CurrentBinding(), new CurrentBinding());
+   }
+   
+   @Test(groups="resolution", expectedExceptions=IllegalArgumentException.class) @SpecAssertion(section="5.9.2")
+   public void testNonBindingTypeUsed()
+   {
+      manager.resolveByType(Tuna.class, new AnotherDeploymentTypeLiteral());
+   }
+   
+   @Test(groups="resolution") @SpecAssertion(section={"5.9.2"})
+   public void testResolveByType() throws Exception
+   {
+      Bean<Tuna> tunaBean = createSimpleBean(Tuna.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<SeaBass> seaBassBean = createSimpleBean(SeaBass.class);
+      Bean<Haddock> haddockBean = createSimpleBean(Haddock.class);
+      
+      manager.addBean(tunaBean);
+      manager.addBean(salmonBean);
+      manager.addBean(haddockBean);
+      manager.addBean(seaBassBean);
+      
+      assert manager.resolveByType(Tuna.class, new CurrentBinding()).size() == 1;
+      assert manager.resolveByType(Tuna.class, new CurrentBinding()).contains(tunaBean);
+      
+      assert manager.resolveByType(Tuna.class).size() == 1;
+      assert manager.resolveByType(Tuna.class).contains(tunaBean);
+      
+      assert manager.resolveByType(Animal.class, new CurrentBinding()).size() == 3;
+      assert manager.resolveByType(Animal.class, new CurrentBinding()).contains(salmonBean);
+      assert manager.resolveByType(Animal.class, new CurrentBinding()).contains(seaBassBean);
+      assert manager.resolveByType(Animal.class, new CurrentBinding()).contains(haddockBean);
+   }
+   
+   @Test(groups="injection") @SpecAssertion(section={"2.3.5","5.9.2.2"}) 
+   public void testAllBindingTypesSpecifiedForResolutionMustAppearOnWebBean()
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      
+      manager.addBean(codBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      assert manager.resolveByType(Animal.class, new ChunkyLiteral() {
+
+         public boolean realChunky()
+         {
+            return true;
+         }
+         
+      }, new AnnotationLiteral<Whitefish>() {}).size() == 1;
+      assert manager.resolveByType(Animal.class, new ChunkyLiteral() {
+
+         public boolean realChunky()
+         {
+            return true;
+         }
+         
+      }, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
+      
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).size() == 2;
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(codBean);
+      assert manager.resolveByType(ScottishFish.class, new AnnotationLiteral<Whitefish>() {}).contains(soleBean);
+   }
+   
+   @Test(groups="resolution") @SpecAssertion(section="5.9.2")
+   public void testResolveByTypeWithTypeParameter() throws Exception
+   {
+      Bean<ScottishFishFarmer> scottishFishFarmerBean = createSimpleBean(ScottishFishFarmer.class);
+      Bean<AnimalFarmer> farmerBean = createSimpleBean(AnimalFarmer.class);
+      
+      manager.addBean(scottishFishFarmerBean);
+      manager.addBean(farmerBean);
+      
+      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).size() == 1;
+      assert manager.resolveByType(new TypeLiteral<Farmer<ScottishFish>>(){}).contains(scottishFishFarmerBean);
+   }
+   
+   @Test(groups={"resolution", "producerMethod"}) @SpecAssertion(section="5.9.2")
+   public void testResolveByTypeWithArray() throws Exception
+   {
+      Bean<SpiderProducer> spiderProducerBean = createSimpleBean(SpiderProducer.class);
+      manager.addBean(spiderProducerBean);
+      Method method = SpiderProducer.class.getMethod("getSpiders");
+      Bean<Spider[]> spidersModel = createProducerMethodBean(method, spiderProducerBean);
+      manager.addBean(spidersModel);
+      method = SpiderProducer.class.getMethod("getStrings");
+      Bean<String[]> stringModel = createProducerMethodBean(method, spiderProducerBean);
+      manager.addBean(stringModel);
+      
+      assert manager.resolveByType(Spider[].class).size() == 1;
+   }
+   
+   @Test @SpecAssertion(section="5.9.2")
+   public void testOnlyHighestEnabledPrecedenceWebBeansResolved() throws Exception
+   {
+      Bean<Cod> codBean = createSimpleBean(Cod.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      Bean<Plaice> plaiceBean = createSimpleBean(Plaice.class);
+      
+      
+      manager.addBean(plaiceBean);
+      manager.addBean(codBean);
+      manager.addBean(soleBean);
+
+      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).size() == 1;
+      assert manager.resolveByType(Animal.class, new AnnotationLiteral<Whitefish>() {}).contains(plaiceBean);
+      
+   }
+  
+   
+   @Test(groups="resolution") @SpecAssertion(section="5.9.2")
+   public void testNoWebBeansFound() throws Exception
+   {
+      Bean<Salmon> salmonBean = createSimpleBean(Salmon.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      Bean<Plaice> plaiceBean = createSimpleBean(Plaice.class);
+      manager.addBean(plaiceBean);
+      manager.addBean(salmonBean);
+      manager.addBean(soleBean);
+      
+      assert manager.resolveByType(Tuna.class, new CurrentBinding()).size() == 0;
+   }
+   
+   @Test(groups="resolution") @SpecAssertion(section="5.9.2.1")
+   public void testResolveByTypeWithNonBindingMembers() throws Exception
+   {
+      Bean<Halibut> halibutBean = createSimpleBean(Halibut.class);
+      Bean<RoundWhitefish> roundWhiteFishBean = createSimpleBean(RoundWhitefish.class);
+      Bean<Sole> soleBean = createSimpleBean(Sole.class);
+      manager.addBean(halibutBean);
+      manager.addBean(roundWhiteFishBean);
+      manager.addBean(soleBean);
+      
+      Set<Bean<Animal>> beans = manager.resolveByType(Animal.class, new ExpensiveLiteral() 
+      {
+
+         public int cost()
+         {
+            return 60;
+         }
+
+         public boolean veryExpensive()
+         {
+            return true;
+         }
+         
+      }, new AnnotationLiteral<Whitefish>() {});
+      assert beans.size() == 2;
+      assert beans.contains(halibutBean);
+      assert beans.contains(roundWhiteFishBean);
+   }
+   
+   @Test(groups="resolution", expectedExceptions=DefinitionException.class) @SpecAssertion(section="5.9.2.1")
+   public void testArrayValuedAnnotationMemberWithoutNonBinding()
+   {
+      manager.resolveByType(Animal.class, new BindingTypeWithBindingArrayTypeMemberLiteral_Broken() {
+         
+         public boolean[] bool()
+         {
+            return new boolean[0];
+         }
+         
+      });
+   }
+   
+   @Test(groups="resolution", expectedExceptions=DefinitionException.class) @SpecAssertion(section="5.9.2.1")
+   public void testAnnotationValuedAnnotationMemberWithoutNonBinding()
+   {
+      manager.resolveByType(Animal.class, new BindingTypeWithBindingAnnotationMemberLiteral_Broken()
+      {
+         
+         public Expensive expensive()
+         {
+            return new ExpensiveLiteral()
+            {
+               public int cost()
+               {
+                  return 0;
+               }
+               
+               public boolean veryExpensive()
+               {
+                  return false;
+               }
+            };
+         }
+      
+      });
+   }
+      
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/RoundWhitefish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/RoundWhitefish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/RoundWhitefish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,8 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+ at Expensive(cost=60, veryExpensive=true)
+ at Whitefish
+class RoundWhitefish implements Animal
+{
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Salmon.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Salmon.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Salmon.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Named
+class Salmon implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,7 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+
+interface ScottishFish extends Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFishFarmer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFishFarmer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/ScottishFishFarmer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,9 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Production;
+
+ at Production
+class ScottishFishFarmer extends Farmer<ScottishFish>
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SeaBass.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SeaBass.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SeaBass.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,11 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Production;
+import javax.webbeans.RequestScoped;
+
+ at Production
+ at RequestScoped
+class SeaBass implements Animal
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Sole.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Sole.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Sole.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Named;
+import javax.webbeans.Production;
+
+ at Production
+ at Whitefish
+ at Named("whitefish")
+class Sole implements ScottishFish
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Spider.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Spider.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Spider.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,12 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+
+class Spider implements Animal
+{
+
+   public final void layEggs()
+   {
+      
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SpiderProducer.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SpiderProducer.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/SpiderProducer.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.Produces;
+
+ at AnotherDeploymentType
+class SpiderProducer
+{
+   
+   private static Spider[] ALL_SPIDERS = { new Tarantula(), new LadybirdSpider(), new DaddyLongLegs() };
+   
+   @Produces public Spider[] getSpiders()
+   {
+      return ALL_SPIDERS;
+   }
+   
+   @Produces public String[] getStrings()
+   {
+      return new String[0];
+   }
+   
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tarantula.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tarantula.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tarantula.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,6 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+class Tarantula extends Spider implements DeadlySpider
+{
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tuna.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tuna.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Tuna.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,15 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import javax.webbeans.RequestScoped;
+
+ at AnotherDeploymentType
+ at RequestScoped
+class Tuna
+{
+   
+   public String getName()
+   {
+      return "Ophir";
+   }
+
+}

Added: tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Whitefish.java
===================================================================
--- tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Whitefish.java	                        (rev 0)
+++ tck/trunk/impl/src/main/java/org/jboss/webbeans/tck/unit/lookup/typesafe/Whitefish.java	2009-01-20 06:39:37 UTC (rev 1110)
@@ -0,0 +1,22 @@
+package org.jboss.webbeans.tck.unit.lookup.typesafe;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.webbeans.BindingType;
+
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+ at Retention(RUNTIME)
+ at Documented
+ at BindingType
+ at interface Whitefish
+{
+
+}

Modified: tck/trunk/impl/src/main/resources/tck-unit-tests.xml
===================================================================
--- tck/trunk/impl/src/main/resources/tck-unit-tests.xml	2009-01-20 06:00:29 UTC (rev 1109)
+++ tck/trunk/impl/src/main/resources/tck-unit-tests.xml	2009-01-20 06:39:37 UTC (rev 1110)
@@ -28,7 +28,7 @@
             <exclude name="beanDestruction" />
             <exclude name="commonAnnotations" />
 -->
-            <exclude name="stub" />
+            <!--exclude name="stub" /-->
             <exclude name="broken" />
          </run>
       </groups>




More information about the weld-commits mailing list