package org.genedb.web.mvc.controller.download; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.Arrays; import java.util.List; import org.genedb.querying.core.QueryException; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:testContext-query.xml", "classpath:Download.xml"}) public class DownloadTest { @Autowired private DownloadProcessUtil util; OutputFormat outputFormat = OutputFormat.FASTA; String[] custFields = new String[] {}; OutputDestination outputDestination = OutputDestination.TO_FILE; boolean includeHeader = true; String fieldSeparator = "|"; String blankField = " -- "; String fieldInternalSeparator = ","; int prime3 = 0; int prime5 = 0; String email = "gv1@sanger.ac.uk"; List<String> uniqueNames = Arrays.asList(new String[] {"MAL8P1.300"}); String historyItemName = "testing"; String description = " testing 123 "; @Test public void test1() throws QueryException, IOException { SequenceType sequenceType = SequenceType.UNSPLICED_DNA; String sequence = "ATGAAGATTAATATATTGAAGAAAGGCAAAAAATTTTATATTACAAACAATCATTTTAATTATGATATTAAACGAAATTTTACAATATTTCAAAACTCATTTATAAAAACAAACGATATAGTTTATAGAAAAAACATTGATATTGTTTGTGCAAAAGATTTATTCTTTTATACAATTCTAAATGTAGATAGATATAAGTATTTTCTACCATATGTAACGGTAAGCATAAATATATTCATATTTTTAAAACGTATGCGGATGTTGTTTATGTGTGTACATATATTTGTTCATATAAATTGTTACATTTGTTCATATAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATATAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTACATTTATTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTACATTTATTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAAATTTTATATTTGTTCATATATTTTTGCACATTTATTTTTTAAAAATTATGAGCAATTGTATTGTATATTTGTAGGATAGCAAGATAACAGAAAAAAACAAAGAATATTTTAAAGCCAATTTACAAATTGAGAATATTTTCTTTAAAGAAAAATATGACTCTTTAATTCAATTCATTTACCCAACAACAATTACGGTAATAAGACTTTAAAGAGGAAATAAATGAATGAGAAGAAATATAAGTATATTTCGTATATAAATGTGTAAATATATACATACATATATATATATATATATATATATATATATATATATATAAATACTTAGACATTGTTGCATTTTTTTATTTTATTTTATTTTATTTTATTTTATTTAGGTATCTAGCGAAGATACAAATATTTTTCATCACTTGGTATGTAATAATAATAAAGAGACAACTAATTAAAAATATAAACAGAAAAATTAATATATATACTTATATATATTTTAAATAAGGCACATATCGTGTGTCCATTATAATATATATATATATATATATATATTGTTCTTTTTATAGATAACCGAGTGGATAATTAAAGAAAAAAAGAATTGCATAAACATTGATTTTTATATAAATTTTAGGGTAACAAAAATGTTGTATATATATTATATATGTATATATGTGTGTGTGTAAATATACTATATTTTATGTATCTGTGAATTTCTCAAAATTTTAATAAGTTTACATTATTCATAAAGTATTCACTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCTGCTTAGTTGAAAAATAAAATATATCAAAATTTTATGAATTTATACATAAAAGAGTTAGGGAAAAAAATTTTATATTCCTTTATAAATGAATCAAAATCAAACAGTTATAAAAACACGGACGTTTTACACTTGATAAAATAG"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } @Test public void test2() throws QueryException, IOException { SequenceType sequenceType = SequenceType.PROTEIN; String sequence = "MKINILKKGKKFYITNNHFNYDIKRNFTIFQNSFIKTNDIVYRKNIDIVCAKDLFFYTILNVDRYKYFLPYVTDSKITEKNKEYFKANLQIENIFFKEKYDSLIQFIYPTTITVSSEDTNIFHHLITEWIIKEKKNCINIDFYINFRLKNKIYQNFMNLYIKELGKKILYSFINESKSNSYKNTDVLHLIK"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } @Test public void test3() throws QueryException, IOException { SequenceType sequenceType = SequenceType.SPLICED_DNA; String sequence = "ATGAAGATTAATATATTGAAGAAAGGCAAAAAATTTTATATTACAAACAATCATTTTAATTATGATATTAAACGAAATTTTACAATATTTCAAAACTCATTTATAAAAACAAACGATATAGTTTATAGAAAAAACATTGATATTGTTTGTGCAAAAGATTTATTCTTTTATACAATTCTAAATGTAGATAGATATAAGTATTTTCTACCATATGTAACGGATAGCAAGATAACAGAAAAAAACAAAGAATATTTTAAAGCCAATTTACAAATTGAGAATATTTTCTTTAAAGAAAAATATGACTCTTTAATTCAATTCATTTACCCAACAACAATTACGGTATCTAGCGAAGATACAAATATTTTTCATCACTTGATAACCGAGTGGATAATTAAAGAAAAAAAGAATTGCATAAACATTGATTTTTATATAAATTTTAGGTTGAAAAATAAAATATATCAAAATTTTATGAATTTATACATAAAAGAGTTAGGGAAAAAAATTTTATATTCCTTTATAAATGAATCAAAATCAAACAGTTATAAAAACACGGACGTTTTACACTTGATAAAATAG"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } @Test public void test4() throws QueryException, IOException { SequenceType sequenceType = SequenceType.INTERGENIC_3; prime3 = 100; String sequence = "AATTTGTTTTCGTAACCTCTCCTCTTTTTATTTTTATTTTTATATTTATTTTTATTTTCATTTTTATTTATTTTTTTGTTTTGTCCTGATATGCCATATA"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } @Test public void test5() throws QueryException, IOException { SequenceType sequenceType = SequenceType.INTERGENIC_5; prime5 = 100; String sequence = "TTTGAACAAGTCATATTCCAAAAAAAAAGAAAGTTATACATGTATTATTTTATTTTGGAAATGAAAAAAAATATATATATATATATATATATATTATATT"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } @Test public void test6() throws QueryException, IOException { SequenceType sequenceType = SequenceType.INTERGENIC_3and5; prime5 = 100; prime3 = 100; String sequence = "AATTTGTTTTCGTAACCTCTCCTCTTTTTATTTTTATTTTTATATTTATTTTTATTTTCATTTTTATTTATTTTTTTGTTTTGTCCTGATATGCCATATA"; sequence += "ATGAAGATTAATATATTGAAGAAAGGCAAAAAATTTTATATTACAAACAATCATTTTAATTATGATATTAAACGAAATTTTACAATATTTCAAAACTCATTTATAAAAACAAACGATATAGTTTATAGAAAAAACATTGATATTGTTTGTGCAAAAGATTTATTCTTTTATACAATTCTAAATGTAGATAGATATAAGTATTTTCTACCATATGTAACGGTAAGCATAAATATATTCATATTTTTAAAACGTATGCGGATGTTGTTTATGTGTGTACATATATTTGTTCATATAAATTGTTACATTTGTTCATATAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATATAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTACATTTATTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTACATTTATTCATGTAAATTGTTACATTTGTTCATGTAAATTGTTATATTTGTTCATGTAAAATTTTATATTTGTTCATATATTTTTGCACATTTATTTTTTAAAAATTATGAGCAATTGTATTGTATATTTGTAGGATAGCAAGATAACAGAAAAAAACAAAGAATATTTTAAAGCCAATTTACAAATTGAGAATATTTTCTTTAAAGAAAAATATGACTCTTTAATTCAATTCATTTACCCAACAACAATTACGGTAATAAGACTTTAAAGAGGAAATAAATGAATGAGAAGAAATATAAGTATATTTCGTATATAAATGTGTAAATATATACATACATATATATATATATATATATATATATATATATATATATAAATACTTAGACATTGTTGCATTTTTTTATTTTATTTTATTTTATTTTATTTTATTTAGGTATCTAGCGAAGATACAAATATTTTTCATCACTTGGTATGTAATAATAATAAAGAGACAACTAATTAAAAATATAAACAGAAAAATTAATATATATACTTATATATATTTTAAATAAGGCACATATCGTGTGTCCATTATAATATATATATATATATATATATATTGTTCTTTTTATAGATAACCGAGTGGATAATTAAAGAAAAAAAGAATTGCATAAACATTGATTTTTATATAAATTTTAGGGTAACAAAAATGTTGTATATATATTATATATGTATATATGTGTGTGTGTAAATATACTATATTTTATGTATCTGTGAATTTCTCAAAATTTTAATAAGTTTACATTATTCATAAAGTATTCACTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCTGCTTAGTTGAAAAATAAAATATATCAAAATTTTATGAATTTATACATAAAAGAGTTAGGGAAAAAAATTTTATATTCCTTTATAAATGAATCAAAATCAAACAGTTATAAAAACACGGACGTTTTACACTTGATAAAATAG"; sequence += "TTTGAACAAGTCATATTCCAAAAAAAAAGAAAGTTATACATGTATTATTTTATTTTGGAAATGAAAAAAAATATATATATATATATATATATATTATATT"; StringWriter writer = new StringWriter(); runProcess(writer, sequenceType); checkSequence(writer, sequence); } private void runProcess(StringWriter writer, SequenceType sequenceType) throws QueryException, IOException { DownloadProcess process = new DownloadProcess( outputFormat, custFields, outputDestination, sequenceType, includeHeader, fieldSeparator, blankField, fieldInternalSeparator, prime3, prime5, email, uniqueNames, historyItemName, description, util, "http://someurl.com"); process.generateFASTA(writer); } private void checkSequence(StringWriter writer, String sequence) throws IOException { BufferedReader reader = new BufferedReader(new StringReader(writer.toString())); String s; StringBuffer sb = new StringBuffer(); while((s = reader.readLine()) != null) { // only read sequence lines if (! s.startsWith(">")) { // remove * chars if (s.contains("*")) { s = s.replace("*", ""); } sb.append(s.trim().toUpperCase()); } } reader.close(); // System.out.println("Expected"); // System.out.println(sequence); // System.out.println("Result"); // System.out.println(sb.toString()); Assert.assertEquals(sb.toString().length(), sequence.length()); Assert.assertEquals(sb.toString(), sequence); } }