ファイル内容が一致していてもリストとリストをassertEqualしていればFalseになることがある
コードブロック実装後にテスト通らなくなってる問題
テストコードがまだ通らん
code:terminal
AssertionError: Lists differ: ['[76 chars] '', '', '<br>', '', 'py', 'import os', [413 chars], ''] != ['76 chars '\n', '<br>', '', 'py', 'import os', "p403 chars, ''] 間違い探しかよ
code:解読
AssertionError:
['[76 chars] '', '', '<br>', '', '`py', 'import os', 413 chars, ''] ['[76 chars] '\n', '<br>', '', '`py', 'import os', "p403 chars, ''] winmergeレベルでは文字コード改行コード含めて一致してるんだがなー
diffコマンドレベルでも一致
たぶんリストで比べてるのがダメやんな
極論、['', '\n']と['', '', '']は同じ内容だが、リストとしては違う
リストで比較してるのを直すべき
code:py
LB = '\n'
actual_contents = LB.join(actual_lines)
expect_contents = LB.join(expect_lines)
self.assertEqual(expect_contents, actual_contents)
これ入れようとしたんだけど意味不明なエラーが出る
以下は別の話題
上記入れたかどうかでなぜかパースが失敗するか成功するかがわかれる
ここで死んでる
self._test_onepage('page')
step2_converted_lines = LIB.convert_step2(step1_converted_lines)
code:py
def is_in_code_block(self):
is_not_in_block = not self.is_in_block()
if is_not_in_block:
raise RuntimeError('is_in_code_block') # ★この無効状態に入ってるパターンがある
is_matched = self._mode == MODE.START_OF_BLOCK_CODE
if is_matched:
return True
return False
いや、テストコードの有無で状態変わるっておかしいだろ。。。
もっというと
self.assertEqual(expect_lines, actual_lines)
↑ これの有無で状態が変わる!
どういうことwww
わかった
python unittestの結果をよく見なさい
FAILED (failures=2, error=1)
こうなってる
これは「テストケース2つミスってんで」「テストケース1つで例外出てんで」を意味する
で、コンソール上では後者だけ見えてる
前者2つが既にミスってる(がそれはコンソール上では上記oneline以外は)見えてない
つまり前々からずっとtest_pageもtest_imageもミスってたってことだ
実際、testdata/のstep2, step3ファイルのタイムスタンプも更新されてなかったし(ファイル生成される前で死んでるから更新されてない)
なんで気付かない??sta.icon
test_pageとtest_imageを抜いたら通る
test_pageのバグを通す
今は
is_in_code_block() 呼び出すときに、暗黙的にin block状態であることを前提にしている
なのでin block状態でなければ「ありえない状態だ(実装がおかしい)」として例外吐いている
本当に?
言い換えると、「コードブロックの中にいるかどうか判定したいとき」は「"ブロックの中にいる" ことは保証されているときだけ」はtrue?
じゃないです
なら単に例外やめてFalse返せばいいよね
ok