       throw new Error()
 
     # clean
+    yield $$.remove './temp'
+
+describe '$$.rm(source)', ->
+
+  it '$$.rm()', ->
+
+    if $$.rm != $$.remove
+      throw new Error()
+
+describe '$$.write(source, data)', ->
+
+  it "$$.write('./temp/wr/ite.txt', 'a test message')", co ->
+
+    source = './temp/wr/ite.txt'
+    string = 'a test message'
+
+    yield $$.write source, string
+
+    unless yield $$.isExisted source
+      throw new Error()
+
+    cont = yield $$.read source
+
+    if cont != string
+      throw new Error()
+
+    # clean
+    yield $$.remove './temp'
+
+  it "$$.write('./temp/wr/ite.json', {message: 'a test message'})", co ->
+
+    source = './temp/wr/ite.json'
+    string = 'a test message'
+    object = message: string
+
+    yield $$.write source, object
+
+    unless yield $$.isExisted source
+      throw new Error()
+
+    cont = yield $$.read source
+
+    if cont.message != string
+      throw new Error()
+
+    # clean
     yield $$.remove './temp'

  it "$$.read('./temp/test.txt')", co ->

    string = 'a test message'

    yield $$.write './temp/test.txt', string

    cont = yield $$.read './temp/test.txt'

    unless cont == string
      throw new Error()

    # clean


  it "$$.read('./temp/test.json')", co ->

    source = './temp/test.json'
    string = 'a test message'
    object = message: string

    yield $$.write source, object

    cont = yield $$.read source

    if cont.message != string
      throw new Error()

    # clean
