Blame lenses/tests/test_build.aug

Packit Service a2ae7a
(*
Packit Service a2ae7a
Module: Test_Build
Packit Service a2ae7a
  Provides unit tests and examples for the <Build> lens.
Packit Service a2ae7a
*)
Packit Service a2ae7a
Packit Service a2ae7a
module Test_Build =
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:               GENERIC CONSTRUCTIONS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: brackets
Packit Service a2ae7a
    Test brackets *)
Packit Service a2ae7a
let brackets = [ Build.brackets Sep.lbracket Sep.rbracket  (key Rx.word) ]
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: brackets *)
Packit Service a2ae7a
test brackets get "(foo)" = { "foo" }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:             LIST CONSTRUCTIONS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: list *)
Packit Service a2ae7a
let list = Build.list [ key Rx.word ] Sep.space
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: list *)
Packit Service a2ae7a
test list get "foo bar baz" = { "foo" } { "bar" } { "baz" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: list *)
Packit Service a2ae7a
test list get "foo" = * 
Packit Service a2ae7a
Packit Service a2ae7a
(* View: opt_list *)
Packit Service a2ae7a
let opt_list = Build.opt_list [ key Rx.word ] Sep.space
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: opt_list *)
Packit Service a2ae7a
test opt_list get "foo bar baz" = { "foo" } { "bar" } { "baz" }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:                   LABEL OPERATIONS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: xchg *)
Packit Service a2ae7a
let xchg = [ Build.xchg Rx.space " " "space" ]
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: xchg *)
Packit Service a2ae7a
test xchg get " \t " = { "space" }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: xchgs *)
Packit Service a2ae7a
let xchgs = [ Build.xchgs " " "space" ]
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: xchgs *)
Packit Service a2ae7a
test xchgs get " " = { "space" }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:                   SUBNODE CONSTRUCTIONS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: key_value_line *)
Packit Service a2ae7a
let key_value_line = Build.key_value_line Rx.word Sep.equal (store Rx.word)
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: key_value_line *)
Packit Service a2ae7a
test key_value_line get "foo=bar\n" = { "foo" = "bar" }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: key_value_line_comment *)
Packit Service a2ae7a
let key_value_line_comment = Build.key_value_line_comment Rx.word
Packit Service a2ae7a
                             Sep.equal (store Rx.word) Util.comment
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: key_value_line_comment *)
Packit Service a2ae7a
test key_value_line_comment get "foo=bar # comment\n" =
Packit Service a2ae7a
    { "foo" = "bar" { "#comment" = "comment" } }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: key_value *)
Packit Service a2ae7a
let key_value = Build.key_value Rx.word Sep.equal (store Rx.word)
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: key_value *)
Packit Service a2ae7a
test key_value get "foo=bar" = { "foo" = "bar" }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: key_ws_value *)
Packit Service a2ae7a
let key_ws_value = Build.key_ws_value Rx.word
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: key_ws_value *)
Packit Service a2ae7a
test key_ws_value get "foo bar\n" = { "foo" = "bar" }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: flag *)
Packit Service a2ae7a
let flag = Build.flag Rx.word
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: flag *)
Packit Service a2ae7a
test flag get "foo" = { "foo" }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: flag_line *)
Packit Service a2ae7a
let flag_line = Build.flag_line Rx.word
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: flag_line *)
Packit Service a2ae7a
test flag_line get "foo\n" = { "foo" }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:                   BLOCK CONSTRUCTIONS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: block_entry
Packit Service a2ae7a
    The block entry used for testing *)
Packit Service a2ae7a
let block_entry = Build.key_value "test" Sep.equal (store Rx.word)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: block
Packit Service a2ae7a
    The block used for testing *)
Packit Service a2ae7a
let block = Build.block block_entry
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Simple test for <block> *)
Packit Service a2ae7a
test block get " {test=1}" =
Packit Service a2ae7a
  { "test" = "1" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Simple test for <block> with newlines *)
Packit Service a2ae7a
test block get " {\n test=1\n}" =
Packit Service a2ae7a
  { "test" = "1" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Simple test for <block> two indented entries *)
Packit Service a2ae7a
test block get " {\n test=1 \n  test=2 \n}" =
Packit Service a2ae7a
  { "test" = "1" }
Packit Service a2ae7a
  { "test" = "2" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Test <block> with a comment *)
Packit Service a2ae7a
test block get " { # This is a comment\n}" =
Packit Service a2ae7a
  { "#comment" = "This is a comment" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Test <block> with comments and newlines *)
Packit Service a2ae7a
test block get " { # This is a comment\n# Another comment\n}" =
Packit Service a2ae7a
  { "#comment" = "This is a comment" }
Packit Service a2ae7a
  { "#comment" = "Another comment" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: block
Packit Service a2ae7a
     Test defaults for blocks *)
Packit Service a2ae7a
test block put " { test=1 }" after
Packit Service a2ae7a
   set "/#comment" "a comment";
Packit Service a2ae7a
   rm "/test";
Packit Service a2ae7a
   set "/test" "2" =
Packit Service a2ae7a
  " { # a comment\ntest=2 }"
Packit Service a2ae7a
Packit Service a2ae7a
(* View: named_block
Packit Service a2ae7a
    The named block used for testing *)
Packit Service a2ae7a
let named_block = Build.named_block "foo" block_entry
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: named_block
Packit Service a2ae7a
     Simple test for <named_block> *)
Packit Service a2ae7a
test named_block get "foo {test=1}\n" =
Packit Service a2ae7a
  { "foo" { "test" = "1" } }
