Path: blob/main/src/resources/extensions/quarto/video/_tests/test-suite.lua
12923 views
package.path = package.path .. ';../?.lua'1lu = require('luaunit')23video = require('video')4helpers = video['video-helpers']5VIDEO_TYPES = helpers.VIDEO_TYPES67TestModules = {}8function TestModules:testVideoExists()9lu.assertNotIsNil(video.video)10end1112function TestModules:testHelpersExist()13lu.assertNotIsNil(helpers)14end1516TestCheckMatchStart = {}17function TestCheckMatchStart:testEmpty()18local result = helpers.checkMatchStart('', '')19lu.assertEquals(result, '')20end2122function TestCheckMatchStart:testSimple()23local result = helpers.checkMatchStart('fake-src', 'fake')24lu.assertEquals(result, '-src')25end2627function TestCheckMatchStart:testNoMatch()28local result = helpers.checkMatchStart('123', '456')29lu.assertEquals(result, nil)30end3132function TestCheckMatchStart:testNoStartMatch()33local result = helpers.checkMatchStart('123456', '456')34lu.assertEquals(result, nil)35end3637function TestCheckMatchStart:testPartialMatch()38local result = helpers.checkMatchStart('456', '4')39lu.assertEquals(result, '56')40end4142TestYouTubeBuilder = {}43local checkYouTubeBuilder = function(params, expected)44result = helpers.youTubeBuilder(params)45lu.assertEquals(result, expected)46end4748function TestYouTubeBuilder:testemptySource()49local params = nil50local expected = nil51checkYouTubeBuilder(params, expected)52end5354function TestYouTubeBuilder:testnoSrcTable()55local params = { }56local expected = nil57checkYouTubeBuilder(params, expected)58end5960function TestYouTubeBuilder:testbadSrc()61local params = { src='faifail' }62local expected = nil63checkYouTubeBuilder(params, expected)64end6566function TestYouTubeBuilder:testvimeoSrc()67local params = { src='https://vimeo.com/548291210' }68local expected = nil69checkYouTubeBuilder(params, expected)70end7172local SIMPLE_YOUTUBE_EXPECTED = {73snippet = '<iframe data-external="1" src="https://www.youtube.com/embed/wo9vZccmqwc" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',74type = VIDEO_TYPES.YOUTUBE,75src = 'https://www.youtube.com/embed/wo9vZccmqwc',76videoId="wo9vZccmqwc"}7778function TestYouTubeBuilder:testEmbedURL()79local params = {80src = 'https://www.youtube.com/embed/wo9vZccmqwc'81}82local expected = SIMPLE_YOUTUBE_EXPECTED83checkYouTubeBuilder(params, expected)84end8586function TestYouTubeBuilder:testShareURL()87local params = {88src = 'https://youtu.be/wo9vZccmqwc'89}90local expected = SIMPLE_YOUTUBE_EXPECTED91checkYouTubeBuilder(params, expected)92end9394function TestYouTubeBuilder:testShareURL()95local params = {96src = 'https://youtu.be/wo9vZccmqwc'97}98local expected = SIMPLE_YOUTUBE_EXPECTED99checkYouTubeBuilder(params, expected)100end101102function TestYouTubeBuilder:testWebURL()103local params = {104src = 'https://www.youtube.com/watch?v=wo9vZccmqwc&ab_channel=CERN'105}106local expected = SIMPLE_YOUTUBE_EXPECTED107checkYouTubeBuilder(params, expected)108end109110function TestYouTubeBuilder:testTitle()111local params = {112src = 'https://www.youtube.com/embed/wo9vZccmqwc',113title = 'fake-title',114}115local expected = {snippet = '<iframe data-external="1" src="https://www.youtube.com/embed/wo9vZccmqwc" title="fake-title" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',116type = VIDEO_TYPES.YOUTUBE, src='https://www.youtube.com/embed/wo9vZccmqwc', videoId = 'wo9vZccmqwc'117}118checkYouTubeBuilder(params, expected)119end120121function TestYouTubeBuilder:testStartTime()122local params = {123src = 'https://www.youtube.com/embed/wo9vZccmqwc',124start = 10,125}126local expected = {snippet = '<iframe data-external="1" src="https://www.youtube.com/embed/wo9vZccmqwc?start=10" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.YOUTUBE, src='https://www.youtube.com/embed/wo9vZccmqwc', videoId = 'wo9vZccmqwc'}127checkYouTubeBuilder(params, expected)128end129130function TestYouTubeBuilder:testHeightWidth()131local params = {132src = 'https://www.youtube.com/embed/wo9vZccmqwc',133height = 100,134width = 200,135}136local expected = {snippet = '<iframe data-external="1" src="https://www.youtube.com/embed/wo9vZccmqwc" width="200" height="100" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.YOUTUBE,137src = 'https://www.youtube.com/embed/wo9vZccmqwc', videoId = 'wo9vZccmqwc'}138checkYouTubeBuilder(params, expected)139end140141function TestYouTubeBuilder:testAriaLabel()142local params = {143src = 'https://www.youtube.com/embed/wo9vZccmqwc',144ariaLabel = 'Video demonstration of features',145}146local expected = {snippet = '<iframe data-external="1" src="https://www.youtube.com/embed/wo9vZccmqwc" title="" aria-label="Video demonstration of features" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.YOUTUBE, src='https://www.youtube.com/embed/wo9vZccmqwc', videoId = 'wo9vZccmqwc'}147checkYouTubeBuilder(params, expected)148end149150TestBrightcoveBuilder = {}151local checkBrightcoveBuilder = function(params, expected)152result = helpers.brightcoveBuilder(params)153lu.assertEquals(result, expected)154end155156function TestBrightcoveBuilder:testemptySource()157local params = nil158local expected = nil159checkBrightcoveBuilder(params, expected)160end161162function TestBrightcoveBuilder:testnoSrcTable()163local params = { }164local expected = nil165checkBrightcoveBuilder(params, expected)166end167168function TestBrightcoveBuilder:testbadSrc()169local params = { src='faifail' }170local expected = nil171checkBrightcoveBuilder(params, expected)172end173174function TestBrightcoveBuilder:testvimeoSrc()175local params = { src='https://vimeo.com/548291210' }176local expected = nil177checkBrightcoveBuilder(params, expected)178end179180function TestBrightcoveBuilder:testBasic()181local params = {182src = 'https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001'183}184local expected = {185snippet = '<iframe data-external="1" src="https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001" allowfullscreen="" title="" allow="encrypted-media"></iframe>',186type = VIDEO_TYPES.BRIGHTCOVE, src='https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001' }187checkBrightcoveBuilder(params, expected)188end189190function TestBrightcoveBuilder:testYouTubeShareURL()191local params = {192src = 'https://youtu.be/wo9vZccmqwc'193}194local expected = nil195checkBrightcoveBuilder(params, expected)196end197198function TestBrightcoveBuilder:testTitle()199local params = {200src = 'https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001',201title = 'fake-title',202}203local expected = {snippet = '<iframe data-external="1" src="https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001" allowfullscreen="" title="fake-title" allow="encrypted-media"></iframe>', type = VIDEO_TYPES.BRIGHTCOVE, src='https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001' }204checkBrightcoveBuilder(params, expected)205end206207function TestBrightcoveBuilder:testHeightWidth()208local params = {209src = 'https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001',210height = 100,211width = 200,212}213local expected = {snippet = '<iframe data-external="1" src="https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001" width="200" height="100" allowfullscreen="" title="" allow="encrypted-media"></iframe>', type = VIDEO_TYPES.BRIGHTCOVE, src='https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001' }214checkBrightcoveBuilder(params, expected)215end216217function TestBrightcoveBuilder:testAriaLabel()218local params = {219src = 'https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001',220ariaLabel = 'Video demonstration of features',221}222local expected = {snippet = '<iframe data-external="1" src="https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001" allowfullscreen="" title="" aria-label="Video demonstration of features" allow="encrypted-media"></iframe>', type = VIDEO_TYPES.BRIGHTCOVE, src='https://players.brightcove.net/1460825906/default_default/index.html?videoId=5988531335001' }223checkBrightcoveBuilder(params, expected)224end225226TestVimeoBuilder = {}227local checkVimeoBuilder = function(params, expected)228result = helpers.vimeoBuilder(params)229lu.assertEquals(result, expected)230end231232function TestVimeoBuilder:testemptySource()233local params = nil234local expected = nil235checkVimeoBuilder(params, expected)236end237238function TestVimeoBuilder:testnoSrcTable()239local params = { }240local expected = nil241checkVimeoBuilder(params, expected)242end243244function TestVimeoBuilder:testbadSrc()245local params = { src='faifail' }246local expected = nil247checkVimeoBuilder(params, expected)248end249250function TestVimeoBuilder:testYouTubeSrc()251local params = { src='https://www.youtube.com/embed/wo9vZccmqwc' }252local expected = nil253checkVimeoBuilder(params, expected)254end255256function TestVimeoBuilder:testBasic()257local params = {258src = 'https://vimeo.com/548291210'259}260local expected = {261snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210" frameborder="0" allow="autoplay; title="" fullscreen; picture-in-picture" allowfullscreen></iframe>',262type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210', videoId = '548291210' }263264checkVimeoBuilder(params, expected)265end266267function TestVimeoBuilder:testInternal()268local params = {269src = 'https://vimeo.com/548291210/fdcc90d662'270}271local expected = {272snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210?h=fdcc90d662" frameborder="0" allow="autoplay; title="" fullscreen; picture-in-picture" allowfullscreen></iframe>',273type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210?h=fdcc90d662', videoId = '548291210' }274275checkVimeoBuilder(params, expected)276end277278function TestVimeoBuilder:testInternal_shareCopy()279local params = {280src = 'https://vimeo.com/548291210/fdcc90d662?share=copy'281}282local expected = {283snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210?h=fdcc90d662" frameborder="0" allow="autoplay; title="" fullscreen; picture-in-picture" allowfullscreen></iframe>',284type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210?h=fdcc90d662', videoId = '548291210' }285286checkVimeoBuilder(params, expected)287end288289function TestVimeoBuilder:testTitle()290local params = {291src = 'https://vimeo.com/548291210',292title = 'fake-title'293}294local expected = {snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210" frameborder="0" allow="autoplay; title="fake-title" fullscreen; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210', videoId = '548291210' }295checkVimeoBuilder(params, expected)296end297298function TestVimeoBuilder:testHeightWidth()299local params = {300src = 'https://vimeo.com/548291210',301height = 100,302width = 200,303}304local expected = {snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210" width="200" height="100" frameborder="0" allow="autoplay; title="" fullscreen; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210', videoId = '548291210' }305checkVimeoBuilder(params, expected)306end307308function TestVimeoBuilder:testAriaLabel()309local params = {310src = 'https://vimeo.com/548291210',311ariaLabel = 'Video demonstration of features',312}313local expected = {snippet = '<iframe data-external="1" src="https://player.vimeo.com/video/548291210" frameborder="0" title="" aria-label="Video demonstration of features" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>', type = VIDEO_TYPES.VIMEO, src='https://player.vimeo.com/video/548291210', videoId = '548291210' }314checkVimeoBuilder(params, expected)315end316317TestVideoJSBuilder = {}318local checkVideoJSBuilder = function(params, expected)319VIDEO_SHORTCODE_NUM_VIDEOJS = 0 -- Reset Counter320result = helpers.videoJSBuilder(params)321lu.assertEquals(result, expected)322end323324function TestVideoJSBuilder:testemptySource()325local params = nil326local expected = nil327checkVideoJSBuilder(params, expected)328end329330function TestVideoJSBuilder:testnoSrcTable()331local params = { }332local expected = nil333checkVideoJSBuilder(params, expected)334end335336function TestVideoJSBuilder:testBasic()337local params = {338id = 1,339src = './intro-cern.mp4'340}341local expected = {342id="video_shortcode_videojs_video1",343snippet="<video id=\"video_shortcode_videojs_video1\" class=\"video-js vjs-default-skin vjs-fluid\" controls preload=\"auto\" data-setup='{}' title=\"\"><source src=\"./intro-cern.mp4\"></video>",344type="VIDEOJS",345src='./intro-cern.mp4'346}347348checkVideoJSBuilder(params, expected)349end350351function TestVideoJSBuilder:testDropBox()352local params = {353id = 1,354src = 'https://www.dropbox.com/s/h3ezvnpyn8xe5ch/Section1_4_c.mp4?raw=1'355}356local expected = {357id="video_shortcode_videojs_video1",358snippet="<video id=\"video_shortcode_videojs_video1\" class=\"video-js vjs-default-skin vjs-fluid\" controls preload=\"auto\" data-setup='{}' title=\"\"><source src=\"https://www.dropbox.com/s/h3ezvnpyn8xe5ch/Section1_4_c.mp4?raw=1\"></video>",359type="VIDEOJS",360src='https://www.dropbox.com/s/h3ezvnpyn8xe5ch/Section1_4_c.mp4?raw=1'361}362363checkVideoJSBuilder(params, expected)364end365366function TestVideoJSBuilder:testTitle()367local params = {368title = 'test-title',369src = './intro-cern.mp4'370}371local expected = {372snippet="<video id=\"video_shortcode_videojs_video1\" class=\"video-js vjs-default-skin vjs-fluid\" controls preload=\"auto\" data-setup='{}' title=\"test-title\"><source src=\"./intro-cern.mp4\"></video>",373type="VIDEOJS",374src='./intro-cern.mp4',375id="video_shortcode_videojs_video1"376}377checkVideoJSBuilder(params, expected)378end379380function TestVideoJSBuilder:testHeightWidth()381local params = {382id = 1,383height = 100,384width = 200,385src = './intro-cern.mp4'386}387local expected = {388id="video_shortcode_videojs_video1",389snippet="<video id=\"video_shortcode_videojs_video1\" width=\"200\" height=\"100\" class=\"video-js vjs-default-skin \" controls preload=\"auto\" data-setup='{}' title=\"\"><source src=\"./intro-cern.mp4\"></video>",390type="VIDEOJS",391src="./intro-cern.mp4"392}393394checkVideoJSBuilder(params, expected)395end396397function TestVideoJSBuilder:testAriaLabel()398local params = {399ariaLabel = 'Video demonstration of features',400src = './intro-cern.mp4'401}402local expected = {403snippet="<video id=\"video_shortcode_videojs_video1\" class=\"video-js vjs-default-skin vjs-big-play-centered vjs-fluid\" controls preload=\"auto\" data-setup='{}' title=\"\" aria-label=\"Video demonstration of features\"><source src=\"./intro-cern.mp4\"></video>",404type="VIDEOJS",405src='./intro-cern.mp4',406id="video_shortcode_videojs_video1"407}408checkVideoJSBuilder(params, expected)409end410411TestVideoResponsive = {}412function TestVideoResponsive:testNoResponsive()413result = helpers.wrapWithDiv('fake-to-wrap')414expected = '<div class="quarto-video">fake-to-wrap</div>'415lu.assertEquals(result, expected)416end417418function TestVideoResponsive:testValid()419result = helpers.wrapWithDiv('fake-to-wrap', nil, true)420expected = '<div class="quarto-video ratio ratio-16x9">fake-to-wrap</div>'421lu.assertEquals(result, expected)422end423424function TestVideoResponsive:testValid_43()425result = helpers.wrapWithDiv('fake-to-wrap', '4x3', true)426expected = '<div class="quarto-video ratio ratio-4x3">fake-to-wrap</div>'427lu.assertEquals(result, expected)428end429430function TestVideoResponsive:testValid_11()431result = helpers.wrapWithDiv('fake-to-wrap', '1x1', true)432expected = '<div class="quarto-video ratio ratio-1x1">fake-to-wrap</div>'433lu.assertEquals(result, expected)434end435436function TestVideoResponsive:testValid_219()437result = helpers.wrapWithDiv('fake-to-wrap', '21x9', true)438expected = '<div class="quarto-video ratio ratio-21x9">fake-to-wrap</div>'439lu.assertEquals(result, expected)440end441442TestHelperConvertURL = {}443function TestHelperConvertURL:testCanLoadModule()444--helper.helloWorld()445end446447TestAsciidocVideo = {}448function TestAsciidocVideo:testYoutube()449result = formatAsciiDocVideo('qItugh-fFgg', 'youtube')450expected = 'video::qItugh-fFgg[youtube]'451lu.assertEquals(result, expected)452end453454function TestAsciidocVideo:testVimeo()455result = formatAsciiDocVideo('783455773', 'vimeo')456expected = 'video::783455773[vimeo]'457lu.assertEquals(result, expected)458end459460function TestAsciidocVideo:textLocal()461result = formatAsciiDocVideo('foo/bar.mp4', '')462expected = 'video::foo/bar.mp4[]'463lu.assertEquals(result, expected)464end465466os.exit(lu.LuaUnit.run())467468469