mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 03:27:34 +00:00
Add comprehensive tests for formatter classes, services, and utilities
- Introduced tests for various formatter classes including TextFormatter, DurationFormatter, SizeFormatter, DateFormatter, and more to ensure correct formatting behavior. - Added tests for service classes such as FileTreeService, MetadataService, and RenameService, covering directory validation, metadata extraction, and file renaming functionalities. - Implemented utility tests for LanguageCodeExtractor, PatternExtractor, and FrameClassMatcher to validate their extraction and matching capabilities. - Updated test cases to use datasets for better maintainability and clarity. - Enhanced error handling tests to ensure robustness against missing or invalid data.
This commit is contained in:
@@ -0,0 +1,385 @@
|
||||
# Test Datasets
|
||||
|
||||
This directory contains organized test data for the Renamer test suite.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
datasets/
|
||||
├── README.md # This file
|
||||
├── filenames/
|
||||
│ └── filename_patterns.json # Comprehensive filename test cases (46+ cases)
|
||||
├── mediainfo/
|
||||
│ └── frame_class_tests.json # Frame class detection test cases
|
||||
├── sample_mediafiles/ # Generated test files (in .gitignore)
|
||||
│ └── *.mkv, *.mp4, etc. # Empty files created from filename_patterns.json
|
||||
└── expected_results/ # Reserved for future use
|
||||
```
|
||||
|
||||
**Note**: The `sample_mediafiles/` directory is generated by running `fill_sample_mediafiles.py`
|
||||
and is excluded from git. Run `uv run python renamer/test/fill_sample_mediafiles.py` to create these files.
|
||||
|
||||
## Dataset Files
|
||||
|
||||
### filenames/filename_patterns.json
|
||||
|
||||
**Version**: 2.0
|
||||
**Test Cases**: 46+
|
||||
|
||||
Comprehensive dataset of media filenames with their expected extracted metadata.
|
||||
|
||||
**Categories**:
|
||||
- `simple` (2 cases): Basic filenames with minimal metadata
|
||||
- `order` (5 cases): Files with order numbers in various formats ([01], 01., 1.1, etc.)
|
||||
- `year_formats` (2 cases): Different year positioning (parentheses, dots, standalone)
|
||||
- `database_id` (3 cases): Files with TMDB/IMDB identifiers
|
||||
- `special_edition` (4 cases): Director's Cut, Extended Edition, Remastered, etc.
|
||||
- `multi_audio` (3 cases): Multiple audio track counts (2ukr, 4eng, 3ukr, etc.)
|
||||
- `cyrillic` (3 cases): Non-Latin character sets (Russian, Ukrainian)
|
||||
- `multilingual_title` (2 cases): Titles with alternative names or translations
|
||||
- `hdr` (2 cases): HDR/SDR metadata
|
||||
- `resolution_formats` (3 cases): Different resolution formats (1080p, 720p, 4K, 8K)
|
||||
- `sources` (4 cases): Various source types (BDRip, WEB-DL, DVDRip, etc.)
|
||||
- `series` (2 cases): TV series episodes
|
||||
- `complex` (2 cases): Filenames with all metadata fields
|
||||
- `edge_cases` (9 cases): Edge cases and unusual formatting
|
||||
|
||||
**Format**:
|
||||
```json
|
||||
{
|
||||
"description": "Comprehensive test dataset for filename metadata extraction",
|
||||
"version": "2.0",
|
||||
"test_cases": [
|
||||
{
|
||||
"testname": "simple-001",
|
||||
"filename": "Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "simple",
|
||||
"description": "Basic filename with standard metadata"
|
||||
}
|
||||
],
|
||||
"categories": {
|
||||
"simple": "Basic filename with minimal metadata",
|
||||
"order": "Files with order numbers in various formats",
|
||||
"year_formats": "Different year positioning formats",
|
||||
"database_id": "Contains TMDB/IMDB identifiers",
|
||||
"special_edition": "Director's Cut, Extended, Remastered, etc.",
|
||||
"multi_audio": "Multiple audio track counts",
|
||||
"cyrillic": "Non-Latin character sets (Russian, Ukrainian)",
|
||||
"multilingual_title": "Titles with alternative names or translations",
|
||||
"hdr": "HDR/SDR metadata",
|
||||
"resolution_formats": "Different resolution formats and positions",
|
||||
"sources": "Various source types (BDRip, WEB-DL, DVDRip, etc.)",
|
||||
"series": "TV series episodes",
|
||||
"complex": "Filename with multiple metadata fields",
|
||||
"edge_cases": "Edge cases and unusual formatting"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Key Test Cases**:
|
||||
- Order formats: `[01]`, `01.`, `1.1`, `[01.1]`
|
||||
- Year formats: `(2020)`, `2020`, `.2020.`
|
||||
- Database IDs: `[tmdbid-12345]`, `{imdb-tt1234567}`
|
||||
- Special editions: `[Director's Cut]`, `[Ultimate Extended Edition]`, `[Remastered]`
|
||||
- Multi-audio: `2ukr,eng`, `3ukr,eng`, `rus,ukr,4eng`
|
||||
- Cyrillic titles: `12 стульев`, `Бриллиантовая рука`
|
||||
- Multilingual titles: `Il racconto dei racconti (Tale of Tales)`
|
||||
- HDR: `[2160p,HDR,ukr,eng]`, `2160p HDR Ukr Eng`
|
||||
- Resolutions: `1080p`, `720p`, `2160p`, `4K`, `8K`, `4320p`
|
||||
- Sources: `BDRip`, `WEB-DL`, `DVDRip`, `WEB-DLRip`
|
||||
- Series: `S01E01`, `Season 1 Episode 1`
|
||||
- Edge cases: Title starting with number (`2001 A Space Odyssey`), no year, multipart (`pt1`), dots in title
|
||||
|
||||
### mediainfo/frame_class_tests.json
|
||||
|
||||
Test cases for frame class (resolution) detection from video dimensions.
|
||||
|
||||
**Format**:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"testname": "test-1080p-standard",
|
||||
"resolution": [1920, 1080],
|
||||
"interlaced": "No",
|
||||
"expected_frame_class": "1080p",
|
||||
"description": "Standard 1080p Full HD"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
**Note**: The `expected_results/` directory is reserved for future use. It may contain
|
||||
expected extraction results for integration testing across multiple extractors.
|
||||
|
||||
## Usage in Tests
|
||||
|
||||
### Using conftest.py Fixtures
|
||||
|
||||
The test suite provides convenient fixtures for loading datasets:
|
||||
|
||||
```python
|
||||
import pytest
|
||||
|
||||
# Use the load_filename_patterns fixture
|
||||
def test_with_filename_patterns(load_filename_patterns):
|
||||
"""Test using the filename patterns dataset."""
|
||||
test_cases = load_filename_patterns
|
||||
assert len(test_cases) >= 46
|
||||
|
||||
for case in test_cases:
|
||||
filename = case['filename']
|
||||
expected = case['expected']
|
||||
# ... your test logic
|
||||
|
||||
# Use the load_frame_class_tests fixture
|
||||
def test_with_frame_class_data(load_frame_class_tests):
|
||||
"""Test using the frame class dataset."""
|
||||
test_cases = load_frame_class_tests
|
||||
# ... your test logic
|
||||
```
|
||||
|
||||
### Loading Datasets Manually
|
||||
|
||||
```python
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
def load_dataset(dataset_name):
|
||||
"""Load a dataset file from datasets directory."""
|
||||
from renamer.test.conftest import load_dataset
|
||||
return load_dataset(dataset_name)
|
||||
|
||||
# Load filename patterns
|
||||
data = load_dataset("filename_patterns")
|
||||
test_cases = data["test_cases"]
|
||||
|
||||
# Load frame class tests
|
||||
frame_tests = load_dataset("frame_class_tests")
|
||||
```
|
||||
|
||||
### Parametrized Tests
|
||||
|
||||
```python
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from renamer.extractors.filename_extractor import FilenameExtractor
|
||||
|
||||
# Load test cases at module level
|
||||
def load_test_cases():
|
||||
dataset_file = Path(__file__).parent / "datasets" / "filenames" / "filename_patterns.json"
|
||||
with open(dataset_file, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
return data['test_cases']
|
||||
|
||||
@pytest.mark.parametrize("test_case", load_test_cases(), ids=lambda tc: tc['testname'])
|
||||
def test_filename_extraction(test_case):
|
||||
"""Test filename extraction with all test cases."""
|
||||
extractor = FilenameExtractor(Path(test_case["filename"]))
|
||||
|
||||
expected = test_case["expected"]
|
||||
assert extractor.extract_title() == expected["title"]
|
||||
assert extractor.extract_year() == expected["year"]
|
||||
assert extractor.extract_source() == expected["source"]
|
||||
assert extractor.extract_frame_class() == expected["frame_class"]
|
||||
assert extractor.extract_audio_langs() == expected["audio_langs"]
|
||||
```
|
||||
|
||||
### Filtering by Category
|
||||
|
||||
```python
|
||||
def test_order_patterns(load_filename_patterns):
|
||||
"""Test only order-related patterns."""
|
||||
order_cases = [
|
||||
case for case in load_filename_patterns
|
||||
if case['category'] == 'order'
|
||||
]
|
||||
|
||||
for case in order_cases:
|
||||
# Test order extraction
|
||||
pass
|
||||
|
||||
def test_cyrillic_titles(load_filename_patterns):
|
||||
"""Test only Cyrillic title patterns."""
|
||||
cyrillic_cases = [
|
||||
case for case in load_filename_patterns
|
||||
if case['category'] == 'cyrillic'
|
||||
]
|
||||
|
||||
for case in cyrillic_cases:
|
||||
# Test Cyrillic handling
|
||||
pass
|
||||
```
|
||||
|
||||
### Using Sample Files
|
||||
|
||||
```python
|
||||
from renamer.test.conftest import get_test_file_path
|
||||
|
||||
# Get path to a sample file from the dataset
|
||||
sample_file = get_test_file_path("Movie Title (2020) BDRip [1080p,ukr,eng].mkv")
|
||||
assert sample_file.exists()
|
||||
|
||||
# Sample files in sample_mediafiles/ are empty placeholder files
|
||||
# generated from filename_patterns.json for testing file system operations
|
||||
```
|
||||
|
||||
### Generating Sample Media Files
|
||||
|
||||
The `sample_mediafiles/` directory contains empty files for all test cases in `filename_patterns.json`.
|
||||
These files are generated automatically and should not be committed to git.
|
||||
|
||||
**Generate files:**
|
||||
```bash
|
||||
# From project root
|
||||
uv run python renamer/test/fill_sample_mediafiles.py
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```
|
||||
Creating sample media files in: /path/to/renamer/test/datasets/sample_mediafiles
|
||||
Test cases in dataset: 46
|
||||
|
||||
✅ Created: Movie Title (2020) BDRip [1080p,ukr,eng].mkv
|
||||
✅ Created: [01] Movie Title (2020) BDRip [1080p,ukr,eng].mkv
|
||||
...
|
||||
|
||||
Summary:
|
||||
Created: 46 files
|
||||
Skipped (already exist): 0 files
|
||||
Errors: 0 files
|
||||
```
|
||||
|
||||
**Note:** These files are in `.gitignore` and will not be committed. Run the script after cloning
|
||||
the repository to generate them for local testing.
|
||||
|
||||
## Adding New Test Data
|
||||
|
||||
### Adding Filename Patterns
|
||||
|
||||
Edit `filenames/filename_patterns.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"testname": "your-test-name",
|
||||
"filename": "Your Movie Title (2024) [1080p].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Your Movie Title",
|
||||
"year": "2024",
|
||||
"source": null,
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "simple",
|
||||
"description": "Brief description of what this tests"
|
||||
}
|
||||
```
|
||||
|
||||
### Adding MediaInfo Tests
|
||||
|
||||
Edit `mediainfo/frame_class_tests.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"testname": "your-test-name",
|
||||
"resolution": [1920, 1080],
|
||||
"interlaced": "No",
|
||||
"expected_frame_class": "1080p",
|
||||
"description": "What resolution/format this tests"
|
||||
}
|
||||
```
|
||||
|
||||
### Adding Sample Files
|
||||
|
||||
Create empty files in `filenames/sample_files/`:
|
||||
|
||||
```bash
|
||||
touch filenames/sample_files/"Your Movie Title (2024) [1080p].mkv"
|
||||
```
|
||||
|
||||
## Test Coverage by Category
|
||||
|
||||
### Order Patterns (5 cases)
|
||||
- `[01]` - Square bracket order
|
||||
- `01.` - Dot order
|
||||
- `1.1` - Decimal order
|
||||
- `[01.1]` - Complex bracketed decimal
|
||||
- `9.` - Single digit order
|
||||
|
||||
### Year Formats (2 cases)
|
||||
- `(2020)` - Standard parentheses (most common)
|
||||
- `2020` - Standalone year
|
||||
- `.2020.` - Dot-separated year
|
||||
|
||||
### Database IDs (3 cases)
|
||||
- `[tmdbid-12345]` - TMDB with square brackets
|
||||
- `{imdb-tt1234567}` - IMDB with curly braces
|
||||
- Multiple IDs in single filename
|
||||
|
||||
### Audio Languages (3 cases)
|
||||
- `2ukr,eng` - Multiple tracks of same language
|
||||
- `rus,ukr,4eng` - Mixed languages with counts
|
||||
- `3ukr,eng` - Three Ukrainian tracks
|
||||
|
||||
### Cyrillic (3 cases)
|
||||
- Full Cyrillic titles
|
||||
- Cyrillic with numbers
|
||||
- Mixed Cyrillic/Latin
|
||||
|
||||
### Edge Cases (9 cases)
|
||||
- Title starting with number (`2001`, `9`)
|
||||
- Title with colons, dashes, apostrophes
|
||||
- Title with dots
|
||||
- No brackets around metadata
|
||||
- No year present
|
||||
- Multipart films (pt1, pt2)
|
||||
- Remastered versions
|
||||
- Multiple resolution indicators
|
||||
- Series episodes
|
||||
|
||||
## Data Quality Guidelines
|
||||
|
||||
When adding test data:
|
||||
|
||||
1. **Completeness**: Include all expected fields, use `null` for missing values
|
||||
2. **Accuracy**: Verify expected values match actual extractor output
|
||||
3. **Coverage**: Include edge cases and corner cases
|
||||
4. **Categorization**: Assign appropriate category
|
||||
5. **Documentation**: Provide clear description
|
||||
6. **Naming**: Use descriptive testname (e.g., `order-001`, `cyrillic-002`)
|
||||
7. **Realism**: Use realistic filenames from actual use cases
|
||||
|
||||
## Maintenance
|
||||
|
||||
- Keep datasets in sync with test requirements
|
||||
- Document expected behavior in descriptions
|
||||
- Use consistent naming conventions (lowercase, hyphens)
|
||||
- Group related test cases together (same category)
|
||||
- Update README when adding new dataset types
|
||||
- Run tests after adding new data to validate
|
||||
- Remove obsolete test cases when extractors change
|
||||
|
||||
## Version History
|
||||
|
||||
- **v2.0**: Comprehensive reorganization with 46+ test cases across 14 categories
|
||||
- Added testname field for better test identification
|
||||
- Added category field for test organization
|
||||
- Expanded coverage to include all extractor fields
|
||||
- Added edge cases and special formatting tests
|
||||
|
||||
- **v1.0**: Initial dataset with basic test cases
|
||||
@@ -0,0 +1,850 @@
|
||||
{
|
||||
"description": "Comprehensive test dataset for filename metadata extraction",
|
||||
"version": "2.0",
|
||||
"test_cases": [
|
||||
{
|
||||
"testname": "simple-001",
|
||||
"filename": "Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "simple",
|
||||
"description": "Basic filename with standard metadata"
|
||||
},
|
||||
{
|
||||
"testname": "simple-002",
|
||||
"filename": "Independence Day Resurgence.(2016).[720,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Independence Day Resurgence",
|
||||
"year": "2016",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "simple",
|
||||
"description": "Standard movie with year and languages"
|
||||
},
|
||||
{
|
||||
"testname": "order-001",
|
||||
"filename": "[01] Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": "01",
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "order",
|
||||
"description": "Order in square brackets"
|
||||
},
|
||||
{
|
||||
"testname": "order-002",
|
||||
"filename": "01. Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": "01",
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "order",
|
||||
"description": "Order with dot separator"
|
||||
},
|
||||
{
|
||||
"testname": "order-003",
|
||||
"filename": "1.1 Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": "1.1",
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "order",
|
||||
"description": "Decimal order number"
|
||||
},
|
||||
{
|
||||
"testname": "order-004",
|
||||
"filename": "[01.1] Harry Potter and the Philosopher's Stone (2001) [Theatrical Cut] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv",
|
||||
"expected": {
|
||||
"order": "01.1",
|
||||
"title": "Harry Potter and the Philosopher's Stone",
|
||||
"year": "2001",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": ["Theatrical Cut"],
|
||||
"audio_langs": "4ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "complex",
|
||||
"description": "Numbered movie with special edition, multiple languages"
|
||||
},
|
||||
{
|
||||
"testname": "order-005",
|
||||
"filename": "[04] Ice Age: Continental Drift (2012) BDRip [1080p,ukr,eng] [tmdbid-57800].mkv",
|
||||
"expected": {
|
||||
"order": "04",
|
||||
"title": "Ice Age: Continental Drift",
|
||||
"year": "2012",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": ["tmdb", "57800"],
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "complex",
|
||||
"description": "Numbered entry with database ID and full metadata"
|
||||
},
|
||||
{
|
||||
"testname": "order-edge-001",
|
||||
"filename": "9 (2009) BDRip [1080p,2ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "9",
|
||||
"year": "2009",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "2ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Title starting with number (no order)"
|
||||
},
|
||||
{
|
||||
"testname": "order-edge-002",
|
||||
"filename": "9. Movie Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": "9",
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "order",
|
||||
"description": "Single digit order with dot"
|
||||
},
|
||||
{
|
||||
"testname": "year-001",
|
||||
"filename": "Movie Title 2020 BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "year_formats",
|
||||
"description": "Year not in parentheses"
|
||||
},
|
||||
{
|
||||
"testname": "year-002",
|
||||
"filename": "Movie Title.2020.BDRip.[1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "year_formats",
|
||||
"description": "Year with dot separators"
|
||||
},
|
||||
{
|
||||
"testname": "year-edge-001",
|
||||
"filename": "2001 A Space Odyssey (1968) [720p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "2001 A Space Odyssey",
|
||||
"year": "1968",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Title starting with year-like number"
|
||||
},
|
||||
{
|
||||
"testname": "database-001",
|
||||
"filename": "Movie Title (2020) [tmdbid-12345].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": null,
|
||||
"frame_class": null,
|
||||
"hdr": null,
|
||||
"movie_db": ["tmdb", "12345"],
|
||||
"special_info": null,
|
||||
"audio_langs": "",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "database_id",
|
||||
"description": "Movie with TMDB ID"
|
||||
},
|
||||
{
|
||||
"testname": "database-002",
|
||||
"filename": "Cours Toujours (2010) [720p,und] [tmdbid-993291].mp4",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Cours Toujours",
|
||||
"year": "2010",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": ["tmdb", "993291"],
|
||||
"special_info": null,
|
||||
"audio_langs": "und",
|
||||
"extension": "mp4"
|
||||
},
|
||||
"category": "database_id",
|
||||
"description": "TMDB ID with resolution"
|
||||
},
|
||||
{
|
||||
"testname": "database-003",
|
||||
"filename": "Грицькові книжки.(1979).[ukr].{imdb-tt9007536}.mpg",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Грицькові книжки",
|
||||
"year": "1979",
|
||||
"source": null,
|
||||
"frame_class": null,
|
||||
"hdr": null,
|
||||
"movie_db": ["imdb", "tt9007536"],
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr",
|
||||
"extension": "mpg"
|
||||
},
|
||||
"category": "database_id",
|
||||
"description": "IMDB ID with curly braces"
|
||||
},
|
||||
{
|
||||
"testname": "special-edition-001",
|
||||
"filename": "Movie Title (2020) [Director's Cut] BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": ["Director's Cut"],
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "special_edition",
|
||||
"description": "Director's Cut edition"
|
||||
},
|
||||
{
|
||||
"testname": "special-edition-002",
|
||||
"filename": "[01.2] Harry Potter and the Sorcerer's Stone (2001) [Ultimate Extended Edition] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv",
|
||||
"expected": {
|
||||
"order": "01.2",
|
||||
"title": "Harry Potter and the Sorcerer's Stone",
|
||||
"year": "2001",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": ["Ultimate Extended Edition"],
|
||||
"audio_langs": "4ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "special_edition",
|
||||
"description": "Extended edition with order"
|
||||
},
|
||||
{
|
||||
"testname": "special-edition-003",
|
||||
"filename": "The Lord of the Rings 2001 Extended Edition (2001) BDRip 1080p [ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "The Lord of the Rings 2001 Extended Edition",
|
||||
"year": "2001",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "special_edition",
|
||||
"description": "Extended Edition in title"
|
||||
},
|
||||
{
|
||||
"testname": "multi-audio-001",
|
||||
"filename": "A Mighty Heart.(2007).[SD,2ukr,eng].avi",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "A Mighty Heart",
|
||||
"year": "2007",
|
||||
"source": null,
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "2ukr,eng",
|
||||
"extension": "avi"
|
||||
},
|
||||
"category": "multi_audio",
|
||||
"description": "Movie with 2 Ukrainian tracks"
|
||||
},
|
||||
{
|
||||
"testname": "multi-audio-002",
|
||||
"filename": "Lets Be Cops.(2014).[720p,rus,ukr,4eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Lets Be Cops",
|
||||
"year": "2014",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "rus,ukr,4eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "multi_audio",
|
||||
"description": "Movie with 4 English tracks"
|
||||
},
|
||||
{
|
||||
"testname": "multi-audio-003",
|
||||
"filename": "The Name of the Rose (1986) [SD,3ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "The Name of the Rose",
|
||||
"year": "1986",
|
||||
"source": null,
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "3ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "multi_audio",
|
||||
"description": "Movie with 3 Ukrainian tracks"
|
||||
},
|
||||
{
|
||||
"testname": "cyrillic-001",
|
||||
"filename": "12 стульев.(1971).[SD,rus].avi",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "12 стульев",
|
||||
"year": "1971",
|
||||
"source": null,
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "rus",
|
||||
"extension": "avi"
|
||||
},
|
||||
"category": "cyrillic",
|
||||
"description": "Cyrillic title with number"
|
||||
},
|
||||
{
|
||||
"testname": "cyrillic-002",
|
||||
"filename": "Фільм Назва (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Фільм Назва",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "cyrillic",
|
||||
"description": "Full Cyrillic title"
|
||||
},
|
||||
{
|
||||
"testname": "cyrillic-003",
|
||||
"filename": "Бриллиантовая рука.(1968).[720p,2rus].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Бриллиантовая рука",
|
||||
"year": "1968",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "2rus",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "cyrillic",
|
||||
"description": "Russian classic film"
|
||||
},
|
||||
{
|
||||
"testname": "multilingual-title-001",
|
||||
"filename": "Il racconto dei racconti (Tale of Tales).(2015).[720p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Il racconto dei racconti (Tale of Tales)",
|
||||
"year": "2015",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "multilingual_title",
|
||||
"description": "Italian title with English translation"
|
||||
},
|
||||
{
|
||||
"testname": "multilingual-title-002",
|
||||
"filename": "Гуси-Лебеді.(1949).[ukr,2rus].{imdb-tt1070792}.mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Гуси-Лебеді",
|
||||
"year": "1949",
|
||||
"source": null,
|
||||
"frame_class": null,
|
||||
"hdr": null,
|
||||
"movie_db": ["imdb", "tt1070792"],
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,2rus",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "multilingual_title",
|
||||
"description": "Ukrainian title with hyphen"
|
||||
},
|
||||
{
|
||||
"testname": "hdr-001",
|
||||
"filename": "Movie Title (2020) BDRip [2160p,HDR,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "2160p",
|
||||
"hdr": "HDR",
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "hdr",
|
||||
"description": "4K with HDR"
|
||||
},
|
||||
{
|
||||
"testname": "hdr-002",
|
||||
"filename": "Troll 2 (2025) WEB-DL 2160p HDR Ukr Nor [Hurtom].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Troll 2",
|
||||
"year": "2025",
|
||||
"source": "WEB-DL",
|
||||
"frame_class": "2160p",
|
||||
"hdr": "HDR",
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,nor",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "hdr",
|
||||
"description": "HDR without brackets"
|
||||
},
|
||||
{
|
||||
"testname": "resolution-001",
|
||||
"filename": "Movie Title (2020) 1080p BDRip [ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "resolution_formats",
|
||||
"description": "Resolution outside brackets"
|
||||
},
|
||||
{
|
||||
"testname": "resolution-002",
|
||||
"filename": "The long title.(2008).[SD 720p,ukr].avi",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "The long title",
|
||||
"year": "2008",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr",
|
||||
"extension": "avi"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Multiple resolution indicators"
|
||||
},
|
||||
{
|
||||
"testname": "resolution-003",
|
||||
"filename": "The long title (2008) 8K 4320p ENG.mp4",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "The long title",
|
||||
"year": "2008",
|
||||
"source": null,
|
||||
"frame_class": "4320p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "eng",
|
||||
"extension": "mp4"
|
||||
},
|
||||
"category": "resolution_formats",
|
||||
"description": "8K resolution"
|
||||
},
|
||||
{
|
||||
"testname": "source-001",
|
||||
"filename": "Emma (1996) BDRip [720p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Emma",
|
||||
"year": "1996",
|
||||
"source": "BDRip",
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "sources",
|
||||
"description": "BDRip source"
|
||||
},
|
||||
{
|
||||
"testname": "source-002",
|
||||
"filename": "Rekopis znaleziony w Saragossie (1965) WEB-DL [SD,ukr].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Rekopis znaleziony w Saragossie",
|
||||
"year": "1965",
|
||||
"source": "WEB-DL",
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "sources",
|
||||
"description": "WEB-DL source"
|
||||
},
|
||||
{
|
||||
"testname": "source-003",
|
||||
"filename": "Scoop (2024) WEB-DL [720p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Scoop",
|
||||
"year": "2024",
|
||||
"source": "WEB-DL",
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "sources",
|
||||
"description": "Recent WEB-DL release"
|
||||
},
|
||||
{
|
||||
"testname": "source-004",
|
||||
"filename": "One More Kiss (1999) DVDRip [SD,ukr].avi",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "One More Kiss",
|
||||
"year": "1999",
|
||||
"source": "DVDRip",
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr",
|
||||
"extension": "avi"
|
||||
},
|
||||
"category": "sources",
|
||||
"description": "DVDRip source"
|
||||
},
|
||||
{
|
||||
"testname": "complex-001",
|
||||
"filename": "[01.1] Movie: Subtitle (2020) [Director's Cut] BDRip [2160p,HDR,2ukr,eng] [tmdbid-12345].mkv",
|
||||
"expected": {
|
||||
"order": "01.1",
|
||||
"title": "Movie: Subtitle",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "2160p",
|
||||
"hdr": "HDR",
|
||||
"movie_db": ["tmdb", "12345"],
|
||||
"special_info": ["Director's Cut"],
|
||||
"audio_langs": "2ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "complex",
|
||||
"description": "All metadata fields present"
|
||||
},
|
||||
{
|
||||
"testname": "complex-002",
|
||||
"filename": "Moana 2 (2024) MA WEB-DL 2160p SDR Ukr Eng [Hurtom].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Moana 2",
|
||||
"year": "2024",
|
||||
"source": "WEB-DL",
|
||||
"frame_class": "2160p",
|
||||
"hdr": "SDR",
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "complex",
|
||||
"description": "Recent release with SDR"
|
||||
},
|
||||
{
|
||||
"testname": "series-001",
|
||||
"filename": "Series Name S01E01 (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Series Name S01E01",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "series",
|
||||
"description": "TV series episode"
|
||||
},
|
||||
{
|
||||
"testname": "series-002",
|
||||
"filename": "The 100 (2014) Season 1 Episode 1 [720p,ukr].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "The 100",
|
||||
"year": "2014",
|
||||
"source": null,
|
||||
"frame_class": "720p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": ["Season 1 Episode 1"],
|
||||
"audio_langs": "ukr",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "series",
|
||||
"description": "Series with spelled out season/episode"
|
||||
},
|
||||
{
|
||||
"testname": "edge-colon-001",
|
||||
"filename": "Star Wars: Episode IV - A New Hope (1977) [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Star Wars: Episode IV - A New Hope",
|
||||
"year": "1977",
|
||||
"source": null,
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Title with colon and dash"
|
||||
},
|
||||
{
|
||||
"testname": "edge-apostrophe-001",
|
||||
"filename": "Harley Quinn. A Very Problematic Valentine's Day Special (2023) WEB-DL [1080p,ukr,eng] [imdbid-tt22525032].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Harley Quinn. A Very Problematic Valentine's Day Special",
|
||||
"year": "2023",
|
||||
"source": "WEB-DL",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": ["imdb", "tt22525032"],
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Title with apostrophe"
|
||||
},
|
||||
{
|
||||
"testname": "edge-dots-001",
|
||||
"filename": "Movie.Title (2020) BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie.Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Title with dots"
|
||||
},
|
||||
{
|
||||
"testname": "edge-no-brackets-001",
|
||||
"filename": "Movie Title (2020) BDRip 1080p ukr eng.mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": "2020",
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "No brackets around metadata"
|
||||
},
|
||||
{
|
||||
"testname": "edge-no-year-001",
|
||||
"filename": "Movie Title BDRip [1080p,ukr,eng].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Movie Title",
|
||||
"year": null,
|
||||
"source": "BDRip",
|
||||
"frame_class": "1080p",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "ukr,eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "No year present"
|
||||
},
|
||||
{
|
||||
"testname": "edge-multipart-001",
|
||||
"filename": "Золотє теля.pt1.(1968).[SD,ukr].avi",
|
||||
"expected": {
|
||||
"order": "1",
|
||||
"title": "Золотє теля",
|
||||
"year": "1968",
|
||||
"source": null,
|
||||
"frame_class": "SD",
|
||||
"hdr": null,
|
||||
"movie_db": null,
|
||||
"special_info": null,
|
||||
"audio_langs": "rus",
|
||||
"extension": "avi"
|
||||
},
|
||||
"category": "edge_cases",
|
||||
"description": "Multi-part film (pt1)"
|
||||
},
|
||||
{
|
||||
"testname": "edge-remastered-001",
|
||||
"filename": "Apple 1984 (1984) [Remastered] [2160p,eng] [imdbid-tt4227346].mkv",
|
||||
"expected": {
|
||||
"order": null,
|
||||
"title": "Apple 1984",
|
||||
"year": "1984",
|
||||
"source": null,
|
||||
"frame_class": "2160p",
|
||||
"hdr": null,
|
||||
"movie_db": ["imdb", "tt4227346"],
|
||||
"special_info": ["Remastered"],
|
||||
"audio_langs": "eng",
|
||||
"extension": "mkv"
|
||||
},
|
||||
"category": "special_edition",
|
||||
"description": "Remastered version"
|
||||
}
|
||||
],
|
||||
"categories": {
|
||||
"simple": "Basic filename with minimal metadata",
|
||||
"order": "Files with order numbers in various formats",
|
||||
"year_formats": "Different year positioning formats",
|
||||
"database_id": "Contains TMDB/IMDB identifiers",
|
||||
"special_edition": "Director's Cut, Extended, Remastered, etc.",
|
||||
"multi_audio": "Multiple audio track counts",
|
||||
"cyrillic": "Non-Latin character sets (Russian, Ukrainian)",
|
||||
"multilingual_title": "Titles with alternative names or translations",
|
||||
"hdr": "HDR/SDR metadata",
|
||||
"resolution_formats": "Different resolution formats and positions",
|
||||
"sources": "Various source types (BDRip, WEB-DL, DVDRip, etc.)",
|
||||
"series": "TV series episodes",
|
||||
"complex": "Filename with multiple metadata fields",
|
||||
"edge_cases": "Edge cases and unusual formatting"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
[
|
||||
{
|
||||
"testname": "test-480p-sd",
|
||||
"resolution": [720, 480],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "480p"
|
||||
},
|
||||
{
|
||||
"testname": "test-576p-pal",
|
||||
"resolution": [720, 576],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "576p"
|
||||
},
|
||||
{
|
||||
"testname": "test-720p-hd",
|
||||
"resolution": [1280, 720],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "720p"
|
||||
},
|
||||
{
|
||||
"testname": "test-1080p-fullhd",
|
||||
"resolution": [1920, 1080],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1080p"
|
||||
},
|
||||
{
|
||||
"testname": "test-1080i-broadcast",
|
||||
"resolution": [1920, 1080],
|
||||
"interlaced": true,
|
||||
"expected_frame_class": "1080i"
|
||||
},
|
||||
{
|
||||
"testname": "test-1440p-qhd",
|
||||
"resolution": [2560, 1440],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1440p"
|
||||
},
|
||||
{
|
||||
"testname": "test-2160p-uhd",
|
||||
"resolution": [3840, 2160],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "2160p"
|
||||
},
|
||||
{
|
||||
"testname": "test-4320p-8k",
|
||||
"resolution": [7680, 4320],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "4320p"
|
||||
},
|
||||
{
|
||||
"testname": "test-1080p-cinema-240",
|
||||
"resolution": [1920, 804],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1080p"
|
||||
},
|
||||
{
|
||||
"testname": "test-1080p-cinema-235",
|
||||
"resolution": [1920, 816],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1080p"
|
||||
},
|
||||
{
|
||||
"testname": "test-720p-cinema",
|
||||
"resolution": [1280, 536],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "720p"
|
||||
},
|
||||
{
|
||||
"testname": "test-2160p-cinema",
|
||||
"resolution": [3840, 1608],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "2160p"
|
||||
},
|
||||
{
|
||||
"testname": "test-mobile-vertical-iphone",
|
||||
"resolution": [1170, 2532],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1440p"
|
||||
},
|
||||
{
|
||||
"testname": "test-mobile-vertical-4k",
|
||||
"resolution": [2160, 3840],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "2160p"
|
||||
},
|
||||
{
|
||||
"testname": "test-square-video",
|
||||
"resolution": [1080, 1080],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1080p"
|
||||
},
|
||||
{
|
||||
"testname": "test-vhs-capture",
|
||||
"resolution": [720, 404],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "480p"
|
||||
},
|
||||
{
|
||||
"testname": "test-miniDV-pal",
|
||||
"resolution": [720, 576],
|
||||
"interlaced": true,
|
||||
"expected_frame_class": "576i"
|
||||
},
|
||||
{
|
||||
"testname": "test-old-digital-camera-4by3",
|
||||
"resolution": [1024, 768],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "768p"
|
||||
},
|
||||
{
|
||||
"testname": "test-old-digital-camera-lowres",
|
||||
"resolution": [800, 600],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "600p"
|
||||
},
|
||||
{
|
||||
"testname": "test-webcam-legacy",
|
||||
"resolution": [640, 480],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "480p"
|
||||
},
|
||||
{
|
||||
"testname": "test-odd-nonstandard-wide",
|
||||
"resolution": [1600, 900],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "900p"
|
||||
},
|
||||
{
|
||||
"testname": "test-odd-nonstandard-small",
|
||||
"resolution": [854, 480],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "480p"
|
||||
},
|
||||
{
|
||||
"testname": "test-ultrawide-monitor-capture",
|
||||
"resolution": [3440, 1440],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1440p"
|
||||
},
|
||||
{
|
||||
"testname": "test-strange-lowres",
|
||||
"resolution": [512, 288],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "288p"
|
||||
},
|
||||
{
|
||||
"resolution": [1918, 812],
|
||||
"interlaced": false,
|
||||
"expected_frame_class": "1080p",
|
||||
"testname": "test-mistakenly-high-height"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user