From 748b034aa8e44546eac120ca5c858aab6b8aecc5 Mon Sep 17 00:00:00 2001 From: Michael Baird Date: Fri, 18 Aug 2017 09:36:45 -0500 Subject: [PATCH] DeleteView from Frame --- frame.go | 20 ++++++++++++++++++++ frame_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/frame.go b/frame.go index de3dd6fbb..295c3abf2 100644 --- a/frame.go +++ b/frame.go @@ -509,6 +509,26 @@ func (f *Frame) newView(path, name string) *View { return view } +// DeleteView removes a view from the frame. +func (f *Frame) DeleteView(name string) error { + view := f.views[name] + if view == nil { + return ErrInvalidView + } + + // TODO capture errors lower down in this method + _ = view.Close() + + // Delete view directory. + if err := os.RemoveAll(view.Path()); err != nil { + return err + } + + delete(f.views, name) + + return nil +} + // SetBit sets a bit on a view within the frame. func (f *Frame) SetBit(name string, rowID, colID uint64, t *time.Time) (changed bool, err error) { // Validate view name. diff --git a/frame_test.go b/frame_test.go index 8cb48cca8..b560d985e 100644 --- a/frame_test.go +++ b/frame_test.go @@ -307,3 +307,34 @@ func TestFrame_RowLabelValidation(t *testing.T) { } } + +// Ensure frame can open and retrieve a view. +func TestFrame_DeleteView(t *testing.T) { + f := test.MustOpenFrame() + defer f.Close() + + // Create view. + view, err := f.CreateViewIfNotExists("v") + if err != nil { + t.Fatal(err) + } else if view == nil { + t.Fatal("expected view") + } + + err = f.DeleteView("v") + if err != nil { + t.Fatal(err) + } + + if f.View("v") != nil { + t.Fatal("view still exists in frame") + } + + // // Retrieve existing view. + view2, err := f.CreateViewIfNotExists("v") + if err != nil { + t.Fatal(err) + } else if view == view2 { + t.Fatal("failed to create new view") + } +}