Skip to content

Commit

Permalink
unit tests and alternetive hierarch key writer, fixes #72 and should
Browse files Browse the repository at this point in the history
solve #16 and  #68
  • Loading branch information
ritchieGitHub committed Jan 16, 2016
1 parent 03a598d commit 4f193e9
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 81 deletions.
@@ -0,0 +1,59 @@
package nom.tam.fits.header.hierarch;

/*
* #%L
* nom.tam FITS library
* %%
* Copyright (C) 1996 - 2016 nom-tam-fits
* %%
* This is free and unencumbered software released into the public domain.
*
* Anyone is free to copy, modify, publish, use, compile, sell, or
* distribute this software, either in source code form or as a compiled
* binary, for any purpose, commercial or non-commercial, and by any
* means.
*
* In jurisdictions that recognize copyright laws, the author or authors
* of this software dedicate any and all copyright interest in the
* software to the public domain. We make this dedication for the benefit
* of the public at large and to the detriment of our heirs and
* successors. We intend this dedication to be an overt act of
* relinquishment in perpetuity of all present and future rights to this
* software under copyright law.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
* #L%
*/

import nom.tam.fits.header.NonStandard;
import nom.tam.fits.utilities.FitsLineAppender;

public class BlanksDotHierarchKeyFormatter implements IHierarchKeyFormatter {

private static final String HIERARCH_TEXT = NonStandard.HIERARCH.key();

private static final int HIERARCH_KEY_OFFSET = HIERARCH_TEXT.length() + 1;

private final String blanks;

public BlanksDotHierarchKeyFormatter(int count) {
StringBuilder builder = new StringBuilder();
for (int index = 0; index < count; index++) {
builder.append(' ');
}
blanks = builder.toString();
}

@Override
public void append(String key, FitsLineAppender buffer) {
buffer.append(HIERARCH_TEXT);
buffer.append(blanks);
buffer.append(key, HIERARCH_KEY_OFFSET, key.length());
}
}
5 changes: 5 additions & 0 deletions src/main/java/nom/tam/fits/utilities/FitsLineAppender.java
Expand Up @@ -181,4 +181,9 @@ public int spaceLeftInLine() {
public String toString() {
return this.buffer.toString();
}

public void append(String key, int start, int end) {
this.buffer.append(key, start, end);
this.charCount += end - start;
}
}
103 changes: 67 additions & 36 deletions src/test/java/nom/tam/fits/test/HeaderCardTest.java
Expand Up @@ -44,13 +44,35 @@
import nom.tam.fits.Header;
import nom.tam.fits.HeaderCard;
import nom.tam.fits.HeaderCardException;
import nom.tam.fits.header.hierarch.BlanksDotHierarchKeyFormatter;
import nom.tam.fits.header.hierarch.StandardIHierarchKeyFormatter;
import nom.tam.util.AsciiFuncs;
import nom.tam.util.BufferedDataInputStream;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HeaderCardTest {

private boolean longStringsEnabled;

private boolean useHierarch;

@Before
public void before() {
longStringsEnabled = FitsFactory.isLongStringsEnabled();
useHierarch = FitsFactory.getUseHierarch();
}

@After
public void after() {
FitsFactory.setLongStringsEnabled(longStringsEnabled);
FitsFactory.setUseHierarch(useHierarch);
FitsFactory.setHierarchFormater(new StandardIHierarchKeyFormatter());

}

@Test
public void test1() throws Exception {

Expand Down Expand Up @@ -333,49 +355,58 @@ public void testStringQuotes() throws Exception {

@Test
public void testCardSize() throws Exception {
boolean longStringsEnabled = FitsFactory.isLongStringsEnabled();
boolean useHierarch = FitsFactory.getUseHierarch();
try {
FitsFactory.setLongStringsEnabled(true);
FitsFactory.setUseHierarch(true);

HeaderCard hc =
new HeaderCard(
"HIERARCH.TEST.TEST.TEST.TEST.TEST.TEST",//
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ",
"dummy");
assertEquals(4, hc.cardSize());

} finally {
FitsFactory.setLongStringsEnabled(longStringsEnabled);
FitsFactory.setUseHierarch(useHierarch);
FitsFactory.setLongStringsEnabled(true);
FitsFactory.setUseHierarch(true);

}
HeaderCard hc =
new HeaderCard(
"HIERARCH.TEST.TEST.TEST.TEST.TEST.TEST",//
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ",
"dummy");
assertEquals(4, hc.cardSize());
}

@Test
public void testHierarchCard() throws Exception {
boolean longStringsEnabled = FitsFactory.isLongStringsEnabled();
boolean useHierarch = FitsFactory.getUseHierarch();
try {
FitsFactory.setLongStringsEnabled(true);
FitsFactory.setUseHierarch(true);

HeaderCard hc =
new HeaderCard(
"HIERARCH.TEST.TEST.TEST.TEST.TEST.TEST",//
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ",
" dummy");
BufferedDataInputStream data = new BufferedDataInputStream(new ByteArrayInputStream(AsciiFuncs.getBytes(hc.toString())));
HeaderCard headerCard = new HeaderCard(data);
assertEquals(hc.getKey(), headerCard.getKey());
assertEquals(hc.getValue(), headerCard.getValue());

} finally {
FitsFactory.setLongStringsEnabled(longStringsEnabled);
FitsFactory.setUseHierarch(useHierarch);
FitsFactory.setLongStringsEnabled(true);
FitsFactory.setUseHierarch(true);

}
HeaderCard hc =
new HeaderCard(
"HIERARCH.TEST.TEST.TEST.TEST.TEST.TEST",//
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla ",
" dummy");
BufferedDataInputStream data = headerCardToStream(hc);
HeaderCard headerCard = new HeaderCard(data);
assertEquals(hc.getKey(), headerCard.getKey());
assertEquals(hc.getValue(), headerCard.getValue());

}

protected BufferedDataInputStream headerCardToStream(HeaderCard hc) {
BufferedDataInputStream data = new BufferedDataInputStream(new ByteArrayInputStream(AsciiFuncs.getBytes(hc.toString())));
return data;
}

@Test
public void testHierarchAlternatives() throws Exception {
FitsFactory.setUseHierarch(true);
HeaderCard headerCard = new HeaderCard("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", "xy", null);
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", headerCard.getKey());
assertEquals("HIERARCH TEST1 TEST2 TEST3 TEST4 TEST5 TEST6= 'xy' ", headerCard.toString());
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", new HeaderCard(headerCardToStream(headerCard)).getKey());

FitsFactory.setHierarchFormater(new BlanksDotHierarchKeyFormatter(1));
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", headerCard.getKey());
assertEquals("HIERARCH TEST1.TEST2.TEST3.TEST4.TEST5.TEST6= 'xy' ", headerCard.toString());
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", new HeaderCard(headerCardToStream(headerCard)).getKey());

FitsFactory.setHierarchFormater(new BlanksDotHierarchKeyFormatter(2));
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", headerCard.getKey());
assertEquals("HIERARCH TEST1.TEST2.TEST3.TEST4.TEST5.TEST6= 'xy' ", headerCard.toString());
assertEquals("HIERARCH.TEST1.TEST2.TEST3.TEST4.TEST5.TEST6", new HeaderCard(headerCardToStream(headerCard)).getKey());

}

}

0 comments on commit 4f193e9

Please sign in to comment.