/*開始時刻リスト (後述のupdateStateメソッドで使う)*/\r
beginList: { \r
next: null,\r
- value: 0\r
+ value: Number.MAX_VALUE\r
},\r
\r
/*終了時刻リスト (後述のupdateStateメソッドで使う)*/\r
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
} 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
\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
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
\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
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
\r
function appendEnd(num) {\r
frame.state = frame.WAITING;\r
+ frame.begin = 0;\r
frame.endList = {\r
value: num,\r
next: frame.endList\r