[augeas-devel] augeas: master - Tests for recursive (context free) lenses

David Lutterkort lutter at fedoraproject.org
Fri Jan 15 01:31:41 UTC 2010


Gitweb:        http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=49a72159b81a3787d1939ab89de583cb86b8e7cd
Commit:        49a72159b81a3787d1939ab89de583cb86b8e7cd
Parent:        9b44eb7452d95bab287d6be69240d611dfbe833c
Author:        David Lutterkort <lutter at redhat.com>
AuthorDate:    Fri Dec 18 16:53:54 2009 -0800
Committer:     David Lutterkort <lutter at redhat.com>
CommitterDate: Thu Jan 14 14:48:38 2010 -0800

Tests for recursive (context free) lenses

---
 tests/modules/fail_cf_two_nullable.aug      |    4 ++
 tests/modules/fail_recursion_multi_keys.aug |    4 ++
 tests/modules/pass_nested_sections.aug      |   54 +++++++++++++++++++++++++++
 tests/modules/pass_simple_recursion.aug     |   53 ++++++++++++++++++++++++++
 4 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/tests/modules/fail_cf_two_nullable.aug b/tests/modules/fail_cf_two_nullable.aug
new file mode 100644
index 0000000..3376803
--- /dev/null
+++ b/tests/modules/fail_cf_two_nullable.aug
@@ -0,0 +1,4 @@
+module Fail_cf_two_nullable =
+
+(* Both branches of the union are nullable, making SPC ambiguous *)
+let rec spc = [ spc . label "x" ] | del /s*/ "s"
diff --git a/tests/modules/fail_recursion_multi_keys.aug b/tests/modules/fail_recursion_multi_keys.aug
new file mode 100644
index 0000000..f6d0c3c
--- /dev/null
+++ b/tests/modules/fail_recursion_multi_keys.aug
@@ -0,0 +1,4 @@
+module Fail_recursion_multi_keys =
+
+(* This is the same as (key "a")* . store "x" *)
+let rec l = key "a" . l | store "x"
diff --git a/tests/modules/pass_nested_sections.aug b/tests/modules/pass_nested_sections.aug
new file mode 100644
index 0000000..7b51bc2
--- /dev/null
+++ b/tests/modules/pass_nested_sections.aug
@@ -0,0 +1,54 @@
+module Pass_nested_sections =
+
+let word = /[a-zA-Z0-9]+/
+let ws = /[ \t]*/
+let nl = /\n/
+
+let eol = del (ws . nl) "\n"
+let eq = del (ws . "=" . ws) "="
+let lbr = del (ws . "{" . ws . nl) " {\n"
+let rbr = del (ws . "}" . ws . nl) "}\n"
+let indent = del ws ""
+
+let entry = [ indent . key word . eq . store word . eol ]
+
+let rec lns =
+  let sec = [ indent . key word . lbr . lns . rbr ] in
+  (sec | entry)+
+
+
+test lns get "key = value\n" = { "key" = "value" }
+
+test lns get "section {
+  key1 = v1
+  key2 = v2
+  section {
+    section {
+      key4 = v4
+    }
+  }
+  section {
+    key5 = v5
+  }
+}\n" =
+  { "section"
+    { "key1" = "v1" }
+    { "key2" = "v2" }
+    { "section" { "section" { "key4" = "v4" } } }
+    { "section" { "key5" = "v5" } } }
+
+
+test lns get "section {
+  section {
+    key2 = v2
+  }
+}
+section {
+  key3 = v3
+}
+" =
+  { "section"
+    { "section"
+      { "key2" = "v2" } } }
+  { "section"
+    { "key3" = "v3" } }
diff --git a/tests/modules/pass_simple_recursion.aug b/tests/modules/pass_simple_recursion.aug
new file mode 100644
index 0000000..849c861
--- /dev/null
+++ b/tests/modules/pass_simple_recursion.aug
@@ -0,0 +1,53 @@
+module Pass_simple_recursion =
+
+let rec lns =
+  let lbr = del "<" "<" in
+  let rbr = del ">" ">" in
+  let k   = [ key /[a-z]+/ ] in
+  let node = [ label "S" . lbr . lns . rbr ] in
+  let b = node | k in
+  b*
+
+(* let rec lns = [ key "a" . lns ] | [ key "a" ] *)
+test lns get "<x>" = { "S" { "x" } }
+
+test lns put "<x>" after rm "nothing" = "<x>"
+
+test lns put "<<x>>" after rm "nothing" = "<<x>>"
+
+test lns put "<x><x>" after rm "/S[2]" = "<x>"
+
+test lns put "<x>" after clear "/S/S/S/x" = "<x<<x>>>"
+
+
+(* Start with { "S" { "x" } } and modify to { "S" { "S" { "x" } } } *)
+test lns put "<x>" after
+  insa "S" "/S";
+  clear "/S[2]/S/x";
+  rm "/S[1]" = "<<x>>"
+
+test lns get "<<<x><x>><x>><x>" =
+  { "S"
+    { "S"
+      { "S" { "x" } }
+      { "S" { "x" } } }
+    { "S" { "x" } } }
+  { "S" { "x" } }
+
+test lns put "<<<x><x>><x>><x>" after rm "/S[1]/S[1]/S[1]" =
+  "<<<x>><x>><x>"
+
+
+test lns get "<<yo>><zulu>" =
+  { "S" { "S" { "yo" } } }
+  { "S" { "zulu" } }
+
+(* Some pathological tests for nullable lenses *)
+
+let rec prim_nullable = [ prim_nullable . key /x/ ] | del /s*/ ""
+test prim_nullable get "sx" = { "x" }
+test prim_nullable get "x" = { "x" }
+
+let rec ambig = [ ambig . label "x" ] | del /s+/ "s"
+test ambig get "" = *
+test ambig get "s" = *




More information about the augeas-devel mailing list