From d164ae963297a99e2222bc32b11928c1635c45d8 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sun, 28 Jun 2009 13:54:22 +0200 Subject: [PATCH] Haskell bindings: Implement bindtests. --- .gitignore | 1 + haskell/Bindtests.hs | 40 ++++++++++++++++++++++++++++++++++++++++ haskell/Makefile.am | 9 +++++++-- haskell/bindtests.hs | 0 haskell/run-bindtests | 23 +++++++++++++++++++++++ src/generator.ml | 35 +++++++++++++++++++++++++++++++++-- 6 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 haskell/Bindtests.hs delete mode 100644 haskell/bindtests.hs create mode 100755 haskell/run-bindtests diff --git a/.gitignore b/.gitignore index dca5135..8d76ffc 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ examples/to-xml fish/guestfish guestfish.1 guestfs.3 +haskell/Bindtests haskell/Guestfs005Load haskell/Guestfs010Launch haskell/Guestfs050LVCreate diff --git a/haskell/Bindtests.hs b/haskell/Bindtests.hs new file mode 100644 index 0000000..43f43d4 --- /dev/null +++ b/haskell/Bindtests.hs @@ -0,0 +1,40 @@ +{- libguestfs generated file + WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'. + ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. + + Copyright (C) 2009 Red Hat Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +-} + +module Bindtests where +import qualified Guestfs + +main = do + g <- Guestfs.create + Guestfs.test0 g "abc" (Just "def") [] False 0 "123" "456" + Guestfs.test0 g "abc" Nothing [] False 0 "123" "456" + Guestfs.test0 g "" (Just "def") [] False 0 "123" "456" + Guestfs.test0 g "" (Just "") [] False 0 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False 0 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1","2"] False 0 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] True 0 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False (-1) "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False (-2) "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False 1 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False 2 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False 4095 "123" "456" + Guestfs.test0 g "abc" (Just "def") ["1"] False 0 "" "" + putStrLn "EOF" diff --git a/haskell/Makefile.am b/haskell/Makefile.am index 1086ee9..3cb721f 100644 --- a/haskell/Makefile.am +++ b/haskell/Makefile.am @@ -15,7 +15,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -EXTRA_DIST = *.hs +EXTRA_DIST = *.hs run-bindtests CLEANFILES = *~ @@ -26,10 +26,15 @@ TESTS_ENVIRONMENT = \ LIBGUESTFS_PATH=$(top_builddir)/appliance \ $(VG) -TESTS = Guestfs005Load Guestfs010Launch Guestfs050LVCreate +TESTS = run-bindtests Guestfs005Load Guestfs010Launch Guestfs050LVCreate + +check_DATA = Bindtests GHCFLAGS = -I$(abs_top_builddir)/src -L$(abs_top_builddir)/src/.libs +Bindtests: Bindtests.hs Guestfs.hs + $(GHC) $(GHCFLAGS) -main-is $(shell basename $@) --make -o $@ $< -lguestfs + Guestfs005Load: Guestfs005Load.hs Guestfs.hs $(GHC) $(GHCFLAGS) -main-is $(shell basename $@) --make -o $@ $< -lguestfs diff --git a/haskell/bindtests.hs b/haskell/bindtests.hs deleted file mode 100644 index e69de29..0000000 diff --git a/haskell/run-bindtests b/haskell/run-bindtests new file mode 100755 index 0000000..ce01af9 --- /dev/null +++ b/haskell/run-bindtests @@ -0,0 +1,23 @@ +#!/bin/sh - +# libguestfs Haskell bindings +# Copyright (C) 2009 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +set -e + +./Bindtests > bindtests.tmp +diff -u ../bindtests bindtests.tmp + diff --git a/src/generator.ml b/src/generator.ml index 9c0632e..1342c38 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -7806,7 +7806,38 @@ public class Bindtests { " and generate_haskell_bindtests () = - () (* XXX Haskell bindings need to be fleshed out. *) + generate_header HaskellStyle GPLv2; + + pr "\ +module Bindtests where +import qualified Guestfs + +main = do + g <- Guestfs.create +"; + + let mkargs args = + String.concat " " ( + List.map ( + function + | CallString s -> "\"" ^ s ^ "\"" + | CallOptString None -> "Nothing" + | CallOptString (Some s) -> sprintf "(Just \"%s\")" s + | CallStringList xs -> + "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]" + | CallInt i when i < 0 -> "(" ^ string_of_int i ^ ")" + | CallInt i -> string_of_int i + | CallBool true -> "True" + | CallBool false -> "False" + ) args + ) + in + + generate_lang_bindtests ( + fun f args -> pr " Guestfs.%s g %s\n" f (mkargs args) + ); + + pr " putStrLn \"EOF\"\n" (* Language-independent bindings tests - we do it this way to * ensure there is parity in testing bindings across all languages. @@ -8036,7 +8067,7 @@ Run it from the top source directory using the command generate_haskell_hs (); close (); - let close = output_to "haskell/bindtests.hs" in + let close = output_to "haskell/Bindtests.hs" in generate_haskell_bindtests (); close (); -- 1.8.3.1