content: /*
   * Copyright (C) 2010.
   * All rights reserved.
   */
  package ro.isdc.wro.cache;
  
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertFalse;
  
  import org.junit.Test;
  
  import ro.isdc.wro.model.resource.ResourceType;
  
  /**
   * {@link CacheKey} test class
   *
   * @author Alex Objelean
   */
  public class TestCacheKey {
  
    @Test
    public void testEquals() {
      final CacheKey key1 = new CacheKey("g1", ResourceType.JS, true);
      final CacheKey key2 = new CacheKey("g1", ResourceType.JS, true);
      assertEquals(key1, key2);
    }
  
    @Test
    public void testEquals2() {
      final CacheKey key1 = new CacheKey("g1", ResourceType.JS, false);
      final CacheKey key2 = new CacheKey("g1", ResourceType.JS, true);
      assertFalse(key1.equals(key2));
    }
  
    private CacheKey createValidCacheKey() {
      return new CacheKey("g1", ResourceType.JS, false);
    }
  
    @Test
    public void addingNullAttributeKeyShouldHaveNoEffect() {
      final CacheKey key = createValidCacheKey().addAttribute(null, "");
      assertEquals(key, createValidCacheKey());
    }
  
    @Test
    public void addingNullAttributeValueShouldHaveNoEffect() {
      final CacheKey key = createValidCacheKey().addAttribute("key1", null);
      assertEquals(key, createValidCacheKey());
    }
  
    @Test
    public void shouldBeSameWhenContainingIdenticalAttributes() {
      final CacheKey key1 = createValidCacheKey().addAttribute("k1", "v1");
      final CacheKey key2 = createValidCacheKey().addAttribute("k1", "v1");
      assertEquals(key1, key2);
      assertEquals(key1.hashCode(), key2.hashCode());
    }
  
    @Test
    public void shouldDifferWhenContainingDifferentAttributes() {
      final CacheKey key1 = createValidCacheKey().addAttribute("k1", "v1").addAttribute("k2", "v2");
      final CacheKey key2 = createValidCacheKey().addAttribute("k1", "v1");
      assertFalse(key1.equals(key2));
      assertFalse(key1.hashCode() == key2.hashCode());
    }
  }
  