[Libguestfs] [PATCH] php: add a simple bindtests test

Richard W.M. Jones rjones at redhat.com
Wed Feb 11 13:55:40 UTC 2015


On Tue, Feb 10, 2015 at 05:31:11PM +0100, Pino Toscano wrote:
> Generate a simple bindtests test for the PHP binding, so it is possible
> to easily test all the argument types.
> 
> Unlike the bindtests for other languages, optional arguments are not
> tested, due to the limitations of optional arguments in PHP (or maybe
> they way we implement them).
> ---
>  .gitignore             |  1 +
>  generator/bindtests.ml | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  generator/main.ml      |  1 +
>  3 files changed, 65 insertions(+)
> 
> diff --git a/.gitignore b/.gitignore
> index 1b02af0..b165c81 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -387,6 +387,7 @@ Makefile.in
>  /php/extension/php-for-tests.sh
>  /php/extension/php_guestfs_php.h
>  /php/extension/run-tests.php
> +/php/extension/tests/guestfs_php_bindtests.phpt
>  /php/extension/tmp-php.ini
>  /pick-guests.pl
>  /po-docs/*/*.1
> diff --git a/generator/bindtests.ml b/generator/bindtests.ml
> index b75de15..2e9b6d3 100644
> --- a/generator/bindtests.ml
> +++ b/generator/bindtests.ml
> @@ -909,6 +909,69 @@ and generate_golang_bindtests () =
>    pr "    return &s;\n";
>    pr "}\n"
>  
> +and generate_php_bindtests () =
> +  (* No header for this, as it is a .phpt file. *)
> +
> +  (* Unfortunately, due to the way optional arguments work in PHP,
> +   * we cannot test arbitrary arguments skipping the previous ones
> +   * in the function signatures.
> +   *
> +   * Hence, check only the non-optional arguments, and fix the
> +   * baseline output to expect always "unset" optional arguments.
> +   *)
> +
> +  pr "--TEST--\n";
> +  pr "General PHP binding test.\n";
> +  pr "--FILE--\n";
> +  pr "<?php\n";
> +  pr "$g = guestfs_create ();\n";
> +
> +  let mkargs args =
> +    String.concat ", " (
> +      List.map (
> +        function
> +        | CallString s -> "\"" ^ s ^ "\""
> +        | CallOptString None -> "NULL"
> +        | CallOptString (Some s) -> sprintf "\"%s\"" s
> +        | CallStringList xs ->
> +          sprintf "array(%s)"
> +            (String.concat "," (List.map (sprintf "\"%s\"") xs))
> +        | CallInt i -> string_of_int i
> +        | CallInt64 i -> Int64.to_string i
> +        | CallBool b -> if b then "1" else "0"
> +        | CallBuffer s -> "\"" ^ c_quote s ^ "\""
> +      ) args
> +    )
> +  in
> +
> +  generate_lang_bindtests (
> +    fun f args optargs ->
> +      pr "if (guestfs_%s ($g, %s) == false) {\n" f (mkargs args);
> +      pr "  echo (\"Call failed: \" . guestfs_last_error ($g) . \"\\n\");\n";
> +      pr "  exit;\n";
> +      pr "}\n";
> +  );
> +
> +  pr "echo (\"EOF\\n\");\n";
> +  pr "?>\n";
> +  pr "--EXPECT--\n";
> +
> +  let dump filename =
> +    let chan = open_in filename in
> +    let rec loop () =
> +      let line = input_line chan in
> +      (match string_split ":" line with
> +      | ("obool"|"oint"|"oint64"|"ostring"|"ostringlist") as x :: _ ->
> +        pr "%s: unset\n" x
> +      | _ -> pr "%s\n" line
> +      );
> +      loop ()
> +    in
> +    (try loop () with End_of_file -> ());
> +    close_in chan in
> +
> +  dump "bindtests"
> +
>  (* Language-independent bindings tests - we do it this way to
>   * ensure there is parity in testing bindings across all languages.
>   *)
> diff --git a/generator/main.ml b/generator/main.ml
> index 436d72d..abeae0c 100644
> --- a/generator/main.ml
> +++ b/generator/main.ml
> @@ -160,6 +160,7 @@ Run it from the top source directory using the command
>    output_to "csharp/Libguestfs.cs" generate_csharp;
>    output_to "php/extension/php_guestfs_php.h" generate_php_h;
>    output_to "php/extension/guestfs_php.c" generate_php_c;
> +  output_to "php/extension/tests/guestfs_php_bindtests.phpt" generate_php_bindtests;
>    output_to "erlang/guestfs.erl" generate_erlang_erl;
>    output_to "erlang/erl-guestfs.c" generate_erlang_c;
>    output_to ~perm:0o555 "erlang/bindtests.erl" generate_erlang_bindtests;
> -- 
> 1.9.3

ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW




More information about the Libguestfs mailing list