OSDN Git Service

Modify the updateState method
authordhrname <dhrname@users.sourceforge.jp>
Sat, 8 Oct 2016 12:54:19 +0000 (21:54 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Sat, 8 Oct 2016 12:54:19 +0000 (21:54 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index 9b77118..e21f2d9 100644 (file)
@@ -108,7 +108,7 @@ base("$frame").mix ( {
     /*開始時刻リスト (後述のupdateStateメソッドで使う)*/\r
     beginList: { \r
       next: null,\r
-      value: 0\r
+      value: Number.MAX_VALUE\r
     },\r
     \r
     /*終了時刻リスト (後述のupdateStateメソッドで使う)*/\r
@@ -158,19 +158,20 @@ base("$frame").mix ( {
         return this;\r
       }\r
       var state = this.state,\r
-          wait = this.WAITING,\r
-          begin = this.BEGINNING,\r
-          play = this.PLAYING,\r
-          end = this.ENDING,\r
-          post = this.POSTWAITING,\r
+          wait = /*this.WAITING*/ 0,\r
+          begin = /*this.BEGINNING*/ 1,\r
+          play = /*this.PLAYING*/ 2,\r
+          end = /*this.ENDING*/ 3,\r
+          post = /*this.POSTWAITING*/ 4,\r
           isWait = (state === wait) || (state === post);\r
       /*beginListプロパティと、endListプロパティの中で、\r
        * 現在フレーム数 f より大きい数値は、更新できる条件と無関係なので、除外しておく\r
        * また、f以下の値の中から、最大値を探して、\r
        * それをbeginプロパティと比較する*/\r
       var startTime = this.getMaxList(f, this.beginList),\r
-          endTime = this.getMaxList(f, this.endList);\r
-      if ( isWait && (startTime > this.begin) ) {\r
+          endTime = this.getMaxList(f, this.endList),\r
+          cacheBegin = this.begin;\r
+      if ( isWait && (startTime > cacheBegin) ) {\r
         this.state = begin;\r
         /*beginプロパティに開始時刻をキャッシュ用に保存*/\r
         this.begin = startTime;\r
@@ -182,17 +183,24 @@ base("$frame").mix ( {
       } else if (state === begin) {\r
         this.state = play;\r
       } else if (state === play) {\r
-        if ( (endTime >= this.begin) || (startTime > this.begin) ) {\r
+        if ( (endTime >= cacheBegin) || (startTime > cacheBegin) ) {\r
           /*終了時刻に到達したか、再び開始イベントが発火されたとき*/\r
           this.state = end;\r
         } else {\r
           return this;\r
         }\r
       } else if (state === end) {\r
-        this.state = post;\r
+        if (endTime >= cacheBegin) {\r
+          this.state = post;\r
+        } else {\r
+          /*再生中に開始イベントが発火されて、終了状態となったとき*/\r
+          this.state = begin;\r
+          this.begin = startTime;\r
+        }\r
       } else {\r
         this.state = begin;\r
       }\r
+      cacheBegin = startTime = endTime = void 0;\r
       return this;\r
     }\r
   } );\r
index 3ecbea6..5845a95 100644 (file)
@@ -169,7 +169,7 @@ describe("SMIL Animation Spec", function() {
       \r
       expect(frame.beginList).toEqual({\r
               next: null,\r
-              value: 0\r
+              value: Number.MAX_VALUE\r
             });\r
       expect(frame.endList).toEqual({\r
               next: null,\r
@@ -179,19 +179,15 @@ describe("SMIL Animation Spec", function() {
       expect(typeof frame.getMaxList).toBe("function");\r
       \r
       expect(typeof frame.updateState).toBe("function");\r
-      expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
-      expect(frame.state).toBe(frame.BEGINNING);\r
-      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
+      expect(frame.updateState(0).state).toBe(frame.WAITING);\r
+      expect(frame.state).toBe(frame.WAITING);\r
+      expect(frame.updateState(0).state).toBe(frame.WAITING);\r
+      expect(frame.state).toBe(frame.WAITING);\r
+      expect(frame.updateState(0).state).toBe(frame.WAITING);\r
+      expect(frame.state).toBe(frame.WAITING);\r
+      expect(frame.updateState(0).state).toBe(frame.WAITING);\r
+      expect(frame.state).toBe(frame.WAITING);\r
       \r
-      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
       frame.state = 100;\r
       expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
       expect(frame.state).toBe(frame.BEGINNING);\r
@@ -200,38 +196,28 @@ describe("SMIL Animation Spec", function() {
       \r
       expect(frame.beginList).toEqual({\r
           next: null,\r
-          value: 0\r
+          value: Number.MAX_VALUE\r
         });\r
       expect(frame.endList).toEqual({\r
           next: null,\r
           value: Number.MAX_VALUE\r
         });\r
         \r
-      expect(frame.getMaxList(0, frame.beginList)).toBe(0);\r
+      expect(frame.getMaxList(0, frame.beginList)).toBe(-1);\r
       expect(frame.getMaxList(0, frame.endList)).toBe(-1);\r
     } );\r
     /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
     it("should be this for the value (the valid partion)", function() {\r
-      expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
-      expect(frame.state).toBe(frame.BEGINNING);\r
-      expect(frame.updateState(1).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(2).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(3).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
-      expect(frame.updateState(4).state).toBe(frame.PLAYING);\r
-      expect(frame.state).toBe(frame.PLAYING);\r
       \r
       function appendBegin(num) {\r
         frame.state = frame.WAITING;\r
-        frame.begin = num;\r
         frame.beginList = {\r
           value: num,\r
           next: frame.beginList\r
         };\r
       };\r
       appendBegin(0);\r
+      expect(frame.getMaxList(0, frame.beginList)).toBe(0);\r
       expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
       expect(frame.begin).toBe(0);\r
       expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
@@ -239,9 +225,24 @@ describe("SMIL Animation Spec", function() {
       expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
       expect(frame.state).toBe(frame.PLAYING);\r
       \r
+      frame.state = frame.WAITING;\r
+      expect(frame.getMaxList(0, frame.beginList)).toBe(0);\r
+      expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
+      expect(frame.state).toBe(frame.BEGINNING);\r
+      expect(frame.updateState(1).state).toBe(frame.PLAYING);\r
+      expect(frame.state).toBe(frame.PLAYING);\r
+      expect(frame.updateState(2).state).toBe(frame.PLAYING);\r
+      expect(frame.state).toBe(frame.PLAYING);\r
+      expect(frame.updateState(3).state).toBe(frame.PLAYING);\r
+      expect(frame.state).toBe(frame.PLAYING);\r
+      expect(frame.updateState(4).state).toBe(frame.PLAYING);\r
+      expect(frame.state).toBe(frame.PLAYING);\r
+      \r
       appendBegin(1);\r
+      expect(frame.getMaxList(1, frame.beginList)).toBe(1);\r
       expect(frame.updateState(0).state).toBe(frame.BEGINNING);\r
       expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
+      expect(frame.updateState(0).state).toBe(frame.PLAYING);\r
       expect(frame.updateState(1).state).toBe(frame.ENDING);\r
       expect(frame.updateState(1).state).toBe(frame.BEGINNING);\r
       expect(frame.state).toBe(frame.BEGINNING);\r
@@ -266,6 +267,7 @@ describe("SMIL Animation Spec", function() {
       \r
       function appendEnd(num) {\r
         frame.state = frame.WAITING;\r
+        frame.begin = 0;\r
         frame.endList = {\r
             value: num,\r
             next: frame.endList\r