You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Gerhard Petracek (JIRA)" <ji...@apache.org> on 2015/10/12 15:07:05 UTC

[jira] [Comment Edited] (DELTASPIKE-1001) Skip caching ClassDeactivation for some project stages

    [ 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)