/* * Copyright (c) 2008, The Codehaus. All Rights Reserved. * * 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.codehaus.httpcache4j; import static org.junit.Assert.*; import org.junit.Test; import java.time.LocalDateTime; public class ConditionalsTest { @Test public void testIfMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(Tag.parse("\"foo\"").get()); assertEquals(1, conditionals.getMatch().size()); conditionals = conditionals.addIfMatch(Tag.parse("\"bar\"").get()); assertEquals(2, conditionals.getMatch().size()); Header header = new Header(HeaderConstants.IF_MATCH, "\"foo\",\"bar\""); assertEquals(header, conditionals.toHeaders().getFirstHeader(HeaderConstants.IF_MATCH).get()); } @Test public void testIfMatchDuplicate() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(Tag.parse("\"foo\"").get()); conditionals = conditionals.addIfMatch(Tag.parse("\"foo\"").get()); assertEquals(1, conditionals.getMatch().size()); } @Test public void testIfNoneMatchDuplicate() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"foo\"").get()); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"foo\"").get()); assertEquals(1, conditionals.getNoneMatch().size()); } @Test public void testIfMatchWithNullTag() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(null); assertEquals(1, conditionals.getMatch().size()); try { conditionals.addIfMatch(Tag.parse("\"bar\"").get()); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { //expected } assertEquals(1, conditionals.getMatch().size()); } @Test public void testIfNoneMatchWithNullTag() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(null); assertEquals(1, conditionals.getNoneMatch().size()); try { conditionals.addIfNoneMatch(Tag.parse("\"bar\"").get()); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { //expected } assertEquals(1, conditionals.getNoneMatch().size()); } @Test public void testIfMatchStar() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(Tag.parse("*").get()); assertEquals(1, conditionals.getMatch().size()); try { conditionals.addIfMatch(Tag.parse("\"bar\"").get()); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } @Test public void testIfNoneMatchStar() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("*").get()); assertEquals(1, conditionals.getNoneMatch().size()); try { conditionals.addIfNoneMatch(Tag.parse("\"bar\"").get()); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } @Test public void testIfNoneMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"foo\"").get()); assertEquals(1, conditionals.getNoneMatch().size()); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"bar\"").get()); assertEquals(2, conditionals.getNoneMatch().size()); Header header = new Header(HeaderConstants.IF_NONE_MATCH, "\"foo\",\"bar\""); assertEquals(header, conditionals.toHeaders().getFirstHeader(HeaderConstants.IF_NONE_MATCH).get()); } @Test public void testIfNoneMatchAndIfMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"foo\"").get()); assertEquals(1, conditionals.getNoneMatch().size()); try { conditionals.addIfMatch(Tag.parse("\"bar\"").get()); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } @Test public void testIfModifiedSince() { Conditionals conditionals = new Conditionals(); LocalDateTime dateTime = LocalDateTime.now(); conditionals = conditionals.ifModifiedSince(dateTime); Header header = HeaderUtils.toHttpDate(HeaderConstants.IF_MODIFIED_SINCE, dateTime); assertEquals(header, conditionals.toHeaders().getFirstHeader(HeaderConstants.IF_MODIFIED_SINCE).get()); } @Test public void testIfUnmodifiedSince() { Conditionals conditionals = new Conditionals(); LocalDateTime dateTime = LocalDateTime.now(); conditionals = conditionals.ifUnModifiedSince(dateTime); Header header = HeaderUtils.toHttpDate(HeaderConstants.IF_UNMODIFIED_SINCE, dateTime); assertEquals(header, conditionals.toHeaders().getFirstHeader(HeaderConstants.IF_UNMODIFIED_SINCE).get()); } @Test public void testIfModifiedSinceAndIfMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(Tag.parse("\"bar\"").get()); assertEquals(1, conditionals.getMatch().size()); LocalDateTime dateTime = LocalDateTime.now(); try { conditionals.ifModifiedSince(dateTime); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } assertFalse(conditionals.getModifiedSince().isPresent()); } @Test public void testIfModifiedSinceAndIfNoneMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"bar\"").get()); assertEquals(1, conditionals.getNoneMatch().size()); LocalDateTime dateTime = LocalDateTime.now(); conditionals = conditionals.ifModifiedSince(dateTime); assertTrue(conditionals.getModifiedSince().isPresent()); } @Test public void testIfUnModifiedSinceAndIfMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfMatch(Tag.parse("\"bar\"").get()); assertEquals(1, conditionals.getMatch().size()); LocalDateTime dateTime = LocalDateTime.now(); conditionals = conditionals.ifUnModifiedSince(dateTime); assertTrue(conditionals.getUnModifiedSince().isPresent()); } @Test public void testIfUnModifiedSinceAndIfNoneMatch() { Conditionals conditionals = new Conditionals(); conditionals = conditionals.addIfNoneMatch(Tag.parse("\"bar\"").get()); assertEquals(1, conditionals.getNoneMatch().size()); LocalDateTime dateTime = LocalDateTime.now(); try { conditionals.ifUnModifiedSince(dateTime); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } assertFalse(conditionals.getUnModifiedSince().isPresent()); } @Test public void testIfModifiedSinceAndIfUnmodifiedSince() { Conditionals conditionals = new Conditionals(); LocalDateTime dateTime = LocalDateTime.now(); conditionals = conditionals.ifUnModifiedSince(dateTime); assertNotNull(conditionals.getUnModifiedSince()); try { conditionals.ifModifiedSince(dateTime); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } @Test public void testImmutability() { Conditionals conditionals = new Conditionals(); LocalDateTime dateTime = LocalDateTime.now(); Conditionals conditionals2 = conditionals.ifUnModifiedSince(dateTime); assertNotSame(conditionals, conditionals2); assertEquals(0, conditionals.getNoneMatch().size()); assertEquals(0, conditionals.getMatch().size()); assertFalse(conditionals.getModifiedSince().isPresent()); assertFalse(conditionals.getUnModifiedSince().isPresent()); assertEquals(0, conditionals2.getNoneMatch().size()); assertEquals(0, conditionals2.getMatch().size()); assertFalse(conditionals2.getModifiedSince().isPresent()); assertTrue(conditionals2.getUnModifiedSince().isPresent()); } }