     @LabelCategory = requirejs "app/label_category"
     @Label         = requirejs "app/label"
 
-  context "001: parsing", ->
+  context "A001: parsing", ->
     beforeEach ->
       # set root node
       @root = new @LabelCategory.Models.LabelCategory

          .get("childrens")["G"]
          .get_label_text().should.equal "A/B/C/D/E/F/G"

  context "005: #children()", ->
    beforeEach ->
      @root = new @LabelCategory.Models.LabelCategory
      @fake_label =
        set: sinon.spy()
        on:  sinon.spy()

    context "001: A/B/C/D/E", ->
      beforeEach ->
        @root.parse_labels_recursive_func "A/B/C/D/E", @fake_label

      it "001: get target category", ->
        @root.children("A").get("name").should.equal "A"
        @root.children("A").children("B").get("name").should.equal "B"
        @root.children("A").children("B").children("C").get("name").should.equal "C"
        @root.children("A").children("B").children("C").children("D").get("name").should.equal "D"
        @root.children("A").children("B").children("C").children("D").children("E").get("name").should.equal "E"

      it "002: is not found", ->
        should.strictEqual @root.children("B"), undefined

  context "006: #parent()", ->
    beforeEach ->
      @root = new @LabelCategory.Models.LabelCategory
      @fake_label =
        spy: sinon.spy()
        on:  sinon.spy()

    context "001: A/B/C/D/E", ->
      beforeEach ->
        @root.parse_labels_recursive_func "A/B/C/D/E", @fake_label
        
      it "001: #parent", ->
        @root.children("A").parent().children("A").get("name").should.equal "A"
        @root.children("A").children("B").children("C").parent().parent().get("name").should.equal "A"
        @root

        set:  sinon.spy()
        on:   sinon.spy()

    context "B001: test1/test2/test3", ->
      beforeEach ->
        @root.parse_labels_recursive_func "test1/test2/test3", @fake_label

      it "C001: check name", ->
        @root.get("childrens")["test1"].get("name").should.equal "test1"
        @root.get("childrens")["test1"].get("childrens")["test2"].get("name").should.equal "test2"
        @root.get("childrens")["test1"].get("childrens")["test2"].get("childrens")["test3"].get("name").should.equal "test3"

      it "C002: check childrens", ->
        _(@root.get("childrens")).keys().length.should.equal 1
        _(@root.get("childrens")["test1"].get("childrens")).keys().length.should.equal 1
        _(@root.get("childrens")["test1"].get("childrens")["test2"].get("childrens")).keys().length.should.equal 1
        _(@root.get("childrens")["test1"].get("childrens")["test2"].get("childrens")["test3"].get("childrens")).keys().length.should.equal 0

      it "C003: check label", ->
        should.strictEqual @root.get("childrens")["test1"].get("label"), undefined
        should.strictEqual @root.get("childrens")["test1"].get("childrens")["test2"].get("label"), undefined
        should.strictEqual @root.get("childrens")["test1"].get("childrens")["test2"].get("childrens")["test3"].get("label"), @fake_label

    context "B002: multi test1/test*/test3", ->
      beforeEach ->
        _([3..200]).each (v)=>
          @root.parse_labels_recursive_func "test1/test#{v}/test3", @fake_label

      it "C001: check name", ->
        _([3..200]).each (v)=>
          @root.get("childrens")["test1"].get("childrens")["test#{v}"].get("name").should.equal "test#{v}"

      it "C002: check childrens", ->
        should.strictEqual @root.get("childrens")["test1"].get("childrens")["test1"], undefined
        should.strictEqual @root.get("childrens")["test1"].get("childrens")["test2"], undefined
        should.strictEqual @root.get("childrens")["test1"].get("childrens")["test201"], undefined
        _(@root.get("childrens")["test1"].get("childrens")).keys().length.should.equal 200 - 2

    context "B003: multi a/a/a a/a/b a/b/a a/b/c b/a/a", ->
      beforeEach ->
        @root.parse_labels_recursive_func "a/a/a", @fake_label
        @root.parse_labels_recursive_func "a/a/b", @fake_label
