github.com/jjjabc/fitsio@v0.0.0-20161215022839-d1807e9e818e/file_test.go (about)

     1  // Copyright 2015 The astrogo Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package fitsio
     6  
     7  import (
     8  	"io/ioutil"
     9  	"os"
    10  	"testing"
    11  )
    12  
    13  func TestOpenFile(t *testing.T) {
    14  	const fname = "testdata/file001.fits"
    15  	r, err := os.Open(fname)
    16  	if err != nil {
    17  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
    18  	}
    19  	defer r.Close()
    20  
    21  	f, err := Open(r)
    22  	if err != nil {
    23  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
    24  	}
    25  	defer f.Close()
    26  
    27  	fmode := f.Mode()
    28  	if fmode != ReadOnly {
    29  		t.Fatalf("expected file-mode [%v]. got [%v]", ReadOnly, fmode)
    30  	}
    31  
    32  	name := f.Name()
    33  	if name != fname {
    34  		t.Fatalf("expected file-name [%v]. got [%v]", fname, name)
    35  	}
    36  
    37  	// furl, err := f.UrlType()
    38  	// if err != nil {
    39  	// 	t.Fatalf("error url: %v", err)
    40  	// }
    41  	// if furl != "file://" {
    42  	// 	t.Fatalf("expected file-url [%v]. got [%v]", "file://", furl)
    43  	// }
    44  
    45  }
    46  
    47  func TestAsciiTbl(t *testing.T) {
    48  	const fname = "testdata/file001.fits"
    49  	r, err := os.Open(fname)
    50  	if err != nil {
    51  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
    52  	}
    53  	defer r.Close()
    54  
    55  	f, err := Open(r)
    56  	if err != nil {
    57  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
    58  	}
    59  	defer f.Close()
    60  
    61  	nhdus := len(f.HDUs())
    62  	if nhdus != 2 {
    63  		t.Fatalf("expected #hdus [%v]. got [%v]", 2, nhdus)
    64  	}
    65  
    66  	hdu := f.HDU(0)
    67  	hdutype := hdu.Type()
    68  	if err != nil {
    69  		t.Fatalf("error hdu-type: %v", err)
    70  	}
    71  	if hdutype != IMAGE_HDU {
    72  		t.Fatalf("expected hdu type [%v]. got [%v]", IMAGE_HDU, hdutype)
    73  	}
    74  
    75  	txt := hdu.Header().Text()
    76  	txt_ref, err := ioutil.ReadFile("testdata/ref.file001.hdu")
    77  	if err != nil {
    78  		t.Fatalf("error reading ref file: %v", err)
    79  	}
    80  	if string(txt_ref) != txt {
    81  		t.Fatalf("expected hdu-text:\n%q\ngot:\n%q", string(txt_ref), txt)
    82  	}
    83  
    84  	// move to next header
    85  	hdu = f.HDU(1)
    86  	hdutype = hdu.Type()
    87  	if err != nil {
    88  		t.Fatalf("error hdu-type: %v", err)
    89  	}
    90  	if hdutype != ASCII_TBL {
    91  		t.Fatalf("expected hdu type [%v]. got [%v]", ASCII_TBL, hdutype)
    92  	}
    93  
    94  	// test hdu by name
    95  	hduok := f.Has("TABLE")
    96  	if hduok {
    97  		t.Fatalf("expected error")
    98  	}
    99  }
   100  
   101  func TestBinTable(t *testing.T) {
   102  	const fname = "testdata/swp06542llg.fits"
   103  	r, err := os.Open(fname)
   104  	if err != nil {
   105  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
   106  	}
   107  	defer r.Close()
   108  	f, err := Open(r)
   109  	if err != nil {
   110  		t.Fatalf("could not open FITS file [%s]: %v", fname, err)
   111  	}
   112  	defer f.Close()
   113  
   114  	nhdus := len(f.HDUs())
   115  	if nhdus != 2 {
   116  		t.Fatalf("expected #hdus [%v]. got [%v]", 2, nhdus)
   117  	}
   118  
   119  	hdu := f.HDU(0)
   120  	hdutype := hdu.Type()
   121  	if err != nil {
   122  		t.Fatalf("error hdu-type: %v", err)
   123  	}
   124  	if hdutype != IMAGE_HDU {
   125  		t.Fatalf("expected hdu type [%v]. got [%v]", IMAGE_HDU, hdutype)
   126  	}
   127  
   128  	txt := hdu.Header().Text()
   129  	txt_ref, err := ioutil.ReadFile("testdata/ref.swp06542llg.hdu")
   130  	if err != nil {
   131  		t.Fatalf("error reading ref file: %v", err)
   132  	}
   133  	if string(txt_ref) != txt {
   134  		t.Fatalf("expected hdu-write:\n%q\ngot:\n%q", string(txt_ref), txt)
   135  	}
   136  
   137  	// move to next header
   138  	hdu = f.HDU(1)
   139  	hdutype = hdu.Type()
   140  	if err != nil {
   141  		t.Fatalf("error hdu-type: %v", err)
   142  	}
   143  	if hdutype != BINARY_TBL {
   144  		t.Fatalf("expected hdu type [%v]. got [%v]", BINARY_TBL, hdutype)
   145  	}
   146  
   147  	// get hdu by name
   148  	hduok := f.Has("IUE MELO")
   149  	if !hduok {
   150  		t.Fatalf("expected to have a HDU by name 'IUE MELO'")
   151  	}
   152  
   153  	hdu = f.Get("IUE MELO")
   154  	if hdu.Type() != BINARY_TBL {
   155  		t.Fatalf("expected hdu 'IUE MELO' to be a bintable. got [%v]", hdu.Type())
   156  	}
   157  
   158  }
   159  
   160  func TestOpen(t *testing.T) {
   161  	for _, table := range g_tables {
   162  		r, err := os.Open(table.fname)
   163  		if err != nil {
   164  			t.Fatalf("error opening file [%v]: %v", table.fname, err)
   165  		}
   166  		defer r.Close()
   167  		f, err := Open(r)
   168  		if err != nil {
   169  			t.Fatalf("error opening file [%v]: %v", table.fname, err)
   170  		}
   171  		defer f.Close()
   172  
   173  		fmode := f.Mode()
   174  		if fmode != ReadOnly {
   175  			t.Fatalf("expected file-mode [%v]. got [%v]", ReadOnly, fmode)
   176  		}
   177  
   178  		name := f.Name()
   179  		if name != table.fname {
   180  			t.Fatalf("expected file-name [%v]. got [%v]", table.fname, name)
   181  		}
   182  
   183  		if len(f.HDUs()) != len(table.hdus) {
   184  			t.Fatalf("#hdus. expected %v. got %v", len(table.hdus), len(f.HDUs()))
   185  		}
   186  	}
   187  }
   188  
   189  func TestCreateFile(t *testing.T) {
   190  	curdir, err := os.Getwd()
   191  	if err != nil {
   192  		t.Fatalf(err.Error())
   193  	}
   194  	defer os.Chdir(curdir)
   195  
   196  	workdir, err := ioutil.TempDir("", "go-fitsio-test-")
   197  	if err != nil {
   198  		t.Fatalf(err.Error())
   199  	}
   200  	defer os.RemoveAll(workdir)
   201  
   202  	err = os.Chdir(workdir)
   203  	if err != nil {
   204  		t.Fatalf(err.Error())
   205  	}
   206  
   207  	fname := "new.fits"
   208  	w, err := os.Create(fname)
   209  	if err != nil {
   210  		t.Fatalf("error creating new file [%v]: %v", fname, err)
   211  	}
   212  	defer w.Close()
   213  	f, err := Create(w)
   214  	if err != nil {
   215  		t.Fatalf("error creating new file [%v]: %v", fname, err)
   216  	}
   217  	defer f.Close()
   218  
   219  	fmode := f.Mode()
   220  	if err != nil {
   221  		t.Fatalf("error mode: %v", err)
   222  	}
   223  	if fmode != WriteOnly {
   224  		t.Fatalf("expected file-mode [%v]. got [%v]", WriteOnly, fmode)
   225  	}
   226  
   227  	name := f.Name()
   228  	if err != nil {
   229  		t.Fatalf("error name: %v", err)
   230  	}
   231  	if name != fname {
   232  		t.Fatalf("expected file-name [%v]. got [%v]", fname, name)
   233  	}
   234  
   235  	if len(f.HDUs()) != 0 {
   236  		t.Fatalf("#hdus. expected %v. got %v", 0, len(f.HDUs()))
   237  	}
   238  
   239  }
   240  
   241  // EOF