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