[
https://issues.apache.org/jira/browse/DELTASPIKE-1001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14953078#comment-14953078
]
Gerhard Petracek edited comment on DELTASPIKE-1001 at 10/12/15 1:06 PM:
------------------------------------------------------------------------
i agree that we should support switching project-stages, because it's supported
by the test-control module...
adding that is easy as well and the test i showed before gets even easier with
it.
{code}
private static ProjectStage previouslyDetectedProjectStage;
{code}
+
{code}
public static boolean isActivated(Class<? extends Deactivatable>
targetClass)
{
ProjectStage currentProjectStage =
ProjectStageProducer.getInstance().getProjectStage();
if (previouslyDetectedProjectStage != currentProjectStage)
{
previouslyDetectedProjectStage = currentProjectStage;
activationStatusCache.clear();
classDeactivatorMap.clear();
}
else if (currentProjectStage == ProjectStage.UnitTest ||
currentProjectStage == ProjectStage.Development)
{
activationStatusCache.clear();
}
//code as it was before
}
{code}
and the test:
{code}
public class ProjectStageDependentClassDeactivationTest
{
@Test
public void deactivationResultInProjectStageUnitTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false,
ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageDevelopment()
{
ProjectStageProducer.setProjectStage(ProjectStage.Development);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false,
ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageProduction()
{
ProjectStageProducer.setProjectStage(ProjectStage.Production);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageIntegrationTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.IntegrationTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageStaging()
{
ProjectStageProducer.setProjectStage(ProjectStage.Staging);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageSystemTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.SystemTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
private static class TestDeactivatable implements Deactivatable
{
}
}
{code}
@responsibility & behavior:
i basically agree, but not in this case.
#1 we don't have such a split in other parts
#2 we would get 3 additional classes in the >api< for almost nothing.
was (Author: gpetracek):
i agree that we should support switching project-stages, because it's supported
by the test-control module...
adding that is easy as well and the test i showed before gets even easier with
it.
{code}
private static ProjectStage previouslyDetectedProjectStage;
{code}
+
{code}
public static boolean isActivated(Class<? extends Deactivatable>
targetClass)
{
ProjectStage currentProjectStage =
ProjectStageProducer.getInstance().getProjectStage();
if (previouslyDetectedProjectStage != currentProjectStage)
{
previouslyDetectedProjectStage = currentProjectStage;
activationStatusCache.clear();
classDeactivatorMap.clear();
}
else if (currentProjectStage == ProjectStage.UnitTest ||
currentProjectStage == ProjectStage.Development)
{
activationStatusCache.clear();
}
//code as it was before
}
{code}
and the test:
{code}
public class ProjectStageDependentClassDeactivationTest
{
@Test
public void deactivationResultInProjectStageUnitTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false,
ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageDevelopment()
{
ProjectStageProducer.setProjectStage(ProjectStage.Development);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(false,
ClassDeactivationUtils.isActivated(classToCheck));
}
@Test
public void deactivationResultInProjectStageProduction()
{
ProjectStageProducer.setProjectStage(ProjectStage.Production);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageIntegrationTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.IntegrationTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageStaging()
{
ProjectStageProducer.setProjectStage(ProjectStage.Staging);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
@Test
public void deactivationResultInProjectStageSystemTest()
{
ProjectStageProducer.setProjectStage(ProjectStage.SystemTest);
final Class<? extends Deactivatable> classToCheck =
TestDeactivatable.class;
EditableTestDeactivator.activate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck));
EditableTestDeactivator.deactivate(classToCheck);
Assert.assertEquals(true,
ClassDeactivationUtils.isActivated(classToCheck)); //due to the cached result
}
private static class TestDeactivatable implements Deactivatable
{
}
}
{code}
> Skip caching ClassDeactivation for some project stages
> ------------------------------------------------------
>
> Key: DELTASPIKE-1001
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-1001
> Project: DeltaSpike
> Issue Type: New Feature
> Components: Core
> Affects Versions: 1.5.0
> Reporter: John D. Ament
> Assignee: John D. Ament
> Fix For: 1.5.1
>
>
> Add the ability to skip caching if the project stage is unit test and
> possibly development.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)