From a6abd8dc822fb70852437ab5a77ced5f633739f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= Date: Sun, 8 Feb 2015 03:42:39 -0200 Subject: [PATCH] Imported Upstream version 2015.02.06 --- Makefile | 5 +- README.md | 83 +++- README.txt | 105 ++++- devscripts/release.sh | 8 +- docs/supportedsites.md | 61 ++- test/helper.py | 24 +- test/swftests/ArrayAccess.swf | Bin 608 -> 610 bytes test/swftests/ClassCall.swf | Bin 582 -> 581 bytes test/swftests/ClassConstruction.swf | Bin 555 -> 552 bytes test/swftests/ConstArrayAccess.swf | Bin 628 -> 625 bytes test/swftests/ConstantInt.swf | Bin 519 -> 517 bytes test/swftests/DictCall.swf | Bin 547 -> 546 bytes test/swftests/EqualsOperator.swf | Bin 508 -> 510 bytes test/swftests/LocalVars.swf | Bin 515 -> 516 bytes test/swftests/MemberAssignment.swf | Bin 558 -> 557 bytes test/swftests/NeOperator.swf | Bin 537 -> 536 bytes test/swftests/PrivateCall.swf | Bin 594 -> 596 bytes test/swftests/PrivateVoidCall.swf | Bin 602 -> 599 bytes test/swftests/StaticAssignment.swf | Bin 516 -> 517 bytes test/swftests/StaticRetrieval.swf | Bin 518 -> 517 bytes test/swftests/StringBasics.swf | Bin 519 -> 522 bytes test/swftests/StringCharCodeAt.swf | Bin 555 -> 553 bytes test/swftests/StringConversion.swf | Bin 531 -> 529 bytes test/test_YoutubeDL.py | 55 +++ test/test_all_urls.py | 15 - test/test_download.py | 4 +- test/test_http.py | 72 ++++ test/test_jsinterp.py | 95 +++++ test/test_utils.py | 43 ++ test/testcert.pem | 52 +++ test/video-vid.mp4 | Bin 0 -> 14 bytes youtube-dl | Bin 744198 -> 773892 bytes youtube-dl.1 | 111 +++++- youtube-dl.bash-completion | 2 +- youtube-dl.fish | 16 +- youtube-dl.zsh | 2 +- youtube_dl/YoutubeDL.py | 296 +++++++++++--- youtube_dl/__init__.py | 29 +- youtube_dl/compat.py | 44 ++- youtube_dl/downloader/__init__.py | 42 +- youtube_dl/downloader/common.py | 59 ++- youtube_dl/downloader/external.py | 126 ++++++ youtube_dl/downloader/f4m.py | 29 +- youtube_dl/downloader/hls.py | 16 +- youtube_dl/downloader/http.py | 20 +- youtube_dl/downloader/rtmp.py | 26 +- youtube_dl/extractor/__init__.py | 38 +- youtube_dl/extractor/abc7news.py | 68 ++++ youtube_dl/extractor/aftonbladet.py | 6 +- youtube_dl/extractor/appletrailers.py | 5 +- youtube_dl/extractor/ard.py | 8 +- youtube_dl/extractor/atresplayer.py | 31 +- youtube_dl/extractor/audiomack.py | 13 +- youtube_dl/extractor/auengine.py | 50 --- youtube_dl/extractor/bbccouk.py | 5 +- youtube_dl/extractor/bliptv.py | 2 +- youtube_dl/extractor/brightcove.py | 2 +- youtube_dl/extractor/cinchcast.py | 8 +- youtube_dl/extractor/cliphunter.py | 60 ++- youtube_dl/extractor/cnn.py | 12 +- youtube_dl/extractor/comedycentral.py | 41 +- youtube_dl/extractor/common.py | 67 +++- youtube_dl/extractor/ctsnews.py | 93 +++++ youtube_dl/extractor/dctp.py | 57 +++ youtube_dl/extractor/defense.py | 34 +- youtube_dl/extractor/drtv.py | 22 +- youtube_dl/extractor/fc2.py | 58 ++- youtube_dl/extractor/folketinget.py | 4 +- youtube_dl/extractor/franceculture.py | 72 ++-- youtube_dl/extractor/francetv.py | 13 +- youtube_dl/extractor/gamestar.py | 6 +- youtube_dl/extractor/generic.py | 67 +++- youtube_dl/extractor/globo.py | 28 +- youtube_dl/extractor/grooveshark.py | 2 +- youtube_dl/extractor/hearthisat.py | 117 ++++++ youtube_dl/extractor/historicfilms.py | 46 +++ youtube_dl/extractor/ivi.py | 27 +- youtube_dl/extractor/kankan.py | 6 +- youtube_dl/extractor/keezmovies.py | 16 +- youtube_dl/extractor/krasview.py | 22 +- youtube_dl/extractor/la7.py | 9 +- youtube_dl/extractor/liveleak.py | 23 +- youtube_dl/extractor/lnkgo.py | 61 ++- youtube_dl/extractor/lynda.py | 1 + youtube_dl/extractor/macgamestore.py | 17 +- youtube_dl/extractor/mixcloud.py | 33 +- youtube_dl/extractor/mpora.py | 16 +- youtube_dl/extractor/mtv.py | 70 ++-- youtube_dl/extractor/nbc.py | 24 +- youtube_dl/extractor/ndtv.py | 4 +- youtube_dl/extractor/nerdcubed.py | 1 + youtube_dl/extractor/nerdist.py | 80 ++++ youtube_dl/extractor/nextmedia.py | 163 ++++++++ youtube_dl/extractor/nfl.py | 19 +- youtube_dl/extractor/nhl.py | 46 ++- youtube_dl/extractor/normalboots.py | 27 +- youtube_dl/extractor/npo.py | 15 +- youtube_dl/extractor/ntvde.py | 68 ++++ youtube_dl/extractor/{ntv.py => ntvru.py} | 9 +- youtube_dl/extractor/pornhub.py | 10 + youtube_dl/extractor/ringtv.py | 5 +- youtube_dl/extractor/rottentomatoes.py | 3 +- youtube_dl/extractor/rtl2.py | 72 ++++ youtube_dl/extractor/rtp.py | 1 + youtube_dl/extractor/rts.py | 28 +- youtube_dl/extractor/rtve.py | 20 +- youtube_dl/extractor/rutv.py | 6 +- youtube_dl/extractor/servingsys.py | 19 +- youtube_dl/extractor/sina.py | 11 +- youtube_dl/extractor/smotri.py | 6 +- youtube_dl/extractor/soundcloud.py | 3 +- youtube_dl/extractor/spiegel.py | 20 +- youtube_dl/extractor/spike.py | 11 +- youtube_dl/extractor/srmediathek.py | 2 +- youtube_dl/extractor/streetvoice.py | 51 +++ youtube_dl/extractor/teamcoco.py | 8 +- youtube_dl/extractor/teletask.py | 2 +- youtube_dl/extractor/testtube.py | 72 ++++ youtube_dl/extractor/tinypic.py | 26 +- youtube_dl/extractor/toutv.py | 3 +- youtube_dl/extractor/tvp.py | 37 +- youtube_dl/extractor/tweakers.py | 65 +++ youtube_dl/extractor/twitch.py | 461 ++++++++++++++-------- youtube_dl/extractor/ubu.py | 27 +- youtube_dl/extractor/vevo.py | 25 +- youtube_dl/extractor/viddler.py | 63 ++- youtube_dl/extractor/videomega.py | 14 +- youtube_dl/extractor/videott.py | 9 +- youtube_dl/extractor/vimeo.py | 3 +- youtube_dl/extractor/washingtonpost.py | 34 +- youtube_dl/extractor/wdr.py | 7 +- youtube_dl/extractor/wsj.py | 89 +++++ youtube_dl/extractor/xuite.py | 142 +++++++ youtube_dl/extractor/youtube.py | 61 ++- youtube_dl/jsinterp.py | 172 +++++--- youtube_dl/options.py | 57 ++- youtube_dl/postprocessor/__init__.py | 2 + youtube_dl/postprocessor/ffmpeg.py | 25 +- youtube_dl/utils.py | 119 ++++-- youtube_dl/version.py | 2 +- 140 files changed, 3986 insertions(+), 1039 deletions(-) create mode 100644 test/test_http.py create mode 100644 test/test_jsinterp.py create mode 100644 test/testcert.pem create mode 100644 test/video-vid.mp4 create mode 100644 youtube_dl/downloader/external.py create mode 100644 youtube_dl/extractor/abc7news.py delete mode 100644 youtube_dl/extractor/auengine.py create mode 100644 youtube_dl/extractor/ctsnews.py create mode 100644 youtube_dl/extractor/dctp.py create mode 100644 youtube_dl/extractor/hearthisat.py create mode 100644 youtube_dl/extractor/historicfilms.py create mode 100644 youtube_dl/extractor/nerdist.py create mode 100644 youtube_dl/extractor/nextmedia.py create mode 100644 youtube_dl/extractor/ntvde.py rename youtube_dl/extractor/{ntv.py => ntvru.py} (97%) create mode 100644 youtube_dl/extractor/rtl2.py create mode 100644 youtube_dl/extractor/streetvoice.py create mode 100644 youtube_dl/extractor/testtube.py create mode 100644 youtube_dl/extractor/tweakers.py create mode 100644 youtube_dl/extractor/wsj.py create mode 100644 youtube_dl/extractor/xuite.py diff --git a/Makefile b/Makefile index 5780798..0636fc4 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,7 @@ all: youtube-dl README.md CONTRIBUTING.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish supportedsites clean: - rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish *.dump *.part *.info.json CONTRIBUTING.md.tmp - -cleanall: clean - rm -f youtube-dl youtube-dl.exe + rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish *.dump *.part *.info.json *.mp4 *.flv *.mp3 CONTRIBUTING.md.tmp youtube-dl youtube-dl.exe PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin diff --git a/README.md b/README.md index 078e9df..06dea40 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,14 @@ which means you can modify it, redistribute it or use it however you like. ## Video Selection: --playlist-start NUMBER playlist video to start at (default is 1) --playlist-end NUMBER playlist video to end at (default is last) + --playlist-items ITEM_SPEC playlist video items to download. Specify + indices of the videos in the playlist + seperated by commas like: "--playlist-items + 1,2,5,8" if you want to download videos + indexed 1, 2, 5, 8 in the playlist. You can + specify range: "--playlist-items + 1-3,7,10-13", it will download the videos + at index 1, 2, 3, 7, 10, 11, 12 and 13. --match-title REGEX download only matching titles (regex or caseless sub-string) --reject-title REGEX skip download for matching titles (regex or @@ -124,7 +132,8 @@ which means you can modify it, redistribute it or use it however you like. ## Download Options: -r, --rate-limit LIMIT maximum download rate in bytes per second (e.g. 50K or 4.2M) - -R, --retries RETRIES number of retries (default is 10) + -R, --retries RETRIES number of retries (default is 10), or + "infinite". --buffer-size SIZE size of download buffer (e.g. 1024 or 16K) (default is 1024) --no-resize-buffer do not automatically adjust the buffer @@ -132,6 +141,11 @@ which means you can modify it, redistribute it or use it however you like. automatically resized from an initial value of SIZE. --playlist-reverse Download playlist videos in reverse order + --xattr-set-filesize (experimental) set file xattribute + ytdl.filesize with expected filesize + --external-downloader COMMAND (experimental) Use the specified external + downloader. Currently supports + aria2c,curl,wget ## Filesystem Options: -a, --batch-file FILE file containing URLs to download ('-' for @@ -191,7 +205,6 @@ which means you can modify it, redistribute it or use it however you like. --write-info-json write video metadata to a .info.json file --write-annotations write video annotations to a .annotation file - --write-thumbnail write thumbnail image to disk --load-info FILE json file containing the video information (created with the "--write-json" option) --cookies FILE file to read cookies from and dump cookie @@ -206,6 +219,12 @@ which means you can modify it, redistribute it or use it however you like. --no-cache-dir Disable filesystem caching --rm-cache-dir Delete all filesystem cache files +## Thumbnail images: + --write-thumbnail write thumbnail image to disk + --write-all-thumbnails write all thumbnail image formats to disk + --list-thumbnails Simulate and list all available thumbnail + formats + ## Verbosity / Simulation Options: -q, --quiet activates quiet mode --no-warnings Ignore warnings @@ -259,6 +278,8 @@ which means you can modify it, redistribute it or use it however you like. --bidi-workaround Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH + --sleep-interval SECONDS Number of seconds to sleep before each + download. ## Video Format Options: -f, --format FORMAT video format code, specify the order of @@ -267,10 +288,22 @@ which means you can modify it, redistribute it or use it however you like. by extension for the extensions aac, m4a, mp3, mp4, ogg, wav, webm. You can also use the special names "best", "bestvideo", - "bestaudio", "worst". By default, youtube- - dl will pick the best quality. Use commas - to download multiple audio formats, such as - -f + "bestaudio", "worst". You can filter the + video results by putting a condition in + brackets, as in -f "best[height=720]" (or + -f "[filesize>10M]"). This works for + filesize, height, width, tbr, abr, vbr, and + fps and the comparisons <, <=, >, >=, =, != + . Formats for which the value is not known + are excluded unless you put a question mark + (?) after the operator. You can combine + format filters, so -f "[height <=? + 720][tbr>500]" selects up to 720p videos + (or videos where the height is not known) + with a bitrate of at least 500 KBit/s. By + default, youtube-dl will pick the best + quality. Use commas to download multiple + audio formats, such as -f 136/137/mp4/bestvideo,140/m4a/bestaudio. You can merge the video and audio of two formats into a single file using -f 10M]"). This works for + filesize, height, width, tbr, abr, vbr, and + fps and the comparisons <, <=, >, >=, =, != + . Formats for which the value is not known + are excluded unless you put a question mark + (?) after the operator. You can combine + format filters, so -f "[height <=? + 720][tbr>500]" selects up to 720p videos + (or videos where the height is not known) + with a bitrate of at least 500 KBit/s. By + default, youtube-dl will pick the best + quality. Use commas to download multiple + audio formats, such as -f 136/137/mp4/bestvideo,140/m4a/bestaudio. You can merge the video and audio of two formats into a single file using -f r4=6I1`m9+Pwh8+Z>S#1pV*k60u{f;}tVfkl~dOB1mCch8*r`S{Kh z$WMT?9|6`83|21z!0WXy2%wjFe)s8MXiTFp&by-8u8%o6PrIf$nM|6K&1RB~%vPt< zF|D@QZa0LZksrjIP8)H4qi&ag0n6PiNO_RNhODWR6nwj0KcRZ=DUr7!CT-;7#ND6J zSFGWOG#~fOg;DnKfQQWPdx^u0VaTS&Eu+8aFWtwH{vm&uWp)wo$I0aQ6AM*(+>BA4 z{OkCu$@P%Nqk@i@eSfE1JFUx%lrwwC9AoRI(Y9J!$0?-PGyfa*i6ZvThC%HY?!i6f z=;&y71&a;V#6`6CyHFnQet&xLSZw&$m424dgTCvsJcrNcJ3L#4$FVeEcIwloR`ey$R`mE;%g^UTuiY4Y}0I8)@{=%f{+KX7P5H6$CV3cov5I~ zMO3L=CW?*`Q8h)c>PXQM))CQ>s$)$@`W2+3sw!h3B%&z@DX=&YCRGJ6QV}SCv{j4{ z5gHO`B%XL?J&-1hNo{7$?!p`V{cyga3{~Z!U|~d+sMlxKd;@&_?T`84+^>8PZ!Qsv yL#RGK{3dR~DY2?12#-MUhzNnt%`66c#M&dz;p!L*xwa-pw>;20qW%Lc0Ls$+YcnEEDrOwtu>cn~DS1MmXfBNj=JV9$!TC^K$p0+w&*pZ|RReP#mW z7r@2O0P6?_tJeVF-P%_K(91l(`*N^jOrkK(yQ12zk2p^tyQVoFkDKGoW|9rfR;SZ3 zt+v^2H-w{+AH|$b8gYKNk)RX=qk8T+k+>lyY2>5CJsi`wtl@_=AN9-ek5^^nHHf)1JeWUpL1 zugi>-GkcfD#@0QfZME*7rjTOK{BPK2ir7CJ2DRU~2alDLlau`_78|UIi)bJBp*(IL z9e>#s8~&}@&oX+{cU_j}aD2HVG;xBT(TKI622JU%f?C?Ny&`g0c7I{1M|os)o1hX;wGFDt7?Mq90ZSu g5cty6VsJpL1M(Vfjj)hwYjSkU1AQp!KYA~rsTj<07HK>q;jd;_Q=815Yaz~{;p0_eq#+kG<} z>5G{kBweZc^{Eh1*D&Vud2@c$4C9H>>U27W**4nkh9nxvr++}OMI%Ta)~!5X$P+vE zBH@LBo@q7?Q_-*2Z&Dq56B?zlpGP{j!F@jCfk=#2vn7KZyX%JWj0uZHk?+|oi!&CD zWE$ERbM}!pT%RS=o>73AM|i^L)`=62xjypwLVv8E6#krEBN^-zgIZg^$uf7-4rfLb zhfZqCnOqr_n}4@0SwxhMeJ`2v*h+(oAe^s1QB*U=jyV(IUE;Qu^?ephQa0h%)7N=# zqw^V=;MRzb_2Wl++iV@Lr^t#u!xr@nw`9A#I@5_q3z>V3Aw_q2V8CwG41vH|x0oBv-2X2e>e5`k011-9L#0J2EzRp+mo;=LN#zcyN+Wr&G&!6T^PIee!zsRf WM~71?k)295b+M&Sr1}TQ73pL}YzsF4 delta 533 zcmV+w0_y$61jYoA8Gl-#RH%|AB4tBjCzM5^#G*AdNo&wsACxO`MfcI-U#EV(QLQdhS@S&t-2)Y$$ytXuthycp4O~9V89bQ z_9Eehfu3nL4pY&q)$URqdlMR^v7bjew!wWqWLfL7jyQR*C#$p+^$i8nMZiS=hlf6j=4Vc`9eR|PYQoduaOLPib1Wd-(;D)VTUs# zibE&0(#rw zx6%2GOmJ(&0{!@z-ZGmn)>CA~uJPYy-&N%KSuoiBOS;gF?XBQ#}|e_)VTo6?JJY-+}~5;i1x^l$Pf0ud6D$lBDv0RHczTS(+TqiFr;wz>$mZ X-_emvC9<=hO6a zu|h>io!FDu)b?2R7>5=73LE}_HG5VO5U&qFX^};>rSDlRVlhiZZaJnSjeM^^ zi+cp0OD-(+0& zDm7ppE|;e} zSPoc|FVVi9LcMmkzQ21Z2mWhkC~q+z@+23TJgIbnAGezlkq=BW8Z!s>z^pV|fWt&I zHU!%1$p_{MJm&oF258d!(CJHv#57FQCTd|7S{i6NQgnoMM0Bj`NZ0CE2sW3Z;B5sI zAb6VqksP&w5tf^x5CnuMNCSj0!3+DTM3I8Y?!tagUJ&>~ejma!X@L+?wS~QS4w8b` qY;proB@f?Q*bL6FeTLt{L7-fIql17*N^`%8xOr!fW%nPY<>@{GfC1$I delta 543 zcmV+)0^t3q1givpLswG{UIPFCc-m!AO>Wab6n^6w+q4p>RZ$c`l`K&y8{(f(7Ku`e zDj`4?AhAM~kUFs^v8nB`>@f~2Sh3{{Y&ZZH=$=)C#06M!i!gTDrX?d=GUjoV;+LF=EKPH0C+e!Yg<<k3O!oc zS@U)taPO?7A6R=D(LCr|YhtAlp@^7!?DGjTMiHAEhsN<*U$a+~itMk0y4Q|LE4AtI z*h(|*7oN;Cl~%R*x}>s5i%Asb0n6MXIZJrC`o+3ialDLC!EZ7ydleqhWLD4_bDzDc zv8%eyNCk7pG%*f;9~m9nd9q4THT%|omwnNZ^K)Ui^B4DFpe&cmlWi;qtjU*X-%g-j zU%#CH7|VhG+8)ST%m+NlMJ7)wUEus~Ln88lX+~q_zz&#|<`&>E5xW}#?e*k6^8_Ao zet!crX@21JBt&8wCTasUu?kHMG#x2A!a5>4R&}Inbu0v8n@dsfmI4Y8yhVUWj=GBx zmYbpw1cWF^1B5Wa3;Vf5k%GzXh5e3<34A8M58#EgK!~W?!d|=tNx^G2xdEt>haW6# h2B+9Q#cyFhP%gjGen2Fpu~$XhytAjW`wxlt>Zwh1|A7Di diff --git a/test/swftests/ConstArrayAccess.swf b/test/swftests/ConstArrayAccess.swf index 0d902fd30f6775762bb0b454271649a273f05690..1acf40a0fdbd69259ec88aaed151f2fdf513659f 100644 GIT binary patch delta 615 zcmV-t0+{{u1n~rr6@MPIv?`ARLNcOKHcjlLEvQjy5gGyr0TM_E6{+gP8ONrMZP^o& zuHaYL@CU5fvq~5I04x5YT)Syg%E%+@o_o%jJNM26l-~f0-vCw#be3-cz~_~p1fZ4l z-R7H4*O&~0Fl}PAQ}LvXo2EG)k89(NT9gdT`u6s=X*JA7qkoEwYI+n(KBN`z0N`_q8JdOk3 z;hCK|sit1!9FF-XQFQ~JdM$HK%rw%Mfw0^Cs3(kWASTA9(Vpvb_9-PJ_veM$7p}=O zbRYE(WMIp@)a)68^RuC|^oO-zm!6!Q?3EY}Si`Mo zU-uwi4;R0Gc!2{yF6~BPD%(lIkJ^qS(iDDNdx;7Bz<*8nP}E@wYCtKz7hrxUmo5vm z*S(Lzk;Ekv$`duuC`0atbhDvsY}V`dX04sKwf%O(Y*^L4#b%!h!S(H^?ee zL4}*7aOF0mIwOjzQN64asuQLYMJKAxG@a=>Dd?nlhZGlxnqP>__Sqto6)B(r0sN^N zA%tn@1z?3`Mi8Z#P%+Pxm8rF_u2E0j*Vaqx<#*K6o}wNNl!d7^eGFgduj8%)&j7oC z1(m1Pfwo56qFX{JGgCF>JqJ`N6py(&wFDe6>wvw7yB1%Ax-_RF(>945r~l4JvSP#+IGk$wRWvH*B9(lN=|m?h1wUc zNpp46iAF}8M1OAP$eKK9RfsQ2a*H?{ghA@F#LoBukH)7*%+Z|VB#esaU&a}h=R?Ye z867hF>8m1l9v3xI!R#H%YwfjK%d{SzR*{2U<5II{h@77d{pugmg)Mw?a#8c5r5_;Hk9G0eVbp54F$bS#KgpQa6RcHdn^1T2FxTszh zXs-t!nIn*gCYUB_kx@o8;JDpV*4vhKf7aT0TYGQUjh1OXG6q=?ihye&<3r(>ZlV>U zf(o}#>B=2~b%GRC!}@}bu#Sk16dkEL(R8BgsHCIvT~uB~YH=Yn+h+@5QpO++5XhgZ zA%ut~yV4s-#BkcM3qIHJ EtP0gGvH$=8 diff --git a/test/swftests/ConstantInt.swf b/test/swftests/ConstantInt.swf index b8bd0cb97124c000374cba1c8da50747718dab13..8c0359db672abbb7a5ddb1f879d47065a511bde3 100644 GIT binary patch literal 517 zcmV+g0{ZA^h!_;mOK0gN+07`>j(>?(;xKGNu{6DpOCC@ssfSDy4_wxs>xa7dj29Spi!(ak>! z#j38zA9UO%V9IkZi&7OyVb_=~WTDPFo$FNJy9rH;EN&uwkMfu&T&SG(dwm_`d!s;R z2~#dh(>U^29Y?Ef9!l@3WFL4ph*=(v=~h^KRHS0=p8Ima?ODt#`>}n#^*8E`q!#O^YpCYrKpzCI40Y}y8v&xL9GHy*>pSg+TY`&cj7 z)R&l_FQGY;qpxpY=!O5>pGc7_Ce(#c@crnUu4x*Aj3vAeZRmkv09b${p>FMH%~y-} z+*7C`35x`|i;i(iH?fdmA#5RH;g*F=(lkS`J;=a&2IxqGm7pi41$1wfiT%y zIq%3rBP7qXSeHm^<;=-*Z9s^$%$2jc0A0cw;yWvc!yG$v{08oahNjzxb+g?!J<<3N H1KrTeNGb>U literal 519 zcmV+i0{HzyS5pr70ssJb+Feo0Zqq;%z4M5z771Dfp|U`-1X4C68WhN`orOnxdS#Bbd92$ zf0UY6U70`Zcul}WVI#SZ9F`ubIA9Xs{seykJnig5yLPf?R&_TSIGX3YLPnC$%~V>rR9)#_rG zm<3zrQtQhFG^hRf>f5qAhFbF3-S}h=JtJ(iJcz?v%WR2O&1}Ub}9#{ibII J{{gd&(T0420-yi@ diff --git a/test/swftests/DictCall.swf b/test/swftests/DictCall.swf index 3fa3559d674476ced91adc20d6844e59c6a98dbe..be3e096648a3820da47bf308e4c7ef214412e186 100644 GIT binary patch delta 531 zcmV+u0_^>x1fm3x8h?~ZNJcEOAsHv7NQqL5s3CxmK!Ob_n~v>qV(ORdF>zP?O4;xS ztXab<{RLL=6=m$Cabcuc+;h)4_f-J-1#t5#z%GKx_B{ajyz>(Qj8fMdzMV{sA`GHz zD5JynT!>^y>0+_yF7~@|I-|Y8U_i}2?e{y9(aFvt!HQ0lJ%4OlmBEB(PUIhNrA3n4fq$RPd1~d+X%sJ3C2F+fI4Nf${+DrumHB{0vz*Pi_3U+(+r(9mOmJ(; zZR6mP(KmYst1e1#ME_g%8j<(2V6ycakKjnTyu3VaVR>LpexiLjhU%T~ef#iA9{fjZ z;ydDq1p$1&{YNGw242cS-h(aZmeeL-KN8v-`y+Qm<9~`yLgq)Pc(7huy|VGUecCt8 zC)CdUKuFG6;||&-DyVQ5HS|5A=$If?Q*>QNijJ_3h>p~zhMEmT%7O?fP(Or~rUDW{ zWE&%dkyHbbBuwzqd@gZC!KAe`FFf_a)6QQ2C delta 532 zcmV+v0_**v1fv9y8h;cdBqJ8tkc^WSq(rGj)li@dkYIzl>ck!=ZvB!y#_o#$Ur?(psS&?o{w zOouYsYtMv;hm_`d-pzNqQ8J~y!C*kmKJE8AlF>=eL&1tpn14QMTb03>r*`7S!iz$q zjM*g0#9q6-a&_#rX`Cf~W$D)M#CRCnztpm7p8nJs&A zrBx-qE-5YIY=7c=>5L~<7M_JszARCrCC5%U6VbnnE3C}>ESzR+%B|3e&Z1wD2v77xP|3`HTjA5?bF5gBYE&2 zt+8i|1Lpg1ar=)%^yQrbxCyI^xk$`ZEC35K%^{)kOK8XSZOLC z5kxjILKsOk5J|!W&&?MSR}@TIbMw+wFJ0~PO8^BSqH1$<{t9Fs%Mjn1n;cFQ^F(?!6*`W zLZwHujK=}hcBHn8xd_fG`hnRIr^S3s)DlX z@5(c&Ry%=6NS2GR4Ae}KvTDRvCE6k@eI6HcmV0G-mWpcCVvTA}kTWX9b;f^8*EvmR zC7m(v=yg-O%$pghWZsnd*8W3l;P&@dQ)qBZZhZCyqW0&(Wa}>;!!u*KT%K%Twcxh8 zX8ZFAH0QVV{oO0I@LwB8=OyLEamI2z5B#|MO_fyzqMRnI4_n|sBkw#Ff-{@1R`_tqw9e2zQX#K`pashhTk>fo~gNsKDID2w`NH2ux6si5Kp3O;F*j zg}aCLjIS>M41~;9d*Lo#f~sPb;yVkM!6|l6@msh*Hx%6M>K->9^F%@a0K?YRpS{2O AssI20 literal 508 zcmVZqq;zo%K2~^iWy_p>ja7M5SCv)(Pd1D77dg1$v+o zC)86n_9k|_-Zl0bhZEn@3m0zvf!?{`Z{WmVgk7gJZC6@p=FNL=W_K1~{{h(i0kDH$ zy!{jazPElMfKe9ChM&fV?jqqLAL?ws9VwL#2`S66TfXedY)*QE!GL&u((iXPqmzFV ziY_`Lf8O?MgE7m4EKXG{g==y;m4(`Gx368p;Knp9GG1GT0b!gaOsJgnx;Y@ zr)Mlsc0yx;pP(HK4F_2c!Va<>)UfMz2-XK#_@M=s4(x4=5Jr}bzy=-Jxbof^f({>4 y-Y(j;e!d5=5V9N1%Bwzru40|yN0rCm6nm%mGdznd4YyjR$GykA*3dr|D%JM{L-wu! diff --git a/test/swftests/LocalVars.swf b/test/swftests/LocalVars.swf index 42102af2780a532ff8fbd25029cefd3904670541..3216aee070d49ec43db239152ccf069b0ce821d1 100644 GIT binary patch delta 505 zcmV7YB};zqd++(PzZsBU z09&5{_7MzrZUVrk-3tWJ&w_F9^=aR2ekvbM%$k5qAg$Vc|UJ-g$22dgd&*?0c?>`O+^&xgVGZ`_AR z)^fQ#-o$#qb-hXb{20o0r}^dGb3O2j%@=~v=nc&zBz)WZswm^Zdb^(V;zy!dMP8+HXyjN(YpG7Ddr19(Iy!Lc9HbpE^C- z>$SC_EkDMJ&DycN*K*5%k&rwKQWYezZ7>@rx!P~Fu2Ma|4o&kcEF(QmMJOT>D@nVZ zt`73}z)!M>DVL>b7;t9d=&UWL2|q2^2hsLJCZ|JM35`buDirR4myCsd7>b#_XCGAl zQoWKGu~#*J>Rx*$Gwu#gBARB2mvh~ducJ!yb&H8e^Klr+smR>7(TQcnOLw_pR%udUDb+$%Y7p{SSX_`-pxUvj!H=(=qvV$qR7FfQTNI-nNm0WEOGK8 z3nsqoDU?=~_zKhj><7F+(~+tX46%P4XQYP!I{YZWvnrkk6AjJun~8kysC1S zan&Oe+#PbyI=pYSo2|oD7Ygh-*M@z8$o;u6sQn>5IM$ZS<;f0_3pV6WjV~uqon!mk zyBBidi=CG|@p#cM%V?CU`NQ{{C=>F7uwV&qK@A#8vVRREN=5BD-+1l4=f1#m9AQWk z7Nz7i9uU|vQ8SU4NKMpDG)y#2+)`ZtssgIQ>asqlk!=kqp(>{%Xa)iSH1`Oijv7Vz z21G*1y!o_Z6S_NZ&L6`k?bpx6(7-7k|>KfXV^M5{Fz!oTTNDD76TL0F?lV6Y8lOd!3m2OZK`BC-^CF z;mCnM&^xDu13!Qh|03)v}@aCSvJapMv{%~R;Sakn{B(@u1iKe|9=n*Hm%3`gPKzr40!Hl zK`MeIwp7eUNgw z&nJm{R~)p9 zimM)(;Lb6Nt;2^_yV-iQ>_UM(`^K;@5xGAH20MR951wj^#o}a($ORknr^c5PsLt%$ z#rI>m@cGs&9*ua`&+}j$tNFvlZIlW5fuFI6w_pbvN`JBmB#6b%O}_DF^q#u{&vA@C zjaU$qySPta!$i$QVj?wBH_+f@(%7#Gzs6?Q@#B+oyQXV3%oSsrOhr5J^%m! diff --git a/test/swftests/NeOperator.swf b/test/swftests/NeOperator.swf index a251f7a20be922af071b237b906311f985c70819..9cbc3e3d7147661e662836d143336970f39be922 100644 GIT binary patch delta 523 zcmV+m0`&cv1egSn7=I-~Wr1XgNRcX%aZUb*KGm_;p>dY@MWkah;fp|oGG*OPR|PrtU>YR>mlls>-?O=nWAk?E zM)pn4-;4It=czkn8=>|{Px`_-aiWPZ#=e*v&y16ezfi9vTI_5FwYHwgwYy_S0gIE! z$!s;#R7Dl$ZGVf7h_i|BrLIVes zX5>;>V=*y~o*F%~d$gKDlSB63&%S5W{wx^Pev=`b;^lIAStV-0W%beW=SwKg#o^a? zZ`8tnRL{hDED}8nd~5ttEycn#;eqHv4LVR*i5JQ(Wq|nsEpnC)%f-pruK~S&qrmMe0E`eVl^5pXHK<^sAlY4*00r~&{ delta 524 zcmV+n0`vWt1epYo7=JZFWr1XgNRcX%aY9)nN-e5}0$sEcE7Vmd_9QX2$Cf?DVa2b& zrXPUBx_j89i~ax-5`Ph9oRS1avUJb6=bX9YI|KR?;K4P(9)jV{BLMic`yBxc5^vmp zJ3O&wVIb4KMu*L*QgNTLJkQ(tvv!nBSf|(PF}usU-Ii9g(tnRq@mWizPnu2Ae!%4<;}hY$JS%!D zT+GOoa89|j4xU0h`to`;-X6Qg3J1&6T_;obXU|payLyti+dULw{L5AH5f@q9OMsd5HE1lqv{U z5UC(qK_yyTfna?QCR-S=F6a(Hh#*W6P|y`6bNiJMU_y`Qb_4DjsDXE@0JjbDIlZfu zO+|Ip!23(Ox}xib-rBDhz|-LNH2_A4mdbN`{swd~(U5G0{{Sc+Fg;&Zqq;z$7j83y9pAsDndn7B}-Jwg~U#vheWAG)eycU ziZ~!tgw&0_PD~x!ve!*G!5i=lTzCV{+!2Rx-~~AG7G>7`aN3nEd;asAzh^viV1EH_ zegoJbFj%__0H4->5`cc@2ff#Wp*5dIao)pdw=t12?b-HhHfzluw32LWx4Yf0?R4x; zr-?)}{}@X?Z^rq(hFcm8MDAr_D#IkURLn<7A$J>%b64NHG);>vDlL7_7Lk~WSmt)S z)kY)V>jgzoBcJ_%%Rg9Mj zE|aUog{JZmkH-Zc3-|HMGItr5J#s1Bp%_^^_pOf8-Z|?+iGBOp&puahe=ZDG|It3| zYp18DhjoezHt=S~*Fz}Jm+tp>FL2?%>aVi!1l{&|6v2<%Z&1Svf{af^8&;vE=sM6a zmN%AA<6!hbc(Q&VamamKM83I{ZSj1&-K%n18nB>VeMO_QKfTPa&4P#tnD)-+nvKm$f=3=B;tI2r*Rh`B}y#fPRb)R;zAfDp>)!g+!Y zM5FB1!gy0LH;&j2A>@k}N3g|l5lN>_o2)KFJN#+4!yJ?Q4b i5pYDEBl;G$Cfdb2*_tp!R@c=4%YXY3#{U7R=0{{Sc+Fg;)Zqq;z#%H~2I|&lBDndn7B}-Jwg~U!MheWAG)exWu ziZ~!t38@=<-IzMIWv`oXf>+_f18_#_9dQT;UVsyCQD)sgPP?*Y&o{sMJmZ-I`wMXQ z8^Ah&;p#&G_`LR$01Pre=)WC~tobyG^FBs9&54w0-?nG7S$p=Ron*&$r`PM*PS@^s zTS&C>PqF0lR-8X-x~0KTA5s9gYWo~!c z9W?U2evo8SE?u6cQRs1HXU|*tB=JsW{8Y4pi06}mU4g1bhB6ZFuAhvBHHyUC+O~G9 z`jWmt6zo@xx=UknRo(WIshwttUwGJ4fL3Mka*47?i*Xd@6Op+^d=e+Ki%(RlV!TXn zncO60Rc$0;v=(fkB2+r=mLk%woGCma@Sb?^p8$iQY z-dRG8gYie<$;N@iA@^_*`NmSV&GW5JzshN8z=9(7*p!E{@qnyT9o7vUpk@-yB-A9# zq`Ik_CPAfMD_bN`9dawyG+Ng{14io%3{59E8UY=Mxk?Geho&*qm_}+q2xWBPyg&z{ zQFd?Pd|>+wzOX;PM+Uq^GeVedES$wFK!{d6Qwe?HY}Jv{RbV1D(p8ahqsT-Ly0LHs g98u?pzK6|;cJ)p+Ck&C5H8sHU-+qSif9zWA)&T4)U;qFB diff --git a/test/swftests/PrivateVoidCall.swf b/test/swftests/PrivateVoidCall.swf index 09a857ecbf002a69f2cd96820a7a5b6f5937e882..0b1a638d8e3ce8449365c1ee4a012ae588ced8c3 100644 GIT binary patch literal 599 zcmV-d0;v5%S5pqE0{{Sc+Fg;&Zqq;%h3|OAb`m6@YK4kWg(WIwLt-b;MWfVEHIzSz zAQlJ}A$4Mp8&k)&>~RxT@G5M0gRa@L3JYF<6>m}QIBng=@3g<_#6-k0w>#|) z2KinuNU{l+E>F`a^tg(%XRUmkc*j$IB3ePj^KsvJnSjJsM37Zq9W2_6ovU%WNr~3$H{c@iAq(BmkBPD z>%@ho&LbWl75qrJ&)$@0mvz}Am%`l_BWvrS)pa^si!PMdx0inQxq|a^VQ~8&?ZcjS zc6N5qpg3Ry7c;&eK>3_LIsNz=2R?7S&B7B*d!K~<9*-jUxfY;~F9aE%hz{I_wsPD6 z8pe{HAa`rYV+=>1g(n+Bi8tQEspR*Uh&InRJH6^$O9K`ZvBxGnjEy^Fo$0V{>Hu|< zXeOa1VJ6W{YM6S>Bq%m&W!nU*M>}7aHDz@T6`j=?7@9!3@C?P1vlzz&JvfZp@weOF)cP4yFzkTU~8UWQK-ah8)>hSpmM8EOwg0Zj^@;N99o+x` literal 602 zcmV-g0;T;!S5pqE0{{Sc+Fg;sZqq;zhG)HNI|&lBYK4kWg(WKGLSiSBL!;E9YADbH zK^zdOgv7>PH>Qql+3O~p;8nQr0K7mYj-0}Q7vRJra4WM;Teq>i($2r%|9jRm1NH~t z_BVhH0)y3i0PuP3CjsbZe$aa}IIw1uD9(FW?Ka0!rajx9PN(hZ<93oA+nt@A9oy;J z-EIqsR{klLeAbHdhfTK(7>L}MyY^j=$l0xn_n-{6RcNLlzSyV>)o-HCV5wXne zPP>CazSj$qY{I3>(=-Y_uHx)jD<3D`$&{apRuJ)g+_x)Gd1NRf;qLj#NLUAvm|5G_ zUga<81)^ZTYSg`UO|IN+FPYeBmiUE-Jp~w5ny*__L|TlZFdvJ|E#i|nnJzw2sfzJ3 z!DVujxYX2n#N*?F9}D-{tMcrsE_>usxQ9HpwjWttr}Jddg%bPr($Bt7aDFZfR{qjH z>}%)e=SK~S12%9mw9gqnnzL^r8n>NS&~*r=6l6Q~~TVqMjg)iqRfR%c*n1_8_f9Y}4J5(>mb0Bfd^ z8W2JmojcDlk)XUfci!uVI(*T8{~DUGReynTgfQKhJM))-7_A&k9W1uG+M37=4FwrD oEG8z<`*TOY2j+ZW?_hIGFZX0~tRu3%rY^KRfv2eb2cTK@x@~?dC;$Ke diff --git a/test/swftests/StaticAssignment.swf b/test/swftests/StaticAssignment.swf index dff661c8df854e7362c80b385fadc18475a69bbf..0a74f9e568e80b0e225b0378a446b93618e04294 100644 GIT binary patch delta 506 zcmV~ySSSn}b$@4e^G-?s$v3*golfCB`h-FpD=Y40Zj7-Ye$ z|9UibmvJQXzDCE*g;Hss(y}buJ{9%wxg*%SK(tYF(xBg1Kkr;8XZPdT^O=jF}p2RfG zlAz$arRuXD8N!jJ=cW7wCB-k%Sn#&0};C)RqsKCNTDU|U~ee?Eok{5bjg z?uB0XMg5J^li|ZW59iX%AHLuDrUkkNvy8=}0}W^!i*o}wl&W!4Z@-#;5L}^i60=a^ zeRP1qc97*D>>%QxnuBa&{0Je~9%SJi3oHPO=nB+!F+vzw1cAYr;Fb5(s4PtCEAKtI wU}Qp`X*oiqX0N=}bI^6HA-=ux1Wd3u!EfRI!qW8JJ@eFmKYOgnKVzoYK8eEtO#lD@ delta 505 zcmVK4z0R~iZWmakl=!LKy@9r4NIITah7u8 zw;&;Y0C%)AoU*^biGNY-bgW}o^5MPjz30#0w*vAD;O19=Jp_}TdjRlh_a_1vWx;&- zW^(AR;z;I0jSkvNrP3j#Wm$I1N8Kb_(B5D$pkAN$`yH+5%ukSeFWZchgVd^k_Cm?@v7X%up1;^?ZA zFB5)JvQyESM=W2C=vHVvDpZm1$3Zd^?qMWW?!G(T`fK$@V#L9=QUA&}nQ?b{64NwG zf`aRw<~pi2Uw^fjh_skRVZIcZU&s@gl$$5EtkLjHFqQnP_{*7k#N?u23*kR|Ro5+j5yHqK2n@yqSKf1@vM^~@-g|P+ v$dtU$a)e03uDt3c=sMOA->N(TQ|wLgJGj5JG<|2+JoVqto@nw9FW1=)odW?p diff --git a/test/swftests/StaticRetrieval.swf b/test/swftests/StaticRetrieval.swf index 622c40dad581db07e9a6ecc3bc483d7a7dee6108..5f0014b72f6434606310234eb25a716efa54a52a 100644 GIT binary patch literal 517 zcmV+g0{ZJ;Zg7RB(69r`E|!tLJo2)?FxYNH#wE9+CTVVYK%L58A$q~> zOO|@>RL(?yA_q8z^J8=_B?##)qjIVbAURluc(-ymOt3S-U*P#%lknkzDz`b>8;Sh| Hm1@=(=Ue?| literal 518 zcmV+h0{Q(zS5poH0{{Sc+Feo2Zqq;zp7lDm+CzV6Rh0vhB`W1YvQAnKiBgM-P)ZLV z6(OOXvRQ9pQ+sXM>o}Zv7A`yhFOWMYKLaP;BJ4V)DOqWyoo~MHo0*+Cn7;vbegGUJ z816p>fNuxC5WpbwC;gk@r8AEsk@r<}-VCHn`-GHb*)C7pNj4>&Uav>oF6nk#iqXoy z3Q6ZJkw0&GwZV|*EDKW^Cc@D%9Vdl6Z#M5;efD6Q7FkqV`i$_1$6UyqblM$dGnnW}Y24qdt8X3xndl!B(=FVlr=gygPvDVk@6-AT% zb)(*+F{xI!SrU^pOZPm2=jEyk4Gzf0XWt`ge;y3?{@?+;HkQlf?KV~m zw$wGP@3&B&Pu1e*wOV+!{ZXo)VK-c6A)nC*7KaO!S1FieH0B-HgSJ-KfI}g7H|W-f z@fXe{nwc>T1wKN@7%UqZHo`VCZPc)lW!4oDtPe8qmH`HUVFE(X*vANAWS9taj7?m* zZxu^FcPe*eK2Zalz|{%5QWAvBhE=)MJ5U^~LcCkK97fn3;m`0aFcf@vpv!HJ_DW%Y I0S@ifl3Nq;zW@LL diff --git a/test/swftests/StringBasics.swf b/test/swftests/StringBasics.swf index 2784c2b65edcb61fc471fcf010f4499387f95d1b..f4839316ff1cb9ac823a902acd129f6f1acdd158 100644 GIT binary patch literal 522 zcmV+l0`>hvS5pr80ssJb+Fg;sZqq;zhG)HwO)CVAicmQqS>ljOlXX&hNR(O>LI5Fw zfD0;@uGj0>)LvWm8iy0l!i6{B#DO~!QaJDeoVf4|Vb>{5%1V}Y{`uygSVsZZ%t(JY91?dx27|65 zy5)Nz>AWk-I~}hvnDCMnaW3ObI69_&R>`AI=iD`57p8etB#mXj2v2y*g)B+G*H=aX z8--bsQt8n=Phv*39hrB_C}U?eeaE|DLd$4O)}XGDu}rvk9ArLsrU{=rcb(&PeM7Gh z4F~H%y^Uv5UEO0@O7bELDyC)%l~q%`S)wiS%1`1l;)PdpNDmvrd!)HzIB5r1+l6zC`JBRzu!0jKdrqJS;{P(lZ6}3MPCOg0J7#`3 zs|8!?Gp&y&(40RnKEHXY7XE$vl`LX0yHCrQmGJe(7nM{xgau7`A9kRp@hgC1A+K(- z)^qCzh5Jb9iZHhp?!NW&N7#A{U?60+tcAOH0xFGFh_5eP4yV{X#joLZWGK14tD9VU M(>*2p1wEnGzS4~MZU6uP literal 519 zcmV+i0{HzyS5pr80ssJb+FemGZ__{+{myr>X@#Is5h??cC59|b&PmIVD77er0v$kt z1$FA>e2z`+vt^%gnD{L$`~X&l?np>sK)@Ohn z1e5kX0Qk854FQacARN7(9J%u}k>yBN2c1Z%d_-wo*S&hLmlZSG9}b7q8_>a^s~O$$ zgH&wZmF0tu-xy3p$%{BwaVA|;vuReTgHGqdHQ<+~c~vBhWx%OOL@J~zX}{OkMgbp% zS&=g3vpi2?&Ws(McgrZ_XEl2-x?#e~XiV2cqfxO+gnt-hQ{f&ZV(#v{hiiSqUQrA= zSO@j5Jd+u9k7p^(i!7+P&J=2^MtoIbEb?la#APH3zmjJ%t5+k|sNwKJFqK_r{KHH? zVRBZnned;!YRj&PN z`c7~~QWi_hrrb`1oT&)kMLQU52U!ln4k8X}ImjW+Pz39PEWBZXr7xt75yHqK2ngsK z!3*!1#x;X%EWBO&=Z~=UTt`NTwCshqcmcYNb%}2;JOQWJJH>C|eq?F5y={hEd($Hg J`~^h|*2I)(0GR*) diff --git a/test/swftests/StringCharCodeAt.swf b/test/swftests/StringCharCodeAt.swf index e81fce18d34c11a969d872a2b8e94850a01d6f9a..7e5b5bcf9cceccac26c0cbbea650d2f308a707c7 100644 GIT binary patch literal 553 zcmV+^0@nRQS5po+0{{Sc+GSD8Zqq;%z2kA>HVa7Ag31EPh)UTs87HNc5~UVVLI5Fw zL^oC0bUdEKrhdsDj`M#2pPJ+G-1rsA~GSi9P6V;ZHgS6JGNaF6>u5D96w+S15o zy-67RRG2i1JeSejj?9{g6SAv}zT?e_M-!({N@A`NuJE`yutSUMV~@}DNBW@D7wi=! zC);IE^V)CHT-{=!Pog-qQzkP_q*WolF3ByT)biZK;jx(pS3#Jqo+#0r!(vWF_%Gux zmiIjxOjA1L=98C2Z&Mc;so>_ATl(>#-Z9$8s}wodCpU(@M&$lX7}bB_J`9!Ra(Pk1 za=}&ksnt&xP@I$VuWw$+g)eGnB6fr6(4p}#wD~~5x4qwzAbT*0sn6R`hgL4x2J8l+ zev@B)WxeH0s6KTAOfB|cJ;-v1gR>*jF^m&prLHI3pvE?0^)A}STN+d~q-Y3hNYzk9 z!&_<*5QIYGhd-rP8>{#YEKaRnXNpBLi_e0&C= rAf#5Rb7TG-BooUL-<}&BF0pZm&*8qKNchff{@#D%cr3v`_f6@nk8BYt literal 555 zcmV+`0@VFOS5po+0{{Sc+GSBOZ__{+{m$puZ3alyg35qoM5QcE&PfYWqSPX42+#o} zx}Z+I*q7L?eYWf~4io=^85sBh{DJOF$-v0M#LOQEXD7s^oMh>~_r3S-`TM4z{sg%7 z1z;D!VCx-yvDcoI$_q+mql+~7a6Hw)(Pdt;l9x}TaT70aio8rAJ_l@ diff --git a/test/swftests/StringConversion.swf b/test/swftests/StringConversion.swf index 188d56ef85849598acb032b47872c7e5f561713a..3f584927257873385ec941905ec6cb89a7847310 100644 GIT binary patch literal 529 zcmV+s0`C1oS5poV0{{Sc+GUYJZ__XshCjz?0y{vb0U8ISNFen>o1|lhR$aujQb0%` z!37P0<|a-Pme`TwEak+BAHs!yz?nN-x&wcJ6aS*v=~&0G6v^NFJ@4z!@f^%w0N1_% zY$F(N-Ufh=Ti+4DNJR1Q<#^)E^Nf{4Rqb^WDT|@&)^**hcY0jRTz@baxL)7w_q&Sd zmLHfT^DZmzc7i5gOv_NDg-khfbWNtbl6#%bS!xuXhZdE{n#d@0X-0F(Wa;`nUj;?s zFy1UrQ>iq&3w}0ai92m>x@^AyI z2e#B_TAvT0S>?O0Z=R_KKizmGMapIeoSjfnsu1{gO&iP+HwVO%4GX8 zZ@rklr=c`+k}_-6v@*(OGQqddHU`^9hK;a|OdGXqWZB3zn-LJK7c%fw0}Qn>H!(sO z872Y~)Xu~U@3969Y+he@Z(H}mNeg}Yc^X?!01Sl8mbLH}PeDOgl~_R(j<9!xU&Ecm TQ1Z)81VoU literal 531 zcmV+u0_^=mS5poV0{{Sc+GUZ!ZqqOr$3Mqz0y{vb0U8ISNFen>o1~0Gt1e<%DX;@b za6yxh<|a-Pme^6^Eak+B2jRj4@B+KTr91Efhy!m?>~ySSSc>HD|NZ`de~#xsegfS1 z0ym=P@K5l(O0HY#|hOfsHd!D7d9I9%!6HA#79jC7AUj3*iikagL1_Q_KJN`r*obf1{a}uRisU17&t6t8RN2ayq>3m z!eAJQBBRo$d7dT#)p5?eTgDTRnt0UH`W`crIDgGt? zYPz3NKC9@A`A=Uqy^Fe;kxJ$tP;T!$wEM32cr}FeXgkY^I_cnjYqI=ESJl} z4Xhs6R39-vA40Q6zfQj%s0TmWcq5C1&-MjBVMVDz;Plpa1*jfG1$Rf=M2-XW3___gx+K^3* z5Jm<;KtSyXUbxRRU|@1{;l67<2qrD`>Bm`QJ_j%mA}w>_E?$6wuqv^F7#v~u2)~7U Vv7zMKTl%Q~?)gNCe*l~S-;L5O0J{JH diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 85d87f2..678b9f7 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -281,6 +281,61 @@ class TestFormatSelection(unittest.TestCase): downloaded = ydl.downloaded_info_dicts[0] self.assertEqual(downloaded['format_id'], f1id) + def test_format_filtering(self): + formats = [ + {'format_id': 'A', 'filesize': 500, 'width': 1000}, + {'format_id': 'B', 'filesize': 1000, 'width': 500}, + {'format_id': 'C', 'filesize': 1000, 'width': 400}, + {'format_id': 'D', 'filesize': 2000, 'width': 600}, + {'format_id': 'E', 'filesize': 3000}, + {'format_id': 'F'}, + {'format_id': 'G', 'filesize': 1000000}, + ] + for f in formats: + f['url'] = 'http://_/' + f['ext'] = 'unknown' + info_dict = _make_result(formats) + + ydl = YDL({'format': 'best[filesize<3000]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'D') + + ydl = YDL({'format': 'best[filesize<=3000]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'E') + + ydl = YDL({'format': 'best[filesize <= ? 3000]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'F') + + ydl = YDL({'format': 'best [filesize = 1000] [width>450]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'B') + + ydl = YDL({'format': 'best [filesize = 1000] [width!=450]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'C') + + ydl = YDL({'format': '[filesize>?1]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'G') + + ydl = YDL({'format': '[filesize<1M]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'E') + + ydl = YDL({'format': '[filesize<1MiB]'}) + ydl.process_ie_result(info_dict) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'G') + def test_add_extra_info(self): test_dict = { 'extractor': 'Foo', diff --git a/test/test_all_urls.py b/test/test_all_urls.py index bd4fe17..e66264b 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -14,7 +14,6 @@ from test.helper import gettestcases from youtube_dl.extractor import ( FacebookIE, gen_extractors, - TwitchIE, YoutubeIE, ) @@ -72,18 +71,6 @@ class TestAllURLsMatching(unittest.TestCase): self.assertMatch('http://www.youtube.com/results?search_query=making+mustard', ['youtube:search_url']) self.assertMatch('https://www.youtube.com/results?baz=bar&search_query=youtube-dl+test+video&filters=video&lclk=video', ['youtube:search_url']) - def test_twitch_channelid_matching(self): - self.assertTrue(TwitchIE.suitable('twitch.tv/vanillatv')) - self.assertTrue(TwitchIE.suitable('www.twitch.tv/vanillatv')) - self.assertTrue(TwitchIE.suitable('http://www.twitch.tv/vanillatv')) - self.assertTrue(TwitchIE.suitable('http://www.twitch.tv/vanillatv/')) - - def test_twitch_videoid_matching(self): - self.assertTrue(TwitchIE.suitable('http://www.twitch.tv/vanillatv/b/328087483')) - - def test_twitch_chapterid_matching(self): - self.assertTrue(TwitchIE.suitable('http://www.twitch.tv/tsm_theoddone/c/2349361')) - def test_youtube_extract(self): assertExtractId = lambda url, id: self.assertEqual(YoutubeIE.extract_id(url), id) assertExtractId('http://www.youtube.com/watch?&v=BaW_jenozKc', 'BaW_jenozKc') @@ -115,8 +102,6 @@ class TestAllURLsMatching(unittest.TestCase): self.assertMatch(':ythistory', ['youtube:history']) self.assertMatch(':thedailyshow', ['ComedyCentralShows']) self.assertMatch(':tds', ['ComedyCentralShows']) - self.assertMatch(':colbertreport', ['ComedyCentralShows']) - self.assertMatch(':cr', ['ComedyCentralShows']) def test_vimeo_matching(self): self.assertMatch('http://vimeo.com/channels/tributes', ['vimeo:channel']) diff --git a/test/test_download.py b/test/test_download.py index 412f3db..6a149ae 100644 --- a/test/test_download.py +++ b/test/test_download.py @@ -89,7 +89,7 @@ def generator(test_case): for tc in test_cases: info_dict = tc.get('info_dict', {}) - if not tc.get('file') and not (info_dict.get('id') and info_dict.get('ext')): + if not (info_dict.get('id') and info_dict.get('ext')): raise Exception('Test definition incorrect. The output file cannot be known. Are both \'id\' and \'ext\' keys present?') if 'skip' in test_case: @@ -116,7 +116,7 @@ def generator(test_case): expect_warnings(ydl, test_case.get('expected_warnings', [])) def get_tc_filename(tc): - return tc.get('file') or ydl.prepare_filename(tc.get('info_dict', {})) + return ydl.prepare_filename(tc.get('info_dict', {})) res_dict = None diff --git a/test/test_http.py b/test/test_http.py new file mode 100644 index 0000000..bd4d46f --- /dev/null +++ b/test/test_http.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +from __future__ import unicode_literals + +# Allow direct execution +import os +import sys +import unittest +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from youtube_dl import YoutubeDL +from youtube_dl.compat import compat_http_server +import ssl +import threading + +TEST_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler): + def log_message(self, format, *args): + pass + + def do_GET(self): + if self.path == '/video.html': + self.send_response(200) + self.send_header('Content-Type', 'text/html; charset=utf-8') + self.end_headers() + self.wfile.write(b'