import java.time.Instant; 
import java.time.ZoneId; 
import java.time.ZoneOffset; 
import java.time.zone.ZoneOffsetTransition; 
import java.time.zone.ZoneRules; 

import org.junit.Assert; 
import org.junit.Test; 

public class JI9048480 {
	@Test 
	public void testPreviousEuropeBerlinZone() { 
		final Instant now = Instant.now(); 
		final ZoneRules zoneRules = ZoneId.of("Europe/Berlin").getRules(); 
		final Instant transitionInstant = zoneRules.nextTransition(now).getInstant(); 

		// BEFORE TRANSITION 
		{ 
			final Instant beforeTransitionInstant = transitionInstant.minusMillis(1); 
			final ZoneOffset offset = zoneRules.getOffset(beforeTransitionInstant); 
			final ZoneOffsetTransition prevTransition = zoneRules.previousTransition(beforeTransitionInstant); 
			final ZoneOffsetTransition nextTransition = zoneRules.nextTransition(beforeTransitionInstant); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), nextTransition.getOffsetBefore()); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), offset); 
			Assert.assertEquals(nextTransition.getOffsetBefore(), offset); 
		} 

		// AFTER TRANSITION 
		{ 
			final Instant afterTransitionInstant = transitionInstant.plusMillis(1); 
			final ZoneOffset offset = zoneRules.getOffset(afterTransitionInstant); 
			final ZoneOffsetTransition prevTransition = zoneRules.previousTransition(afterTransitionInstant); 
			final ZoneOffsetTransition nextTransition = zoneRules.nextTransition(afterTransitionInstant); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), nextTransition.getOffsetBefore()); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), offset); 
			Assert.assertEquals(nextTransition.getOffsetBefore(), offset); 
		} 

		// AT TRANSITION 
		{ 
			final Instant atTransitionInstant = transitionInstant; 
			final ZoneOffset offset = zoneRules.getOffset(atTransitionInstant); 
			final ZoneOffsetTransition prevTransition = zoneRules.previousTransition(atTransitionInstant); 
			final ZoneOffsetTransition nextTransition = zoneRules.nextTransition(atTransitionInstant); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), nextTransition.getOffsetBefore()); 
			Assert.assertEquals(prevTransition.getOffsetAfter(), offset); 
			Assert.assertEquals(nextTransition.getOffsetBefore(), offset); 
		} 
	} 
}
