1 /*
2 * Copyright (c) 2003-2008 by Cosylab d. d.
3 *
4 * This file is part of Java-Common.
5 *
6 * Java-Common is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * Java-Common is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Java-Common. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 package com.cosylab.util;
21
22 import java.util.GregorianCalendar;
23
24 /**
25 * Mock implementation of a {@link TimeProvider}, which returns pre-set time.
26 * Especially useful in unit tests. Also supports auto-advance of time (1 second
27 * by default).
28 *
29 * @author Klemen Zagar, Cosylab
30 */
31 public class MockTimeProvider implements TimeProvider {
32 private long millis;
33 private long advance = 1000;
34
35 /**
36 * Constructor sets the initial mock time.
37 */
38 public MockTimeProvider() {
39 this.millis = new GregorianCalendar(2008, 1, 1, 0, 0, 0)
40 .getTimeInMillis();
41 }
42
43 /**
44 * Set the amount of time (in milliseconds) by which return value of
45 * {@linkplain #getTimeInMillis()} will advance every time it is called.
46 *
47 * @param advance
48 * Mock time provider's auto advance (in milliseconds).
49 */
50 public void setAutoAdvance(long advance) {
51 this.advance = advance;
52 }
53
54 /**
55 * Set the current time, which will be returned the next time when
56 * {@link #getTimeInMillis()} is called.
57 *
58 * @param millis
59 * Current time.
60 */
61 public void setTimeInMillis(long millis) {
62 this.millis = millis;
63 }
64
65 /*
66 * (non-Javadoc)
67 *
68 * @see com.cosylab.util.TimeProvider#getTimeInMillis()
69 */
70 public long getTimeInMillis() {
71 // Time to return.
72 long ret = this.millis;
73 // Auto-advance for the next time we are called.
74 this.millis += this.advance;
75 return ret;
76 }
77 }