movie-renamer/tests/test_parsing.py
2022-01-12 23:24:28 +03:00

195 lines
6.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import unittest
from renamer import parse_title
class TestParser(unittest.TestCase):
def test_misc_separators(self):
title = "V tumane 2012 1080p BluRay DD5.1 x264-EA"
res = parse_title(title)
self.assertIn("DD5.1", res.get("audio", []))
self.assertIn("x264", res.get("codec", []))
self.assertIn("EA", res.get("unknown", []))
self.assertEqual(
res,
{
"year": ["2012"],
"resolution": ["1080p"],
"quality": ["BluRay"],
"audio": ["DD5.1"],
"codec": ["x264"],
"name": ["V", "tumane"],
"unknown": ["EA"],
},
)
@unittest.expectedFailure
def test_russian_char_in_resolution(self):
title = "Trouble.with.the.Curve.2012.1080р.BluRay.Rus.Eng.HDCLUB"
res = parse_title(title)
self.assertIn("1080p", res.get("resolution", []))
self.assertEqual(
res,
{
"year": ["2012"],
"quality": ["BluRay"],
"language": ["Rus", "Eng"],
"resolution": ["1080p"],
"name": ["Trouble", "with", "the", "Curve"],
"unknown": ["HDCLUB"],
},
)
def test_russian_name(self):
title = "Убийство (1956. The Killing)"
res = parse_title(title)
self.assertEqual(
res,
{
"year": ["1956"],
"name": ["Убийство"],
"unknown": ["The", "Killing"],
},
)
def test_only_name_goes_to_unknown(self):
title = "Белое солнце пустыни"
res = parse_title(title)
self.assertEqual(res, {"unknown": ["Белое", "солнце", "пустыни"]})
def test_hyphen_as_separated_chunk(self):
title = "Miss Pettigrew Lives for a Day. 2007. BDRip (1080p) - ylnian"
self.assertEqual(
parse_title(title),
{
"year": ["2007"],
"quality": ["BDRip"],
"resolution": ["1080p"],
"name": ["Miss", "Pettigrew", "Lives", "for", "a", "Day"],
"unknown": ["ylnian"],
},
)
def test_file_extension_goes_to_unknown(self):
title = "Monsters,Inc.2001.BDRip.1080p.3xRus.Ukr.Eng.HDCLUB.mkv"
res = parse_title(title)
self.assertIn("mkv", res.get("unknown", []))
self.assertEqual(
res,
{
"year": ["2001"],
"quality": ["BDRip"],
"resolution": ["1080p"],
"language": ["3xRus", "Ukr", "Eng"],
"name": ["Monsters", "Inc"],
"unknown": ["HDCLUB", "mkv"],
},
)
def test_edition_after_name(self):
title = "Logan.2017.noir.edition.BDRip.1080p.HEVC"
res = parse_title(title)
self.assertIn("noir.edition", res.get("edition", []))
self.assertIn("Logan", res.get("name", []))
self.assertEqual(
res,
{
"year": ["2017"],
"quality": ["BDRip"],
"resolution": ["1080p"],
"codec": ["HEVC"],
"edition": ["noir.edition"],
"name": ["Logan"],
},
)
@unittest.expectedFailure
def test_chunk_from_three_parts(self):
title = "Mad.Max.Road.of.Fury.Black.Chrome.edition.BDRip.1080p"
self.assertEqual(
parse_title(title),
{
"quality": ["BDRip"],
"resolution": ["1080p"],
"edition": ["Black.Chrome.edition"],
"name": ["Mad", "Max", "Road", "of", "Fury"],
},
)
@unittest.expectedFailure
def test_ampersand_in_title(self):
title = "Me.Myself.&.Irene.2000.720p.BluRay.4xRus.Ukr.Eng"
res = parse_title(title)
self.assertIn("&", res.get("name", []))
self.assertEqual(
res,
{
"year": ["2000"],
"resolution": ["720p"],
"quality": ["BluRay"],
"language": ["4xRus", "Ukr", "Eng"],
"name": ["Me", "Myself", "&", "Irene"],
},
)
def test_brackets_and_parenthesis(self):
title = "Leon.(1994).BDRip.1080p.(DVD9).[NoLimits-Team]"
res = parse_title(title)
self.assertEqual(
res,
{
"year": ["1994"],
"quality": ["BDRip", "DVD9"],
"resolution": ["1080p"],
"name": ["Leon"],
"unknown": ["NoLimits-Team"],
},
)
def test_multiple_languages(self):
title = "The.Theory.of.Everything.2014.720p.BluRay.2xRus.2xEng.HDCLUB"
res = parse_title(title)
self.assertIn("2xRus", res.get("language", []))
self.assertIn("2xEng", res.get("language", []))
self.assertEqual(
res,
{
"year": ["2014"],
"resolution": ["720p"],
"quality": ["BluRay"],
"language": ["2xRus", "2xEng"],
"name": ["The", "Theory", "of", "Everything"],
"unknown": ["HDCLUB"],
},
)
def test_subtitles(self):
title = "Lives.of.Others.Blu-RayRip.720p.RusDTS.GerAC3.EngSub"
res = parse_title(title)
self.assertIn("EngSub", res.get("subtitles", []))
self.assertEqual(
res,
{
"quality": ["Blu-RayRip"],
"resolution": ["720p"],
"audio": ["RusDTS", "GerAC3"],
"subtitles": ["EngSub"],
"name": ["Lives", "of", "Others"],
},
)
def test_strange_dot_in_name(self):
title = "WALL·E.2008.1080p.BluRay.3xRus.Ukr.Eng.HDCLUB-Skazhutin"
res = parse_title(title)
self.assertIn("WALL·E", res.get("name", []))
self.assertEqual(
res,
{
"year": ["2008"],
"resolution": ["1080p"],
"quality": ["BluRay"],
"language": ["3xRus", "Ukr", "Eng"],
"name": ["WALL·E"],
"unknown": ["HDCLUB-Skazhutin"],
},
)