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