func TestDataAccessObjeToCell(t *testing.T) { n, p, l := testNodePredicateLiteral(t) testTable := []struct { o *triple.Object c *table.Cell }{ { o: triple.NewNodeObject(n), c: &table.Cell{N: n}, }, { o: triple.NewPredicateObject(p), c: &table.Cell{P: p}, }, { o: triple.NewLiteralObject(l), c: &table.Cell{L: l}, }, } for _, entry := range testTable { c, err := objectToCell(entry.o) if err != nil { t.Errorf("objecToCell for object %q failed with error %v", entry.o, err) } if got, want := c, entry.c; !reflect.DeepEqual(got, want) { t.Errorf("objectToCell failed to properly convert the object into a cell; got %#v, want %#v", got, want) } } }
// cellToObject returns an object for the given cell. func cellToObject(c *table.Cell) (*triple.Object, error) { if c == nil { return nil, errors.New("cannot create an object out of and empty cell") } if c.N != nil { return triple.NewNodeObject(c.N), nil } if c.P != nil { return triple.NewPredicateObject(c.P), nil } if c.L != nil { return triple.NewLiteralObject(c.L), nil } if c.S != "" { l, err := literal.DefaultBuilder().Parse(fmt.Sprintf(`"%s"^^type:string`, c.S)) if err != nil { return nil, err } return triple.NewLiteralObject(l), nil } return nil, fmt.Errorf("invalid cell %v", c) }