Packit Service a2ae7a
Packit Service a2ae7a
(* View: logrotate_block
Packit Service a2ae7a
    A minimalistic logrotate block *)
Packit Service a2ae7a
let logrotate_block =
Packit Service a2ae7a
      let entry = [ key Rx.word ] 
Packit Service a2ae7a
   in let filename = [ label "file" . store /\/[^,#= \n\t{}]+/ ]
Packit Service a2ae7a
   in let filename_sep = del /[ \t\n]+/ " "
Packit Service a2ae7a
   in let filenames = Build.opt_list filename filename_sep
Packit Service a2ae7a
   in [ label "rule" . filenames . Build.block entry ]
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: logrotate_block *)
Packit Service a2ae7a
test logrotate_block get "/var/log/wtmp\n/var/log/wtmp2\n{
Packit Service a2ae7a
   missingok
Packit Service a2ae7a
   monthly
Packit Service a2ae7a
}" =
Packit Service a2ae7a
  { "rule"
Packit Service a2ae7a
    { "file" = "/var/log/wtmp" }
Packit Service a2ae7a
    { "file" = "/var/log/wtmp2" }
Packit Service a2ae7a
    { "missingok" }
Packit Service a2ae7a
    { "monthly" }
Packit Service a2ae7a
  }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 * Group:               COMBINATORICS
Packit Service a2ae7a
 ************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* View: combine_two
Packit Service a2ae7a
    A minimalistic combination lens *)
Packit Service a2ae7a
let combine_two =
Packit Service a2ae7a
     let entry (k:string) = [ key k ]
Packit Service a2ae7a
  in Build.combine_two (entry "a") (entry "b")
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should parse ab *)
Packit Service a2ae7a
test combine_two get "ab" = { "a" } { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should parse ba *)
Packit Service a2ae7a
test combine_two get "ba" = { "b" } { "a" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should not parse a *)
Packit Service a2ae7a
test combine_two get "a" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should not parse b *)
Packit Service a2ae7a
test combine_two get "b" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should not parse aa *)
Packit Service a2ae7a
test combine_two get "aa" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two 
Packit Service a2ae7a
     Should not parse bb *)
Packit Service a2ae7a
test combine_two get "bb" = *
Packit Service a2ae7a
 
Packit Service a2ae7a
Packit Service a2ae7a
(* View: combine_two_opt
Packit Service a2ae7a
    A minimalistic optional combination lens *)
Packit Service a2ae7a
let combine_two_opt =
Packit Service a2ae7a
     let entry (k:string) = [ key k ]
Packit Service a2ae7a
  in Build.combine_two_opt (entry "a") (entry "b")
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should parse ab *)
Packit Service a2ae7a
test combine_two_opt get "ab" = { "a" } { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should parse ba *)
Packit Service a2ae7a
test combine_two_opt get "ba" = { "b" } { "a" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should parse a *)
Packit Service a2ae7a
test combine_two_opt get "a" = { "a" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should parse b *)
Packit Service a2ae7a
test combine_two_opt get "b" = { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should not parse aa *)
Packit Service a2ae7a
test combine_two_opt get "aa" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_two_opt 
Packit Service a2ae7a
     Should not parse bb *)
Packit Service a2ae7a
test combine_two_opt get "bb" = *
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(* View: combine_three
Packit Service a2ae7a
    A minimalistic optional combination lens *)
Packit Service a2ae7a
let combine_three =
Packit Service a2ae7a
     let entry (k:string) = [ key k ]
Packit Service a2ae7a
  in Build.combine_three (entry "a") (entry "b") (entry "c")
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse ab *)
Packit Service a2ae7a
test combine_three get "ab" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse ba *)
Packit Service a2ae7a
test combine_three get "ba" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse a *)
Packit Service a2ae7a
test combine_three get "a" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse b *)
Packit Service a2ae7a
test combine_three get "b" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse aa *)
Packit Service a2ae7a
test combine_three get "aa" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should not parse bbc *)
Packit Service a2ae7a
test combine_three get "bbc" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should parse abc *)
Packit Service a2ae7a
test combine_three get "abc" = { "a" } { "b" } { "c" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three 
Packit Service a2ae7a
     Should parse cab *)
Packit Service a2ae7a
test combine_three get "cab" = { "c" } { "a" } { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(* View: combine_three_opt
Packit Service a2ae7a
    A minimalistic optional combination lens *)
Packit Service a2ae7a
let combine_three_opt =
Packit Service a2ae7a
     let entry (k:string) = [ key k ]
Packit Service a2ae7a
  in Build.combine_three_opt (entry "a") (entry "b") (entry "c")
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse ab *)
Packit Service a2ae7a
test combine_three_opt get "ab" = { "a" } { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse ba *)
Packit Service a2ae7a
test combine_three_opt get "ba" = { "b" } { "a" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse a *)
Packit Service a2ae7a
test combine_three_opt get "a" = { "a" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse b *)
Packit Service a2ae7a
test combine_three_opt get "b" = { "b" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should not parse aa *)
Packit Service a2ae7a
test combine_three_opt get "aa" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should not parse bbc *)
Packit Service a2ae7a
test combine_three_opt get "bbc" = *
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse abc *)
Packit Service a2ae7a
test combine_three_opt get "abc" = { "a" } { "b" } { "c" }
Packit Service a2ae7a
Packit Service a2ae7a
(* Test: combine_three_opt 
Packit Service a2ae7a
     Should parse cab *)
Packit Service a2ae7a
test combine_three_opt get "cab" = { "c" } { "a" } { "b" }