require 'test/unit' require 'rx5' class TestDq2Sq < Test::Unit::TestCase def test_noquotes assert_equal("", dq2sq('')) assert_equal("abc", dq2sq('abc')) end def test_single_pair assert_equal("''", dq2sq('""')) assert_equal("foo='bar'", dq2sq('foo="bar"')) assert_equal("'foo'=bar", dq2sq('"foo"=bar')) assert_equal("abc'def'ghi", dq2sq('abc"def"ghi')) end def test_multi_pairs assert_equal("'foo'=\"bar\"", dq2sq('"foo"="bar"')) assert_equal("a'b'c\"d\"e", dq2sq('a"b"c"d"e')) assert_equal("''\"\"", dq2sq('""""')) end def test_mixed_pairs assert_equal("'foo'='bar'", dq2sq('"foo"=\'bar\'')) assert_equal("'foo'='bar'", dq2sq('\'foo\'="bar"')) end def test_unmached_quote assert_equal("x\"y", dq2sq('x"y')) assert_equal("x\"\'y", dq2sq('x"\'y')) assert_equal("x'y'z\"u", dq2sq('x"y"z"u')) end end def dq2sq(str) # fill here end def dq2sq(str) return subst(str, [:cat, [:lit, "\""],[:cat, [:rep_lazy, [:anysym]], [:lit, "\""]]]){|s, h| "'#{s[1...(s.size - 1)]}'" } end