OSDN Git Service

Modify the updateList method
[sie/sie.git] / tool / Spec / spec / SvgDomSpec.js
index 33f54a6..f139bca 100644 (file)
@@ -296,6 +296,11 @@ describe("SMIL Animation Spec", function() {
       expect(frame.state).toBe(frame.POSTWAITING);\r
       expect(frame.updateState(4).state).toBe(frame.POSTWAITING);\r
       expect(frame.state).toBe(frame.POSTWAITING);\r
+      \r
+      appendEnd(1);\r
+      expect(frame.updateState(1).state).toBe(frame.BEGINNING);\r
+      expect(frame.updateState(1).state).toBe(frame.ENDING);\r
+      expect(frame.updateState(1).state).toBe(frame.POSTWAITING);\r
     } );\r
     /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
     it("should be this for the value (the invalid partion)", function() {\r
@@ -312,27 +317,47 @@ describe("SMIL Animation Spec", function() {
       } );\r
       afterEach( function() {\r
           frame.timelines = [];\r
+          frame.beginList = frame.$list.beginList;\r
+          frame.endList = frame.$list.endList;\r
+          frame.currentFrame = 0;\r
       } );\r
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
         expect(typeof frame.setFrame).toBe("function");\r
+        expect(frame.currentFrame).toBe(0);\r
         \r
         frame.setFrame(0);\r
         expect(frame.state).toBe(frame.WAITING);\r
+        expect(frame.currentFrame).toBe(0);\r
         frame.setFrame(1);\r
         expect(frame.state).toBe(frame.WAITING);\r
+        expect(frame.currentFrame).toBe(1);\r
+        \r
+        expect(typeof frame.addEvent).toBe("function");\r
+        expect(typeof frame.addBeginList).toBe("function");\r
+        expect(typeof frame.addEndList).toBe("function");\r
+        \r
+        expect(frame.addBeginList(1).value).toBe(1);\r
+        expect(frame.beginList.next.value).toBe(Number.MAX_VALUE);\r
+        expect(frame.addEndList(1).value).toBe(1);\r
+        expect(frame.endList.next.value).toBe(Number.MAX_VALUE);\r
         \r
+\r
+\r
+      } );\r
+      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
+      it("should be this for the value (the valid partion)", function() {\r
         function appendBegin(num) {\r
           frame.state = frame.WAITING;\r
-          frame.beginList = {\r
-            value: num,\r
-            next: frame.beginList\r
-          };\r
+          frame.addBeginList(num);\r
         };\r
         appendBegin(0);\r
+        expect(frame.currentFrame).toBe(0);\r
         frame.setFrame(0);\r
+        expect(frame.currentFrame).toBe(0);\r
         expect(frame.state).toBe(frame.PLAYING);\r
         frame.setFrame(1);\r
+        expect(frame.currentFrame).toBe(1);\r
         expect(frame.state).toBe(frame.PLAYING);\r
         \r
         frame.begin = 0;\r
@@ -347,10 +372,7 @@ describe("SMIL Animation Spec", function() {
         function appendEnd(num) {\r
           frame.state = frame.WAITING;\r
           frame.begin = 0;\r
-          frame.endList = {\r
-              value: num,\r
-              next: frame.endList\r
-          };\r
+          frame.addEndList(num);\r
         };\r
         \r
         appendEnd(3);\r
@@ -364,6 +386,111 @@ describe("SMIL Animation Spec", function() {
         expect(frame.state).toBe(frame.POSTWAITING);\r
         frame.setFrame(4);\r
         expect(frame.state).toBe(frame.POSTWAITING);\r
+        \r
+        appendBegin(5);\r
+        frame.setFrame(0);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        frame.setFrame(1);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        frame.setFrame(2);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        frame.setFrame(3);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        frame.setFrame(4);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        frame.setFrame(5);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        frame.setFrame(6);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        \r
+        appendEnd(6);\r
+        frame.setFrame(0);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        expect(frame.currentFrame).toBe(0);\r
+        frame.setFrame(1);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        expect(frame.currentFrame).toBe(1);\r
+        frame.setFrame(2);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        expect(frame.currentFrame).toBe(2);\r
+        frame.setFrame(3);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        frame.setFrame(4);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        frame.setFrame(5);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        frame.setFrame(6);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        expect(frame.currentFrame).toBe(6);\r
+        \r
+        /*負荷テスト*/\r
+        for (var i=0;i<10000;++i) {\r
+          frame.setFrame(i);\r
+        }\r
+        \r
+        frame.beginList = base("$frame").$listbeginList;\r
+        frame.endList = base("$frame").$list.endList;\r
+        frame.state = frame.WAITING;\r
+        frame.begin = 0;\r
+        var obj = { name: "", value: 0};\r
+        frame.addEvent("begin", function(evt) { obj.name = "a";});\r
+        frame.beginList = {\r
+            value: 0,\r
+            next: frame.beginList\r
+        };\r
+        frame.setFrame(0);\r
+        expect(frame.currentFrame).toBe(0);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        expect(obj.name).toBe("a");\r
+        frame.addEvent("play", function(evt) { obj.name = "b";});\r
+        frame.setFrame(1);\r
+        expect(frame.state).toBe(frame.PLAYING);\r
+        expect(obj.name).toBe("b");\r
+        frame.addEvent("end", function(evt) { obj.value = 1;});\r
+        frame.endList = {\r
+            value: 0,\r
+            next: frame.endList\r
+        };\r
+        frame.setFrame(0);\r
+        expect(frame.currentFrame).toBe(0);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        expect(obj.value).toBe(1);\r
+        var t = 0;\r
+        frame.addEvent("begin", function(evt) {\r
+          expect(evt.state).toBe(frame.BEGINNING);\r
+          t = 1;\r
+        });\r
+        frame.addEvent("end", function(evt) {\r
+          expect(evt.state).toBe(frame.ENDING);\r
+          t = 2;\r
+        });\r
+        frame.addEvent("play", function(evt) {\r
+          expect(evt.state).toBe(frame.PLAYING);\r
+          t = 3;\r
+        });\r
+        frame.setFrame(0);\r
+        expect(t).toBe(2);\r
+        \r
+        t=0;\r
+        frame.begin = 0;\r
+        frame.state = frame.WAITING;\r
+        expect(frame.getMaxList(12, frame.endList)).toBe(0);\r
+        frame.setFrame(12);\r
+        expect(frame.state).toBe(frame.POSTWAITING);\r
+        expect(t).toBe(2);\r
+        \r
+        /*addBeginListメソッドのチェックなど*/\r
+        expect(frame.addBeginList(1).value).toBe(1);\r
+        expect(frame.addBeginList(0).value).toBe(0);\r
+        expect(frame.beginList.next.value).toBe(1);\r
+        expect(frame.addBeginList(2).value).toBe(2);\r
+        expect(frame.beginList.next.value).toBe(0);\r
+        \r
+        expect(frame.addEndList(1).value).toBe(1);\r
+        expect(frame.addEndList(0).value).toBe(0);\r
+        expect(frame.endList.next.value).toBe(1);\r
+        expect(frame.addEndList(2).value).toBe(2);\r
+        expect(frame.endList.next.value).toBe(0);\r
       } );\r
     } );\r
   } );\r
