package core import ( "bytes" "io" "io/ioutil" "testing" ) // Importer that stores all imported bytes to buffer sink. type stringimporter struct { sink []byte } func (sim *stringimporter) Import(rdf io.Reader) error { if bs, err := ioutil.ReadAll(rdf); err != nil { return err } else { sim.sink = bs return nil } } func (sim *stringimporter) Sink() string { return string(sim.sink) } func TestZeroQuotes(t *testing.T) { iri := `abcdefghijklmnopqrstuvwxzy` start := bytes.NewBufferString(iri) sim := stringimporter{} ifim := IriFixImporter{ Next: &sim, } if err := ifim.Import(start); err != nil { t.Errorf("import failed: %v", err) } imported := sim.Sink() if iri != imported { t.Errorf("iri=%v and imported=%v do not match", iri, imported) } } func TestZeroChange(t *testing.T) { iri := `abcdefghijklm"nopqrs"tuvwxzy` start := bytes.NewBufferString(iri) sim := stringimporter{} ifim := IriFixImporter{ Next: &sim, } if err := ifim.Import(start); err != nil { t.Errorf("import failed: %v", err) } imported := sim.Sink() if iri != imported { t.Errorf("iri=%v and imported=%v do not match", iri, imported) } } func TestPipe(t *testing.T) { iri := `abcdefghijklm"no|pqrs"tuvwxzy` escaped := `abcdefghijklm"no%7Cpqrs"tuvwxzy` start := bytes.NewBufferString(iri) sim := stringimporter{} ifim := IriFixImporter{ Next: &sim, } if err := ifim.Import(start); err != nil { t.Errorf("import failed: %v", err) } imported := sim.Sink() if escaped != imported { t.Errorf("escaped=%v and imported=%v do not match", escaped, imported) } }