summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/helpers/vtt/builder_spec.cr87
-rw-r--r--spec/i18next_plurals_spec.cr61
-rw-r--r--spec/invidious/helpers_spec.cr12
-rw-r--r--spec/invidious/search/iv_filters_spec.cr1
-rw-r--r--spec/invidious/search/yt_filters_spec.cr54
-rw-r--r--spec/invidious/videos/regular_videos_extract_spec.cr4
-rw-r--r--spec/invidious/videos/scheduled_live_extract_spec.cr2
7 files changed, 156 insertions, 65 deletions
diff --git a/spec/helpers/vtt/builder_spec.cr b/spec/helpers/vtt/builder_spec.cr
new file mode 100644
index 00000000..dc1f4613
--- /dev/null
+++ b/spec/helpers/vtt/builder_spec.cr
@@ -0,0 +1,87 @@
+require "../../spec_helper.cr"
+
+MockLines = ["Line 1", "Line 2"]
+MockLinesWithEscapableCharacter = ["<Line 1>", "&Line 2>", '\u200E' + "Line\u200F 3", "\u00A0Line 4"]
+
+Spectator.describe "WebVTT::Builder" do
+ it "correctly builds a vtt file" do
+ result = WebVTT.build do |vtt|
+ 2.times do |i|
+ vtt.cue(
+ Time::Span.new(seconds: i),
+ Time::Span.new(seconds: i + 1),
+ MockLines[i]
+ )
+ end
+ end
+
+ expect(result).to eq([
+ "WEBVTT",
+ "",
+ "00:00:00.000 --> 00:00:01.000",
+ "Line 1",
+ "",
+ "00:00:01.000 --> 00:00:02.000",
+ "Line 2",
+ "",
+ "",
+ ].join('\n'))
+ end
+
+ it "correctly builds a vtt file with setting fields" do
+ setting_fields = {
+ "Kind" => "captions",
+ "Language" => "en",
+ }
+
+ result = WebVTT.build(setting_fields) do |vtt|
+ 2.times do |i|
+ vtt.cue(
+ Time::Span.new(seconds: i),
+ Time::Span.new(seconds: i + 1),
+ MockLines[i]
+ )
+ end
+ end
+
+ expect(result).to eq([
+ "WEBVTT",
+ "Kind: captions",
+ "Language: en",
+ "",
+ "00:00:00.000 --> 00:00:01.000",
+ "Line 1",
+ "",
+ "00:00:01.000 --> 00:00:02.000",
+ "Line 2",
+ "",
+ "",
+ ].join('\n'))
+ end
+
+ it "properly escapes characters" do
+ result = WebVTT.build do |vtt|
+ 4.times do |i|
+ vtt.cue(Time::Span.new(seconds: i), Time::Span.new(seconds: i + 1), MockLinesWithEscapableCharacter[i])
+ end
+ end
+
+ expect(result).to eq([
+ "WEBVTT",
+ "",
+ "00:00:00.000 --> 00:00:01.000",
+ "&lt;Line 1&gt;",
+ "",
+ "00:00:01.000 --> 00:00:02.000",
+ "&amp;Line 2&gt;",
+ "",
+ "00:00:02.000 --> 00:00:03.000",
+ "&lrm;Line&rlm; 3",
+ "",
+ "00:00:03.000 --> 00:00:04.000",
+ "&nbsp;Line 4",
+ "",
+ "",
+ ].join('\n'))
+ end
+end
diff --git a/spec/i18next_plurals_spec.cr b/spec/i18next_plurals_spec.cr
index ee9ff394..dcd0f5ec 100644
--- a/spec/i18next_plurals_spec.cr
+++ b/spec/i18next_plurals_spec.cr
@@ -15,12 +15,15 @@ FORM_TESTS = {
"ar" => I18next::Plurals::PluralForms::Special_Arabic,
"be" => I18next::Plurals::PluralForms::Dual_Slavic,
"cy" => I18next::Plurals::PluralForms::Special_Welsh,
+ "fr" => I18next::Plurals::PluralForms::Special_French_Portuguese,
"en" => I18next::Plurals::PluralForms::Single_not_one,
- "fr" => I18next::Plurals::PluralForms::Single_gt_one,
+ "es" => I18next::Plurals::PluralForms::Special_Spanish_Italian,
"ga" => I18next::Plurals::PluralForms::Special_Irish,
"gd" => I18next::Plurals::PluralForms::Special_Scottish_Gaelic,
"he" => I18next::Plurals::PluralForms::Special_Hebrew,
+ "hr" => I18next::Plurals::PluralForms::Special_Hungarian_Serbian,
"is" => I18next::Plurals::PluralForms::Special_Icelandic,
+ "it" => I18next::Plurals::PluralForms::Special_Spanish_Italian,
"jv" => I18next::Plurals::PluralForms::Special_Javanese,
"kw" => I18next::Plurals::PluralForms::Special_Cornish,
"lt" => I18next::Plurals::PluralForms::Special_Lithuanian,
@@ -30,13 +33,14 @@ FORM_TESTS = {
"mt" => I18next::Plurals::PluralForms::Special_Maltese,
"or" => I18next::Plurals::PluralForms::Special_Odia,
"pl" => I18next::Plurals::PluralForms::Special_Polish_Kashubian,
- "pt" => I18next::Plurals::PluralForms::Single_gt_one,
- "pt-PT" => I18next::Plurals::PluralForms::Single_not_one,
- "pt-BR" => I18next::Plurals::PluralForms::Single_gt_one,
+ "pt" => I18next::Plurals::PluralForms::Special_French_Portuguese,
+ "pt-PT" => I18next::Plurals::PluralForms::Single_gt_one,
+ "pt-BR" => I18next::Plurals::PluralForms::Special_French_Portuguese,
"ro" => I18next::Plurals::PluralForms::Special_Romanian,
- "su" => I18next::Plurals::PluralForms::None,
"sk" => I18next::Plurals::PluralForms::Special_Czech_Slovak,
"sl" => I18next::Plurals::PluralForms::Special_Slovenian,
+ "su" => I18next::Plurals::PluralForms::None,
+ "sr" => I18next::Plurals::PluralForms::Special_Hungarian_Serbian,
}
SUFFIX_TESTS = {
@@ -73,10 +77,18 @@ SUFFIX_TESTS = {
{num: 1, suffix: ""},
{num: 10, suffix: "_plural"},
],
+ "es" => [
+ {num: 0, suffix: "_2"},
+ {num: 1, suffix: "_0"},
+ {num: 10, suffix: "_2"},
+ {num: 6_000_000, suffix: "_1"},
+ ],
"fr" => [
- {num: 0, suffix: ""},
- {num: 1, suffix: ""},
- {num: 10, suffix: "_plural"},
+ {num: 0, suffix: "_0"},
+ {num: 1, suffix: "_0"},
+ {num: 10, suffix: "_2"},
+ {num: 4_000_000, suffix: "_1"},
+ {num: 6_260_000, suffix: "_2"},
],
"ga" => [
{num: 1, suffix: "_0"},
@@ -155,31 +167,24 @@ SUFFIX_TESTS = {
{num: 1, suffix: "_0"},
{num: 5, suffix: "_2"},
],
- "pt" => [
- {num: 0, suffix: ""},
- {num: 1, suffix: ""},
- {num: 10, suffix: "_plural"},
+ "pt-BR" => [
+ {num: 0, suffix: "_0"},
+ {num: 1, suffix: "_0"},
+ {num: 10, suffix: "_2"},
+ {num: 42, suffix: "_2"},
+ {num: 9_000_000, suffix: "_1"},
],
"pt-PT" => [
- {num: 0, suffix: "_plural"},
- {num: 1, suffix: ""},
- {num: 10, suffix: "_plural"},
- ],
- "pt-BR" => [
{num: 0, suffix: ""},
{num: 1, suffix: ""},
{num: 10, suffix: "_plural"},
+ {num: 9_000_000, suffix: "_plural"},
],
"ro" => [
{num: 0, suffix: "_1"},
{num: 1, suffix: "_0"},
{num: 20, suffix: "_2"},
],
- "su" => [
- {num: 0, suffix: "_0"},
- {num: 1, suffix: "_0"},
- {num: 10, suffix: "_0"},
- ],
"sk" => [
{num: 0, suffix: "_2"},
{num: 1, suffix: "_0"},
@@ -191,6 +196,18 @@ SUFFIX_TESTS = {
{num: 2, suffix: "_2"},
{num: 3, suffix: "_3"},
],
+ "su" => [
+ {num: 0, suffix: "_0"},
+ {num: 1, suffix: "_0"},
+ {num: 10, suffix: "_0"},
+ ],
+ "sr" => [
+ {num: 1, suffix: "_0"},
+ {num: 51, suffix: "_0"},
+ {num: 32, suffix: "_1"},
+ {num: 100, suffix: "_2"},
+ {num: 100_000, suffix: "_2"},
+ ],
}
Spectator.describe "i18next_Plural_Resolver" do
diff --git a/spec/invidious/helpers_spec.cr b/spec/invidious/helpers_spec.cr
index 142e1653..9fbb6d6f 100644
--- a/spec/invidious/helpers_spec.cr
+++ b/spec/invidious/helpers_spec.cr
@@ -3,18 +3,6 @@ require "../spec_helper"
CONFIG = Config.from_yaml(File.open("config/config.example.yml"))
Spectator.describe "Helper" do
- describe "#produce_channel_videos_url" do
- it "correctly produces url for requesting page `x` of a channel's videos" do
- # expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw")).to eq("/browse_ajax?continuation=4qmFsgI8EhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4&gl=US&hl=en")
- #
- # expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4R0FFPQ%3D%3D&gl=US&hl=en")
-
- # expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", page: 20)).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUE9PQ%3D%3D&gl=US&hl=en")
-
- # expect(produce_channel_videos_url(ucid: "UC-9-kyTW8ZkZNDHQJ6FgpwQ", page: 20, sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQy05LWt5VFc4WmtaTkRIUUo2Rmdwd1EaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUJnQg%3D%3D&gl=US&hl=en")
- end
- end
-
describe "#produce_channel_search_continuation" do
it "correctly produces token for searching a specific channel" do
expect(produce_channel_search_continuation("UCXuqSBlHAE6Xw-yeJA0Tunw", "", 100)).to eq("4qmFsgJqEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWnpaV0Z5WTJnd0FUZ0JZQUY2QkVkS2IxaTRBUUE9WgCaAilicm93c2UtZmVlZFVDWHVxU0JsSEFFNlh3LXllSkEwVHVud3NlYXJjaA%3D%3D")
diff --git a/spec/invidious/search/iv_filters_spec.cr b/spec/invidious/search/iv_filters_spec.cr
index b0897a63..3cefafa1 100644
--- a/spec/invidious/search/iv_filters_spec.cr
+++ b/spec/invidious/search/iv_filters_spec.cr
@@ -301,7 +301,6 @@ Spectator.describe Invidious::Search::Filters do
it "Encodes features filter (single)" do
Invidious::Search::Filters::Features.each do |value|
- string = described_class.format_features(value)
filters = described_class.new(features: value)
expect("#{filters.to_iv_params}")
diff --git a/spec/invidious/search/yt_filters_spec.cr b/spec/invidious/search/yt_filters_spec.cr
index bf7f21e7..8abed5ce 100644
--- a/spec/invidious/search/yt_filters_spec.cr
+++ b/spec/invidious/search/yt_filters_spec.cr
@@ -12,45 +12,45 @@ end
# page of Youtube with any browser devtools HTML inspector.
DATE_FILTERS = {
- Invidious::Search::Filters::Date::Hour => "EgIIAQ%3D%3D",
- Invidious::Search::Filters::Date::Today => "EgIIAg%3D%3D",
- Invidious::Search::Filters::Date::Week => "EgIIAw%3D%3D",
- Invidious::Search::Filters::Date::Month => "EgIIBA%3D%3D",
- Invidious::Search::Filters::Date::Year => "EgIIBQ%3D%3D",
+ Invidious::Search::Filters::Date::Hour => "EgIIAfABAQ%3D%3D",
+ Invidious::Search::Filters::Date::Today => "EgIIAvABAQ%3D%3D",
+ Invidious::Search::Filters::Date::Week => "EgIIA_ABAQ%3D%3D",
+ Invidious::Search::Filters::Date::Month => "EgIIBPABAQ%3D%3D",
+ Invidious::Search::Filters::Date::Year => "EgIIBfABAQ%3D%3D",
}
TYPE_FILTERS = {
- Invidious::Search::Filters::Type::Video => "EgIQAQ%3D%3D",
- Invidious::Search::Filters::Type::Channel => "EgIQAg%3D%3D",
- Invidious::Search::Filters::Type::Playlist => "EgIQAw%3D%3D",
- Invidious::Search::Filters::Type::Movie => "EgIQBA%3D%3D",
+ Invidious::Search::Filters::Type::Video => "EgIQAfABAQ%3D%3D",
+ Invidious::Search::Filters::Type::Channel => "EgIQAvABAQ%3D%3D",
+ Invidious::Search::Filters::Type::Playlist => "EgIQA_ABAQ%3D%3D",
+ Invidious::Search::Filters::Type::Movie => "EgIQBPABAQ%3D%3D",
}
DURATION_FILTERS = {
- Invidious::Search::Filters::Duration::Short => "EgIYAQ%3D%3D",
- Invidious::Search::Filters::Duration::Medium => "EgIYAw%3D%3D",
- Invidious::Search::Filters::Duration::Long => "EgIYAg%3D%3D",
+ Invidious::Search::Filters::Duration::Short => "EgIYAfABAQ%3D%3D",
+ Invidious::Search::Filters::Duration::Medium => "EgIYA_ABAQ%3D%3D",
+ Invidious::Search::Filters::Duration::Long => "EgIYAvABAQ%3D%3D",
}
FEATURE_FILTERS = {
- Invidious::Search::Filters::Features::Live => "EgJAAQ%3D%3D",
- Invidious::Search::Filters::Features::FourK => "EgJwAQ%3D%3D",
- Invidious::Search::Filters::Features::HD => "EgIgAQ%3D%3D",
- Invidious::Search::Filters::Features::Subtitles => "EgIoAQ%3D%3D",
- Invidious::Search::Filters::Features::CCommons => "EgIwAQ%3D%3D",
- Invidious::Search::Filters::Features::ThreeSixty => "EgJ4AQ%3D%3D",
- Invidious::Search::Filters::Features::VR180 => "EgPQAQE%3D",
- Invidious::Search::Filters::Features::ThreeD => "EgI4AQ%3D%3D",
- Invidious::Search::Filters::Features::HDR => "EgPIAQE%3D",
- Invidious::Search::Filters::Features::Location => "EgO4AQE%3D",
- Invidious::Search::Filters::Features::Purchased => "EgJIAQ%3D%3D",
+ Invidious::Search::Filters::Features::Live => "EgJAAfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::FourK => "EgJwAfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::HD => "EgIgAfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::Subtitles => "EgIoAfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::CCommons => "EgIwAfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::ThreeSixty => "EgJ4AfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::VR180 => "EgPQAQHwAQE%3D",
+ Invidious::Search::Filters::Features::ThreeD => "EgI4AfABAQ%3D%3D",
+ Invidious::Search::Filters::Features::HDR => "EgPIAQHwAQE%3D",
+ Invidious::Search::Filters::Features::Location => "EgO4AQHwAQE%3D",
+ Invidious::Search::Filters::Features::Purchased => "EgJIAfABAQ%3D%3D",
}
SORT_FILTERS = {
- Invidious::Search::Filters::Sort::Relevance => "",
- Invidious::Search::Filters::Sort::Date => "CAI%3D",
- Invidious::Search::Filters::Sort::Views => "CAM%3D",
- Invidious::Search::Filters::Sort::Rating => "CAE%3D",
+ Invidious::Search::Filters::Sort::Relevance => "8AEB",
+ Invidious::Search::Filters::Sort::Date => "CALwAQE%3D",
+ Invidious::Search::Filters::Sort::Views => "CAPwAQE%3D",
+ Invidious::Search::Filters::Sort::Rating => "CAHwAQE%3D",
}
Spectator.describe Invidious::Search::Filters do
diff --git a/spec/invidious/videos/regular_videos_extract_spec.cr b/spec/invidious/videos/regular_videos_extract_spec.cr
index a6a3e60a..c647c1d1 100644
--- a/spec/invidious/videos/regular_videos_extract_spec.cr
+++ b/spec/invidious/videos/regular_videos_extract_spec.cr
@@ -67,7 +67,7 @@ Spectator.describe "parse_video_info" do
# Video metadata
expect(info["genre"].as_s).to eq("Entertainment")
- expect(info["genreUcid"].as_s).to be_empty
+ expect(info["genreUcid"].as_s?).to be_nil
expect(info["license"].as_s).to be_empty
# Author infos
@@ -151,7 +151,7 @@ Spectator.describe "parse_video_info" do
# Video metadata
expect(info["genre"].as_s).to eq("Music")
- expect(info["genreUcid"].as_s).to be_empty
+ expect(info["genreUcid"].as_s?).to be_nil
expect(info["license"].as_s).to be_empty
# Author infos
diff --git a/spec/invidious/videos/scheduled_live_extract_spec.cr b/spec/invidious/videos/scheduled_live_extract_spec.cr
index 25e08c51..c3a9b228 100644
--- a/spec/invidious/videos/scheduled_live_extract_spec.cr
+++ b/spec/invidious/videos/scheduled_live_extract_spec.cr
@@ -94,7 +94,7 @@ Spectator.describe "parse_video_info" do
# Video metadata
expect(info["genre"].as_s).to eq("Entertainment")
- expect(info["genreUcid"].as_s).to be_empty
+ expect(info["genreUcid"].as_s?).to be_nil
expect(info["license"].as_s).to be_empty
# Author infos