@@ -0,0 +1,1579 @@
+package org.realityforge.gwt.appcache.server.propertyprovider;%0A%0Aimport javax.servlet.http.HttpServletRequest;%0Aimport org.testng.annotations.DataProvider;%0Aimport org.testng.annotations.Test;%0Aimport static org.mockito.Mockito.*;%0Aimport static org.testng.Assert.*;%0A%0Apublic class UserAgentPropertyProviderTest%0A%7B%0A  @DataProvider( name = %22AgentMapping%22 )%0A  public Object%5B%5D%5B%5D getAgentMapping()%0A  %7B%0A    return new Object%5B%5D%5B%5D %7B%0A      %7B %22Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36%22,%0A        %22safari%22 %7D,%0A      %7B %22opera%22, %22opera%22 %7D,%0A      %7B %22Gecko and some other text?%22, %22gecko1_8%22 %7D,%0A    %7D;%0A  %7D%0A%0A%0A  @Test( dataProvider = %22AgentMapping%22 )%0A  public void userAgentExtraction( final String userAgent, final String value )%0A  %7B%0A    final UserAgentPropertyProvider provider = new UserAgentPropertyProvider();%0A%0A    assertEquals( provider.getPropertyName(), %22user.agent%22 );%0A    final HttpServletRequest request = mock( HttpServletRequest.class );%0A    when( request.getHeader( %22User-Agent%22 ) ).thenReturn( userAgent );%0A    assertEquals( provider.getPropertyValue( request ), value );%0A  %7D%0A%0A  @Test( expectedExceptions = IllegalStateException.class )%0A  public void badUserAgent()%0A  %7B%0A    final UserAgentPropertyProvider provider = new UserAgentPropertyProvider();%0A%0A    assertEquals( provider.getPropertyName(), %22user.agent%22 );%0A    final HttpServletRequest request = mock( HttpServletRequest.class );%0A    when( request.getHeader( %22User-Agent%22 ) ).thenReturn( %22SomethingElse%22 );%0A    provider.getPropertyValue( request );%0A  %7D%0A%7D%0A

Add some basic testing around proeprty provider