Weld SVN: r5509 - cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 19:01:40 -0500 (Mon, 18 Jan 2010)
New Revision: 5509
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/CustomBeanImplementationTest.java
Log:
Enable working test
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/CustomBeanImplementationTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/CustomBeanImplementationTest.java 2010-01-18 23:58:40 UTC (rev 5508)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/CustomBeanImplementationTest.java 2010-01-19 00:01:40 UTC (rev 5509)
@@ -38,8 +38,7 @@
{
@Test
- @SpecAssertions({
- //@SpecAssertion(section = "5.1", id = "b"),
+ @SpecAssertions({
@SpecAssertion(section = "5.1.1", id = "k")
})
public void testGetBeanClassCalled()
@@ -47,9 +46,8 @@
assert IntegerBean.bean.isGetBeanClassCalled();
}
- @Test(groups = { "ri-broken" })
+ @Test
@SpecAssertion(section = "5.1.1", id = "k")
- // WBRI-328
public void testGetStereotypesCalled()
{
assert IntegerBean.bean.isGetStereotypesCalled();
16 years, 2 months
Weld SVN: r5508 - cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/managedBeanWithNonSerializableInterceptorClass.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:58:40 -0500 (Mon, 18 Jan 2010)
New Revision: 5508
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/managedBeanWithNonSerializableInterceptorClass/ManagedBeanWithNonSerializableInterceptorClassTest.java
Log:
actually working
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/managedBeanWithNonSerializableInterceptorClass/ManagedBeanWithNonSerializableInterceptorClassTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/managedBeanWithNonSerializableInterceptorClass/ManagedBeanWithNonSerializableInterceptorClassTest.java 2010-01-18 23:57:42 UTC (rev 5507)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/managedBeanWithNonSerializableInterceptorClass/ManagedBeanWithNonSerializableInterceptorClassTest.java 2010-01-18 23:58:40 UTC (rev 5508)
@@ -13,9 +13,8 @@
@SpecVersion(spec="cdi", version="20091101")
public class ManagedBeanWithNonSerializableInterceptorClassTest extends AbstractJSR299Test
{
- @Test(groups = { "contexts", "passivation", "ri-broken"})
+ @Test(groups = { "contexts", "passivation"})
@SpecAssertion(section = "6.6.1", id = "bb")
- // WBRI-361
public void testManagedBeanWithNonSerializableInterceptorClassNotOK()
{
assert false;
16 years, 2 months
Weld SVN: r5507 - cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/interceptorWithNonPassivatingInjectedField.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:57:42 -0500 (Mon, 18 Jan 2010)
New Revision: 5507
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/interceptorWithNonPassivatingInjectedField/PassivationCapableBeanWithNonPassivatingInterceptorTest.java
Log:
is working
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/interceptorWithNonPassivatingInjectedField/PassivationCapableBeanWithNonPassivatingInterceptorTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/interceptorWithNonPassivatingInjectedField/PassivationCapableBeanWithNonPassivatingInterceptorTest.java 2010-01-18 23:52:26 UTC (rev 5506)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/interceptorWithNonPassivatingInjectedField/PassivationCapableBeanWithNonPassivatingInterceptorTest.java 2010-01-18 23:57:42 UTC (rev 5507)
@@ -15,7 +15,7 @@
@BeansXml("beans.xml")
public class PassivationCapableBeanWithNonPassivatingInterceptorTest extends AbstractJSR299Test
{
- @Test(groups = { "contexts", "passivation", "ri-broken" })
+ @Test(groups = { "contexts", "passivation" })
@SpecAssertion(section = "6.6.4", id = "aac")
public void testPassivationCapableBeanWithNonPassivatingInterceptorFails()
{
16 years, 2 months
Weld SVN: r5506 - in cdi-tck/branches/1.0/impl/src/main: resources/org/jboss/jsr299/tck/tests/implementation/simple/definition and 1 other directory.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:52:26 -0500 (Mon, 18 Jan 2010)
New Revision: 5506
Added:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanNotDiscoveredAsManagedBeanTest.java
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanObserver.java
cdi-tck/branches/1.0/impl/src/main/resources/org/jboss/jsr299/tck/tests/implementation/simple/definition/javax.enterprise.inject.spi.Extension
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/SimpleBeanDefinitionTest.java
Log:
CDITCK-93
Added: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanNotDiscoveredAsManagedBeanTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanNotDiscoveredAsManagedBeanTest.java (rev 0)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanNotDiscoveredAsManagedBeanTest.java 2010-01-18 23:52:26 UTC (rev 5506)
@@ -0,0 +1,26 @@
+package org.jboss.jsr299.tck.tests.implementation.simple.definition;
+
+import org.jboss.jsr299.tck.AbstractJSR299Test;
+import org.jboss.test.audit.annotations.SpecAssertion;
+import org.jboss.test.audit.annotations.SpecVersion;
+import org.jboss.testharness.impl.packaging.Artifact;
+import org.jboss.testharness.impl.packaging.IntegrationTest;
+import org.jboss.testharness.impl.packaging.jsr299.Extension;
+import org.testng.annotations.Test;
+
+@Artifact
+@SpecVersion(spec="cdi", version="20091101")
+@Extension("javax.enterprise.inject.spi.Extension")
+@IntegrationTest
+public class EnterpriseBeanNotDiscoveredAsManagedBeanTest extends AbstractJSR299Test
+{
+
+ @Test
+ @SpecAssertion(section="3.1.1", id="f")
+ public void testClassesImplementingEnterpriseBeanInterfaceNotDiscoveredAsSimpleBean()
+ {
+ assert !EnterpriseBeanObserver.observedEnterpriseBean;
+ assert EnterpriseBeanObserver.observedAnotherBean;
+ }
+
+}
Property changes on: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanNotDiscoveredAsManagedBeanTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Added: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanObserver.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanObserver.java (rev 0)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanObserver.java 2010-01-18 23:52:26 UTC (rev 5506)
@@ -0,0 +1,23 @@
+package org.jboss.jsr299.tck.tests.implementation.simple.definition;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessManagedBean;
+
+public class EnterpriseBeanObserver implements Extension
+{
+
+ public static boolean observedEnterpriseBean;
+ public static boolean observedAnotherBean;
+
+ public void observeAnotherBean(@Observes ProcessManagedBean<Sheep> event)
+ {
+ observedAnotherBean = true;
+ }
+
+ public void observeEnterpriseBean(@Observes ProcessManagedBean<MockEnterpriseBean> event)
+ {
+ observedEnterpriseBean = true;
+ }
+
+}
Property changes on: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/EnterpriseBeanObserver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/SimpleBeanDefinitionTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/SimpleBeanDefinitionTest.java 2010-01-18 23:44:08 UTC (rev 5505)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/simple/definition/SimpleBeanDefinitionTest.java 2010-01-18 23:52:26 UTC (rev 5506)
@@ -46,14 +46,6 @@
assert getBeans(Car.class).size() == 0;
}
- @Test(groups = "broken")
- // TODO The bean will be discovered, just not as a managed bean. This test is doesn't check that *at all*
- @SpecAssertion(section="3.1.1", id="f")
- public void testClassesImplementingEnterpriseBeanInterfaceNotDiscoveredAsSimpleBean()
- {
- assert getBeans(MockEnterpriseBean.class).size() == 0;
- }
-
@Test
@SpecAssertion(section="3.1.1", id="p")
public void testSimpleBeanOnlyIfConstructorParameterless()
Added: cdi-tck/branches/1.0/impl/src/main/resources/org/jboss/jsr299/tck/tests/implementation/simple/definition/javax.enterprise.inject.spi.Extension
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/resources/org/jboss/jsr299/tck/tests/implementation/simple/definition/javax.enterprise.inject.spi.Extension (rev 0)
+++ cdi-tck/branches/1.0/impl/src/main/resources/org/jboss/jsr299/tck/tests/implementation/simple/definition/javax.enterprise.inject.spi.Extension 2010-01-18 23:52:26 UTC (rev 5506)
@@ -0,0 +1 @@
+org.jboss.jsr299.tck.tests.implementation.simple.definition.EnterpriseBeanObserver
16 years, 2 months
Weld SVN: r5504 - cdi-tck/branches/1.0/impl/src/main/resources.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:43:39 -0500 (Mon, 18 Jan 2010)
New Revision: 5504
Modified:
cdi-tck/branches/1.0/impl/src/main/resources/tck-audit-cdi.xml
Log:
fix mapping
Modified: cdi-tck/branches/1.0/impl/src/main/resources/tck-audit-cdi.xml
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/resources/tck-audit-cdi.xml 2010-01-18 23:43:19 UTC (rev 5503)
+++ cdi-tck/branches/1.0/impl/src/main/resources/tck-audit-cdi.xml 2010-01-18 23:43:39 UTC (rev 5504)
@@ -4431,7 +4431,7 @@
<group>
<text>A raw bean type is considered assignable to a parameterized delegate type if the raw types are identical and all type parameters of the delegate type are either unbounded type variables or |java.lang.Object|.</text>
- <assertion id="ab">
+ <assertion id="aa">
<text>Check all type parameters are unbounded type variables</text>
</assertion>
16 years, 2 months
Weld SVN: r5503 - cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/policy.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:43:19 -0500 (Mon, 18 Jan 2010)
New Revision: 5503
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java
Log:
minor
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java 2010-01-18 23:35:21 UTC (rev 5502)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java 2010-01-18 23:43:19 UTC (rev 5503)
@@ -87,7 +87,6 @@
@Test
@SpecAssertions({
@SpecAssertion(section = "5.1.1", id = "fa")
- //@SpecAssertion(section = "2.6.1", id = "e") removed from spec
})
public void testProducerPoliciesOnClass() throws Exception
16 years, 2 months
Weld SVN: r5502 - cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:35:21 -0500 (Mon, 18 Jan 2010)
New Revision: 5502
Added:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl/WebProfileMethodSelector.java
Log:
POC for CDITCK-85
Added: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl/WebProfileMethodSelector.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl/WebProfileMethodSelector.java (rev 0)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl/WebProfileMethodSelector.java 2010-01-18 23:35:21 UTC (rev 5502)
@@ -0,0 +1,45 @@
+package org.jboss.jsr299.tck.impl;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.testharness.impl.packaging.Packaging;
+import org.jboss.testharness.impl.packaging.PackagingType;
+import org.testng.IMethodSelector;
+import org.testng.IMethodSelectorContext;
+import org.testng.ITestNGMethod;
+
+public class WebProfileMethodSelector implements IMethodSelector
+{
+
+ private static final long serialVersionUID = 4868366080536037160L;
+
+ public boolean includeMethod(IMethodSelectorContext ctx, ITestNGMethod method, boolean isTestMethod)
+ {
+ return isWar(method.getMethod().getDeclaringClass()) && !isFullProfileOnly(method.getGroups());
+ }
+
+ public void setTestMethods(List<ITestNGMethod> arg0)
+ {
+ // No-op, not needed
+ }
+
+ private static boolean isWar(Class<?> declaringClass)
+ {
+ if (declaringClass.isAnnotationPresent(Packaging.class))
+ {
+ return declaringClass.getAnnotation(Packaging.class).value().equals(PackagingType.WAR);
+ }
+ else
+ {
+ // WAR is default
+ return true;
+ }
+ }
+
+ private boolean isFullProfileOnly(String[] groups)
+ {
+ return Arrays.asList(groups).contains("javaee-full");
+ }
+
+}
Property changes on: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/impl/WebProfileMethodSelector.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
16 years, 2 months
Weld SVN: r5501 - in cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken: exception and 1 other directory.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:34:23 -0500 (Mon, 18 Jan 2010)
New Revision: 5501
Modified:
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/definitionError/ProcessObserverMethodErrorTest.java
cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/exception/ProcessObserverMethodExceptionTest.java
Log:
CDITCK-68
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/definitionError/ProcessObserverMethodErrorTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/definitionError/ProcessObserverMethodErrorTest.java 2010-01-18 23:32:57 UTC (rev 5500)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/definitionError/ProcessObserverMethodErrorTest.java 2010-01-18 23:34:23 UTC (rev 5501)
@@ -24,8 +24,7 @@
import org.jboss.testharness.impl.packaging.Artifact;
import org.jboss.testharness.impl.packaging.ExpectedDeploymentException;
import org.jboss.testharness.impl.packaging.IntegrationTest;
-import org.jboss.testharness.impl.packaging.Resource;
-import org.jboss.testharness.impl.packaging.Resources;
+import org.jboss.testharness.impl.packaging.jsr299.Extension;
import org.testng.annotations.Test;
/**
@@ -36,15 +35,13 @@
*/
@Artifact
@ExpectedDeploymentException(DeploymentFailure.class)
-@Resources({
- @Resource(source="javax.enterprise.inject.spi.Extension", destination="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension")
-})
+@Extension("javax.enterprise.inject.spi.Extension")
@IntegrationTest
@SpecVersion(spec="cdi", version="20091101")
public class ProcessObserverMethodErrorTest extends AbstractJSR299Test
{
- @Test(groups = "jboss-as-broken")
+ @Test
@SpecAssertion(section = "11.5.9", id = "da")
public void testAddDefinitionError()
{
Modified: cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/exception/ProcessObserverMethodExceptionTest.java
===================================================================
--- cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/exception/ProcessObserverMethodExceptionTest.java 2010-01-18 23:32:57 UTC (rev 5500)
+++ cdi-tck/branches/1.0/impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/observer/broken/exception/ProcessObserverMethodExceptionTest.java 2010-01-18 23:34:23 UTC (rev 5501)
@@ -24,8 +24,7 @@
import org.jboss.testharness.impl.packaging.Artifact;
import org.jboss.testharness.impl.packaging.ExpectedDeploymentException;
import org.jboss.testharness.impl.packaging.IntegrationTest;
-import org.jboss.testharness.impl.packaging.Resource;
-import org.jboss.testharness.impl.packaging.Resources;
+import org.jboss.testharness.impl.packaging.jsr299.Extension;
import org.testng.annotations.Test;
/**
@@ -37,15 +36,13 @@
*/
@Artifact
@ExpectedDeploymentException(DeploymentFailure.class)
-@Resources({
- @Resource(source="javax.enterprise.inject.spi.Extension", destination="WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension")
-})
+@Extension("javax.enterprise.inject.spi.Extension")
@IntegrationTest
@SpecVersion(spec="cdi", version="20091101")
public class ProcessObserverMethodExceptionTest extends AbstractJSR299Test
{
- @Test(groups = "jboss-as-broken")
+ @Test
@SpecAssertion(section = "11.5.9", id = "db")
public void testExceptionIsDefinitionError()
{
16 years, 2 months
Weld SVN: r5500 - core/trunk/impl/src/main/java/org/jboss/weld/util/serviceProvider.
by weld-commits@lists.jboss.org
Author: pete.muir(a)jboss.org
Date: 2010-01-18 18:32:57 -0500 (Mon, 18 Jan 2010)
New Revision: 5500
Modified:
core/trunk/impl/src/main/java/org/jboss/weld/util/serviceProvider/DefaultServiceLoader.java
Log:
WELD-386
Modified: core/trunk/impl/src/main/java/org/jboss/weld/util/serviceProvider/DefaultServiceLoader.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/util/serviceProvider/DefaultServiceLoader.java 2010-01-18 23:11:00 UTC (rev 5499)
+++ core/trunk/impl/src/main/java/org/jboss/weld/util/serviceProvider/DefaultServiceLoader.java 2010-01-18 23:32:57 UTC (rev 5500)
@@ -22,7 +22,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.lang.reflect.Constructor;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashSet;
@@ -31,7 +30,6 @@
import org.jboss.weld.exceptions.ForbiddenStateException;
import org.jboss.weld.exceptions.InvalidOperationException;
-import org.jboss.weld.util.reflection.Reflections;
import org.jboss.weld.util.reflection.SecureReflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -213,8 +211,11 @@
{
throw new ForbiddenStateException(DECLARED_EXTENSION_DOES_NOT_IMPLEMENT_EXTENSION, line);
}
- Constructor<? extends S> constructor = (Constructor<? extends S>) SecureReflections.getConstructor(serviceClass);
- S instance = constructor.newInstance();
+ Object object = SecureReflections.ensureAccessible(SecureReflections.getDeclaredConstructor(serviceClass)).newInstance();
+
+ @SuppressWarnings("unchecked")
+ S instance = (S) object;
+
providers.add(instance);
}
catch (NoClassDefFoundError e)
@@ -235,12 +236,17 @@
xLog.throwing(Level.DEBUG, e);
throw e;
}
+ catch (NoSuchMethodException e)
+ {
+ log.warn("Error loading line", line);
+ xLog.throwing(Level.DEBUG, e);
+ throw e;
+ }
}
}
catch (Exception e)
{
- // TODO Don't use exceptions for flow control!
- // try the next line
+ // try next line
}
line = reader.readLine();
16 years, 2 months