/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview 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.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.io;
import jalview.json.binding.biojs.BioJSReleasePojo;
import jalview.json.binding.biojs.BioJSRepositoryPojo;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.util.TreeMap;
import org.testng.Assert;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;
public class BioJsHTMLOutputTest
{
@Test(groups = { "Functional" })
public void getJalviewAlignmentAsJsonString()
{
String bjsTemplate = null;
try
{
BioJsHTMLOutput.updateBioJS();
try
{
// allow the update some three seconds to complete before getting latest
// version of BioJS template
Thread.sleep(1000 * 3);
} catch (InterruptedException e)
{
e.printStackTrace();
}
bjsTemplate = BioJsHTMLOutput.getBioJsTemplateAsString();
// System.out.println(bjsTemplate);
} catch (IOException e)
{
e.printStackTrace();
}
Assert.assertNotNull(bjsTemplate);
}
@Test(
groups = { "Functional" },
expectedExceptions = NullPointerException.class)
public void expectedNullPointerException()
{
try
{
BioJsHTMLOutput.refreshBioJSVersionsInfo(null);
} catch (URISyntaxException e)
{
AssertJUnit.fail("Expception occured while testing!");
e.printStackTrace();
}
}
@Test(groups = { "Functional" })
public void getBioJsMSAVersions()
{
TreeMap versions = null;
try
{
BioJsHTMLOutput
.refreshBioJSVersionsInfo(BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY);
versions = BioJsHTMLOutput.getBioJsMSAVersions();
} catch (URISyntaxException e)
{
AssertJUnit.fail("Expception occured while testing!");
e.printStackTrace();
}
AssertJUnit.assertNotNull("No versions found", versions);
AssertJUnit.assertTrue("One or more Templates required",
versions.size() > 0);
System.out
.println("Number of discovered versions : " + versions.size());
for (String v : versions.keySet())
{
System.out.println("version : " + v);
System.out.println("File : " + versions.get(v));
}
System.out.println("\nCurrent latest version : "
+ BioJsHTMLOutput.getCurrentBJSTemplateFile());
AssertJUnit.assertNotNull("Latest BioJsMSA version NOT found!",
BioJsHTMLOutput.getCurrentBJSTemplateFile());
}
@Test(groups = { "Network" })
public void testBioJsUpdate()
{
String url = BioJsHTMLOutput.BJS_TEMPLATE_GIT_REPO;
AssertJUnit
.assertTrue("URL not reacable : " + url, urlIsReachable(url));
String response = BioJsHTMLOutput.getURLContentAsString(url);
AssertJUnit.assertNotNull("Null response read from url!", response);
BioJSRepositoryPojo repository = new BioJSRepositoryPojo(response);
System.out.println(">>> description : " + repository.getDescription());
System.out.println(">>> latest version : "
+ repository.getLatestReleaseVersion());
System.out.println(">>> repo count : "
+ repository.getReleases().size());
for (BioJSReleasePojo release : repository.getReleases())
{
System.out.println("repo type : " + release.getType());
System.out.println("url : " + release.getUrl());
System.out.println("release version : " + release.getVersion());
}
}
private static boolean urlIsReachable(String urlString)
{
try
{
final URL url = new URL(urlString);
final URLConnection conn = url.openConnection();
conn.connect();
return true;
} catch (MalformedURLException e)
{
throw new RuntimeException(e);
} catch (IOException e)
{
return false;
}
}
}