gov.nih.nci.caintegrator.common.Cai2UtilTest.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.caintegrator.common.Cai2UtilTest.java

Source

/**
 * Copyright 5AM Solutions Inc, ESAC, ScenPro & SAIC
 *
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/caintegrator/LICENSE.txt for details.
 */
package gov.nih.nci.caintegrator.common;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import gov.nih.nci.caintegrator.TestDataFiles;
import gov.nih.nci.caintegrator.application.study.AnnotationTypeEnum;
import gov.nih.nci.caintegrator.domain.analysis.GisticAnalysis;
import gov.nih.nci.caintegrator.domain.annotation.AnnotationDefinition;
import gov.nih.nci.caintegrator.domain.annotation.SurvivalValueDefinition;
import gov.nih.nci.caintegrator.domain.application.Query;
import gov.nih.nci.caintegrator.domain.application.TimeStampable;
import gov.nih.nci.caintegrator.domain.genomic.AmplificationTypeEnum;
import gov.nih.nci.caintegrator.domain.genomic.Gene;
import gov.nih.nci.caintegrator.domain.genomic.GisticGenomicRegionReporter;
import gov.nih.nci.caintegrator.domain.genomic.ReporterList;
import gov.nih.nci.caintegrator.domain.genomic.ReporterTypeEnum;
import gov.nih.nci.caintegrator.file.FileManagerImpl;
import gov.nih.nci.caintegrator.mockito.AbstractMockitoTest;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class Cai2UtilTest extends AbstractMockitoTest {

    @Test
    public void testTrimDescription() {
        String string = "This is my test string, it may or may not need to be trimmed.";
        assertEquals(string, Cai2Util.trimDescription(string));
    }

    @Test
    public void testContainsIgnoreCase() {
        Collection<String> stringsCollection = new HashSet<String>();
        stringsCollection.add("HELLO");
        assertTrue(Cai2Util.containsIgnoreCase(stringsCollection, "hello"));
        assertFalse(Cai2Util.containsIgnoreCase(stringsCollection, "helo"));
    }

    @Test
    public void testZipAndDeleteDirectory() throws IOException {
        FileManagerImpl fileManager = new FileManagerImpl();
        fileManager.setConfigurationHelper(configurationHelper);
        File tempDirectory = fileManager.getNewTemporaryDirectory("cai2UtilTest");
        File destFile = new File(tempDirectory, "tempFile");
        File nullZipFile = Cai2Util.zipAndDeleteDirectory(tempDirectory.getCanonicalPath());
        assertNull(nullZipFile);
        FileUtils.copyFile(TestDataFiles.VALID_FILE, destFile);
        try {
            Cai2Util.zipAndDeleteDirectory(destFile.getCanonicalPath());
            fail("Expected illegal argument exception, deleting a file and not directory.");
        } catch (IllegalArgumentException e) {

        }
        assertTrue(tempDirectory.exists());
        Cai2Util.printDirContents(tempDirectory);
        File zippedDirectory = Cai2Util.zipAndDeleteDirectory(tempDirectory.getCanonicalPath());
        assertEquals("cai2UtilTest.zip", zippedDirectory.getName());
        assertTrue(Cai2Util.isValidZipFile(zippedDirectory));
        assertFalse(tempDirectory.exists());
        Cai2Util.printDirContents(tempDirectory);
        zippedDirectory.deleteOnExit();

        File tempDirectory2 = fileManager.getNewTemporaryDirectory("cai2UtilTest2");
        File destFile2 = new File(tempDirectory2, "tempFile2");
        FileUtils.copyFile(TestDataFiles.VALID_FILE, destFile2);
        File newZipFile = Cai2Util.addFilesToZipFile(zippedDirectory, destFile2);
        assertNotNull(newZipFile); // need to actually verify it contains 2 items now.
        FileUtils.deleteDirectory(tempDirectory);
        FileUtils.deleteDirectory(tempDirectory2);
        try {
            Cai2Util.addFilesToZipFile(TestDataFiles.VALID_FILE, new File(""));
            fail("Expected illegal argument exception, adding to a non-zip file");
        } catch (IllegalArgumentException e) {

        }

    }

    @Test
    public void testZipFileValidation() throws IOException {
        FileManagerImpl fileManager = new FileManagerImpl();
        fileManager.setConfigurationHelper(configurationHelper);
        File tempDirectory = fileManager.getNewTemporaryDirectory("cai2UtilTest");
        File destFile = new File(tempDirectory, "tempFile");
        File nullZipFile = Cai2Util.zipAndDeleteDirectory(tempDirectory.getCanonicalPath());
        assertNull(nullZipFile);
        assertFalse(Cai2Util.isValidZipFile(nullZipFile));
        // test if input is not a ZIP file
        assertFalse(Cai2Util.isValidZipFile(destFile));
    }

    @Test
    public void testGetHostNameFromUrl() {
        String url = "https://imaging-dev.nci.nih.gov/ncia/externalDataBasketDisplay.jsf";
        assertEquals("imaging-dev.nci.nih.gov", Cai2Util.getHostNameFromUrl(url));
        assertNull(Cai2Util.getHostNameFromUrl(null));
        assertNull(Cai2Util.getHostNameFromUrl(""));
        assertNull(Cai2Util.getHostNameFromUrl("abc"));
    }

    @Test
    public void testCreateGeneListFromString() {
        assertTrue(Cai2Util.createListFromCommaDelimitedString(null).isEmpty());
        assertEquals(2, Cai2Util.createListFromCommaDelimitedString("egfr, brca1").size());
    }

    @Test
    public void testRetrieveValidSurvivalValueDefinitions() {

        Set<SurvivalValueDefinition> survivalValues = new HashSet<SurvivalValueDefinition>();

        AnnotationDefinition validStartDate = new AnnotationDefinition();
        validStartDate.setDataType(AnnotationTypeEnum.DATE);

        AnnotationDefinition validDeathDate = new AnnotationDefinition();
        validDeathDate.setDataType(AnnotationTypeEnum.DATE);

        AnnotationDefinition validFollowupDate = new AnnotationDefinition();
        validFollowupDate.setDataType(AnnotationTypeEnum.DATE);

        SurvivalValueDefinition validSurvivalDefinition = new SurvivalValueDefinition();
        validSurvivalDefinition.setSurvivalStartDate(validStartDate);
        validSurvivalDefinition.setDeathDate(validDeathDate);
        validSurvivalDefinition.setLastFollowupDate(validFollowupDate);
        validSurvivalDefinition.setName("validName");

        SurvivalValueDefinition invalidSurvivalDefinition1 = new SurvivalValueDefinition(); // null start
        invalidSurvivalDefinition1.setDeathDate(validDeathDate);
        invalidSurvivalDefinition1.setLastFollowupDate(validFollowupDate);

        SurvivalValueDefinition invalidSurvivalDefinition2 = new SurvivalValueDefinition(); // null death
        invalidSurvivalDefinition2.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition2.setLastFollowupDate(validFollowupDate);

        SurvivalValueDefinition invalidSurvivalDefinition3 = new SurvivalValueDefinition(); // null followup
        invalidSurvivalDefinition3.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition3.setDeathDate(validDeathDate);

        SurvivalValueDefinition invalidSurvivalDefinition4 = new SurvivalValueDefinition(); // start and followup equal
        invalidSurvivalDefinition4.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition4.setLastFollowupDate(validStartDate);
        invalidSurvivalDefinition4.setDeathDate(validDeathDate);

        SurvivalValueDefinition invalidSurvivalDefinition5 = new SurvivalValueDefinition(); // followup and death are equal
        invalidSurvivalDefinition5.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition5.setLastFollowupDate(validFollowupDate);
        invalidSurvivalDefinition5.setDeathDate(validFollowupDate);

        SurvivalValueDefinition invalidSurvivalDefinition6 = new SurvivalValueDefinition(); // start and death are equal
        invalidSurvivalDefinition6.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition6.setLastFollowupDate(validFollowupDate);
        invalidSurvivalDefinition6.setDeathDate(validStartDate);

        SurvivalValueDefinition invalidSurvivalDefinition7 = new SurvivalValueDefinition(); // start not a date
        invalidSurvivalDefinition7.setSurvivalStartDate(new AnnotationDefinition());
        invalidSurvivalDefinition7.setLastFollowupDate(validFollowupDate);
        invalidSurvivalDefinition7.setDeathDate(validStartDate);

        SurvivalValueDefinition invalidSurvivalDefinition8 = new SurvivalValueDefinition(); // followup not a date
        invalidSurvivalDefinition8.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition8.setLastFollowupDate(new AnnotationDefinition());
        invalidSurvivalDefinition8.setDeathDate(validStartDate);

        SurvivalValueDefinition invalidSurvivalDefinition9 = new SurvivalValueDefinition(); // death not a date
        invalidSurvivalDefinition9.setSurvivalStartDate(validStartDate);
        invalidSurvivalDefinition9.setLastFollowupDate(validFollowupDate);
        invalidSurvivalDefinition9.setDeathDate(new AnnotationDefinition());

        survivalValues.add(validSurvivalDefinition);
        survivalValues.add(invalidSurvivalDefinition1);
        survivalValues.add(invalidSurvivalDefinition2);
        survivalValues.add(invalidSurvivalDefinition3);
        survivalValues.add(invalidSurvivalDefinition4);
        survivalValues.add(invalidSurvivalDefinition5);
        survivalValues.add(invalidSurvivalDefinition6);
        survivalValues.add(invalidSurvivalDefinition7);
        survivalValues.add(invalidSurvivalDefinition8);
        survivalValues.add(invalidSurvivalDefinition9);

        assertEquals(1, Cai2Util.retrieveValidSurvivalValueDefinitions(survivalValues).size());
    }

    @Test
    public void testLog2() {
        assertTrue(Cai2Util.log2(16) == 4);
        assertTrue(Cai2Util.antiLog2(4) == 16);
    }

    @Test
    public void testRetrieveLatestLastModifiedDate() {
        List<TimeStampable> timestampedObjects = new ArrayList<TimeStampable>();
        assertEquals(DateUtil.TIMESTAMP_UNAVAILABLE_STRING,
                Cai2Util.retrieveLatestLastModifiedDate(timestampedObjects));
        Query queryFirst = new Query();
        queryFirst.setLastModifiedDate(new Date());
        Query queryUnknown = new Query();
        Query queryLast = new Query();
        queryLast.setLastModifiedDate(new Date());

        timestampedObjects.add(queryUnknown);
        assertEquals(DateUtil.TIMESTAMP_UNAVAILABLE_STRING,
                Cai2Util.retrieveLatestLastModifiedDate(timestampedObjects));
        timestampedObjects.add(queryFirst);
        assertEquals(queryFirst.getDisplayableLastModifiedDate(),
                Cai2Util.retrieveLatestLastModifiedDate(timestampedObjects));
        timestampedObjects.add(queryLast);
        assertEquals(queryLast.getDisplayableLastModifiedDate(),
                Cai2Util.retrieveLatestLastModifiedDate(timestampedObjects));
    }

    @Test
    public void testRetrieveGisticAmplifiedDeletedGenes() {
        GisticAnalysis gisticAnalysis = new GisticAnalysis();
        List<Gene> amplifiedGenes = new ArrayList<Gene>();
        List<Gene> deletedGenes = new ArrayList<Gene>();
        Cai2Util.retrieveGisticAmplifiedDeletedGenes(gisticAnalysis, amplifiedGenes, deletedGenes);
        assertTrue(amplifiedGenes.isEmpty());
        assertTrue(deletedGenes.isEmpty());
        ReporterList reporterList = new ReporterList("gistic", ReporterTypeEnum.GISTIC_GENOMIC_REGION_REPORTER);
        Gene gene1Amp = new Gene();
        gene1Amp.setSymbol("AMPGENE1");
        Gene gene2Amp = new Gene();
        gene2Amp.setSymbol("AMPGENE2");
        Gene gene1Del = new Gene();
        gene1Del.setSymbol("DELGENE1");
        Gene gene2Del = new Gene();
        gene2Del.setSymbol("DELGENE2");
        GisticGenomicRegionReporter reporter1 = new GisticGenomicRegionReporter();
        reporter1.setGeneAmplificationType(AmplificationTypeEnum.AMPLIFIED);
        reporter1.getGenes().add(gene2Amp);
        reporter1.getGenes().add(gene1Amp);

        GisticGenomicRegionReporter reporter2 = new GisticGenomicRegionReporter();
        reporter2.setGeneAmplificationType(AmplificationTypeEnum.DELETED);
        reporter2.getGenes().add(gene2Del);
        reporter2.getGenes().add(gene1Del);

        reporterList.addReporter(reporter1);
        reporterList.addReporter(reporter2);
        gisticAnalysis.setReporterList(reporterList);
        Cai2Util.retrieveGisticAmplifiedDeletedGenes(gisticAnalysis, amplifiedGenes, deletedGenes);
        assertEquals(2, amplifiedGenes.size());
        assertEquals(2, deletedGenes.size());
        assertEquals("AMPGENE1", amplifiedGenes.get(0).getSymbol());
        assertEquals("AMPGENE2", amplifiedGenes.get(1).getSymbol());
        assertEquals("DELGENE1", deletedGenes.get(0).getSymbol());
        assertEquals("DELGENE2", deletedGenes.get(1).getSymbol());
    }

    @Test
    public void testChromosome() {
        assertEquals("1", Cai2Util.getInternalChromosomeNumber("1"));
        assertEquals("23", Cai2Util.getInternalChromosomeNumber("X"));
        assertEquals("24", Cai2Util.getInternalChromosomeNumber("Y"));

        assertEquals("1", Cai2Util.getDisplayChromosomeNumber("1"));
        assertEquals("X / 23", Cai2Util.getDisplayChromosomeNumber("23"));
        assertEquals("Y / 24", Cai2Util.getDisplayChromosomeNumber("24"));

        assertNull(Cai2Util.getAlternateChromosome("1"));
        assertEquals("23", Cai2Util.getAlternateChromosome("X"));
        assertEquals("24", Cai2Util.getAlternateChromosome("Y"));
        assertEquals("X", Cai2Util.getAlternateChromosome("23"));
        assertEquals("Y", Cai2Util.getAlternateChromosome("24"));
    }

    @Test
    public void testGetHeapSize() {
        long heapSize = Cai2Util.getHeapSizeMB();
        assertTrue(heapSize > 0);
    }

}