github.com/Johannestj/minyr@v0.0.0-20230414065407-214b2a4bca49/yr/yr_test.go (about) 1 package yr 2 3 import ( 4 "bufio" 5 "encoding/csv" 6 "io" 7 "os" 8 "strings" 9 "testing" 10 ) 11 12 // antall linjer i filen er 16756 13 func TestFileLineCount(t *testing.T) { 14 filename := ("kjevik-temp-celsius-20220318-20230318.csv") 15 expectedLines := 16756 16 17 file, err := os.Open(filename) 18 if err != nil { 19 t.Fatalf("Feilet å åpne fil %s: %v", filename, err) 20 } 21 defer file.Close() 22 23 scanner := bufio.NewScanner(file) 24 lineCount := 0 25 for scanner.Scan() { 26 lineCount++ 27 } 28 if err := scanner.Err(); err != nil { 29 t.Fatalf("Feilet å skanne fil %s: %v", filename, err) 30 } 31 32 if lineCount != expectedLines { 33 t.Errorf("uforusett linje antall i fil %s: forventet %d, fikk %d", filename, expectedLines, lineCount) 34 } 35 } 36 37 // gitt "Kjevik;SN39040;18.03.2022 01:50;6" ønsker å få (want) "Kjevik;SN39040;18.03.2022 01:50;42,8" 38 func TestConversion8(t *testing.T) { 39 // åpnee csv filen 40 file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv") 41 if err != nil { 42 t.Errorf("Feilet å åpne fil: %v", err) 43 } 44 defer file.Close() 45 46 // Lager en ny csv lesere for å lese csv filen 47 reader := csv.NewReader(file) 48 49 // Loop gjennom hver linje i csv filen 50 for { 51 // Leser en linje fra csv filen 52 line, err := reader.Read() 53 if err != nil { 54 if err == io.EOF { 55 break 56 } else { 57 t.Errorf("Feilet å lese filen: %v", err) 58 return 59 } 60 } 61 62 // Sjekker om linjen matcher den spesifiserte linjen 63 if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "18.03.2022 01:50" { 64 // Sjekker om temperaturen er riktig konvertert 65 want := "42.8" 66 got := line[3] 67 if got != want { 68 t.Errorf("Konvertering feil. Fikk %v, forventer %v", got, want) 69 } 70 return 71 } 72 } 73 t.Errorf("Linje ikke funnet.") 74 } 75 76 // gitt "Kjevik;SN39040;07.03.2023 18:20;0" ønsker å få (want) "Kjevik;SN39040;07.03.2023 18:20;32" 77 func TestConversion32(t *testing.T) { 78 file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv") 79 if err != nil { 80 t.Errorf("Feilet å åpne fil: %v", err) 81 } 82 defer file.Close() 83 84 reader := csv.NewReader(file) 85 86 for { 87 line, err := reader.Read() 88 if err != nil { 89 if err == io.EOF { 90 break 91 } else { 92 t.Errorf("Feilet å lese filen: %v", err) 93 return 94 } 95 } 96 97 if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "07.03.2023 18:20" { 98 want := "32.0" 99 got := line[3] 100 if got != want { 101 t.Errorf("Konvertering feilet. Fikk %v, forventer %v", got, want) 102 } 103 return 104 } 105 } 106 107 t.Errorf("Linje ikke funnet i filen.") 108 } 109 110 // gitt "Kjevik;SN39040;08.03.2023 02:20;-11" ønsker å få (want) "Kjevik;SN39040;08.03.2023 02:20;12.2" 111 func TestConversion2(t *testing.T) { 112 file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv") 113 if err != nil { 114 t.Errorf("Feilet å åpne fil: %v", err) 115 } 116 defer file.Close() 117 118 reader := csv.NewReader(file) 119 120 for { 121 line, err := reader.Read() 122 if err != nil { 123 if err == io.EOF { 124 break 125 } else { 126 t.Errorf("Feilet å lese filen: %v", err) 127 return 128 } 129 } 130 131 if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "08.03.2023 02:20" { 132 want := "12.2" 133 got := line[3] 134 if got != want { 135 t.Errorf("Konvertering feilet. Fikk %v, forventer %v", got, want) 136 } 137 return 138 } 139 } 140 141 t.Errorf("Linje ikke funnet i filen.") 142 } 143 144 /* 145 gitt "Data er gyldig per 18.03.2023 (CC BY 4.0), Meteorologisk institutt (MET);;;" ønsker å få (want) 146 "Data er basert på gyldig data (per 18.03.2023) (CC BY 4.0) fra Meteorologisk institutt (MET);endringen er gjort av 147 STUDENTENS_NAVN", hvor STUDENTENS_NAVN er navn på studenten som leverer besvarelsen 148 */ 149 func TestLastLineOfFile(t *testing.T) { 150 file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv") 151 if err != nil { 152 t.Fatal(err) 153 } 154 defer file.Close() 155 156 // Skanner gjennom filen linje for linje, og holder styr på den siste linjen som ble lest 157 var lastLine string 158 scanner := bufio.NewScanner(file) 159 for scanner.Scan() { 160 lastLine = scanner.Text() 161 } 162 if err := scanner.Err(); err != nil { 163 t.Fatal(err) 164 } 165 166 // Sjekker at den siste linjen inneholder den forventede teksten 167 expectedText := "Data er basert paa gyldig data (per 18.03.2023) (CC BY 4.0) fra Meteorologisk institutt (MET); endringen er gjort av Johannes Tjøstheim" 168 if !strings.Contains(lastLine, expectedText) { 169 t.Errorf("Siste linje i filen matcher ikke forventet resultat. fikk: %q, forventet tekst: %q", lastLine, expectedText) 170 } 171 } 172 173 func TestAverageCelsius(t *testing.T) { 174 expected := 8.55897099200191 175 176 // Endrer arbeidskatalogen til katalogen der CSV-filen befinner seg 177 err := os.Chdir("..") 178 if err != nil { 179 t.Fatalf("Feil: %v", err) 180 } 181 182 // Endrer arbeidskatalogen tilbake til katalogen der testfilen befinner seg når testen er ferdig 183 defer func() { 184 err = os.Chdir("yr") 185 if err != nil { 186 t.Fatalf("Feil: %v", err) 187 } 188 }() 189 190 avg, err := Average("c") 191 if err != nil { 192 t.Fatalf("Feil: %v", err) 193 } 194 195 if avg != expected { 196 t.Fatalf("Gjennomsnittet er %v, men forventet %v", avg, expected) 197 } 198 }