package tap.resource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.File;
import org.junit.Test;
import adql.db.DBType;
import adql.db.DBType.DBDatatype;
import tap.AbstractTAPFactory;
import tap.ServiceConnection;
import tap.TAPException;
import tap.db.DBConnection;
import tap.formatter.ServiceConnection4Test;
import tap.metadata.TAPMetadata;
import tap.metadata.TAPSchema;
import tap.metadata.TAPTable;
import uws.service.file.LocalUWSFileManager;
public class TestTAP {
@Test
public void testAppendObsCoreDM(){
// Create the TAPMetadata:
TAPMetadata metadata = new TAPMetadata();
TAPSchema ivoaSchema = new TAPSchema("ivoa");
TAPTable obscore = new TAPTable("ObsCore");
// Create a TAP instance:
try{
ServiceConnection4Test serviceConn = new ServiceConnection4Test(metadata, new LocalUWSFileManager(new File(System.getProperty("java.io.tmpdir"))));
serviceConn.setFactory(new TAPFactory4Test(serviceConn));
TAP tap = new TAP(serviceConn);
StringBuffer xml = new StringBuffer();
// CASE: no Obscore table:
tap.appendObsCoreDM(xml, "");
assertEquals(0, xml.length());
// CASE: with an IVOA schema:
metadata.addSchema(ivoaSchema);
tap.appendObsCoreDM(xml, "");
assertEquals(0, xml.length());
// CASE: with an Obscore table (with no *_xel columns) - ObsCore 1.0:
ivoaSchema.addTable(obscore);
tap.appendObsCoreDM(xml, "\t");
assertEquals("\t<dataModel ivo-id=\"ivo://ivoa.net/std/ObsCore/v1.0\">ObsCore-1.0</dataModel>\n", xml.toString());
// CASE: with an Obscore 1.1 table but not with all *_xel columns:
obscore.addColumn("s_xel1", new DBType(DBDatatype.BIGINT), null, null, null, null);
obscore.addColumn("s_xel2", new DBType(DBDatatype.BIGINT), null, null, null, null);
obscore.addColumn("t_xel", new DBType(DBDatatype.BIGINT), null, null, null, null);
obscore.addColumn("em_xel", new DBType(DBDatatype.BIGINT), null, null, null, null);
xml.delete(0, xml.length());
tap.appendObsCoreDM(xml, "\t");
assertEquals("\t<dataModel ivo-id=\"ivo://ivoa.net/std/ObsCore/v1.0\">ObsCore-1.0</dataModel>\n", xml.toString());
// CASE: correct Obscore 1.1 table:
obscore.addColumn("pol_xel", new DBType(DBDatatype.BIGINT), null, null, null, null);
xml.delete(0, xml.length());
tap.appendObsCoreDM(xml, "\t");
assertEquals("\t<dataModel ivo-id=\"ivo://ivoa.net/std/ObsCore/v1.1\">ObsCore-1.1</dataModel>\n", xml.toString());
}catch(Exception e){
e.printStackTrace();
fail("Unexpected error while creating a TAP instance! (see console for more details)");
}
}
private static class TAPFactory4Test extends AbstractTAPFactory {
protected TAPFactory4Test(ServiceConnection service) throws NullPointerException{
super(service);
}
@Override
public DBConnection getConnection(String jobID) throws TAPException{
return null;
}
@Override
public void freeConnection(DBConnection conn){}
@Override
public void destroy(){}
}
}