/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.datasource.handler; import java.net.URL; import org.jdom.Document; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.junit.Before; import org.mockito.Mockito; import com.enonic.cms.framework.xml.XMLDocument; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.core.preview.PreviewContext; import com.enonic.cms.core.security.user.User; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import com.enonic.cms.core.portal.datasource.service.DataSourceService; import static org.junit.Assert.*; public abstract class AbstractDataSourceHandlerTest<T extends DataSourceHandler> { private final Class<T> type; protected T handler; protected DataSourceRequest request; protected DataSourceService dataSourceService; protected XMLDocument dummyDoc; public AbstractDataSourceHandlerTest( final Class<T> type ) { this.type = type; } @Before public final void startUp() throws Exception { this.handler = this.type.newInstance(); this.request = new DataSourceRequest(); this.request.setName( this.handler.getName() ); final UserEntity user = new UserEntity(); user.setKey( new UserKey( User.ANONYMOUS_UID ) ); user.setName( User.ANONYMOUS_UID ); user.setDisplayName( User.ANONYMOUS_UID ); this.request.setUser( user ); this.request.setPreviewContext( PreviewContext.NO_PREVIEW ); this.dummyDoc = XMLDocumentFactory.create( "<dummy/>" ); this.dataSourceService = Mockito.mock( DataSourceService.class ); initTest(); } protected abstract void initTest() throws Exception; protected final void testHandle( final String resultName ) throws Exception { final Document actualDoc = this.handler.handle( this.request ); assertNotNull( actualDoc ); final Document expectedDoc = readDoc( resultName + ".xml" ); assertXml( expectedDoc, actualDoc ); } private void assertXml( final Document expected, final Document actual ) throws Exception { final String expectedStr = toString( expected ); final String actualStr = toString( actual ); assertEquals( expectedStr, actualStr ); } private Document readDoc( final String name ) throws Exception { final URL url = getClass().getResource( name ); assertNotNull( "Document [" + name + "] not found", url ); final SAXBuilder builder = new SAXBuilder(); return builder.build( url ); } private String toString( final Document doc ) throws Exception { final XMLOutputter out = new XMLOutputter(); out.setFormat( Format.getPrettyFormat() ); return out.outputString( doc ); } }