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