blob: 3ebf0a5b52891ef22207a9cd9c49f7459c280391 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests.data;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.zip.ZipInputStream;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.eclipse.mylyn.internal.tasks.core.data.ITaskDataConstants;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataExternalizer;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataState;
import org.eclipse.mylyn.tasks.core.data.ITaskDataWorkingCopy;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.core.data.TaskMapper;
import org.eclipse.mylyn.tasks.tests.TaskTestUtil;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* @author Steffen Pingel
*/
public class TaskDataExternalizerTest extends TestCase {
private class SimpleCharacterReader extends DefaultHandler {
private char ch;
public SimpleCharacterReader() {
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
Assert.assertEquals(1, length);
this.ch = ch[start];
}
public char getCharacter() {
return ch;
}
}
private final class SimpleCharacterWriter {
private final TransformerHandler handler;
public SimpleCharacterWriter(TransformerHandler handler) {
this.handler = handler;
}
public void write(char character) throws SAXException {
handler.startDocument();
AttributesImpl atts = new AttributesImpl();
handler.startElement("", "", ITaskDataConstants.ELEMENT_VALUE, atts); //$NON-NLS-1$ //$NON-NLS-2$
///handler.startCDATA();
handler.characters(new char[] { character }, 0, 1);
//handler.endCDATA();
handler.endElement("", "", ITaskDataConstants.ELEMENT_VALUE);
handler.endDocument();
}
}
TaskDataExternalizer externalizer;
@Override
protected void setUp() throws Exception {
externalizer = new TaskDataExternalizer(null);
}
public void testMapFromLegacy() throws Exception {
File file = TaskTestUtil.getFile("testdata/taskdata-1.0-bug-219897.zip");
ZipInputStream in = new ZipInputStream(new FileInputStream(file));
ITaskDataWorkingCopy state;
try {
in.getNextEntry();
state = externalizer.readState(in);
} finally {
in.close();
}
TaskData taskData = state.getRepositoryData();
@SuppressWarnings("unused")
TaskMapper taskScheme = new TaskMapper(taskData);
fail("fixme");
// RepositoryTaskData legacyData = TaskDataUtil.toLegacyData(taskData, IdentityAttributeFactory.getInstance());
// assertEquals(taskData.getConnectorKind(), legacyData.getConnectorKind());
// assertEquals(taskData.getRepositoryUrl(), legacyData.getRepositoryUrl());
// assertEquals(taskData.getTaskId(), legacyData.getTaskId());
// assertEquals(taskScheme.getTaskKind(), legacyData.getTaskKind());
// assertEquals(taskScheme.getComments().length, legacyData.getComments().size());
// assertEquals(taskScheme.getAttachments().length, legacyData.getAttachments().size());
//
// TaskData taskData2 = TaskDataUtil.toTaskData(legacyData, IdentityAttributeMapper.getInstance());
// assertEquals(taskData.getConnectorKind(), taskData2.getConnectorKind());
// assertEquals(taskData.getRepositoryUrl(), taskData2.getRepositoryUrl());
// assertEquals(taskData.getTaskId(), taskData2.getTaskId());
//
// assertEquals(taskData.getRoot().toString(), taskData2.getRoot().toString());
}
public void testRead() throws Exception {
File file = TaskTestUtil.getFile("testdata/taskdata-1.0-bug-219897.zip");
ZipInputStream in = new ZipInputStream(new FileInputStream(file));
try {
in.getNextEntry();
@SuppressWarnings("unused")
ITaskDataWorkingCopy state = externalizer.readState(in);
} finally {
in.close();
}
}
public void testReadWrite() throws Exception {
File file = TaskTestUtil.getFile("testdata/taskdata-1.0-bug-219897.zip");
ZipInputStream in = new ZipInputStream(new FileInputStream(file));
ITaskDataWorkingCopy state;
try {
in.getNextEntry();
state = externalizer.readState(in);
} finally {
in.close();
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
externalizer.writeState(out, state);
TaskDataState state2 = externalizer.readState(new ByteArrayInputStream(out.toByteArray()));
assertEquals(state.getConnectorKind(), state2.getConnectorKind());
assertEquals(state.getRepositoryUrl(), state2.getRepositoryUrl());
assertEquals(state.getTaskId(), state2.getTaskId());
assertEquals(state.getRepositoryData().getRoot().toString(), state2.getRepositoryData().getRoot().toString());
}
public void testWriteandReadBadCharacter() throws Exception {
for (int i = 0; i < 0xFFFF; i++) {
char badChar = (char) i;
StringWriter stringWriter = new StringWriter();
SAXTransformerFactory transformerFactory = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler handler = transformerFactory.newTransformerHandler();
Transformer serializer = handler.getTransformer();
serializer.setOutputProperty(OutputKeys.VERSION, "1.0");
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
serializer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
handler.setResult(new StreamResult(stringWriter));
SimpleCharacterWriter writer = new SimpleCharacterWriter(handler);
writer.write(badChar);
XMLReader parser = XMLReaderFactory.createXMLReader();
SimpleCharacterReader readHandler = new SimpleCharacterReader();
parser.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
System.out.println(publicId);
System.out.println(systemId);
return null;
}
});
parser.setContentHandler(readHandler);
parser.parse(new InputSource(new StringReader(stringWriter.getBuffer().toString())));
char character = readHandler.getCharacter();
assertEquals(badChar, character);
}
}
}