/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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.
*
* Copyright 2006 - 2008 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.test.platform.engine.core;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import junit.framework.TestCase;
import org.pentaho.platform.api.engine.IRuntimeContext;
import org.pentaho.platform.api.engine.ISolutionEngine;
import org.pentaho.platform.engine.core.output.BufferedContentItem;
import org.pentaho.platform.engine.core.output.MultiContentItem;
import org.pentaho.platform.engine.core.output.MultiOutputStream;
import org.pentaho.platform.engine.core.output.SimpleContentItem;
import org.pentaho.platform.util.web.SimpleUrlFactory;
@SuppressWarnings({"all"})
public class OutputTest extends TestCase {
public void testBufferedContentItem() throws Exception {
TestContentListener listener = new TestContentListener();
BufferedContentItem content = new BufferedContentItem( listener );
OutputStream out = content.getOutputStream(null);
content.setMimeType( "text/test" );
out.write( "test sting".getBytes() );
content.closeOutputStream();
InputStream in = content.getInputStream();
byte b[] = new byte[100];
int n = in.read( b );
assertEquals( "test sting", new String( b, 0, n ) );
assertEquals( "text/test", listener.mimeType );
}
public void testMultiContentItem() {
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
SimpleContentItem item1 = new SimpleContentItem(out1);
SimpleContentItem item2 = new SimpleContentItem(out2);
MultiContentItem multiContent = new MultiContentItem();
multiContent.addContentItem(item1);
multiContent.addContentItem(item2);
byte in[] = "abcd".getBytes();
String outStr1 = "";
String outStr2 = "";
try {
OutputStream multi = multiContent.getOutputStream("");
multi.write('a');
multi.write(in, 1, 2);
multi.write(in);
multiContent.closeOutputStream();
} catch (IOException e) {
// we should not get here
assertEquals("IOException", null, e);
}
outStr1 = new String(out1.toByteArray());
outStr2 = new String(out2.toByteArray());
assertEquals("Output stream 1", "abcabcd", outStr1);
assertEquals("Output stream 2", "abcabcd", outStr2);
}
public void testMultiContentItemErrors() {
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
OutputStream out2 = new ExceptionOutputStream();
SimpleContentItem item1 = new SimpleContentItem(out1);
SimpleContentItem item2 = new SimpleContentItem(out2);
MultiContentItem multiContent = new MultiContentItem();
multiContent.addContentItem(item1);
multiContent.addContentItem(item2);
byte in[] = "abcd".getBytes();
String outStr1 = "";
String outStr2 = "";
try {
OutputStream multi = multiContent.getOutputStream("");
multi.write('a');
// we should not get here
assertFalse("IOException expected", true);
} catch (IOException e) {
assertNotNull("IOException expected", e);
}
try {
multiContent.closeOutputStream();
} catch (Exception e) {
// we should not get here
assertEquals("IOException", null, e);
}
outStr1 = new String(out1.toByteArray());
assertEquals("Output stream 1", "a", outStr1);
}
public void testMultiStream() {
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
ByteArrayOutputStream out2 = new ByteArrayOutputStream();
ByteArrayOutputStream outs[] = new ByteArrayOutputStream[] { out1, out2 };
MultiOutputStream multi = new MultiOutputStream(outs);
byte in[] = "abcd".getBytes();
String outStr1 = "";
String outStr2 = "";
try {
multi.write('a');
multi.write(in, 1, 2);
multi.write(in);
multi.close();
} catch (IOException e) {
// we should not get here
assertEquals("IOException", null, e);
}
outStr1 = new String(out1.toByteArray());
outStr2 = new String(out2.toByteArray());
assertEquals("Output stream 1", "abcabcd", outStr1);
assertEquals("Output stream 2", "abcabcd", outStr2);
}
public void testMultiStreamErrors() {
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
ExceptionOutputStream out2 = new ExceptionOutputStream();
ByteArrayOutputStream out3 = new ByteArrayOutputStream();
OutputStream outs[] = new OutputStream[] { out1, out2, out3 };
MultiOutputStream multi = new MultiOutputStream(outs);
byte in[] = "abcd".getBytes();
String outStr1 = "";
String outStr2 = "";
try {
multi.write('a');
} catch (IOException e) {
// we expect to get here
assertEquals("IOException", "Test Exception", e.getMessage());
}
try {
multi.write(in, 1, 2);
} catch (IOException e) {
// we expect to get here
assertEquals("IOException", "Test Exception", e.getMessage());
}
try {
multi.write(in);
} catch (IOException e) {
// we expect to get here
assertEquals("IOException", "Test Exception", e.getMessage());
}
try {
multi.close();
} catch (IOException e) {
// we expect to get here
assertEquals("IOException", "Test Exception", e.getMessage());
}
outStr1 = new String(out1.toByteArray());
outStr2 = new String(out3.toByteArray());
assertEquals("Output stream 1", "abcabcd", outStr1);
assertEquals("Output stream 2", "abcabcd", outStr2);
}
public void testSimpleContentItem() throws Exception {
OutputStream out = new ByteArrayOutputStream();
SimpleContentItem content = new SimpleContentItem();
content.setMimeType( "test/test" );
content.setOutputStream( out );
content.setName( "testname" );
assertEquals("wrong value", null, content.getId() );
// assertEquals("wrong value", null, content.getPath() );
assertNotNull(content.getPath()); // SimpleContentItem changed to not return null for path.
assertEquals("wrong value", null, content.getName() );
assertEquals("wrong value", null, content.getTitle() );
assertEquals("wrong value", "test/test", content.getMimeType() );
assertEquals("wrong value", null, content.getUrl() );
assertEquals("wrong value", null, content.getFileVersions() );
assertEquals("wrong value", null, content.getInputStream() );
assertEquals("wrong value", null, content.getReader() );
assertEquals("wrong value", out, content.getOutputStream(null) );
assertEquals("wrong value", null, content.getDataSource() );
assertEquals("wrong value", null, content.getActionName() );
assertEquals("wrong value", null, content.getFileId() );
assertEquals("wrong value", 0, content.getFileSize() );
assertEquals("wrong value", null, content.getFileDateTime() );
// these should not throw errors
content.removeVersion( null );
content.removeAllVersions();
content.makeTransient();
content.closeOutputStream();
out = new ExceptionOutputStream();
content.setOutputStream(out);
content.closeOutputStream();
}
}