Package org.ocpsoft.rewrite.config

Source Code of org.ocpsoft.rewrite.config.ConfigurationBuilderTest

/*
* Copyright 2011 <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
* 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.ocpsoft.rewrite.config;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.ocpsoft.rewrite.context.EvaluationContext;
import org.ocpsoft.rewrite.el.El;
import org.ocpsoft.rewrite.event.InboundRewrite;
import org.ocpsoft.rewrite.event.Rewrite;
import org.ocpsoft.rewrite.mock.MockEvaluationContext;
import org.ocpsoft.rewrite.param.Constraint;
import org.ocpsoft.rewrite.param.Converter;
import org.ocpsoft.rewrite.param.ParameterConfigurator;
import org.ocpsoft.rewrite.param.Transposition;
import org.ocpsoft.rewrite.param.Validator;
import org.ocpsoft.rewrite.servlet.config.Path;
import org.ocpsoft.rewrite.test.MockInboundRewrite;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class ConfigurationBuilderTest
{
   private int performCount = 0;
   private int performOtherwiseCount = 0;
   private boolean performed = false;
   private boolean performedOtherwise = false;
   private Operation operation;
   private Operation otherwise;
   private InboundRewrite rewrite;
   private EvaluationContext context;

   @Before
   public void before()
   {
      rewrite = new MockInboundRewrite();
      context = new MockEvaluationContext();
      operation = new Operation() {
         @Override
         public void perform(final Rewrite event, final EvaluationContext context)
         {
            performCount++;
            performed = true;
         }
      };
      otherwise = new Operation() {
         @Override
         public void perform(final Rewrite event, final EvaluationContext context)
         {
            performOtherwiseCount++;
            performedOtherwise = true;
         }
      };
   }

   private void execute(Configuration config)
   {
      for (Rule rule : config.getRules()) {
         if (rule.evaluate(rewrite, context))
            rule.perform(rewrite, context);
      }
   }

   @Test
   public void testBuildConfigurationCompositeWhenPerformOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(Direction.isInbound(), new True())
               .perform(operation);

      execute(config);

      Assert.assertTrue(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationPerformOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(And.all(Direction.isInbound(), new True()))
               .perform(operation);

      execute(config);

      Assert.assertTrue(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationPerformMultipleOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(And.all(Direction.isInbound(), new True()))
               .perform(operation, operation, operation);

      execute(config);

      Assert.assertEquals(3, performCount);
      Assert.assertEquals(0, performOtherwiseCount);
      Assert.assertTrue(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationPerformOnlyNegative()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(And.all(new False()))
               .perform(operation);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationCompositeConditionPerformOnlyNegative()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new True(), new False())
               .perform(operation);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationOtherwiseOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new False())
               .otherwise(otherwise);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertTrue(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationCompositeConditionOtherwiseOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new True(), new False())
               .otherwise(otherwise);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertTrue(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationOtherwiseMultipleOnly()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new False())
               .otherwise(otherwise, otherwise);

      execute(config);

      Assert.assertEquals(0, performCount);
      Assert.assertEquals(2, performOtherwiseCount);
      Assert.assertFalse(performed);
      Assert.assertTrue(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationOtherwiseNegative()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new True())
               .otherwise(otherwise);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationCompositeConditionOtherwiseNegative()
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin().addRule()
               .when(new True(), new True())
               .otherwise(otherwise);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationPerformAndOtherwise() throws Exception
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin()
               .addRule()
               .when(new True())
               .perform(operation)
               .otherwise(otherwise);

      execute(config);

      Assert.assertTrue(performed);
      Assert.assertFalse(performedOtherwise);
   }

   @Test
   public void testBuildConfigurationPerformAndOtherwiseNegative() throws Exception
   {
      Assert.assertFalse(performed);
      Assert.assertFalse(performedOtherwise);

      Configuration config = ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .perform(operation)
               .otherwise(otherwise);

      execute(config);

      Assert.assertFalse(performed);
      Assert.assertTrue(performedOtherwise);
   }

   @Test
   public void testSubsetAPI() throws Exception
   {
      ConfigurationBuilder.begin()

               .addRule()
               .when(new False())
               .otherwise(Subset.evaluate(ConfigurationBuilder.begin()
                        .addRule()
                        .when(new True())
                        .perform(operation)));
   }

   @Test
   public void testMetadataAPI() throws Exception
   {
      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withMetadata(null, null)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .otherwise(operation)
               .withMetadata(null, null)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withId(null)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withPriority(12)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withId(null)
               .withPriority(12)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withPriority(12)
               .withId(null)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .withPriority(12)
               .withMetadata(null, null)
               .addRule();

      ConfigurationBuilder.begin().addRule()
               .when(new False())
               .perform(operation)
               .otherwise(operation)
               .withId(null)
               .withMetadata(null, null)
               .addRule();
   }

   @Test
   public void testWhereAPI() throws Exception
   {
      ParameterConfigurator configurator = new ParameterConfigurator() {};
      Validator<String> validator = new Validator<String>() {
         @Override
         public boolean isValid(Rewrite event, EvaluationContext context, String value)
         {
            return false;
         }
      };
      Transposition<String> transposition = new Transposition<String>() {

         @Override
         public String transpose(Rewrite event, EvaluationContext context, String value)
         {
            return null;
         }
      };
      Converter<String> converter = new Converter<String>() {
         @Override
         public String convert(Rewrite event, EvaluationContext context, Object value)
         {
            return null;
         }
      };
      Constraint<String> constraint = new Constraint<String>() {
         @Override
         public boolean isSatisfiedBy(Rewrite event, EvaluationContext context, String value)
         {
            return false;
         }
      };

      ConfigurationBuilder.begin()

               .addRule()
               .when(Path.matches("/{p}/{s}"))
               .perform(operation)
               .otherwise(operation)
               .where("p").bindsTo(El.property("whee.glee")).matches("blah")
               .constrainedBy(null).convertedBy(null).transposedBy(null).validatedBy(null)
               .where("s").matches("oh").bindsTo(El.property("ee.flee"))
               .withPriority(0)
               .withId("id")

               .addRule()
               .when(Path.matches("/{p}/{s}"))
               .perform(operation)
               .where("p").matches("blah").bindsTo(El.property("whee.glee"))
               .where("s").matches("oh").bindsTo(El.property("ee.flee"))
               .constrainedBy(constraint).convertedBy(converter).transposedBy(transposition).validatedBy(validator)
               .configuredBy(configurator)
               .withId("id")
               .withPriority(0)

               .addRule()
               .when(Path.matches("/{p}/{s}"))
               .otherwise(operation)
               .where("p")
               .configuredBy(constraint).configuredBy(converter).configuredBy(transposition).configuredBy(validator);
   }

   @Test(expected = IllegalArgumentException.class)
   public void testConfigureUndefinedParameter() throws Exception
   {
      ConfigurationBuilder.begin()
               .addRule()
               .when(new True())
               .perform(operation)
               .otherwise(operation)
               .where("p");
   }

   @Test(expected = IllegalArgumentException.class)
   public void testConfigureUndefinedParameter2() throws Exception
   {
      ConfigurationBuilder.begin()
               .addRule()
               .when(new True())
               .otherwise(operation)
               .where("p");
   }

   @Test(expected = IllegalArgumentException.class)
   public void testConfigureUndefinedParameter3() throws Exception
   {
      ConfigurationBuilder.begin()
               .addRule()
               .when(new True())
               .perform(operation)
               .where("p");
   }

   @Test
   public void testFluentAPI() throws Exception
   {
      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation, operation).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation)
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation)
               .otherwise(otherwise)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation, operation)
               .otherwise(otherwise, otherwise)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .perform(operation)
               .otherwise(otherwise, otherwise)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .perform(operation)
               .otherwise(otherwise)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .perform(operation)
               .otherwise(otherwise)
               .withPriority(0)
               .withId("id").addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .otherwise(otherwise)
               .withPriority(0)
               .withId("id").addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .otherwise(otherwise)
               .withId("id")
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .otherwise(otherwise)
               .withPriority(0).addRule();

      ConfigurationBuilder.begin()
               .addRule()
               .when(new False())
               .otherwise(otherwise).addRule();
   }

}
TOP

Related Classes of org.ocpsoft.rewrite.config.ConfigurationBuilderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.