TestTimeUtil: Add methods for temporarily setting clock step
A test may want to use a different clock step or freeze time only for a portion of a test method. Add some methods to make this easy with an AutoCloseable. Change-Id: Ie90504cceae73595dacc14a565179596fe3b96f3
This commit is contained in:
		@@ -62,6 +62,41 @@ public class TestTimeUtil {
 | 
				
			|||||||
    TimeUtil.setCurrentMillisSupplier(() -> clockMs.getAndAdd(clockStepMs));
 | 
					    TimeUtil.setCurrentMillisSupplier(() -> clockMs.getAndAdd(clockStepMs));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** {@link AutoCloseable} handle returned by {@link #withClockStep(long, TimeUnit)}. */
 | 
				
			||||||
 | 
					  public static class TempClockStep implements AutoCloseable {
 | 
				
			||||||
 | 
					    private final long oldClockStepMs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private TempClockStep(long clockStep, TimeUnit clockStepUnit) {
 | 
				
			||||||
 | 
					      oldClockStepMs = clockStepMs;
 | 
				
			||||||
 | 
					      setClockStep(clockStep, clockStepUnit);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void close() {
 | 
				
			||||||
 | 
					      setClockStep(oldClockStepMs, TimeUnit.MILLISECONDS);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Set a clock step only for the scope of a single try-with-resources block.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param clockStep amount to increment clock by on each lookup.
 | 
				
			||||||
 | 
					   * @param clockStepUnit time unit for {@code clockStep}.
 | 
				
			||||||
 | 
					   * @return {@link AutoCloseable} handle which resets the clock step to its old value on close.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static TempClockStep withClockStep(long clockStep, TimeUnit clockStepUnit) {
 | 
				
			||||||
 | 
					    return new TempClockStep(clockStep, clockStepUnit);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Freeze the clock to stop moving only for the scope of a single try-with-resources block.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @return {@link AutoCloseable} handle which resets the clock step to its old value on close.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static TempClockStep freezeClock() {
 | 
				
			||||||
 | 
					    return withClockStep(0, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * Set the clock to a specific timestamp.
 | 
					   * Set the clock to a specific timestamp.
 | 
				
			||||||
   *
 | 
					   *
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user