github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/mongo/utils/data_cleansing_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package utils_test
     5  
     6  import (
     7  	"github.com/juju/juju/mongo/utils"
     8  	"github.com/juju/testing"
     9  	gc "gopkg.in/check.v1"
    10  )
    11  
    12  type dataCleansingSuite struct {
    13  	testing.IsolationSuite
    14  }
    15  
    16  var _ = gc.Suite(&dataCleansingSuite{})
    17  
    18  func (s *dataCleansingSuite) TestEscapeKeys_EscapesPeriods(c *gc.C) {
    19  	before := map[string]interface{}{
    20  		"a.b": "c",
    21  	}
    22  	after := utils.EscapeKeys(before)
    23  
    24  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    25  		"a" + "\uff0e" + "b": "c",
    26  	})
    27  }
    28  
    29  func (s *dataCleansingSuite) TestEscapeKeys_EscapesDollarSigns(c *gc.C) {
    30  	before := map[string]interface{}{
    31  		"$a": "c",
    32  	}
    33  	after := utils.EscapeKeys(before)
    34  
    35  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    36  		"\uff04" + "a": "c",
    37  	})
    38  }
    39  
    40  func (s *dataCleansingSuite) TestEscapeKeys_RecursivelyEscapes(c *gc.C) {
    41  	before := map[string]interface{}{
    42  		"$a": "c",
    43  		"b": map[string]interface{}{
    44  			"$foo.bar": "baz",
    45  		},
    46  	}
    47  	after := utils.EscapeKeys(before)
    48  
    49  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    50  		"\uff04" + "a": "c",
    51  		"b": map[string]interface{}{
    52  			"\uff04" + "foo" + "\uff0e" + "bar": "baz",
    53  		},
    54  	})
    55  }
    56  
    57  func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriods(c *gc.C) {
    58  	before := map[string]interface{}{
    59  		"a" + "\uff0e" + "b": "c",
    60  	}
    61  	after := utils.UnescapeKeys(before)
    62  
    63  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    64  		"a.b": "c",
    65  	})
    66  }
    67  
    68  func (s *dataCleansingSuite) TestUnescapeKey_UnescapesDollarSigns(c *gc.C) {
    69  	before := map[string]interface{}{
    70  		"\uff04" + "a": "c",
    71  	}
    72  	after := utils.UnescapeKeys(before)
    73  
    74  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    75  		"$a": "c",
    76  	})
    77  }
    78  
    79  func (s *dataCleansingSuite) TestUnescapeKeys_RecursivelyUnescapes(c *gc.C) {
    80  	before := map[string]interface{}{
    81  		"\uff04" + "a": "c",
    82  		"b": map[string]interface{}{
    83  			"\uff04" + "foo" + "\uff0e" + "bar": "baz",
    84  		},
    85  	}
    86  	after := utils.UnescapeKeys(before)
    87  
    88  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    89  		"$a": "c",
    90  		"b": map[string]interface{}{
    91  			"$foo.bar": "baz",
    92  		},
    93  	})
    94  }
    95  
    96  func (s *dataCleansingSuite) TestEscapeString_EscapesPeriods(c *gc.C) {
    97  	c.Check("a"+"\uff0e"+"b", gc.Equals, utils.EscapeString("a.b"))
    98  }
    99  
   100  func (s *dataCleansingSuite) TestEscapeString_EscapesDollarSigns(c *gc.C) {
   101  	c.Check("\uff04"+"a", gc.Equals, utils.EscapeString("$a"))
   102  }
   103  
   104  func (s *dataCleansingSuite) TestUnescapeString_UnescapesPeriod(c *gc.C) {
   105  	c.Check(utils.UnescapeString("a"+"\uff0e"+"b"), gc.Equals, "a.b")
   106  }
   107  
   108  func (s *dataCleansingSuite) TestUnescapeString_UnescapesDollarSigns(c *gc.C) {
   109  	c.Check(utils.UnescapeString("\uff04"+"a"), gc.Equals, "$a")
   110  }