| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.jackrabbit.oak.spi.security.authorization.restriction; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import com.google.common.collect.ImmutableList; |
| import org.apache.jackrabbit.oak.api.PropertyState; |
| import org.apache.jackrabbit.oak.api.Type; |
| import org.apache.jackrabbit.oak.plugins.memory.PropertyStates; |
| import org.jetbrains.annotations.NotNull; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotEquals; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| /** |
| * Tests for {@link RestrictionImpl} |
| */ |
| public class RestrictionImplTest { |
| |
| private final Type type = Type.NAME; |
| private final String name = "test:defName"; |
| private final String value = "value"; |
| private final boolean isMandatory = true; |
| private RestrictionImpl restriction; |
| |
| @Before |
| public void before() throws Exception { |
| PropertyState property = createProperty(name, value, type); |
| restriction = new RestrictionImpl(property, isMandatory); |
| } |
| |
| private static PropertyState createProperty(String name, String value, Type type) { |
| return PropertyStates.createProperty(name, value, type); |
| } |
| |
| @Test |
| public void testGetProperty() { |
| assertEquals(createProperty(name, value, type), restriction.getProperty()); |
| } |
| |
| @Test |
| public void testGetDefinition() { |
| assertEquals(new RestrictionDefinitionImpl(name, type, isMandatory), restriction.getDefinition()); |
| } |
| |
| @Test |
| public void testRestrictionFromDefinition() { |
| Restriction r = new RestrictionImpl(restriction.getProperty(), restriction.getDefinition()); |
| assertEquals(restriction, r); |
| } |
| |
| @Test |
| public void testGetName() { |
| assertEquals(name, restriction.getDefinition().getName()); |
| } |
| |
| @Test |
| public void testGetRequiredType() { |
| assertEquals(Type.NAME, restriction.getDefinition().getRequiredType()); |
| } |
| |
| @Test |
| public void testIsMandatory() { |
| assertTrue(restriction.getDefinition().isMandatory()); |
| } |
| |
| @Test |
| public void testInvalid() { |
| try { |
| new RestrictionImpl(null, false); |
| fail("Creating RestrictionDefinition with null name should fail."); |
| } catch (NullPointerException e) { |
| // success |
| } |
| } |
| |
| @Test |
| public void testEquals() { |
| // same definition |
| assertEquals(restriction, new RestrictionImpl(createProperty(name, value, type), isMandatory)); |
| } |
| |
| @Test |
| public void testEqualsSameDefinition() { |
| // same definition |
| assertEquals(restriction, new RestrictionImpl(restriction.getProperty(), restriction.getDefinition())); |
| } |
| |
| @Test |
| public void testEqualsSameObject() { |
| // same object |
| assertEquals(restriction, restriction); |
| } |
| |
| @Test |
| public void testNotEqual() { |
| List<Restriction> rs = new ArrayList(); |
| // - different type |
| rs.add(new RestrictionImpl(PropertyStates.createProperty(name, value, Type.STRING), isMandatory)); |
| // - different multi-value status |
| rs.add(new RestrictionImpl(PropertyStates.createProperty(name, ImmutableList.of(value), Type.NAMES), isMandatory)); |
| // - different name |
| rs.add(new RestrictionImpl(createProperty("otherName", value, type), isMandatory)); |
| // - different value |
| rs.add(new RestrictionImpl(createProperty(name, "otherValue", type), isMandatory)); |
| // - different mandatory flag |
| rs.add(new RestrictionImpl(createProperty(name, value, type), !isMandatory)); |
| // - different impl |
| rs.add(new Restriction() { |
| @NotNull |
| @Override |
| public RestrictionDefinition getDefinition() { |
| return new RestrictionDefinitionImpl(name, type, isMandatory); |
| } |
| |
| @NotNull |
| @Override |
| public PropertyState getProperty() { |
| return createProperty(name, value, type); |
| } |
| }); |
| |
| for (Restriction r : rs) { |
| assertFalse(restriction.equals(r)); |
| } |
| } |
| |
| @Test |
| public void testSameHashCode() { |
| // same definition |
| assertEquals(restriction.hashCode(), new RestrictionImpl(createProperty(name, value, type), isMandatory).hashCode()); |
| } |
| |
| @Test |
| public void testNotSameHashCode() { |
| List<Restriction> rs = new ArrayList<Restriction>(); |
| // - different type |
| rs.add(new RestrictionImpl(PropertyStates.createProperty(name, value, Type.STRING), isMandatory)); |
| // - different multi-value status |
| rs.add(new RestrictionImpl(PropertyStates.createProperty(name, ImmutableList.of(value), Type.NAMES), isMandatory)); |
| // - different name |
| rs.add(new RestrictionImpl(createProperty("otherName", value, type), isMandatory)); |
| // - different value |
| rs.add(new RestrictionImpl(createProperty(name, "otherValue", type), isMandatory)); |
| // - different mandatory flag |
| rs.add(new RestrictionImpl(createProperty(name, value, type), !isMandatory)); |
| // - different impl |
| rs.add(new Restriction() { |
| @NotNull |
| @Override |
| public RestrictionDefinition getDefinition() { |
| return new RestrictionDefinitionImpl(name, type, isMandatory); |
| } |
| |
| @NotNull |
| @Override |
| public PropertyState getProperty() { |
| return createProperty(name, value, type); |
| } |
| }); |
| |
| for (Restriction r : rs) { |
| assertNotEquals(restriction.hashCode(), r.hashCode()); |
| } |
| } |
| } |