/*
* Adito
*
* Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package com.adito.httpunit;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashSet;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
final class HttpTestParser {
private static final String MATCH_TESTS = "tests";
private static final String MATCH_TEST = "tests/test";
private static final String MATCH_TEST_STEP = "tests/test/step";
private static final String MATCH_ERROR = MATCH_TEST_STEP + "/errors/error";
private static final String MATCH_MESSAGE = MATCH_TEST_STEP + "/messages/message";
private static final String MATCH_PARAMETER = MATCH_TEST_STEP + "/parameters/parameter";
static Collection<HttpTestContainer> generateTests(String[] paths) throws IOException {
Collection<HttpTestContainer> tests = new HashSet<HttpTestContainer>(paths.length);
for (String path : paths) {
tests.add(generateTests(path));
}
return tests;
}
static HttpTestContainer generateTests(String path) throws IOException {
try {
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate(MATCH_TESTS, HttpTestContainer.class);
digester.addSetProperties(MATCH_TESTS, "rootUrl", "rootUrl");
digester.addSetProperties(MATCH_TESTS, "port", "port");
digester.addSetProperties(MATCH_TESTS, "defaultUsername", "defaultUsername");
digester.addSetProperties(MATCH_TESTS, "defaultPassword", "defaultPassword");
digester.addObjectCreate(MATCH_TEST, HttpTestEntry.class);
digester.addSetProperties(MATCH_TEST, "name", "name");
digester.addSetProperties(MATCH_TEST, "authenticated", "authenticated");
digester.addSetProperties(MATCH_TEST, "username", "username");
digester.addSetProperties(MATCH_TEST, "password", "password");
digester.addObjectCreate(MATCH_TEST_STEP, HttpTestEntryStep.class);
digester.addSetProperties(MATCH_TEST_STEP, "name", "name");
digester.addSetProperties(MATCH_TEST_STEP, "method", "method");
digester.addSetProperties(MATCH_TEST_STEP, "url", "url");
digester.addSetProperties(MATCH_TEST_STEP, "expectedCode", "expectedCode");
digester.addSetProperties(MATCH_TEST_STEP, "redirectUrl", "redirectUrl");
digester.addObjectCreate(MATCH_PARAMETER, HttpTestEntryStep.Parameter.class);
digester.addSetProperties(MATCH_PARAMETER, "key", "key");
digester.addSetProperties(MATCH_PARAMETER, "value", "value");
digester.addSetNext(MATCH_PARAMETER, "addParameter");
digester.addObjectCreate(MATCH_MESSAGE, HttpTestEntryStep.Value.class);
digester.addSetProperties(MATCH_MESSAGE, "value", "value");
digester.addSetNext(MATCH_MESSAGE, "addMessage");
digester.addObjectCreate(MATCH_ERROR, HttpTestEntryStep.Value.class);
digester.addSetProperties(MATCH_ERROR, "value", "value");
digester.addSetNext(MATCH_ERROR, "addError");
digester.addSetNext(MATCH_TEST_STEP, "addStep");
digester.addSetNext(MATCH_TEST, "addEntry");
InputStream input = new FileInputStream(path);
return (HttpTestContainer) digester.parse(input);
} catch (SAXException e) {
throw new IOException(e.getMessage());
}
}
}