Author: rdonkin Date: Mon Mar 26 13:33:08 2007 New Revision: 522620 URL: http://svn.apache.org/viewvc?view=rev&rev=522620 Log: Utility that helps test sieve scripts before upload.
Added: james/jsieve/trunk/src/main/java/org/apache/jsieve/util/ james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptChecker.java james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/package.html james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/ james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/MockMimeMessage.java - copied, changed from r521990, james/server/trunk/phoenix-deployment/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java james/jsieve/trunk/src/test/java/org/apache/jsieve/util/ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/MockAction.java james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterActionsTest.java james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterHeadersTest.java james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterMailTest.java james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterNoMessageSetTest.java Added: james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java (added) +++ james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,230 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.ListIterator; + +import javax.mail.Header; +import javax.mail.Message; +import javax.mail.MessagingException; + +import org.apache.jsieve.SieveException; +import org.apache.jsieve.mail.Action; +import org.apache.jsieve.mail.MailAdapter; +import org.apache.jsieve.mail.SieveMailException; + +/** + * Checks script execution for an email. + * The wrapped email is set by called [EMAIL PROTECTED] #setMail}. + * Actions are recorded on [EMAIL PROTECTED] #executedActions} + * and can be retrieved by [EMAIL PROTECTED] #getExecutedActions(). + */ +public class ScriptCheckMailAdapter implements MailAdapter { + + private final List actions; + private final List executedActions; + + private Message mail = null; + + public ScriptCheckMailAdapter() { + actions = new ArrayList(); + executedActions = new ArrayList(); + } + + /** + * Gets the wrapped email. + * @return <code>Message</code>, possibly null + */ + public Message getMail() { + return mail; + } + + /** + * Sets the wrapped email and [EMAIL PROTECTED] #reset}s the adapter + * ready for another execution. + * @param mail <code>Message</code>, possibly null + */ + public void setMail(Message mail) { + this.mail = mail; + reset(); + } + + + + /** + * Method addAction adds an Action to the List of Actions to be performed by the + * receiver. + * @param action + */ + public void addAction(final Action action) { + actions.add(action); + } + + /** + * Method executeActions. Applies the Actions accumulated by the receiver. + */ + public void executeActions() throws SieveException { + executedActions.clear(); + executedActions.addAll(actions); + } + + /** + * Gets the actions accumulated when [EMAIL PROTECTED] #executedActions} + * was last called. + * @return <code>List</code> of [EMAIL PROTECTED] Action}s, not null. + * This list is a modifiable copy + */ + public List getExecutedActions() { + final ArrayList result = new ArrayList(executedActions); + return result; + } + + /** + * Method getActions answers the List of Actions accumulated by the receiver. + * Implementations may elect to supply an unmodifiable collection. + * @return <code>List</code> of [EMAIL PROTECTED] Action}'s, not null, possibly unmodifiable + */ + public List getActions() { + final List result = Collections.unmodifiableList(actions); + return result; + } + + /** + * Method getActionIteraror answers an Iterator over the List of Actions + * accumulated by the receiver. Implementations may elect to supply + * an unmodifiable iterator. + * @return <code>ListIterator</code>, not null, possibly unmodifiable + */ + public ListIterator getActionsIterator() { + final List unmodifiableActions = getActions(); + final ListIterator result = unmodifiableActions.listIterator(); + return result; + } + + /** + * Resets executed and accumlated actions. + * An instance may be safely reused to check a script + * once this method has been called. + */ + public void reset() { + executedActions.clear(); + actions.clear(); + } + + /** + * Method getHeader answers a List of all of the headers in the receiver whose + * name is equal to the passed name. If no headers are found an empty List is + * returned. + * + * @param name + * @return <code>List</code> not null, possibly empty + * @throws SieveMailException + */ + public List getHeader(String name) throws SieveMailException { + List result = Collections.EMPTY_LIST; + if (mail != null) { + try { + String[] values = mail.getHeader(name); + if (values != null) + { + result = Arrays.asList(values); + } + } catch (MessagingException e) { + throw new SieveMailException(e); + } + } + return result; + } + + /** + * Method getHeaderNames answers a List of all of the headers in the receiver. + * No duplicates are allowed. + * @return <code>List</code>, not null possible empty, possible unmodifiable + * @throws SieveMailException + */ + public List getHeaderNames() throws SieveMailException { + List results = Collections.EMPTY_LIST; + if (mail != null) + { + try { + results = new ArrayList(); + for (final Enumeration en=mail.getAllHeaders();en.hasMoreElements();) { + final Header header = (Header) en.nextElement(); + final String name = header.getName(); + if (!results.contains(name)) { + results.add(name); + } + } + } catch (MessagingException e) { + throw new SieveMailException(e); + } + } + return results; + } + + /** + * <p>Method getMatchingHeader answers a List of all of the headers in the + * receiver with the passed name. If no headers are found an empty List is + * returned. + * </p> + * + * <p>This method differs from getHeader(String) in that it ignores case and the + * whitespace prefixes and suffixes of a header name when performing the + * match, as required by RFC 3028. Thus "From", "from ", " From" and " from " + * are considered equal. + * </p> + * + * @param name + * @return <code>List</code>, not null possibly empty + * @throws SieveMailException + */ + public List getMatchingHeader(String name) throws SieveMailException { + List result = Collections.EMPTY_LIST; + if (mail != null) + { + // TODO: implementation + } + return result; + } + + /** + * Method getSize answers the receiver's message size in octets. + * @return int + * @throws SieveMailException + */ + public int getSize() throws SieveMailException { + int result = 0; + if (mail != null) + { + try { + result = mail.getSize(); + } catch (MessagingException e) { + throw new SieveMailException(e); + } + } + return result; + } + +} Added: james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptChecker.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptChecker.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptChecker.java (added) +++ james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/ScriptChecker.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,159 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; + +import org.apache.jsieve.SieveException; +import org.apache.jsieve.SieveFactory; +import org.apache.jsieve.parser.generated.ParseException; + +/** + * Checks a <code>sieve</code> script by executing it against a given mail + * and reporting the results. + */ +public class ScriptChecker { + + private final ScriptCheckMailAdapter adapter; + + public ScriptChecker() { + adapter = new ScriptCheckMailAdapter(); + } + + /** + * Checks the <code>sieve</code> script contained in the given file + * by executing it against the given message. + * @param message <code>File</code> containing the mail message to be fed to the script, + * not null + * @param script <code>File</code> containing the script to be checked + * @return <code>Results</code> of that execution + * @throws IOException + * @throws MessageException + */ + public Results check(final File message, final File script) throws IOException, MessagingException { + final FileInputStream messageStream = new FileInputStream(message); + final FileInputStream scriptStream = new FileInputStream(script); + final Results results = check(messageStream, scriptStream); + return results; + } + + /** + * Checks the <code>sieve</code> script contained in the given file + * by executing it against the given message. + * @param in <code>InputStream</code>, not null + * @return <code>Results</code> of the check, not null + * @throws IOException + * @throws MessagingException + */ + public Results check(final InputStream message, final InputStream script) throws IOException, MessagingException { + MimeMessage mimeMessage = new MimeMessage(null, message); + adapter.setMail(mimeMessage); + Results results; + try { + SieveFactory.getInstance().interpret(adapter, script); + final List executedActions = adapter.getExecutedActions(); + results = new Results(executedActions); + } catch (ParseException e) { + e.printStackTrace(); + results = new Results(e); + } catch (SieveException e) { + e.printStackTrace(); + results = new Results(e); + } + return results; + } + + /** + * Contains results of script execution. + */ + public final static class Results { + private final boolean pass; + private final Exception exception; + private final List actionsExecuted; + + private Results(final Exception ex) { + this.exception = ex; + pass = false; + actionsExecuted = null; + } + + private Results(final List actions) { + this.pass = true; + exception = null; + this.actionsExecuted = actions; + } + + /** + * Is this a pass? + * @return true if the script executed without error, + * false if errors were encountered + */ + public boolean isPass() { + return pass; + } + + /** + * Gets the exception which was thrown during execution. + * @return <code>Exception</code> or null if no exception + * was thrown + */ + public Exception getException() { + return exception; + } + + + /** + * Gets the actions executed by the script. + * @return <code>List</code> of actions + * or null if the script failed + */ + public List getActionsExecuted() { + return actionsExecuted; + } + + /** + * Prints out details of results. + */ + public String toString() { + StringBuffer buffer = new StringBuffer("Results: "); + if (pass) { + buffer.append("PASS"); + } else { + buffer.append("FAIL: "); + if (exception != null){ + if (exception instanceof ParseException) { + buffer.append("Cannot parse script"); + } else { + buffer.append("Cannot excute script"); + } + buffer.append(exception.getMessage()); + } + } + return buffer.toString(); + } + } +} Added: james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/package.html URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/package.html?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/package.html (added) +++ james/jsieve/trunk/src/main/java/org/apache/jsieve/util/check/package.html Mon Mar 26 13:33:08 2007 @@ -0,0 +1,34 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> +<!-- + + @(#)package.html + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> + +</HEAD> +<BODY> + +<p>This package contains the <code>ScriptCheckMailAdapter</code> +MailAdapter implementation. This adapter wraps a standard JavaMail +message and records the actions to be executed. +</p> +</BODY> +</HTML> Copied: james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/MockMimeMessage.java (from r521990, james/server/trunk/phoenix-deployment/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java) URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/MockMimeMessage.java?view=diff&rev=522620&p1=james/server/trunk/phoenix-deployment/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java&r1=521990&p2=james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/MockMimeMessage.java&r2=522620 ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java (original) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/javaxmail/MockMimeMessage.java Mon Mar 26 13:33:08 2007 @@ -19,7 +19,7 @@ -package org.apache.james.test.mock.javaxmail; +package org.apache.jsieve.javaxmail; import javax.mail.internet.MimeMessage; import javax.mail.internet.InternetHeaders; @@ -34,6 +34,9 @@ import java.io.OutputStream; import java.io.UnsupportedEncodingException; +/** + * Forked from JAMES server. + */ public class MockMimeMessage extends MimeMessage { private final List m_fromAddresses = new ArrayList(); @@ -53,6 +56,7 @@ private HashMap m_contentHeaders = new HashMap(); private Flags m_setFlags = new Flags(); private boolean m_doMatch; + private int m_size = -1; public MockMimeMessage() throws MessagingException { super((Session)null); @@ -176,7 +180,7 @@ } public int getSize() throws MessagingException { - return -1; // trivial implementation + return m_size ; // trivial implementation } public int getLineCount() throws MessagingException { @@ -315,9 +319,15 @@ } public String[] getHeader(String name) throws MessagingException { - String value = (String) m_contentHeaders.get(name); + Object value = m_contentHeaders.get(name); if (value == null) return null; - return new String[] {value}; + if (value instanceof String) { + String stringValue = (String) value; + return new String[] {stringValue}; + } else { + Collection values = (Collection) value; + return (String[]) values.toArray(new String[values.size()]); + } } public String getHeader(String name, String delimiter) throws MessagingException { @@ -331,7 +341,22 @@ } public void addHeader(String name, String value) throws MessagingException { - m_contentHeaders.put(name, value); + Object newValue; + Object existingValue = m_contentHeaders.get(name); + if (existingValue == null) { + newValue = value; + } + else if (existingValue instanceof String) { + List values = new ArrayList(); + values.add(existingValue); + values.add(value); + newValue = values; + } else { + List values = (List) existingValue; + values.add(value); + newValue = values; + } + m_contentHeaders.put(name, newValue); } public void removeHeader(String name) throws MessagingException { @@ -339,7 +364,25 @@ } public Enumeration getAllHeaders() throws MessagingException { - return Collections.enumeration(m_contentHeaders.values()); + final Collection results = new ArrayList(); + final Collection entries = m_contentHeaders.entrySet(); + for (Iterator it = entries.iterator(); it.hasNext();) { + Map.Entry entry = (Map.Entry) it.next(); + String name = entry.getKey().toString(); + Object value = entry.getValue(); + if (value == null) { + // ignore + } else if (value instanceof Collection) { + Collection values = (Collection) value; + for (Iterator iterValues = values.iterator();iterValues.hasNext();) { + String stringValue = (String) iterValues.next(); + results.add(new Header(name, stringValue)); + } + } else { + results.add(new Header(name, value.toString())); + } + } + return Collections.enumeration(results); } public Enumeration getMatchingHeaders(String[] names) throws MessagingException { @@ -482,5 +525,9 @@ public boolean match(SearchTerm searchTerm) throws MessagingException { return m_doMatch; + } + + public void setSize(int size) { + this.m_size = size; } } Added: james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/MockAction.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/MockAction.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/MockAction.java (added) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/MockAction.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,26 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import org.apache.jsieve.mail.Action; + +public class MockAction implements Action { + +} Added: james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterActionsTest.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterActionsTest.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterActionsTest.java (added) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterActionsTest.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,146 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import java.util.ListIterator; + +import junit.framework.TestCase; + +import org.apache.jsieve.mail.Action; + +public class ScriptCheckMailAdapterActionsTest extends TestCase { + + ScriptCheckMailAdapter adapter; + Action action; + Action anotherAction; + + protected void setUp() throws Exception { + super.setUp(); + adapter = new ScriptCheckMailAdapter(); + action = new MockAction(); + anotherAction = new MockAction(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testAddAction() { + adapter.addAction(action); + assertEquals("Running total updated", 1, adapter.getActions().size()); + assertEquals("Running total updated", action, adapter.getActions().get(0)); + adapter.addAction(anotherAction); + assertEquals("Order preserved", 2, adapter.getActions().size()); + assertEquals("Order preserved", anotherAction, adapter.getActions().get(1)); + } + + public void testExecuteActions() throws Exception { + assertNotNull(adapter.getExecutedActions()); + assertEquals("No actions executed", 0, adapter.getExecutedActions().size()); + adapter.addAction(action); + assertNotNull(adapter.getExecutedActions()); + assertEquals("No actions executed", 0, adapter.getExecutedActions().size()); + adapter.executeActions(); + assertNotNull(adapter.getExecutedActions()); + assertEquals("One action executed", 1, adapter.getExecutedActions().size()); + } + + public void testGetActions() { + assertNotNull(adapter.getActions()); + try { + adapter.getActions().add("A Little Extra"); + fail("Should not be able to modify collection"); + } catch (UnsupportedOperationException e) { + // expected + } + adapter.addAction(action); + assertNotNull(adapter.getActions()); + assertEquals("Running total updated", 1, adapter.getActions().size()); + assertEquals("Running total updated", action, adapter.getActions().get(0)); + adapter.addAction(anotherAction); + assertNotNull(adapter.getActions()); + assertEquals("Order preserved", 2, adapter.getActions().size()); + assertEquals("Order preserved", anotherAction, adapter.getActions().get(1)); + } + + public void testGetActionsIterator() { + ListIterator iterator = adapter.getActionsIterator(); + assertNotNull(iterator); + assertFalse("No actions", iterator.hasNext()); + adapter.addAction(action); + iterator = adapter.getActionsIterator(); + assertNotNull(iterator); + assertTrue("One action", iterator.hasNext()); + assertEquals("One action", action, iterator.next()); + assertFalse("One action", iterator.hasNext()); + adapter.addAction(anotherAction); + iterator = adapter.getActionsIterator(); + assertNotNull(iterator); + assertTrue("Two actions", iterator.hasNext()); + assertEquals("Two actions", action, iterator.next()); + assertTrue("Two actions", iterator.hasNext()); + assertEquals("Two actions", anotherAction, iterator.next()); + assertTrue("Two actions", iterator.hasPrevious()); + assertFalse("Two actions", iterator.hasNext()); + try { + iterator.remove(); + fail("Should not be able to modify collection"); + } catch (UnsupportedOperationException e) { + // expected + } + } + + public void testGetExecutedActions() throws Exception { + assertNotNull(adapter.getExecutedActions()); + assertEquals("No actions executed", 0, adapter.getExecutedActions().size()); + adapter.addAction(action); + assertNotNull(adapter.getExecutedActions()); + assertEquals("No actions executed", 0, adapter.getExecutedActions().size()); + adapter.executeActions(); + assertEquals("One action executed", 1, adapter.getExecutedActions().size()); + assertEquals("One action executed", action, adapter.getExecutedActions().get(0)); + adapter.addAction(anotherAction); + assertEquals("One action executed", 1, adapter.getExecutedActions().size()); + assertEquals("One action executed", action, adapter.getExecutedActions().get(0)); + adapter.executeActions(); + assertEquals("Two actions executed", 2, adapter.getExecutedActions().size()); + assertEquals("Two actions executed", action, adapter.getExecutedActions().get(0)); + assertEquals("Two actions executed", anotherAction, adapter.getExecutedActions().get(1)); + adapter.getExecutedActions().add("Whatever"); + assertEquals("Two actions executed", 2, adapter.getExecutedActions().size()); + assertEquals("Two actions executed", action, adapter.getExecutedActions().get(0)); + assertEquals("Two actions executed", anotherAction, adapter.getExecutedActions().get(1)); + adapter.executeActions(); + assertEquals("Two actions executed", 2, adapter.getExecutedActions().size()); + assertEquals("Two actions executed", action, adapter.getExecutedActions().get(0)); + assertEquals("Two actions executed", anotherAction, adapter.getExecutedActions().get(1)); + } + + public void testReset() throws Exception { + adapter.addAction(action); + adapter.addAction(anotherAction); + adapter.executeActions(); + assertEquals("Two actions executed", 2, adapter.getExecutedActions().size()); + assertEquals("Two actions", 2, adapter.getActions().size()); + adapter.reset(); + assertEquals("Two actions executed", 0, adapter.getExecutedActions().size()); + assertEquals("Two actions", 0, adapter.getActions().size()); + } +} Added: james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterHeadersTest.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterHeadersTest.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterHeadersTest.java (added) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterHeadersTest.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,59 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import java.util.List; + +import junit.framework.TestCase; + +public class ScriptCheckMailAdapterHeadersTest extends TestCase { + + ScriptCheckMailAdapter adapter; + + protected void setUp() throws Exception { + super.setUp(); + adapter = new ScriptCheckMailAdapter(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testGetHeader() throws Exception { + List headers = adapter.getHeader("From"); + assertNotNull(headers); + } + + public void testGetHeaderNames() throws Exception { + List headers = adapter.getHeaderNames(); + assertNotNull(headers); + } + + public void testGetMatchingHeader() throws Exception { + List headers = adapter.getMatchingHeader("From"); + assertNotNull(headers); + } + + public void tesGetSize() throws Exception { + int size = adapter.getSize(); + assertEquals("When mail not set, size is zero", 0, size); + } + +} Added: james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterMailTest.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterMailTest.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterMailTest.java (added) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterMailTest.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,54 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import junit.framework.TestCase; + +import org.apache.jsieve.mail.Action; + +public class ScriptCheckMailAdapterMailTest extends TestCase { + + ScriptCheckMailAdapter adapter; + Action action; + Action anotherAction; + + protected void setUp() throws Exception { + super.setUp(); + adapter = new ScriptCheckMailAdapter(); + action = new MockAction(); + anotherAction = new MockAction(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testSetMail() throws Exception { + adapter.addAction(action); + adapter.addAction(anotherAction); + adapter.executeActions(); + assertEquals("Two actions executed", 2, adapter.getExecutedActions().size()); + assertEquals("Two actions", 2, adapter.getActions().size()); + adapter.setMail(null); + assertEquals("Set mail resets", 0, adapter.getExecutedActions().size()); + assertEquals("Set mail resets", 0, adapter.getActions().size()); + } + +} Added: james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterNoMessageSetTest.java URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterNoMessageSetTest.java?view=auto&rev=522620 ============================================================================== --- james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterNoMessageSetTest.java (added) +++ james/jsieve/trunk/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapterNoMessageSetTest.java Mon Mar 26 13:33:08 2007 @@ -0,0 +1,105 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.jsieve.util.check; + +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.jsieve.javaxmail.MockMimeMessage; + +public class ScriptCheckMailAdapterNoMessageSetTest extends TestCase { + + private static final String BCC = "Bcc"; + private static final String TO = "To"; + private static final String FROM = "From"; + private static final int MESSAGE_SIZE = 100; + private static final String BCC_ADDRESS_ONE = "[EMAIL PROTECTED]"; + private static final String BCC_ADDRESS_TWO = "[EMAIL PROTECTED]"; + private static final String TO_ADDRESS = "[EMAIL PROTECTED]"; + private static final String X_HEADER_NAME = "X-Toon"; + private static final String X_HEADER_WITH_WS = " " + X_HEADER_NAME.toLowerCase(); + private static final String X_HEADER_VALUE = "Road Runner"; + private static final String X_HEADER_VALUE_ALT = "Wile E. Coyote And Road Runner"; + private static final String FROM_ADDRESS = "[EMAIL PROTECTED]"; + ScriptCheckMailAdapter adapter; + MockMimeMessage message; + + protected void setUp() throws Exception { + super.setUp(); + adapter = new ScriptCheckMailAdapter(); + message = new MockMimeMessage(); + message.addHeader(FROM, FROM_ADDRESS); + message.addHeader(TO, TO_ADDRESS); + message.addHeader(BCC, BCC_ADDRESS_ONE); + message.addHeader(BCC, BCC_ADDRESS_TWO); + message.addHeader(X_HEADER_NAME, X_HEADER_VALUE); + message.addHeader(X_HEADER_NAME.toLowerCase(), X_HEADER_VALUE.toLowerCase()); + message.addHeader(X_HEADER_WITH_WS, X_HEADER_VALUE_ALT); + message.setSize(MESSAGE_SIZE); + adapter.setMail(message); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testGetHeader() throws Exception { + List headers = adapter.getHeader(FROM); + assertNotNull(headers); + assertEquals("From header", 1, headers.size()); + assertEquals("From header", FROM_ADDRESS, headers.get(0)); + headers = adapter.getHeader(BCC); + assertEquals("Bcc headers", 2, headers.size()); + assertTrue("Bcc headers", headers.contains(BCC_ADDRESS_ONE)); + assertTrue("Bcc headers", headers.contains(BCC_ADDRESS_TWO)); + headers = adapter.getHeader(X_HEADER_NAME); + assertEquals("Case and whitespace sensitive", 1, headers.size()); + assertEquals("Case and whitespace sensitive", X_HEADER_VALUE, headers.get(0)); + headers = adapter.getHeader(X_HEADER_NAME.toLowerCase()); + assertEquals("Case and whitespace sensitive", 1, headers.size()); + assertEquals("Case and whitespace sensitive", X_HEADER_VALUE.toLowerCase(), headers.get(0)); + headers = adapter.getHeader(X_HEADER_WITH_WS); + assertEquals("Case and whitespace sensitive", 1, headers.size()); + assertEquals("Case and whitespace sensitive", X_HEADER_VALUE_ALT, headers.get(0)); + } + + public void testGetHeaderNames() throws Exception { + List headers = adapter.getHeaderNames(); + assertNotNull(headers); + assertEquals("All headers set returned", 6, headers.size()); + assertTrue("All headers set returned", headers.contains(BCC)); + assertTrue("All headers set returned", headers.contains(TO)); + assertTrue("All headers set returned", headers.contains(FROM)); + assertTrue("All headers set returned", headers.contains(X_HEADER_NAME)); + assertTrue("All headers set returned", headers.contains(X_HEADER_NAME.toLowerCase())); + assertTrue("All headers set returned", headers.contains(X_HEADER_WITH_WS)); + } + + public void testGetMatchingHeader() throws Exception { + List headers = adapter.getMatchingHeader(FROM); + assertNotNull(headers); + } + + public void testGetSize() throws Exception { + int size = adapter.getSize(); + assertEquals("Message size set", MESSAGE_SIZE, size); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]