1e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/*
2e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Copyright 2007 the original author or authors.
3e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
4e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Licensed under the Apache License, Version 2.0 (the "License");
5e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * you may not use this file except in compliance with the License.
6e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * You may obtain a copy of the License at
7e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
8e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *      http://www.apache.org/licenses/LICENSE-2.0
9e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
10e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Unless required by applicable law or agreed to in writing, software
11e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * distributed under the License is distributed on an "AS IS" BASIS,
12e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * See the License for the specific language governing permissions and
14e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * limitations under the License.
15e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
16e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpackage org.mockftpserver.core.util;
17e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
18e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.ArrayList;
19e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Collection;
20e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Collections;
21e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.HashMap;
22e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Map;
23e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
24e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
25e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.apache.log4j.Logger;
26e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.util.Assert;
27e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.util.AssertFailedException;
28e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.test.AbstractTest;
29e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
30e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/**
31e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Tests for the Assert class
32e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
33e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @version $Revision$ - $Date$
34e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
35e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @author Chris Mair
36e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
37e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpublic class AssertTest extends AbstractTest {
38e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
39e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final Logger LOG = Logger.getLogger(AssertTest.class);
40e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
41e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
42e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * This interface defines a generic closure (a generic wrapper for a block of code).
43e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
44e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static interface ExceptionClosure {
45e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        /**
46e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair         * Execute arbitrary logic that can throw any type of Exception
47e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair         * @throws Exception
48e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair         */
49e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        public void execute() throws Exception;
50e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
51e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
52e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
53e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	private static final String MESSAGE = "exception message";
54e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
55e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
56e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Test the assertNull() method
57e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
58e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void testAssertNull() {
59e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
60e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Assert.isNull(null, MESSAGE);
61e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
62e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        try {
63e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            Assert.isNull("OK", MESSAGE);
64e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            fail("Expected IllegalArumentException");
65e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
66e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (AssertFailedException expected) {
67e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            LOG.info("Expected: " + expected);
68e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            assertExceptionMessageContains(expected, MESSAGE);
69e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
70e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
71e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
72e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
73e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
74e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertNotNull() method
75e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
76e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertNotNull() {
77e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
78e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.notNull("OK", MESSAGE);
79e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
80e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		try {
81e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			Assert.notNull(null, MESSAGE);
82e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			fail("Expected IllegalArumentException");
83e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		}
84e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		catch (AssertFailedException expected) {
85e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			LOG.info("Expected: " + expected);
86e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            assertExceptionMessageContains(expected, MESSAGE);
87e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		}
88e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
89e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
90e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
91e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertTrue() method
92e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
93e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertTrue() throws Exception {
94e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
95e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.isTrue(true, MESSAGE);
96e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
97e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
98e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
99e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.isTrue(false, MESSAGE);
100e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
101e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
102e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
103e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
104e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
105e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertFalse() method
106e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
107e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertFalse() throws Exception {
108e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
109e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.isFalse(false, MESSAGE);
110e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
111e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
112e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
113e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.isFalse(true, MESSAGE);
114e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
115e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
116e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
117e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
118e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
119e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertNotEmpty(Collection,String) method
120e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
121e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertNotNullOrEmpty_Collection() throws Exception {
122e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
123e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		final Collection COLLECTION = Collections.singletonList("item");
124e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.notNullOrEmpty(COLLECTION, MESSAGE);
125e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
126e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
127e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
128e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty((Collection) null, MESSAGE);
129e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
130e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
131e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
132e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
133e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
134e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty(new ArrayList(), MESSAGE);
135e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
136e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
137e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
138e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
139e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
140e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertNotEmpty(Map,String) method
141e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
142e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertNotNullOrEmpty_Map() throws Exception {
143e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
144e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		final Map MAP = Collections.singletonMap("key", "value");
145e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.notNullOrEmpty(MAP, MESSAGE);
146e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
147e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
148e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
149e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty((Map) null, MESSAGE);
150e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
151e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
152e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
153e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
154e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
155e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty(new HashMap(), MESSAGE);
156e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
157e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
158e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
159e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
160e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
161e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertNotEmpty(Objecct[],String) method
162e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
163e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertNotNullOrEmpty_array() throws Exception {
164e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
165e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		final Object[] ARRAY = { "1", "2" };
166e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.notNullOrEmpty(ARRAY, MESSAGE);
167e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
168e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
169e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
170e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty((Object[]) null, MESSAGE);
171e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
172e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
173e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
174e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
175e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
176e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                Assert.notNullOrEmpty(new String[] { }, MESSAGE);
177e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
178e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
179e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
180e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
181e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
182e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Test the assertNotEmpty(String,String) method
183e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
184e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	public void testAssertNotNullOrEmpty_String() throws Exception {
185e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
186e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		Assert.notNullOrEmpty("OK", MESSAGE);
187e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
188e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
189e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
190e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty((String) null, MESSAGE);
191e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
192e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
193e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
194e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		verifyThrowsAssertFailedException(true, new ExceptionClosure() {
195e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			public void execute() throws Exception {
196e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				Assert.notNullOrEmpty("", MESSAGE);
197e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
198e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		});
199e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
200e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
201e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	//-------------------------------------------------------------------------
202e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	// Helper Methods
203e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	//-------------------------------------------------------------------------
204e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
205e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private void assertExceptionMessageContains(Throwable exception, String text) {
206e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        String message = exception.getMessage();
207e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        assertTrue("Exception message [" + message + "] does not contain [" + text + "]", message.indexOf(text) != -1);
208e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
209e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
210e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	/**
211e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * Verify that execution of the ExceptionClosure (code block) results in an
212e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * AssertFailedException being thrown with the constant MESSAGE as its message.
213e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 * @param closure - the ExceptionClosure encapsulating the code to execute
214e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	 */
215e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	private void verifyThrowsAssertFailedException(boolean checkMessage, ExceptionClosure closure)
216e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		throws Exception {
217e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
218e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		try {
219e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			closure.execute();
220e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			fail("Expected IllegalArumentException");
221e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		}
222e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		catch (AssertFailedException expected) {
223e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			LOG.info("Expected: " + expected);
224e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			if (checkMessage) {
225e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair				assertExceptionMessageContains(expected, MESSAGE);
226e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair			}
227e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair		}
228e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair	}
229e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
230e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair}
231