001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.net.ftp.parser;
018 import junit.framework.TestCase;
019
020 import java.text.SimpleDateFormat;
021 import java.util.Locale;
022 import org.apache.commons.net.ftp.FTPFile;
023 import org.apache.commons.net.ftp.FTPFileEntryParser;
024
025 /**
026 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a>
027 * @version $Id: FTPParseTestFramework.java 437134 2006-08-26 09:36:36Z rwinston $
028 */
029 public abstract class FTPParseTestFramework extends TestCase
030 {
031 private FTPFileEntryParser parser = null;
032 protected SimpleDateFormat df = null;
033
034 /**
035 * @see junit.framework.TestCase#TestCase(String)
036 */
037 public FTPParseTestFramework(String name)
038 {
039 super(name);
040 }
041
042 /**
043 * Method testBadListing.
044 * Tests that parser provided failures actually fail.
045 * @throws Exception
046 */
047 public void testBadListing() throws Exception
048 {
049
050 String[] badsamples = getBadListing();
051 for (int i = 0; i < badsamples.length; i++)
052 {
053
054 String test = badsamples[i];
055 FTPFile f = parser.parseFTPEntry(test);
056 assertNull("Should have Failed to parse " + test,
057 nullFileOrNullDate(f));
058
059 doAdditionalBadTests(test, f);
060 }
061 }
062
063 /**
064 * Method testGoodListing.
065 * Test that parser provided listings pass.
066 * @throws Exception
067 */
068 public void testGoodListing() throws Exception
069 {
070
071 String[] goodsamples = getGoodListing();
072 for (int i = 0; i < goodsamples.length; i++)
073 {
074
075 String test = goodsamples[i];
076 FTPFile f = parser.parseFTPEntry(test);
077 assertNotNull("Failed to parse " + test,
078 f);
079
080 doAdditionalGoodTests(test, f);
081 }
082 }
083
084 /**
085 * during processing you could hook here to do additional tests
086 *
087 * @param test raw entry
088 * @param f parsed entry
089 */
090 protected void doAdditionalGoodTests(String test, FTPFile f)
091 {
092 }
093
094 /**
095 * during processing you could hook here to do additional tests
096 *
097 * @param test raw entry
098 * @param f parsed entry
099 */
100 protected void doAdditionalBadTests(String test, FTPFile f)
101 {
102 }
103
104 /**
105 * Method getBadListing.
106 * Implementors must provide a listing that contains failures.
107 * @return String[]
108 */
109 protected abstract String[] getBadListing();
110
111 /**
112 * Method getGoodListing.
113 * Implementors must provide a listing that passes.
114 * @return String[]
115 */
116 protected abstract String[] getGoodListing();
117
118 /**
119 * Method getParser.
120 * Provide the parser to use for testing.
121 * @return FTPFileEntryParser
122 */
123 protected abstract FTPFileEntryParser getParser();
124
125 /**
126 * Method testParseFieldsOnDirectory.
127 * Provide a test to show that fields on a directory entry are parsed correctly.
128 * @throws Exception
129 */
130 public abstract void testParseFieldsOnDirectory() throws Exception;
131
132 /**
133 * Method testParseFieldsOnFile.
134 * Provide a test to show that fields on a file entry are parsed correctly.
135 * @throws Exception
136 */
137 public abstract void testParseFieldsOnFile() throws Exception;
138
139 /**
140 * @see junit.framework.TestCase#setUp()
141 */
142 @Override
143 protected void setUp() throws Exception
144 {
145 super.setUp();
146 parser = getParser();
147 df = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US);
148 }
149
150 /**
151 * Check if FTPFile entry parsing failed; i.e. if entry is null or date is null.
152 *
153 * @param f FTPFile entry - may be null
154 * @return null if f is null or the date is null
155 */
156 protected FTPFile nullFileOrNullDate(FTPFile f) {
157 if (f==null){
158 return null;
159 }
160 if (f.getTimestamp() == null){
161 return null;
162 }
163 return f;
164 }
165 }