/* * 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(); } }