Tune and test Go bindings for Stepper.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/d5063a51 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/d5063a51 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/d5063a51 Branch: refs/heads/master Commit: d5063a519200d52c1abeec263bd008f176fa94bd Parents: dd4328b Author: Marvin Humphrey <[email protected]> Authored: Mon Nov 16 16:11:22 2015 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Fri Nov 20 18:49:34 2015 -0800 ---------------------------------------------------------------------- go/build.go | 8 ++++++ go/lucy/util.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++ go/lucy/util_test.go | 53 ++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/d5063a51/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 6c55250..3b6fc68 100644 --- a/go/build.go +++ b/go/build.go @@ -365,6 +365,14 @@ func specClasses(parcel *cfc.Parcel) { cfWriterBinding := cfc.NewGoClass(parcel, "Lucy::Store::CompoundFileWriter") cfWriterBinding.SpecMethod("Consolidate", "Consolidate() error") cfWriterBinding.Register() + + stepperBinding := cfc.NewGoClass(parcel, "Lucy::Util::Stepper") + stepperBinding.SpecMethod("Write_Key_Frame", "WriteKeyFrame(OutStream, interface{}) error") + stepperBinding.SpecMethod("Write_Delta", "WriteDelta(OutStream, interface{}) error") + stepperBinding.SpecMethod("Read_Key_Frame", "ReadKeyFrame(InStream) error") + stepperBinding.SpecMethod("Read_Delta", "ReadDelta(InStream) error") + stepperBinding.SpecMethod("Read_Record", "readRecord(InStream) error") + stepperBinding.Register() } func build() { http://git-wip-us.apache.org/repos/asf/lucy/blob/d5063a51/go/lucy/util.go ---------------------------------------------------------------------- diff --git a/go/lucy/util.go b/go/lucy/util.go new file mode 100644 index 0000000..a57de89 --- /dev/null +++ b/go/lucy/util.go @@ -0,0 +1,69 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package lucy + +/* +#include "Lucy/Util/Stepper.h" +*/ +import "C" +import "unsafe" + +import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish" + +func (s *StepperIMP) WriteKeyFrame(outstream OutStream, value interface{}) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_Stepper)(clownfish.Unwrap(s, "s")) + outstreamCF := (*C.lucy_OutStream)(clownfish.Unwrap(outstream, "outstream")) + valueCF := (*C.cfish_Obj)(clownfish.GoToClownfish(value, unsafe.Pointer(C.CFISH_OBJ), false)) + defer C.cfish_decref(unsafe.Pointer(valueCF)) + C.LUCY_Stepper_Write_Key_Frame(self, outstreamCF, valueCF) + }) +} + +func (s *StepperIMP) WriteDelta(outstream OutStream, value interface{}) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_Stepper)(clownfish.Unwrap(s, "s")) + outstreamCF := (*C.lucy_OutStream)(clownfish.Unwrap(outstream, "outstream")) + valueCF := (*C.cfish_Obj)(clownfish.GoToClownfish(value, unsafe.Pointer(C.CFISH_OBJ), false)) + defer C.cfish_decref(unsafe.Pointer(valueCF)) + C.LUCY_Stepper_Write_Delta(self, outstreamCF, valueCF) + }) +} + +func (s *StepperIMP) ReadKeyFrame(instream InStream) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_Stepper)(clownfish.Unwrap(s, "s")) + instreamCF := (*C.lucy_InStream)(clownfish.Unwrap(instream, "instream")) + C.LUCY_Stepper_Read_Key_Frame(self, instreamCF) + }) +} + +func (s *StepperIMP) ReadDelta(instream InStream) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_Stepper)(clownfish.Unwrap(s, "s")) + instreamCF := (*C.lucy_InStream)(clownfish.Unwrap(instream, "instream")) + C.LUCY_Stepper_Read_Delta(self, instreamCF) + }) +} + +func (s *StepperIMP) readRecord(instream InStream) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_Stepper)(clownfish.Unwrap(s, "s")) + instreamCF := (*C.lucy_InStream)(clownfish.Unwrap(instream, "instream")) + C.LUCY_Stepper_Read_Record(self, instreamCF) + }) +} http://git-wip-us.apache.org/repos/asf/lucy/blob/d5063a51/go/lucy/util_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/util_test.go b/go/lucy/util_test.go new file mode 100644 index 0000000..38a4503 --- /dev/null +++ b/go/lucy/util_test.go @@ -0,0 +1,53 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package lucy + +import "testing" +import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish" + +func TestStepperMisc(t *testing.T) { + var err error + stepper := NewTextTermStepper() + folder := NewRAMFolder("") + out, _ := folder.OpenOut("foo.dat") + err = stepper.WriteKeyFrame(out, "foo") + if err != nil { + t.Errorf("WriteKeyFrame: %v", err) + } + + bb := clownfish.NewByteBuf(0) + //bb.Cat([]byte("food")) + err = stepper.WriteDelta(out, bb) + if err != nil { + t.Errorf("WriteDelta: %v", err) + } + out.Close() + stepper.Reset() + in, _ := folder.OpenIn("foo.dat") + err = stepper.ReadKeyFrame(in) + if err != nil { + t.Errorf("ReadKeyFrame: %v", err) + } + err = stepper.ReadDelta(in) + if err != nil { + t.Errorf("ReadDelta: %v", err) + } + err = stepper.ReadDelta(in) + if err == nil { + t.Errorf("Expected error when reading past EOF") + } +}