@@ -374,7 +501,6 @@ describe("SMIL Animation Spec", function() {
       expect(begin.string).toBe("");\r
       expect(begin.isResolved).toBeFalsy();\r
       expect(begin.eventTarget).toBe(document.documentElement);\r
-      expect(typeof begin.listener).toBe("function");\r
       expect(begin.eventOffset).toBe(0);\r
       expect(begin.repeat).toBe(0);\r
       expect(begin.accessKey).toBe("");\r
@@ -383,6 +509,9 @@ describe("SMIL Animation Spec", function() {
     it("should be this for the value (the valid partion)", function() {\r
       begin.string = " hoge ";\r
       expect(begin.string).toBe(" hoge ");\r
+      var $list = begin.$list;\r
+      expect(begin.$list).toBe($list);\r
+      expect(begin.updateList().$list).not.toBe($list);\r
     } );\r
     /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
     it("should be this for the value (the invalid partion)", function() {\r
@@ -585,6 +714,10 @@ describe("SMIL Animation Spec", function() {
         expect(begin.parse().begin).toBe(0);\r
         begin.string = "-0ms";\r
         expect(begin.parse().begin).toBe(0);\r
+        begin.string = "-0ms;-0ms";\r
+        expect(begin.parse().begin).toBe(0);\r
+        begin.string = "-0ms;1";\r
+        expect(begin.parse().begin).toBe(1000*begin.fpms);\r
         \r
         expect(begin.eventOffset).toBe(0);\r
         begin.string = "click";\r
@@ -688,102 +821,6 @@ describe("SMIL Animation Spec", function() {
         expect(begin.isResolved).toBeFalsy();\r
       } );\r
     } );\r
-    \r
-    describe("A listener method in $begin object", function() {\r
-      var obj = begin.up();\r
-       beforeEach( function() {\r
-        begin.string = "";\r
-        /*配列は初期化しておく*/\r
-        begin.timelines.length = 0;\r
-        obj.$activate = begin.$activate.up();\r
-        obj.startTime = Date.now();\r
-        obj.setFrame(0);\r
-      } );\r
-      /*境界条件を調べておく (limit value analysis)*/\r
-      it("should be this for the value  (limit value analysis)", function() {\r
-        obj.isResolved = true;\r
-        obj.listener();\r
-        expect(obj.begin).toBe(0);\r
-        \r
-        obj.listener( {\r
-            timeStamp: Date.now()\r
-        } );\r
-        expect(obj.begin).toBe(0);\r
-        expect(obj.activeTime).toBeGreaterThan(0);\r
-        expect(obj.timelines.length).toBe(1);\r
-\r
-        obj.isResolved = false;\r
-        obj.listener( {\r
-            timeStamp: Date.now()\r
-        } );\r
-        expect(obj.begin).toBe(0);\r
-        expect(obj.activeTime).toBeGreaterThan(0);\r
-        expect(obj.timelines.length).toBe(1);\r
-        /*配列を初期化*/\r
-        obj.timelines.length = 0;\r
-\r
-        obj.up().mix( {\r
-                begin: 1,\r
-                eventOffset: 1,\r
-                $activate: begin.$activate.up().mix( {\r
-                    dur: "12"\r
-                  } )\r
-              })\r
-              .listener( {\r
-                timeStamp: Date.now()\r
-              } );\r
-        expect(obj.$1.begin).toBe(1);\r
-        expect(obj.$1.activeTime).toBe(Math.floor(12000*obj.fpms));\r
-        expect(obj.$1.$activate.begin).toBe(obj.$1.begin);\r
-        expect(obj.timelines[0]).toBe(obj.$1);\r
-      } );\r
-      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
-      it("should be this for the value (the valid partion)", function() {\r
-        obj.up().mix( {\r
-                begin: 1,\r
-                eventOffset: 1,\r
-                $activate: begin.$activate.up().mix( {\r
-                    end: begin.$activate.end.up().mix( {\r
-                       string: "1s"\r
-                      } )\r
-                  } )\r
-              })\r
-              .listener( {\r
-                timeStamp: Date.now()\r
-              } );\r
-        expect(obj.$1.begin).toBe(1);\r
-        expect(obj.$1.activeTime).toBe(Math.floor(1000*obj.fpms) - 1);\r
-        expect(obj.$1.$activate.begin).toBe(obj.$1.begin);\r
-        expect(obj.timelines[0]).toBe(obj.$1);\r
-\r
-        obj.up().mix( {\r
-                begin: 1,\r
-                eventOffset: 1,\r
-                $activate: begin.$activate.up().mix( {\r
-                    end: begin.$activate.end.up().mix( {\r
-                       string: "1s"\r
-                      } )\r
-                  } )\r
-              })\r
-              .listener( {\r
-                timeStamp: Date.now()\r
-              } );\r
-        expect(obj.$1.begin).toBe(1);\r
-        expect(obj.$1.activeTime).toBe(Math.floor(1000*obj.fpms) - 1);\r
-        expect(obj.$1.$activate.begin).toBe(obj.$1.begin);\r
-        expect(obj.timelines[1]).toBe(obj.$1);\r
-        obj.$1.listener( {\r
-          timeStamp: (Date.now() + 500)\r
-        } );\r
-        expect(obj.$1.begin).toBe(1);\r
-        expect(obj.$1.activeTime).toBe(Math.floor(1000*obj.fpms) - 1);\r
-        expect(obj.$1.$activate.begin).toBe(obj.$1.begin);\r
-        expect(obj.timelines[1]).toBe(obj.$1);\r
-      } );\r
-      /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
-      it("should be this for the value (the invalid partion)", function() {\r
-      } );\r
-    } );\r
   } );\r
   describe("A $end object", function() {\r
     var end = base("$frame").$begin.$end.up();\r
@@ -817,70 +854,6 @@ describe("SMIL Animation Spec", function() {
       end.string = null;\r
       expect(end.up().call()).toBeNull();\r
     } );\r
-\r
-    describe("A listener method in $end object", function() {\r
-      var obj,\r
-          begin = base("$frame").$begin;\r
-       beforeEach( function() {\r
-        end.string = "";\r
-        /*配列は初期化しておく*/\r
-        end.timelines.length = 0;\r
-        obj = end.up();\r
-        obj.$begin = begin.up().mix( {\r
-          begin: 12,\r
-          activeTime: 120\r
-        } );\r
-        obj.$begin.$activate = begin.$activate.up();\r
-        obj.addLine(obj.$begin);\r
-      } );\r
-      /*境界条件を調べておく (limit value analysis)*/\r
-      it("should be this for the value  (limit value analysis)", function() {\r
-        expect(obj.timelines[0]).toBe(obj.$begin);\r
-        expect(obj.timelines[0]).not.toBe(obj);\r
-        obj.listener();\r
-        expect(obj.timelines[0]).not.toBe(obj.$begin);\r
-\r
-        obj.addLine(obj.$begin.mix( {\r
-          begin: 12,\r
-          activeTime: 120\r
-        } ) );\r
-        obj.listener({\r
-          timeStamp: (Date.now() + 12)\r
-        } );\r
-        expect(obj.timelines[0]).not.toBe(obj.$begin);\r
-      } );\r
-      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
-      it("should be this for the value (the valid partion)", function() {\r
-        obj.$begin.$activate.begin = 0;\r
-        obj.mix( {\r
-          string: "event"\r
-        } ).parse();\r
-        obj.listener({\r
-          timeStamp: (Date.now() + 120)\r
-        } );\r
-        expect(obj.timelines[0]).not.toBe(obj.$begin);\r
-        expect(obj.begin).toBe(0);\r
-        expect(obj.$begin.activeTime).toBe(0);\r
-\r
-        obj.addLine(obj.$begin.mix( {\r
-          begin: 12,\r
-          activeTime: 120\r
-        } ) );\r
-        obj.$begin.$activate.begin = 0;\r
-        obj.mix( {\r
-          string: "event+1000ms"\r
-        } ).parse();\r
-        obj.listener({\r
-          timeStamp: (Date.now() + 12)\r
-        } );\r
-        expect(obj.timelines[0]).toBe(obj.$begin);\r
-        expect(obj.begin).toBe(Math.ceil(1000*obj.fpms));\r
-        expect(obj.$begin.activeTime).toBe(Math.ceil(1000*obj.fpms));\r
-      } );\r
-      /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
-      it("should be this for the value (the invalid partion)", function() {\r
-      } );\r
-    } )\r
   } );\r
   describe("A $activate object", function() {\r
     var act = base("$frame").$begin.$activate.up();\r
@@ -909,7 +882,7 @@ describe("SMIL Animation Spec", function() {
     } );\r
     /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
     it("should be this for the value (the valid partion)", function() {\r
-      expect(act.resolvedTime()).toBe((+new Date()));\r
+      expect(act.resolvedTime()).not.toBe(0);\r
 \r
       /*Activate Duration = dur*/\r
       act.up("$b");\r
@@ -919,37 +892,8 @@ describe("SMIL Animation Spec", function() {
       expect(abc).toBe(act.$b.simpleDur);\r
       act.dur = null;\r
       expect(act.up().call()).toBeNull();\r
-      \r
-      /*AD = end -begin*/\r
-      act.begin = 1;\r
-      act.up("$eb").end = act.end.up().mix( {string: "120ms" } );\r
-      expect( act.$eb.mix( {\r
-        dur: "indefinite",\r
-        simpleDur: act.simpleDur,\r
-        repeatCount: 12,\r
-        repeatDur: null,\r
-      } ).call() ).toBe(Math.floor(120*act.fpms) - 1);\r
-      expect( act.$eb.mix( {\r
-        dur: "12",\r
-        repeatCount: "indefinite",\r
-        repeatDur: null,\r
-      } ).call() ).toBe(Math.floor(120*act.fpms) - 1);\r
-      expect( act.$eb.mix( {\r
-        dur: "12",\r
-        simpleDur: act.simpleDur,
-        repeatCount: null,\r
-        repeatDur: "indefinite",\r
-      } ).call() ).toBe(Math.floor(120*act.fpms) - 1);\r
-      act.$eb.end *= 3;\r
-      expect( act.$eb.mix( {\r
-        dur: "12",\r
-        simpleDur: act.simpleDur,
-        repeatCount: "indefinite",\r
-        repeatDur: "indefinite",\r
-      } ).call() ).toBe(Math.floor(120*act.fpms)*3 - 1);\r
 \r
-      /*AD = Min(dur, end - begin)*/\r
-      act.up("$c").end = act.end.up().mix( { string: "12" } );\r
+      act.up("$c");\r
       act.$c.mix( {\r
         dur: "10",\r
         simpleDur: act.simpleDur,
@@ -964,18 +908,16 @@ describe("SMIL Animation Spec", function() {
         repeatCount: null,\r
         repeatDur: null\r
       } );\r
-      expect(act.$c.call()).toBe(Math.floor(12000*act.fpms) - 1);\r
-      expect(act.$c.simpleDur).toBe(Math.floor(15000*act.fpms));\r
+      expect(act.$c.call()).toBe(Math.floor(15000*act.fpms));\r
 \r
-      /*AD = Min(repeatCount*dur, end - begin)*/\r
-      expect(act.$c.end).toBe(Math.floor(12000*act.fpms));\r
+      /*AD = repeatCount*dur*/\r
       act.$c.mix( {\r
         dur: "10",\r
         simpleDur: act.simpleDur,
         repeatCount: 2,\r
         repeatDur: null\r
       } );\r
-      expect(act.$c.call()).toBe(Math.floor(12000*act.fpms) - 1);\r
+      act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
@@ -986,14 +928,14 @@ describe("SMIL Animation Spec", function() {
       expect(act.$c.call()).toBe(Math.floor(10000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
 \r
-      /*AD = Min(repeatDur, end - begin)*/\r
+      /*AD = repeatDur*/\r
       act.$c.mix( {\r
         dur: "indefinite",\r
         simpleDur: act.simpleDur,
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
-      expect(act.$c.call()).toBe(Math.floor(12000*act.fpms) - 1);\r
+      act.$c.call();\r
       expect(act.$c.simpleDur).toBeNull();\r
       act.$c.mix( {\r
         dur: "indefinite",\r
@@ -1009,7 +951,7 @@ describe("SMIL Animation Spec", function() {
         repeatCount: null,\r
         repeatDur: "15"\r
       } );\r
-      expect(act.$c.call()).toBe(Math.floor(12000*act.fpms) - 1);\r
+      act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
@@ -1020,14 +962,14 @@ describe("SMIL Animation Spec", function() {
       expect(act.$c.call()).toBe(Math.floor(11000*act.fpms));\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       \r
-      /*AD = Min(repeatCount*d, repeatDur, end - begin)*/\r
+      /*AD = Min(repeatCount*d, repeatDur)*/\r
       act.$c.mix( {\r
         dur: "10",\r
         simpleDur: act.simpleDur,
         repeatCount: 2,\r
         repeatDur: "15"\r
       } );\r
-      expect(act.$c.call()).toBe(Math.floor(12000*act.fpms) - 1);\r
+      act.$c.call();\r
       expect(act.$c.simpleDur).toBe(Math.floor(10000*act.fpms));\r
       act.$c.mix( {\r
         dur: "10",\r
@@ -1099,15 +1041,15 @@ describe("SMIL Animation Spec", function() {
       act.repeatDur = null;\r
       act.repeatCount = "indefinite";\r
       act.dur = "1";\r
-      expect(act.call()).toBe(0);\r
+      expect(act.call()).toBeNull();\r
       act.repeatCount = null;\r
       act.repeatDur = "indefinite";\r
       act.dur = "1";\r
-      expect(act.call()).toBe(0);\r
+      expect(act.call()).toBeNull();\r
       act.repeatDur = "indefinite";\r
       act.repeatCount = "indefinite";\r
       act.dur = "1";\r
-      expect(act.call()).toBe(0);\r
+      expect(act.call()).toBeNull();\r
     } );\r
     /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
     it("should be this for the value (the invalid partion)", function() {\r
@@ -1813,16 +1755,14 @@ describe("SMIL Animation Spec", function() {
         function check(attrName, num) {\r
           s.setAttribute(attrName, "1");\r
           expect(s.hasAttributeNS(null, attrName)).toBeTruthy();\r
-          var l = attr.push(s);\r
+          var fr = attr.push(s);\r
           expect(attr.element).toBe(p);\r
           var timelines = base("$frame").timelines;\r
           expect(timelines.length).toBe(num);\r
           var line = timelines[num-1];\r
-          expect(line.string).toBe("0");\r
-          expect(line).toBe(l); //タイムラインのオブジェクトを返す\r
-          var act = line.$activate;\r
+          expect(line).not.toBe(fr);\r
+          var act = fr.$activate;\r
           expect(act.dur).toBeNull();\r
-          expect(act.end).toBe(0);\r
           expect(act.repeatCount).toBeNull();\r
           expect(act.repeatDur).toBeNull();\r
           expect(act.min).toBe("0");\r
@@ -1891,14 +1831,13 @@ describe("SMIL Animation Spec", function() {
         function check2(attrName, value) {\r
           s.setAttribute(attrName, value);\r
           expect(s.hasAttributeNS(null, attrName)).toBeTruthy();\r
-          attr.push(s);\r
+          var fr = attr.push(s);\r
           expect(attr.element).toBe(p);\r
           var timelines = base("$frame").timelines;\r
           var line = timelines[timelines.length-1];\r
-          expect(line.string).toBe(values[0]);\r
-          var act = line.$activate;\r
+          expect(fr.string).toBe(values[0]);\r
+          var act = fr.$activate;\r
           expect(act.dur).toBe(values[1]);\r
-          expect(act.end).toBe(values[2]);\r
           expect(act.repeatCount).toBe(values[3]);\r
           expect(act.repeatDur).toBe(values[4]);\r
           expect(act.min).toBe(values[5]);\r
@@ -2152,48 +2091,6 @@ describe("SMIL Animation Spec", function() {
         expect($set.element).toBeNull();\r
       } );\r
     } );\r
-    describe("An checkEnd method", function() {\r
-      var $set, ele, frame;\r
-      beforeEach( function() {\r
-        $set = base("$calcMode").$attribute.$setElement.up();\r
-        var p = document.createElementNS("http://www.w3.org/2000/svg", "g");\r
-        ele = document.createElementNS("http://www.w3.org/2000/svg", "set");\r
-        p.appendChild(ele);\r
-        frame = base("$frame");\r
-      } );\r
-      /*境界条件を調べておく (limit value analysis)*/\r
-      it("should be this for the value  (limit value analysis)", function() {\r
-        expect($set.checkEnd()).toBeFalsy();\r
-        $set.init(ele);\r
-        frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
-        expect($set.checkEnd()).toBeFalsy();\r
-      } );\r
-      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
-      it("should be this for the value (the valid partion)", function() {\r
-        ele.setAttributeNS(null, "dur", "1s");\r
-        ele.setAttributeNS(null, "attributeName", "fill");\r
-        ele.setAttributeNS(null, "to", "red");\r
-        $set.init(ele);\r
-        expect($set.checkEnd(0)).toBeFalsy();\r
-        expect($set.checkEnd(24)).toBeFalsy();\r
-        $set.state = "playing";\r
-        expect($set.checkEnd(25)).toBeTruthy();\r
-        expect($set.state).toBe("idling");\r
-        expect($set.checkEnd(26)).toBeFalsy();\r
-      } );\r
-      /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
-      it("should be this for the value (the invalid partion)", function() {\r
-        $set.timeline.isResolved = false;\r
-        expect($set.checkEnd(0)).toBeFalsy();\r
-        $set.timeline.activeTime = null;\r
-        expect($set.checkEnd(0)).toBeFalsy();\r
-        $set.timeline = null;\r
-        expect(function() {\r
-          $set.checkEnd(0);\r
-        } ).toThrow();\r
-      } );\r
-    } );\r
     \r
       describe("An init method", function() {\r
       var $set, ele, frame;\r
@@ -2275,10 +2172,9 @@ describe("SMIL Animation Spec", function() {
         ele = document.createElementNS("http://www.w3.org/2000/svg", "set");\r
         p.appendChild(ele);\r
         frame = base("$frame");\r
-        frame.timelines.length = frame.$endFrame.timelines.length = 0; //配列の初期化\r
+        frame.timelines.length = 0; //配列の初期化\r
         frame.startTime = Date.now();\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
       } );\r
       afterEach( function() {\r
         $set.isCSS = false;\r
@@ -2286,7 +2182,6 @@ describe("SMIL Animation Spec", function() {
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
         expect($set.isEnd).toBeFalsy();\r
-        expect($set.state).toBe("idling");\r
         ele.setAttributeNS(null, "dur", "1s");\r
         ele.setAttributeNS(null, "attributeName", "fill");\r
         ele.setAttributeNS(null, "to", "red");\r
@@ -2295,14 +2190,14 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         expect($set.timeline).not.toBe(frame.$begin);\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
-        expect($set.state).toBe("playing");\r
         \r
+        var line = $set.timeline;\r
+        expect(line.$list.state).toBe(line.$list.PLAYING);\r
+        console.log(frame);\r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
+        expect(line.$list.state).toBe(line.$list.POSTWAITING);\r
         expect(ele.parentNode.hasAttributeNS(null, "fill")).toBeFalsy();\r
-        expect($set.state).toBe("idling");\r
       } );\r
       /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
       it("should be this for the value (the valid partion)", function() {\r
@@ -2315,17 +2210,14 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         var f = function(num) {\r
           frame.setFrame(num);\r
-          frame.$endFrame.setFrame(num);\r
           expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBeNull();\r
         }\r
         f(0);\r
         f(1);\r
         f(23);\r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(25);\r
-        frame.$endFrame.setFrame(25);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         f(48);\r
         f(49);\r
@@ -2337,16 +2229,12 @@ describe("SMIL Animation Spec", function() {
         f(1);\r
         f(23);\r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(25);\r
-        frame.$endFrame.setFrame(25);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(48);\r
-        frame.$endFrame.setFrame(48);\r
         expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         frame.setFrame(49);\r
-        frame.$endFrame.setFrame(49);\r
         expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         ele.setAttributeNS(null, "begin", "1s");\r
         ele.setAttributeNS(null, "attributeName", "fill");\r
@@ -2356,7 +2244,6 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         var f = function(num) {\r
           frame.setFrame(num);\r
-          frame.$endFrame.setFrame(num);\r
           expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         }\r
         f(0);\r
@@ -2383,7 +2270,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         /*境界条件を調べておく (limit value analysis)*/\r
         it("should be this for the value  (limit value analysis)", function() {\r
@@ -2397,7 +2283,6 @@ describe("SMIL Animation Spec", function() {
           $animate.init(ele);\r
           expect($animate.isCSS).toBeFalsy();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
           var p = ele.parentNode;\r
           /*getAttributeNSメソッドは、IE11では空文字列を返す(DOM 2に準拠)のに対して、\r
            * 他のブラウザではnullを返すため、その対策をする*/\r
@@ -2405,7 +2290,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d") || "").toBe(result);\r
           };\r
           \r
@@ -2439,7 +2323,6 @@ describe("SMIL Animation Spec", function() {
                 to = attr[2];\r
             function g(fr, result) {\r
               frame.setFrame(fr);\r
-              frame.$endFrame.setFrame(fr);\r
               expect(p.style.getPropertyValue(attrName) || p.getAttribute(attrName) || "").toBe(result);\r
             };\r
 \r
@@ -2473,7 +2356,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d")).toBe(result);\r
           };\r
           \r
@@ -2606,7 +2488,6 @@ describe("SMIL Animation Spec", function() {
           ( function(attrName) {\r
             function g(fr, result) {\r
               frame.setFrame(fr);\r
-              frame.$endFrame.setFrame(fr);\r
               expect(p.style.getPropertyValue(attrName)).toBe(result);\r
             };\r
 \r
@@ -2663,7 +2544,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d") || null).toBe(result);\r
           };\r
           f(0, null);\r
@@ -2711,7 +2591,6 @@ describe("SMIL Animation Spec", function() {
           \r
           f = function (fr, result, attr) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.style.getPropertyValue(attr).replace(/\s/g, "")).toBe(result.replace(/\s/g, ""));\r
           };\r
         } );\r
@@ -2790,7 +2669,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f (fr, result, attr) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(ele.parentNode.getAttributeNS(null,attr)).toBe(result);\r
           };\r
           f(0, "#83.0C", "fi");\r
@@ -2892,10 +2770,8 @@ describe("SMIL Animation Spec", function() {
           expect(isFiredBeginEvent).toBeTruthy();\r
         } );\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toBeNull();\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toBeNull();\r
         \r
         frame.timelines = [];\r
@@ -2947,7 +2823,6 @@ describe("SMIL Animation Spec", function() {
           };\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(11);\r
-        frame.$endFrame.setFrame(11);\r
         expect(frame.first).toEqual( {frame: 12,\r
                 eventType: "end",\r
                 target: ele,\r
@@ -2991,14 +2866,11 @@ describe("SMIL Animation Spec", function() {
           };\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(1);\r
-        frame.$endFrame.setFrame(1);\r
         a = a.next;\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(5);\r
-        frame.$endFrame.setFrame(5);\r
         expect(frame.first).toEqual(a.next);\r
 \r
         ele.addEventListener("repeatEvent", function(evt) {\r
@@ -3015,7 +2887,6 @@ describe("SMIL Animation Spec", function() {
           target: ele\r
         }) );\r
         frame.setFrame(9);\r
-        frame.$endFrame.setFrame(9);\r
         expect(frame.first).toEqual({\r
                 frame: 13,\r
                 eventType: "repeat",\r
@@ -3047,7 +2918,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3273,7 +3143,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3325,7 +3194,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3358,7 +3226,6 @@ describe("SMIL Animation Spec", function() {
         frame.pauseAnimation();\r
         frame.timelines.length = 0; //配列の初期化\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
       } );\r
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
@@ -3378,27 +3245,18 @@ describe("SMIL Animation Spec", function() {
         $animate.init(ele);\r
         $animate.isCSS = false;\r
         expect(p.getAttributeNS(null, "fill") || null).toBeNull();\r
-        expect($animate.state).toBe("idling");\r
         evt = ele.ownerDocument.createEvent("MouseEvents");\r
         evt.initMouseEvent("beginEvent",true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, ele);\r
-        expect($animate.state).toBe("idling");\r
         p.dispatchEvent(evt);\r
-        expect($animate.state).toBe("idling");\r
         expect(p.getAttributeNS(null, "fill") || null).toBeNull();\r
         \r
         evt = ele.ownerDocument.createEvent("MouseEvents");\r
         evt.initMouseEvent("mousedown",true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, p);\r
         frame.setFrame(frame.currentFrame);\r
-        frame.$endFrame.setFrame(frame.currentFrame);\r
         expect($animate.isEnd).toBeFalsy();\r
-        expect($animate.state).toBe("idling");\r
         p.dispatchEvent(evt);\r
         frame.setFrame(frame.currentFrame + 1);\r
-        frame.$endFrame.setFrame(frame.currentFrame + 1);\r
-        expect($animate.state).toBe("playing");\r
         frame.setFrame(frame.currentFrame + 24);\r
-        frame.$endFrame.setFrame(frame.currentFrame + 24);\r
-        expect($animate.state).toBe("idling");\r
         expect(evt.target.getAttributeNS(null, "fill") || null).toBe("rgb(10, 10, 1)");\r
       } );\r
     } );\r
@@ -3412,7 +3270,6 @@ describe("SMIL Animation Spec", function() {
           frame = base("$frame");\r
           frame.timelines.length = 0; //配列の初期化\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
           ele.setAttributeNS(null, "begin", "indefinite");\r
           ele.setAttributeNS(null, "dur", "1s");\r
           ele.setAttributeNS(null, "dur", "1s");\r