diff --git a/.appveyor.yml b/.appveyor.yml
index 507bc46e0ec25..4cdaf958bfd33 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -50,9 +50,10 @@ install:
- php composer.phar global require --no-progress --no-scripts --no-plugins symfony/flex
- git config --global user.email ""
- git config --global user.name "Symfony"
- - FOR /F "tokens=* USEBACKQ" %%F IN (`bash -c "grep branch-version composer.json | grep -o '[0-9.x]*'"`) DO (SET SYMFONY_VERSION=%%F)
+ - FOR /F "tokens=* USEBACKQ" %%F IN (`bash -c "grep -m1 SYMFONY_VERSION .travis.yml | grep -o '[0-9.x]*'"`) DO (SET SYMFONY_VERSION=%%F)
- php .github/build-packages.php HEAD^ %SYMFONY_VERSION% src\Symfony\Bridge\PhpUnit
- SET "SYMFONY_REQUIRE=>=%SYMFONY_VERSION%"
+ - SET COMPOSER_ROOT_VERSION=%SYMFONY_VERSION%.x-dev
- php composer.phar update --no-progress --ansi
- php phpunit install
diff --git a/.github/build-packages.php b/.github/build-packages.php
index c8c802ad595b4..30dcf0c9adce8 100644
--- a/.github/build-packages.php
+++ b/.github/build-packages.php
@@ -46,7 +46,7 @@
passthru("cd $dir && git init && git add . && git commit -q -m - && git archive -o package.tar HEAD && rm .git/ -Rf");
}
- $package->version = (isset($package->extra->{'branch-version'}) ? $package->extra->{'branch-version'} : $version).'.x-dev';
+ $package->version = preg_replace('/(?:\.x)?-dev$/', '', $package->extra->{'branch-alias'}->{'dev-main'} ?? $version).'.x-dev';
$package->dist['type'] = 'tar';
$package->dist['url'] = 'file://'.str_replace(DIRECTORY_SEPARATOR, '/', dirname(__DIR__))."/$dir/package.tar";
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 6505e20d39a22..96f4b8be0996b 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -137,8 +137,9 @@ jobs:
- name: Configure composer
run: |
COMPOSER_HOME="$(composer config home)"
+ composer self-update
([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
- echo "COMPOSER_ROOT_VERSION=$(grep branch-version composer.json | grep -o '[0-9.x]*').x-dev" >> $GITHUB_ENV
+ echo "COMPOSER_ROOT_VERSION=$(grep -m1 SYMFONY_VERSION .travis.yml | grep -o '[0-9.x]*').x-dev" >> $GITHUB_ENV
- name: Determine composer cache directory
id: composer-cache
diff --git a/.travis.yml b/.travis.yml
index fb30d059ad066..80c86ecdf7444 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,6 +14,7 @@ addons:
env:
global:
+ - SYMFONY_VERSION=5.2
- MIN_PHP=7.2.5
- SYMFONY_PROCESS_PHP_TEST_BINARY=~/.phpenv/shims/php
- SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1
@@ -170,8 +171,8 @@ install:
git fetch --depth=2 origin refs/pull/$SYMFONY_PHPUNIT_BRIDGE_PR/head
git rm -rq src/Symfony/Bridge/PhpUnit
git checkout -q FETCH_HEAD -- src/Symfony/Bridge/PhpUnit
- export SYMFONY_VERSION=$(curl -s https://api.github.com/repos/symfony/symfony/pulls/$SYMFONY_PHPUNIT_BRIDGE_PR | jq -r .base.ref)
- sed -i 's/"symfony\/phpunit-bridge": ".*"/"symfony\/phpunit-bridge": "'$SYMFONY_VERSION'.x@dev"/' composer.json
+ SYMFONY_PHPUNIT_BRIDGE_REF=$(curl -s https://api.github.com/repos/symfony/symfony/pulls/$SYMFONY_PHPUNIT_BRIDGE_PR | jq -r .base.ref)
+ sed -i 's/"symfony\/phpunit-bridge": ".*"/"symfony\/phpunit-bridge": "'$SYMFONY_PHPUNIT_BRIDGE_REF'.x@dev"/' composer.json
rm -rf .phpunit
fi
@@ -180,7 +181,6 @@ install:
git config --global user.email ""
git config --global user.name "Symfony"
- export SYMFONY_VERSION=$(grep branch-version composer.json | grep -o '[0-9.x]*')
SYMFONY_VERSIONS=$(git ls-remote -q --heads);
if [[ ! $deps ]]; then
@@ -227,6 +227,7 @@ install:
# Legacy tests are skipped when deps=high and when the current branch version has not the same major version number as the next one
[[ $deps = high && ${SYMFONY_VERSION%.*} != $(echo "$SYMFONY_VERSIONS" | cut -f2 | grep -FA1 /$SYMFONY_VERSION | tail -n 1 | grep -o '[0-9]*' | head -n 1) ]] && export LEGACY=,legacy
+ export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
if [[ $deps ]]; then mv composer.json.phpunit composer.json; fi
- |
@@ -265,6 +266,7 @@ install:
export FLIP='^'
SYMFONY_VERSION=$(echo $SYMFONY_VERSION | awk '{print $1 - 1}')
echo -e "\\n\\e[33;1mChecking out Symfony $SYMFONY_VERSION and running tests with patched components as deps\\e[0m"
+ export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
export SYMFONY_REQUIRE=">=$SYMFONY_VERSION"
git fetch --depth=2 origin $SYMFONY_VERSION
git checkout -m FETCH_HEAD
diff --git a/CHANGELOG-5.2.md b/CHANGELOG-5.2.md
index 6e42cd86cfbc4..7fe615b1fcca4 100644
--- a/CHANGELOG-5.2.md
+++ b/CHANGELOG-5.2.md
@@ -7,6 +7,17 @@ in 5.2 minor versions.
To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.2.0...v5.2.1
+* 5.2.3 (2021-02-03)
+
+ * bug #39954 [Mailer][Mime] Fix case-sensitive handling of header names (piku235)
+ * bug #40055 [Messenger] Fix Doctrine setup when using a migration (fabpot)
+ * bug #40018 [TwigBridge] take into account all label related options (xabbuh)
+ * bug #40023 [Finder] use proper keys to not override appended files (xabbuh)
+ * bug #40019 [ErrorHandler] Fix strpos error when trying to call a method without a name (Deuchnord)
+ * bug #40027 [DoctrineBridge] add missing `@experimental` annotation on Uid generators (nicolas-grekas)
+ * bug #40004 [Serializer] Prevent access to private properties without getters (julienfalque)
+ * bug #40003 [Uid] Fix time to float conversion (fancyweb)
+
* 5.2.2 (2021-01-27)
* bug #38900 [Serializer] Exclude non-initialized properties accessed with getters (BoShurik)
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 9f2ebcc65e3ed..5b8efba4073b3 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -24,10 +24,10 @@ Symfony is the result of the work of many people who made the code better
- Johannes S (johannes)
- Kris Wallsmith (kriswallsmith)
- Wouter de Jong (wouterj)
- - Yonel Ceruto (yonelceruto)
+ - Jérémy DERUSSÉ (jderusse)
- Thomas Calvet (fancyweb)
+ - Yonel Ceruto (yonelceruto)
- Hugo Hamon (hhamon)
- - Jérémy DERUSSÉ (jderusse)
- Abdellatif Ait boudad (aitboudad)
- Samuel ROZE (sroze)
- Romain Neutron (romain)
@@ -43,15 +43,16 @@ Symfony is the result of the work of many people who made the code better
- Jean-François Simon (jfsimon)
- Benjamin Eberlei (beberlei)
- Igor Wiedler (igorw)
+ - Oskar Stark (oskarstark)
- Eriksen Costa (eriksencosta)
- Guilhem Niot (energetick)
- Sarah Khalil (saro0h)
- Jan Schädlich (jschaedl)
- Jonathan Wage (jwage)
- Lynn van der Berg (kjarli)
+ - Pierre du Plessis (pierredup)
- Matthias Pigulla (mpdude)
- Diego Saint Esteben (dosten)
- - Pierre du Plessis (pierredup)
- Valentin Udaltsov (vudaltsov)
- Alexandre Salomé (alexandresalome)
- William Durand (couac)
@@ -77,11 +78,10 @@ Symfony is the result of the work of many people who made the code better
- Mathieu Piot (mpiot)
- Vladimir Reznichenko (kalessil)
- Bilal Amarni (bamarni)
- - Oskar Stark (oskarstark)
- Florin Patan (florinpatan)
- Jáchym Toušek (enumag)
- - Andrej Hudec (pulzarraider)
- Michel Weimerskirch (mweimerskirch)
+ - Andrej Hudec (pulzarraider)
- Issei Murasawa (issei_m)
- Christian Raue
- Eric Clemmons (ericclemmons)
@@ -115,12 +115,12 @@ Symfony is the result of the work of many people who made the code better
- Michal Piotrowski (eventhorizon)
- Jérôme Vasseur (jvasseur)
- Tim Nagel (merk)
+ - Alexander Schranz (alexander-schranz)
- Chris Wilkinson (thewilkybarkid)
+ - Peter Kokot (maastermedia)
- Brice BERNARD (brikou)
- - Alexander Schranz (alexander-schranz)
- marc.weistroff
- Tomáš Votruba (tomas_votruba)
- - Peter Kokot (maastermedia)
- Lars Strojny (lstrojny)
- lenar
- Alexander Schwenn (xelaris)
@@ -172,14 +172,15 @@ Symfony is the result of the work of many people who made the code better
- Jérémie Augustin (jaugustin)
- François-Xavier de Guillebon (de-gui_f)
- Oleg Voronkovich
+ - Tomas Norkūnas (norkunas)
- Philipp Wahala (hifi)
- Rafael Dohms (rdohms)
- jwdeitch
- Ahmed TAILOULOUTE (ahmedtai)
+ - Mathias Arlaud (mtarld)
- Mikael Pajunen
- Gary PEGEOT (gary-p)
- Arman Hosseini (arman)
- - Tomas Norkūnas (norkunas)
- Niels Keurentjes (curry684)
- Vyacheslav Pavlov
- George Mponos (gmponos)
@@ -191,17 +192,20 @@ Symfony is the result of the work of many people who made the code better
- Ben Davies (bendavies)
- Andreas Schempp (aschempp)
- Clemens Tolboom
+ - HypeMC (hypemc)
- Helmer Aaviksoo
- Hiromi Hishida (77web)
- Matthieu Ouellette-Vachon (maoueh)
- Michał Pipa (michal.pipa)
- Dawid Nowak
+ - Maxime Helias (maxhelias)
- Amal Raghav (kertz)
- Jonathan Ingram (jonathaningram)
- Artur Kotyrba
- Tyson Andre
- GDIBass
- Samuel NELA (snela)
+ - Olivier Dolbeau (odolbeau)
- Fabien Bourigault (fbourigault)
- Saif (╯°□°)╯ (azjezz)
- James Halsall (jaitsu)
@@ -212,7 +216,6 @@ Symfony is the result of the work of many people who made the code better
- Marek Štípek (maryo)
- Filippo Tessarotto (slamdunk)
- Daniel Espendiller
- - Maxime Helias (maxhelias)
- Possum
- Dorian Villet (gnutix)
- Michaël Perrin (michael.perrin)
@@ -223,16 +226,16 @@ Symfony is the result of the work of many people who made the code better
- Mario A. Alvarez Garcia (nomack84)
- Dennis Benkert (denderello)
- DQNEO
+ - David Prévot
- Andre Rømcke (andrerom)
- Smaine Milianni (ismail1432)
- - Mathias Arlaud (mtarld)
- mcfedr (mcfedr)
+ - Christian Scheb
- Ruben Gonzalez (rubenrua)
- Benjamin Dulau (dbenjamin)
- Jan Rosier (rosier)
- Mathieu Lemoine (lemoinem)
- Rémon van de Kamp (rpkamp)
- - HypeMC
- Christian Schmidt
- Andreas Hucks (meandmymonkey)
- Tom Van Looy (tvlooy)
@@ -244,6 +247,7 @@ Symfony is the result of the work of many people who made the code better
- bronze1man
- sun (sun)
- Larry Garfield (crell)
+ - Michael Käfer (michael_kaefer)
- Leo Feyer (leofeyer)
- Nikolay Labinskiy (e-moe)
- Martin Schuhfuß (usefulthink)
@@ -251,12 +255,10 @@ Symfony is the result of the work of many people who made the code better
- Matthieu Bontemps (mbontemps)
- apetitpa
- Pierre Minnieur (pminnieur)
- - David Prévot
- fivestar
- Dominique Bongiraud
- Hidde Wieringa (hiddewie)
- Jeremy Livingston (jeremylivingston)
- - Olivier Dolbeau (odolbeau)
- Michael Lee (zerustech)
- Dmitrii Poddubnyi (karser)
- Matthieu Auger (matthieuauger)
@@ -283,7 +285,6 @@ Symfony is the result of the work of many people who made the code better
- Marcel Beerta (mazen)
- Christopher Hertel (chertel)
- Ruud Kamphuis (ruudk)
- - Michael Käfer (michael_kaefer)
- Chi-teck
- Pavel Batanov (scaytrase)
- Mantis Development
@@ -315,6 +316,7 @@ Symfony is the result of the work of many people who made the code better
- Alessandro Lai (jean85)
- Adam Prager (padam87)
- Benoît Burnichon (bburnichon)
+ - YaFou
- Maciej Malarz (malarzm)
- Roman Marintšenko (inori)
- Xavier Montaña Carreras (xmontana)
@@ -336,6 +338,7 @@ Symfony is the result of the work of many people who made the code better
- Jakub Kucharovic (jkucharovic)
- Loick Piera (pyrech)
- Gocha Ossinkine (ossinkine)
+ - Jeroen Noten (jeroennoten)
- Uwe Jäger (uwej711)
- Martin Hujer (martinhujer)
- Eugene Leonovich (rybakit)
@@ -362,7 +365,6 @@ Symfony is the result of the work of many people who made the code better
- Alex Rock (pierstoval)
- Beau Simensen (simensen)
- Michael Hirschler (mvhirsch)
- - Christian Scheb
- Robert Kiss (kepten)
- Zan Baldwin (zanderbaldwin)
- Roumen Damianoff (roumen)
@@ -372,6 +374,7 @@ Symfony is the result of the work of many people who made the code better
- Langlet Vincent (deviling)
- Pascal Luna (skalpa)
- Wouter Van Hecke
+ - Iker Ibarguren (ikerib)
- Peter Kruithof (pkruithof)
- Michael Holm (hollo)
- Arjen van der Meijden
@@ -379,6 +382,7 @@ Symfony is the result of the work of many people who made the code better
- Damien Alexandre (damienalexandre)
- Simon Mönch (sm)
- Christian Schmidt
+ - Ben Hakim
- Patrick Landolt (scube)
- MatTheCat
- Denis Brumann (dbrumann)
@@ -413,6 +417,7 @@ Symfony is the result of the work of many people who made the code better
- Gustavo Piltcher
- Jesse Rushlow (geeshoe)
- Stepan Tanasiychuk (stfalcon)
+ - Ivan Kurnosov
- Tiago Ribeiro (fixe)
- Hidde Boomsma (hboomsma)
- John Bafford (jbafford)
@@ -434,10 +439,12 @@ Symfony is the result of the work of many people who made the code better
- Mark Challoner (markchalloner)
- ivan
- Karoly Gossler (connorhu)
+ - Simon Berger
- Ahmed Raafat
- Philippe Segatori
- Gennady Telegin (gtelegin)
- Thibaut Cheymol (tcheymol)
+ - Baptiste Leduc (korbeil)
- Erin Millard
- Artur Melo (restless)
- Matthew Lewinski (lewinski)
@@ -448,7 +455,6 @@ Symfony is the result of the work of many people who made the code better
- alquerci
- Oleg Andreyev
- Mateusz Sip (mateusz_sip)
- - YaFou
- Francesco Levorato
- Vitaliy Zakharov (zakharovvi)
- Tobias Sjösten (tobiassjosten)
@@ -463,7 +469,6 @@ Symfony is the result of the work of many people who made the code better
- Thomas Perez (scullwm)
- Felix Labrecque
- Yaroslav Kiliba
- - Ben Hakim
- Terje Bråten
- Gonzalo Vilaseca (gonzalovilaseca)
- Marco Petersen (ocrampete16)
@@ -479,7 +484,6 @@ Symfony is the result of the work of many people who made the code better
- Haralan Dobrev (hkdobrev)
- hossein zolfi (ocean)
- Clément Gautier (clementgautier)
- - Jeroen Noten (jeroennoten)
- Dāvis Zālītis (k0d3r1s)
- Sanpi
- Eduardo Gulias (egulias)
@@ -488,7 +492,6 @@ Symfony is the result of the work of many people who made the code better
- Stéphane PY (steph_py)
- Philipp Kräutli (pkraeutli)
- Grzegorz (Greg) Zdanowski (kiler129)
- - Iker Ibarguren (ikerib)
- Dimitri Gritsajuk (ottaviano)
- Kirill chEbba Chebunin (chebba)
-
@@ -524,7 +527,6 @@ Symfony is the result of the work of many people who made the code better
- Alain Hippolyte (aloneh)
- Grenier Kévin (mcsky_biig)
- Karoly Negyesi (chx)
- - Ivan Kurnosov
- Xavier HAUSHERR
- Albert Jessurum (ajessu)
- Laszlo Korte
@@ -563,13 +565,14 @@ Symfony is the result of the work of many people who made the code better
- Markus Bachmann (baachi)
- Kévin THERAGE (kevin_therage)
- Erkhembayar Gantulga (erheme318)
+ - Greg Anderson
- Islam93
- lancergr
+ - Vincent Langlet
- Tri Pham (phamuyentri)
- Mihai Stancu
- Ivan Nikolaev (destillat)
- Gildas Quéméner (gquemener)
- - Baptiste Leduc (korbeil)
- Laurent Masforné (heisenberg)
- Claude Khedhiri (ck-developer)
- Desjardins Jérôme (jewome62)
@@ -721,6 +724,7 @@ Symfony is the result of the work of many people who made the code better
- Steven Surowiec
- Kevin Saliou (kbsali)
- Shawn Iwinski
+ - Samuele Lilli (doncallisto)
- Gawain Lynch (gawain)
- mmokhi
- NothingWeAre
@@ -766,9 +770,11 @@ Symfony is the result of the work of many people who made the code better
- Fred Cox
- vitaliytv
- Philippe Segatori
+ - Loïc Frémont (loic425)
- fd6130 (fdtvui)
- Dalibor Karlović (dkarlovi)
- Andrey Sevastianov
+ - Oleksandr Barabolia (oleksandrbarabolia)
- Sebastian Blum
- Alexis Lefebvre
- aubx
@@ -776,7 +782,6 @@ Symfony is the result of the work of many people who made the code better
- Marvin Butkereit
- Renan
- Ricky Su (ricky)
- - Vincent Langlet
- Kyle Evans (kevans91)
- Charles-Henri Bruyand
- Max Rath (drak3)
@@ -907,7 +912,6 @@ Symfony is the result of the work of many people who made the code better
- Richard van den Brand (ricbra)
- develop
- flip111
- - Greg Anderson
- VJ
- RJ Garcia
- Delf Tonder (leberknecht)
@@ -1021,6 +1025,7 @@ Symfony is the result of the work of many people who made the code better
- Ben
- Vincent Composieux (eko)
- Jayson Xu (superjavason)
+ - Gijs van Lammeren
- Hubert Lenoir (hubert_lenoir)
- fago
- Jan Prieser
@@ -1081,6 +1086,7 @@ Symfony is the result of the work of many people who made the code better
- Peter Bowyer (pbowyer)
- Aleksey Podskrebyshev
- Calin Mihai Pristavu
+ - Vincent Langlet
- David Marín Carreño (davefx)
- Fabien LUCAS (flucas2)
- Konstantin Grachev (grachevko)
@@ -1156,7 +1162,6 @@ Symfony is the result of the work of many people who made the code better
- Dmitriy Derepko
- Stéphane Delprat
- Brian Freytag (brianfreytag)
- - Samuele Lilli (doncallisto)
- Brunet Laurent (lbrunet)
- Florent Viel (luxifer)
- Mikhail Yurasov (mym)
@@ -1185,12 +1190,12 @@ Symfony is the result of the work of many people who made the code better
- d-ph
- Stewart Malik
- Renan Taranto (renan-taranto)
+ - Gemorroj (gemorroj)
- Rikijs Murgs
- Mihail Krasilnikov (krasilnikovm)
- Uladzimir Tsykun
- iamvar
- Amaury Leroux de Lens (amo__)
- - Loïc Frémont (loic425)
- Christian Jul Jensen
- Alexandre GESLIN (alexandregeslin)
- The Whole Life to Learn
@@ -1199,11 +1204,16 @@ Symfony is the result of the work of many people who made the code better
- Mikkel Paulson
- ergiegonzaga
- Daniel González
+ - Piergiuseppe Longo
+ - Kevin Auivinet
- Liverbool (liverbool)
+ - Aurélien MARTIN
- Malte Schlüter
- Jules Matsounga (hyoa)
+ - Quentin Dequippe (qdequippe)
- khoptynskyi
- Sam Malone
+ - Christin Gruber (christingruber)
- Phan Thanh Ha (haphan)
- Chris Jones (leek)
- neghmurken
@@ -1371,7 +1381,6 @@ Symfony is the result of the work of many people who made the code better
- benatespina (benatespina)
- Denis Kop
- Jean-Guilhem Rouel (jean-gui)
- - HypeMC
- jfcixmedia
- Dominic Tubach
- Nikita Konstantinov
@@ -1409,6 +1418,7 @@ Symfony is the result of the work of many people who made the code better
- Alex Demchenko (pilot)
- Tadas Gliaubicas (tadcka)
- Thanos Polymeneas (thanos)
+ - Jon Green
- Atthaphon Urairat
- Benoit Garret
- Maximilian Ruta (deltachaos)
@@ -1524,6 +1534,7 @@ Symfony is the result of the work of many people who made the code better
- MightyBranch
- Kacper Gunia (cakper)
- Peter Thompson (petert82)
+ - Victor Macko (victor_m)
- error56
- Felicitus
- Krzysztof Przybyszewski
@@ -1542,6 +1553,7 @@ Symfony is the result of the work of many people who made the code better
- Islam Israfilov (islam93)
- Arthur Woimbée
- tsufeki
+ - Théo DELCEY
- dangkhoagms
- Philipp Strube
- Andrii Serdiuk (andreyserdjuk)
@@ -1597,6 +1609,7 @@ Symfony is the result of the work of many people who made the code better
- Malaney J. Hill
- Alexandre Pavy
- Adiel Cristo (arcristo)
+ - Artem Stepin (astepin)
- Christian Flach (cmfcmf)
- Cédric Girard (enk_)
- Lars Ambrosius Wallenborn (larsborn)
@@ -1604,12 +1617,14 @@ Symfony is the result of the work of many people who made the code better
- Sebastian Göttschkes (sgoettschkes)
- Tatsuya Tsuruoka
- Ross Tuck
+ - Gerben Oolbekkink
- Kévin Gomez (kevin)
- Mihai Nica (redecs)
- Andrei Igna
- Adam Prickett
- azine
- Javier Espinosa
+ - Luke Towers
- Anton Kroshilin
- Dawid Sajdak
- Norman Soetbeer
@@ -1663,6 +1678,7 @@ Symfony is the result of the work of many people who made the code better
- Klaas Cuvelier (kcuvelier)
- Flavien Knuchel (knuch)
- Mathieu TUDISCO (mathieutu)
+ - Dmytro Dzubenko
- markusu49
- Steve Frécinaux
- Constantine Shtompel
@@ -1674,6 +1690,7 @@ Symfony is the result of the work of many people who made the code better
- ShiraNai7
- Cedrick Oka
- Antal Áron (antalaron)
+ - Guillaume Sainthillier (guillaume-sainthillier)
- Vašek Purchart (vasek-purchart)
- Janusz Jabłoński (yanoosh)
- Fleuv
@@ -1712,11 +1729,11 @@ Symfony is the result of the work of many people who made the code better
- Luis Galeas
- Bogdan Scordaliu
- Martin Pärtel
+ - Fabien S (bafs)
- Daniel Rotter (danrot)
- Frédéric Bouchery (fbouchery)
- Patrick Daley (padrig)
- Max Summe
- - Simon Berger
- WedgeSama
- Hugo Sales
- Felds Liscia
@@ -1798,13 +1815,13 @@ Symfony is the result of the work of many people who made the code better
- Alex Silcock
- Raphael Hardt
- Qingshan Luo
- - Gijs van Lammeren
- Ergie Gonzaga
- Matthew J Mucklo
- AnrDaemon
- SnakePin
- Emre Akinci (emre)
- fdgdfg (psampaz)
+ - Andrea Ruggiero (pupax)
- Stéphane Seng
- Maxwell Vandervelde
- kaywalker
@@ -2013,6 +2030,7 @@ Symfony is the result of the work of many people who made the code better
- Rémi Faivre (rfv)
- Thierry Marianne (thierrymarianne)
- Nick Stemerdink
+ - Bernhard Rusch
- David Stone
- jjanvier
- Julius Beckmann
@@ -2254,6 +2272,7 @@ Symfony is the result of the work of many people who made the code better
- Haritz
- Matthieu Prat
- Grummfy
+ - pdragun
- Paul Le Corre
- Filipe Guerra
- Jean Ragouin
@@ -2457,6 +2476,7 @@ Symfony is the result of the work of many people who made the code better
- wesleyh
- sergey
- Menno Holtkamp
+ - Ser5
- Michael Hudson-Doyle
- Daniel Bannert
- Karim Miladi
@@ -2470,7 +2490,9 @@ Symfony is the result of the work of many people who made the code better
- Anonymous User
- Paweł Tomulik
- Eric J. Duran
+ - Pavol Tuka
- Alexandru Bucur
+ - Alexis Lefebvre
- cmfcmf
- Michal Forbak
- Drew Butler
@@ -2573,7 +2595,6 @@ Symfony is the result of the work of many people who made the code better
- parhs
- Diego Campoy
- TeLiXj
- - Vincent Langlet
- Oncle Tom
- Sam Anthony
- Christian Stocker
@@ -2615,6 +2636,7 @@ Symfony is the result of the work of many people who made the code better
- Siragusa (asiragusa)
- Daniel Basten (axhm3a)
- Dude (b1rdex)
+ - Gerard Berengue Llobera (bere)
- Bernd Matzner (bmatzner)
- Bram Tweedegolf (bram_tweedegolf)
- Brandon Kelly (brandonkelly)
diff --git a/composer.json b/composer.json
index d318bb7b227e4..e92efba50fae6 100644
--- a/composer.json
+++ b/composer.json
@@ -170,11 +170,13 @@
"repositories": [
{
"type": "path",
- "url": "src/Symfony/Contracts"
+ "url": "src/Symfony/Contracts",
+ "options": {
+ "versions": {
+ "symfony/contracts": "2.3.x-dev"
+ }
+ }
}
],
- "minimum-stability": "dev",
- "extra": {
- "branch-version": "5.2"
- }
+ "minimum-stability": "dev"
}
diff --git a/src/Symfony/Bridge/Doctrine/CHANGELOG.md b/src/Symfony/Bridge/Doctrine/CHANGELOG.md
index ea6918de35f1c..af0b9366a1b66 100644
--- a/src/Symfony/Bridge/Doctrine/CHANGELOG.md
+++ b/src/Symfony/Bridge/Doctrine/CHANGELOG.md
@@ -5,7 +5,7 @@ CHANGELOG
-----
* added support for symfony/uid as `UlidType` and `UuidType` as Doctrine types
- * added `UlidGenerator`, `UUidV1Generator`, `UuidV4Generator` and `UuidV6Generator`
+ * added `UlidGenerator`, `UuidV1Generator`, `UuidV4Generator` and `UuidV6Generator`
5.0.0
-----
diff --git a/src/Symfony/Bridge/Doctrine/IdGenerator/UlidGenerator.php b/src/Symfony/Bridge/Doctrine/IdGenerator/UlidGenerator.php
index 8953038860fb8..364bf3b3acb96 100644
--- a/src/Symfony/Bridge/Doctrine/IdGenerator/UlidGenerator.php
+++ b/src/Symfony/Bridge/Doctrine/IdGenerator/UlidGenerator.php
@@ -15,6 +15,9 @@
use Doctrine\ORM\Id\AbstractIdGenerator;
use Symfony\Component\Uid\Ulid;
+/**
+ * @experimental in 5.2
+ */
final class UlidGenerator extends AbstractIdGenerator
{
public function generate(EntityManager $em, $entity): Ulid
diff --git a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV1Generator.php b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV1Generator.php
index 21d2fd6c19314..55f6eb1eb2113 100644
--- a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV1Generator.php
+++ b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV1Generator.php
@@ -15,6 +15,9 @@
use Doctrine\ORM\Id\AbstractIdGenerator;
use Symfony\Component\Uid\UuidV1;
+/**
+ * @experimental in 5.2
+ */
final class UuidV1Generator extends AbstractIdGenerator
{
public function generate(EntityManager $em, $entity): UuidV1
diff --git a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV4Generator.php b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV4Generator.php
index 35b94a7cd0196..8731daa641032 100644
--- a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV4Generator.php
+++ b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV4Generator.php
@@ -15,6 +15,9 @@
use Doctrine\ORM\Id\AbstractIdGenerator;
use Symfony\Component\Uid\UuidV4;
+/**
+ * @experimental in 5.2
+ */
final class UuidV4Generator extends AbstractIdGenerator
{
public function generate(EntityManager $em, $entity): UuidV4
diff --git a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV6Generator.php b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV6Generator.php
index 3677af1c2de70..cdcd908e93647 100644
--- a/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV6Generator.php
+++ b/src/Symfony/Bridge/Doctrine/IdGenerator/UuidV6Generator.php
@@ -15,6 +15,9 @@
use Doctrine\ORM\Id\AbstractIdGenerator;
use Symfony\Component\Uid\UuidV6;
+/**
+ * @experimental in 5.2
+ */
final class UuidV6Generator extends AbstractIdGenerator
{
public function generate(EntityManager $em, $entity): UuidV6
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
index dff43279cfc46..268dc29b6ece0 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
@@ -831,4 +831,85 @@ public function testValidateUniquenessCause()
->setCode(UniqueEntity::NOT_UNIQUE_ERROR)
->assertRaised();
}
+
+ /**
+ * @dataProvider resultWithEmptyIterator
+ */
+ public function testValidateUniquenessWithEmptyIterator($entity, $result)
+ {
+ $constraint = new UniqueEntity([
+ 'message' => 'myMessage',
+ 'fields' => ['name'],
+ 'em' => self::EM_NAME,
+ 'repositoryMethod' => 'findByCustom',
+ ]);
+
+ $repository = $this->createRepositoryMock();
+ $repository->expects($this->once())
+ ->method('findByCustom')
+ ->willReturn($result)
+ ;
+ $this->em = $this->createEntityManagerMock($repository);
+ $this->registry = $this->createRegistryMock($this->em);
+ $this->validator = $this->createValidator();
+ $this->validator->initialize($this->context);
+
+ $this->validator->validate($entity, $constraint);
+
+ $this->assertNoViolation();
+ }
+
+ public function resultWithEmptyIterator(): array
+ {
+ $entity = new SingleIntIdEntity(1, 'foo');
+
+ return [
+ [$entity, new class() implements \Iterator {
+ public function current()
+ {
+ return null;
+ }
+
+ public function valid(): bool
+ {
+ return false;
+ }
+
+ public function next()
+ {
+ }
+
+ public function key()
+ {
+ }
+
+ public function rewind()
+ {
+ }
+ }],
+ [$entity, new class() implements \Iterator {
+ public function current()
+ {
+ return false;
+ }
+
+ public function valid(): bool
+ {
+ return false;
+ }
+
+ public function next()
+ {
+ }
+
+ public function key()
+ {
+ }
+
+ public function rewind()
+ {
+ }
+ }],
+ ];
+ }
}
diff --git a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
index cc811ef42b7a5..bed785cbd88c9 100644
--- a/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
+++ b/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php
@@ -147,8 +147,7 @@ public function validate($entity, Constraint $constraint)
if ($result instanceof \Countable && 1 < \count($result)) {
$result = [$result->current(), $result->current()];
} else {
- $result = $result->current();
- $result = null === $result ? [] : [$result];
+ $result = $result->valid() && null !== $result->current() ? [$result->current()] : [];
}
} elseif (\is_array($result)) {
reset($result);
diff --git a/src/Symfony/Bridge/Twig/Extension/FormExtension.php b/src/Symfony/Bridge/Twig/Extension/FormExtension.php
index c8229f1049683..7f0b1ed597e36 100644
--- a/src/Symfony/Bridge/Twig/Extension/FormExtension.php
+++ b/src/Symfony/Bridge/Twig/Extension/FormExtension.php
@@ -113,8 +113,18 @@ public function getFieldValue(FormView $view)
public function getFieldLabel(FormView $view): ?string
{
+ if (false === $label = $view->vars['label']) {
+ return null;
+ }
+
+ if (!$label && $labelFormat = $view->vars['label_format']) {
+ $label = str_replace(['%id%', '%name%'], [$view->vars['id'], $view->vars['name']], $labelFormat);
+ } elseif (!$label) {
+ $label = ucfirst(strtolower(trim(preg_replace(['/([A-Z])/', '/[_\s]+/'], ['_$1', ' '], $view->vars['name']))));
+ }
+
return $this->createFieldTranslation(
- $view->vars['label'],
+ $label,
$view->vars['label_translation_parameters'] ?: [],
$view->vars['translation_domain']
);
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionFieldHelpersTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionFieldHelpersTest.php
index b5f936e1c761a..ce3ee926e11b8 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionFieldHelpersTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionFieldHelpersTest.php
@@ -81,6 +81,7 @@ protected function setUp(): void
],
],
'choice_translation_domain' => 'forms',
+ 'label_format' => 'label format for field "%name%" with id "%id%"',
])
->add('choice_multiple', ChoiceType::class, [
'choices' => [
@@ -89,6 +90,7 @@ protected function setUp(): void
],
'multiple' => true,
'expanded' => true,
+ 'label' => false,
])
->getForm()
;
@@ -121,6 +123,21 @@ public function testFieldTranslatedLabel()
$this->assertSame('[trans]base.username[/trans]', $this->translatorExtension->getFieldLabel($this->view->children['username']));
}
+ public function testFieldLabelFromFormat()
+ {
+ $this->assertSame('label format for field "choice_grouped" with id "register_choice_grouped"', $this->rawExtension->getFieldLabel($this->view->children['choice_grouped']));
+ }
+
+ public function testFieldLabelFallsBackToName()
+ {
+ $this->assertSame('Choice flat', $this->rawExtension->getFieldLabel($this->view->children['choice_flat']));
+ }
+
+ public function testFieldLabelReturnsNullWhenLabelIsDisabled()
+ {
+ $this->assertNull($this->rawExtension->getFieldLabel($this->view->children['choice_multiple']));
+ }
+
public function testFieldHelp()
{
$this->assertSame('base.username_help', $this->rawExtension->getFieldHelp($this->view->children['username']));
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php
index 54c8ec6c00541..ea3bb17bb3038 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpFoundationExtensionTest.php
@@ -21,7 +21,7 @@
class HttpFoundationExtensionTest extends TestCase
{
/**
- * @dataProvider getGenerateAbsoluteUrlData()
+ * @dataProvider getGenerateAbsoluteUrlData
*/
public function testGenerateAbsoluteUrl($expected, $path, $pathinfo)
{
@@ -114,7 +114,7 @@ public function testGenerateAbsoluteUrlWithScriptFileName()
}
/**
- * @dataProvider getGenerateRelativePathData()
+ * @dataProvider getGenerateRelativePathData
*/
public function testGenerateRelativePath($expected, $path, $pathinfo)
{
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php
index 30b3edf164637..01d586346ad30 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php
@@ -65,7 +65,7 @@ public function testHtmlRedirectionIsIntercepted($statusCode, $hasSession)
{
$response = new Response('Some content', $statusCode);
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock('Redirection'), true);
$listener->onKernelResponse($event);
@@ -78,7 +78,7 @@ public function testNonHtmlRedirectionIsNotIntercepted()
{
$response = new Response('Some content', '301');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(false, 'json', true), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'json', true), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock('Redirection'), true);
$listener->onKernelResponse($event);
@@ -92,7 +92,7 @@ public function testToolbarIsInjected()
$response = new Response('
');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -108,7 +108,7 @@ public function testToolbarIsNotInjectedOnNonHtmlContentType()
$response = new Response('');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
$response->headers->set('Content-Type', 'text/xml');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -124,7 +124,7 @@ public function testToolbarIsNotInjectedOnContentDispositionAttachment()
$response = new Response('');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
$response->headers->set('Content-Disposition', 'attachment; filename=test.html');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(false, 'html'), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html'), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -140,7 +140,7 @@ public function testToolbarIsNotInjectedOnRedirection($statusCode, $hasSession)
{
$response = new Response('', $statusCode);
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -165,7 +165,7 @@ public function testToolbarIsNotInjectedWhenThereIsNoNoXDebugTokenResponseHeader
{
$response = new Response('');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -181,7 +181,7 @@ public function testToolbarIsNotInjectedWhenOnSubRequest()
$response = new Response('');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::SUB_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::SUB_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -197,7 +197,7 @@ public function testToolbarIsNotInjectedOnIncompleteHtmlResponses()
$response = new Response('Some content
');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -213,7 +213,7 @@ public function testToolbarIsNotInjectedOnXmlHttpRequests()
$response = new Response('');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(true), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(true), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -229,7 +229,7 @@ public function testToolbarIsNotInjectedOnNonHtmlRequests()
$response = new Response('');
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(false, 'json'), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'json'), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock());
$listener->onKernelResponse($event);
@@ -242,7 +242,7 @@ public function testXDebugUrlHeader()
$response = new Response();
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $urlGenerator = $this->getUrlGeneratorMock();
+ $urlGenerator = $this->createMock(UrlGeneratorInterface::class);
$urlGenerator
->expects($this->once())
->method('generate')
@@ -250,7 +250,7 @@ public function testXDebugUrlHeader()
->willReturn('http://mydomain.com/_profiler/xxxxxxxx')
;
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator);
$listener->onKernelResponse($event);
@@ -263,7 +263,7 @@ public function testThrowingUrlGenerator()
$response = new Response();
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $urlGenerator = $this->getUrlGeneratorMock();
+ $urlGenerator = $this->createMock(UrlGeneratorInterface::class);
$urlGenerator
->expects($this->once())
->method('generate')
@@ -271,7 +271,7 @@ public function testThrowingUrlGenerator()
->willThrowException(new \Exception('foo'))
;
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator);
$listener->onKernelResponse($event);
@@ -284,7 +284,7 @@ public function testThrowingErrorCleanup()
$response = new Response();
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
- $urlGenerator = $this->getUrlGeneratorMock();
+ $urlGenerator = $this->createMock(UrlGeneratorInterface::class);
$urlGenerator
->expects($this->once())
->method('generate')
@@ -292,7 +292,7 @@ public function testThrowingErrorCleanup()
->willThrowException(new \Exception("This\nmultiline\r\ntabbed text should\tcome out\r on\n \ta single plain\r\nline"))
;
- $event = new ResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
+ $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator);
$listener->onKernelResponse($event);
@@ -331,14 +331,4 @@ protected function getTwigMock($render = 'WDT')
return $templating;
}
-
- protected function getUrlGeneratorMock()
- {
- return $this->createMock(UrlGeneratorInterface::class);
- }
-
- protected function getKernelMock()
- {
- return $this->createMock(Kernel::class);
- }
}
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Profiler/TemplateManagerTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Profiler/TemplateManagerTest.php
index 1e834e15cb830..df67579218b04 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Profiler/TemplateManagerTest.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Profiler/TemplateManagerTest.php
@@ -20,8 +20,6 @@
use Twig\Loader\LoaderInterface;
/**
- * Test for TemplateManager class.
- *
* @author Artur Wielogórski
*/
class TemplateManagerTest extends TestCase
@@ -37,7 +35,7 @@ class TemplateManagerTest extends TestCase
protected $profiler;
/**
- * @var \Symfony\Bundle\WebProfilerBundle\Profiler\TemplateManager
+ * @var TemplateManager
*/
protected $templateManager;
@@ -45,7 +43,7 @@ protected function setUp(): void
{
parent::setUp();
- $profiler = $this->mockProfiler();
+ $this->profiler = $this->createMock(Profiler::class);
$twigEnvironment = $this->mockTwigEnvironment();
$templates = [
'data_collector.foo' => ['foo', '@Foo/Collector/foo.html.twig'],
@@ -53,7 +51,7 @@ protected function setUp(): void
'data_collector.baz' => ['baz', '@Foo/Collector/baz.html.twig'],
];
- $this->templateManager = new TemplateManager($profiler, $twigEnvironment, $templates);
+ $this->templateManager = new TemplateManager($this->profiler, $twigEnvironment, $templates);
}
public function testGetNameOfInvalidTemplate()
@@ -97,11 +95,6 @@ public function profileHasCollectorCallback($panel)
}
}
- protected function mockProfile()
- {
- return $this->createMock(Profile::class);
- }
-
protected function mockTwigEnvironment()
{
$this->twigEnvironment = $this->createMock(Environment::class);
@@ -116,13 +109,6 @@ protected function mockTwigEnvironment()
return $this->twigEnvironment;
}
-
- protected function mockProfiler()
- {
- $this->profiler = $this->createMock(Profiler::class);
-
- return $this->profiler;
- }
}
class ProfileDummy extends Profile
diff --git a/src/Symfony/Component/Console/EventListener/ErrorListener.php b/src/Symfony/Component/Console/EventListener/ErrorListener.php
index a34075793e165..897d9853f2848 100644
--- a/src/Symfony/Component/Console/EventListener/ErrorListener.php
+++ b/src/Symfony/Component/Console/EventListener/ErrorListener.php
@@ -40,12 +40,12 @@ public function onConsoleError(ConsoleErrorEvent $event)
$error = $event->getError();
if (!$inputString = $this->getInputString($event)) {
- $this->logger->error('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => $error->getMessage()]);
+ $this->logger->critical('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => $error->getMessage()]);
return;
}
- $this->logger->error('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]);
+ $this->logger->critical('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]);
}
public function onConsoleTerminate(ConsoleTerminateEvent $event)
diff --git a/src/Symfony/Component/Console/Tests/EventListener/ErrorListenerTest.php b/src/Symfony/Component/Console/Tests/EventListener/ErrorListenerTest.php
index ce3df1a0ec7bd..2bafab040f8b6 100644
--- a/src/Symfony/Component/Console/Tests/EventListener/ErrorListenerTest.php
+++ b/src/Symfony/Component/Console/Tests/EventListener/ErrorListenerTest.php
@@ -30,35 +30,35 @@ public function testOnConsoleError()
{
$error = new \TypeError('An error occurred');
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->once())
- ->method('error')
+ ->method('critical')
->with('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => 'test:run --foo=baz buzz', 'message' => 'An error occurred'])
;
$listener = new ErrorListener($logger);
- $listener->onConsoleError(new ConsoleErrorEvent(new ArgvInput(['console.php', 'test:run', '--foo=baz', 'buzz']), $this->getOutput(), $error, new Command('test:run')));
+ $listener->onConsoleError(new ConsoleErrorEvent(new ArgvInput(['console.php', 'test:run', '--foo=baz', 'buzz']), $this->createMock(OutputInterface::class), $error, new Command('test:run')));
}
public function testOnConsoleErrorWithNoCommandAndNoInputString()
{
$error = new \RuntimeException('An error occurred');
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->once())
- ->method('error')
+ ->method('critical')
->with('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => 'An error occurred'])
;
$listener = new ErrorListener($logger);
- $listener->onConsoleError(new ConsoleErrorEvent(new NonStringInput(), $this->getOutput(), $error));
+ $listener->onConsoleError(new ConsoleErrorEvent(new NonStringInput(), $this->createMock(OutputInterface::class), $error));
}
public function testOnConsoleTerminateForNonZeroExitCodeWritesToLog()
{
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->once())
->method('debug')
@@ -71,7 +71,7 @@ public function testOnConsoleTerminateForNonZeroExitCodeWritesToLog()
public function testOnConsoleTerminateForZeroExitCodeDoesNotWriteToLog()
{
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->never())
->method('debug')
@@ -83,7 +83,7 @@ public function testOnConsoleTerminateForZeroExitCodeDoesNotWriteToLog()
public function testGetSubscribedEvents()
{
- $this->assertEquals(
+ $this->assertSame(
[
'console.error' => ['onConsoleError', -128],
'console.terminate' => ['onConsoleTerminate', -128],
@@ -94,7 +94,7 @@ public function testGetSubscribedEvents()
public function testAllKindsOfInputCanBeLogged()
{
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->exactly(3))
->method('debug')
@@ -109,7 +109,7 @@ public function testAllKindsOfInputCanBeLogged()
public function testCommandNameIsDisplayedForNonStringableInput()
{
- $logger = $this->getLogger();
+ $logger = $this->createMock(LoggerInterface::class);
$logger
->expects($this->once())
->method('debug')
@@ -120,19 +120,9 @@ public function testCommandNameIsDisplayedForNonStringableInput()
$listener->onConsoleTerminate($this->getConsoleTerminateEvent($this->createMock(InputInterface::class), 255));
}
- private function getLogger()
- {
- return $this->getMockForAbstractClass(LoggerInterface::class);
- }
-
private function getConsoleTerminateEvent(InputInterface $input, $exitCode)
{
- return new ConsoleTerminateEvent(new Command('test:run'), $input, $this->getOutput(), $exitCode);
- }
-
- private function getOutput()
- {
- return $this->createMock(OutputInterface::class);
+ return new ConsoleTerminateEvent(new Command('test:run'), $input, $this->createMock(OutputInterface::class), $exitCode);
}
}
diff --git a/src/Symfony/Component/ErrorHandler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php b/src/Symfony/Component/ErrorHandler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php
index ad0e4b3eef00b..c4355f92ce089 100644
--- a/src/Symfony/Component/ErrorHandler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php
+++ b/src/Symfony/Component/ErrorHandler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php
@@ -39,7 +39,7 @@ public function enhance(\Throwable $error): ?\Throwable
$message = sprintf('Attempted to call an undefined method named "%s" of class "%s".', $methodName, $className);
- if (!class_exists($className) || null === $methods = get_class_methods($className)) {
+ if ('' === $methodName || !class_exists($className) || null === $methods = get_class_methods($className)) {
// failed to get the class or its methods on which an unknown method was called (for example on an anonymous class)
return new UndefinedMethodError($message, $error);
}
diff --git a/src/Symfony/Component/ErrorHandler/Tests/ErrorEnhancer/UndefinedMethodErrorEnhancerTest.php b/src/Symfony/Component/ErrorHandler/Tests/ErrorEnhancer/UndefinedMethodErrorEnhancerTest.php
index d6ac6c029c6fb..b31c6c292a8f4 100644
--- a/src/Symfony/Component/ErrorHandler/Tests/ErrorEnhancer/UndefinedMethodErrorEnhancerTest.php
+++ b/src/Symfony/Component/ErrorHandler/Tests/ErrorEnhancer/UndefinedMethodErrorEnhancerTest.php
@@ -40,6 +40,10 @@ public function provideUndefinedMethodData()
'Call to undefined method SplObjectStorage::what()',
'Attempted to call an undefined method named "what" of class "SplObjectStorage".',
],
+ [
+ 'Call to undefined method SplObjectStorage::()',
+ 'Attempted to call an undefined method named "" of class "SplObjectStorage".',
+ ],
[
'Call to undefined method SplObjectStorage::walid()',
"Attempted to call an undefined method named \"walid\" of class \"SplObjectStorage\".\nDid you mean to call \"valid\"?",
diff --git a/src/Symfony/Component/Finder/Finder.php b/src/Symfony/Component/Finder/Finder.php
index c3f7cad1b7e9e..65154ef2f2b44 100644
--- a/src/Symfony/Component/Finder/Finder.php
+++ b/src/Symfony/Component/Finder/Finder.php
@@ -654,7 +654,8 @@ public function append(iterable $iterator)
} elseif ($iterator instanceof \Traversable || \is_array($iterator)) {
$it = new \ArrayIterator();
foreach ($iterator as $file) {
- $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file));
+ $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file);
+ $it[$file->getPathname()] = $file;
}
$this->iterators[] = $it;
} else {
diff --git a/src/Symfony/Component/Finder/Tests/FinderTest.php b/src/Symfony/Component/Finder/Tests/FinderTest.php
index 5c75294979690..83e3a01e3106a 100644
--- a/src/Symfony/Component/Finder/Tests/FinderTest.php
+++ b/src/Symfony/Component/Finder/Tests/FinderTest.php
@@ -1118,6 +1118,17 @@ public function testAppendDoesNotRequireIn()
$this->assertIterator(iterator_to_array($finder->getIterator()), $finder1->getIterator());
}
+ public function testMultipleAppendCallsWithSorting()
+ {
+ $finder = $this->buildFinder()
+ ->sortByName()
+ ->append([self::$tmpDir.\DIRECTORY_SEPARATOR.'qux_1000_1.php'])
+ ->append([self::$tmpDir.\DIRECTORY_SEPARATOR.'qux_1002_0.php'])
+ ;
+
+ $this->assertOrderedIterator($this->toAbsolute(['qux_1000_1.php', 'qux_1002_0.php']), $finder->getIterator());
+ }
+
public function testCountDirectories()
{
$directory = Finder::create()->directories()->in(self::$tmpDir);
diff --git a/src/Symfony/Component/Form/Tests/FormFactoryTest.php b/src/Symfony/Component/Form/Tests/FormFactoryTest.php
index 6395782f07438..dc39d13e0f8e4 100644
--- a/src/Symfony/Component/Form/Tests/FormFactoryTest.php
+++ b/src/Symfony/Component/Form/Tests/FormFactoryTest.php
@@ -76,7 +76,7 @@ public function testCreateNamedBuilderWithTypeName()
{
$options = ['a' => '1', 'b' => '2'];
$resolvedOptions = ['a' => '2', 'b' => '3'];
- $resolvedType = $this->getMockResolvedType();
+ $resolvedType = $this->createMock(ResolvedFormTypeInterface::class);
$this->registry->expects($this->once())
->method('getType')
@@ -104,7 +104,7 @@ public function testCreateNamedBuilderFillsDataOption()
$givenOptions = ['a' => '1', 'b' => '2'];
$expectedOptions = array_merge($givenOptions, ['data' => 'DATA']);
$resolvedOptions = ['a' => '2', 'b' => '3', 'data' => 'DATA'];
- $resolvedType = $this->getMockResolvedType();
+ $resolvedType = $this->createMock(ResolvedFormTypeInterface::class);
$this->registry->expects($this->once())
->method('getType')
@@ -131,7 +131,7 @@ public function testCreateNamedBuilderDoesNotOverrideExistingDataOption()
{
$options = ['a' => '1', 'b' => '2', 'data' => 'CUSTOM'];
$resolvedOptions = ['a' => '2', 'b' => '3', 'data' => 'CUSTOM'];
- $resolvedType = $this->getMockResolvedType();
+ $resolvedType = $this->createMock(ResolvedFormTypeInterface::class);
$this->registry->expects($this->once())
->method('getType')
@@ -196,7 +196,7 @@ public function testCreateNamed()
{
$options = ['a' => '1', 'b' => '2'];
$resolvedOptions = ['a' => '2', 'b' => '3'];
- $resolvedType = $this->getMockResolvedType();
+ $resolvedType = $this->createMock(ResolvedFormTypeInterface::class);
$this->registry->expects($this->once())
->method('getType')
@@ -470,9 +470,4 @@ private function getMockFactory(array $methods = [])
->setConstructorArgs([$this->registry])
->getMock();
}
-
- private function getMockResolvedType()
- {
- return $this->createMock(ResolvedFormTypeInterface::class);
- }
}
diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
index 3633f2e93f5e9..c93ad3ac1dc7b 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
@@ -727,7 +727,7 @@ public function testGetUriForPath()
}
/**
- * @dataProvider getRelativeUriForPathData()
+ * @dataProvider getRelativeUriForPathData
*/
public function testGetRelativeUriForPath($expected, $pathinfo, $path)
{
diff --git a/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php b/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php
index 758b9c16a8724..7d96f730d7eae 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/UrlHelperTest.php
@@ -20,7 +20,7 @@
class UrlHelperTest extends TestCase
{
/**
- * @dataProvider getGenerateAbsoluteUrlData()
+ * @dataProvider getGenerateAbsoluteUrlData
*/
public function testGenerateAbsoluteUrl($expected, $path, $pathinfo)
{
@@ -113,7 +113,7 @@ public function testGenerateAbsoluteUrlWithScriptFileName()
}
/**
- * @dataProvider getGenerateRelativePathData()
+ * @dataProvider getGenerateRelativePathData
*/
public function testGenerateRelativePath($expected, $path, $pathinfo)
{
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index 409f9519393e4..18c077b5e21a4 100644
--- a/src/Symfony/Component/HttpKernel/Kernel.php
+++ b/src/Symfony/Component/HttpKernel/Kernel.php
@@ -74,11 +74,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
private static $freshCache = [];
- public const VERSION = '5.2.2';
- public const VERSION_ID = 50202;
+ public const VERSION = '5.2.3';
+ public const VERSION_ID = 50203;
public const MAJOR_VERSION = 5;
public const MINOR_VERSION = 2;
- public const RELEASE_VERSION = 2;
+ public const RELEASE_VERSION = 3;
public const EXTRA_VERSION = '';
public const END_OF_MAINTENANCE = '07/2021';
diff --git a/src/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php b/src/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php
index 80c1b576be3e9..80d9796070bc0 100644
--- a/src/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/CacheClearer/ChainCacheClearerTest.php
@@ -31,7 +31,7 @@ public static function tearDownAfterClass(): void
public function testInjectClearersInConstructor()
{
- $clearer = $this->getMockClearer();
+ $clearer = $this->createMock(CacheClearerInterface::class);
$clearer
->expects($this->once())
->method('clear');
@@ -39,9 +39,4 @@ public function testInjectClearersInConstructor()
$chainClearer = new ChainCacheClearer([$clearer]);
$chainClearer->clear(self::$cacheDir);
}
-
- protected function getMockClearer()
- {
- return $this->createMock(CacheClearerInterface::class);
- }
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
index def3831851345..fab9a8a38f607 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php
@@ -19,8 +19,6 @@
use Symfony\Component\HttpKernel\KernelEvents;
/**
- * Test AddRequestFormatsListener class.
- *
* @author Gildas Quemener
*/
class AddRequestFormatsListenerTest extends TestCase
@@ -47,7 +45,7 @@ public function testIsAnEventSubscriber()
public function testRegisteredEvent()
{
- $this->assertEquals(
+ $this->assertSame(
[KernelEvents::REQUEST => ['onKernelRequest', 100]],
AddRequestFormatsListener::getSubscribedEvents()
);
@@ -55,7 +53,7 @@ public function testRegisteredEvent()
public function testSetAdditionalFormats()
{
- $request = $this->getRequestMock();
+ $request = $this->createMock(Request::class);
$event = $this->getRequestEventMock($request);
$request->expects($this->once())
@@ -65,11 +63,6 @@ public function testSetAdditionalFormats()
$this->listener->onKernelRequest($event);
}
- protected function getRequestMock()
- {
- return $this->createMock(Request::class);
- }
-
protected function getRequestEventMock(Request $request)
{
$event = $this->createMock(RequestEvent::class);
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
index 20c9f9d8c9e44..ab92a7916877e 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
@@ -40,7 +40,7 @@ public function testLocaleIsSetInOnKernelRequest()
->method('setLocale')
->with($this->equalTo('fr'));
- $event = new RequestEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
+ $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
$this->listener->onKernelRequest($event);
}
@@ -57,7 +57,7 @@ public function testDefaultLocaleIsUsedOnExceptionsInOnKernelRequest()
$this->throwException(new \InvalidArgumentException())
);
- $event = new RequestEvent($this->createHttpKernel(), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
+ $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $this->createRequest('fr'), HttpKernelInterface::MASTER_REQUEST);
$this->listener->onKernelRequest($event);
}
@@ -71,7 +71,7 @@ public function testLocaleIsSetInOnKernelFinishRequestWhenParentRequestExists()
$this->requestStack->push($this->createRequest('fr'));
$this->requestStack->push($subRequest = $this->createRequest('de'));
- $event = new FinishRequestEvent($this->createHttpKernel(), $subRequest, HttpKernelInterface::SUB_REQUEST);
+ $event = new FinishRequestEvent($this->createMock(HttpKernelInterface::class), $subRequest, HttpKernelInterface::SUB_REQUEST);
$this->listener->onKernelFinishRequest($event);
}
@@ -84,7 +84,7 @@ public function testLocaleIsSetToDefaultOnKernelFinishRequestWhenParentRequestDo
$this->requestStack->push($subRequest = $this->createRequest('de'));
- $event = new FinishRequestEvent($this->createHttpKernel(), $subRequest, HttpKernelInterface::SUB_REQUEST);
+ $event = new FinishRequestEvent($this->createMock(HttpKernelInterface::class), $subRequest, HttpKernelInterface::SUB_REQUEST);
$this->listener->onKernelFinishRequest($event);
}
@@ -104,15 +104,10 @@ public function testDefaultLocaleIsUsedOnExceptionsInOnKernelFinishRequest()
$this->requestStack->push($this->createRequest('fr'));
$this->requestStack->push($subRequest = $this->createRequest('de'));
- $event = new FinishRequestEvent($this->createHttpKernel(), $subRequest, HttpKernelInterface::SUB_REQUEST);
+ $event = new FinishRequestEvent($this->createMock(HttpKernelInterface::class), $subRequest, HttpKernelInterface::SUB_REQUEST);
$this->listener->onKernelFinishRequest($event);
}
- private function createHttpKernel()
- {
- return $this->createMock(HttpKernelInterface::class);
- }
-
private function createRequest($locale)
{
$request = new Request();
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
index 2984ba31d11da..52a7c29f41cb7 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
@@ -100,15 +100,16 @@ public function testSend()
public function testSendThrowsForErrorResponse()
{
$client = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface {
- $xml = "
-
- i'm a teapot
- 418
-
- ";
-
- return new MockResponse($xml, [
+ $json = json_encode([
+ 'message' => 'i\'m a teapot',
+ 'type' => 'sender',
+ ]);
+
+ return new MockResponse($json, [
'http_code' => 418,
+ 'response_headers' => [
+ 'x-amzn-errortype' => '418',
+ ],
]);
});
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
index 5b79491fbcb0d..6bdd9b779d58d 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
@@ -95,15 +95,16 @@ public function testSend()
public function testSendThrowsForErrorResponse()
{
$client = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface {
- $xml = "
-
- i'm a teapot
- 418
-
- ";
-
- return new MockResponse($xml, [
+ $json = json_encode([
+ 'message' => 'i\'m a teapot',
+ 'type' => 'sender',
+ ]);
+
+ return new MockResponse($json, [
'http_code' => 418,
+ 'response_headers' => [
+ 'x-amzn-errortype' => '418',
+ ],
]);
});
diff --git a/src/Symfony/Component/Mailer/EventListener/MessageListener.php b/src/Symfony/Component/Mailer/EventListener/MessageListener.php
index dbf2570a27eac..f23c69d91dc74 100644
--- a/src/Symfony/Component/Mailer/EventListener/MessageListener.php
+++ b/src/Symfony/Component/Mailer/EventListener/MessageListener.php
@@ -58,7 +58,7 @@ public function addHeaderRule(string $headerName, int $rule): void
throw new InvalidArgumentException(sprintf('The "%d" rule is not supported.', $rule));
}
- $this->headerRules[$headerName] = $rule;
+ $this->headerRules[strtolower($headerName)] = $rule;
}
public function onMessage(MessageEvent $event): void
diff --git a/src/Symfony/Component/Mailer/Tests/EventListener/MessageListenerTest.php b/src/Symfony/Component/Mailer/Tests/EventListener/MessageListenerTest.php
index 6096f5614cb2c..41f71f72adf37 100644
--- a/src/Symfony/Component/Mailer/Tests/EventListener/MessageListenerTest.php
+++ b/src/Symfony/Component/Mailer/Tests/EventListener/MessageListenerTest.php
@@ -101,5 +101,17 @@ public function provideHeaders(): iterable
->add(new MailboxListHeader('bcc', [new Address('bcc-initial@example.com'), new Address('bcc-default@example.com'), new Address('bcc-default-1@example.com')]))
;
yield 'bcc, add another bcc (unique header)' => [$initialHeaders, $defaultHeaders, $expectedHeaders];
+
+ $initialHeaders = (new Headers())
+ ->add(new UnstructuredHeader('foo', 'initial'))
+ ;
+ $defaultHeaders = (new Headers())
+ ->add(new UnstructuredHeader('foo', 'bar'))
+ ->add(new UnstructuredHeader('bar', 'foo'))
+ ;
+ $rules = [
+ 'Foo' => MessageListener::HEADER_REPLACE,
+ ];
+ yield 'Capitalized header rule (case-insensitive), replace if set' => [$initialHeaders, $defaultHeaders, $defaultHeaders, $rules];
}
}
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/PostgreSqlConnection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/PostgreSqlConnection.php
index 9217550d14709..4490c7521f366 100644
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/PostgreSqlConnection.php
+++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/PostgreSqlConnection.php
@@ -87,7 +87,7 @@ public function setup(): void
{
parent::setup();
- $this->executeStatement(implode("\n", $this->getTriggerSql()));
+ $this->executeStatement('BEGIN;'.implode("\n", $this->getTriggerSql()).'COMMIT;');
}
/**
@@ -109,7 +109,6 @@ public function getExtraSetupSqlForTable(Table $createdTable): array
private function getTriggerSql(): array
{
return [
- 'BEGIN;',
sprintf('LOCK TABLE %s;', $this->configuration['table_name']),
// create trigger function
sprintf(<<<'SQL'
@@ -124,7 +123,6 @@ private function getTriggerSql(): array
// register trigger
sprintf('DROP TRIGGER IF EXISTS notify_trigger ON %s;', $this->configuration['table_name']),
sprintf('CREATE TRIGGER notify_trigger AFTER INSERT OR UPDATE ON %1$s FOR EACH ROW EXECUTE PROCEDURE notify_%1$s();', $this->configuration['table_name']),
- 'COMMIT;',
];
}
diff --git a/src/Symfony/Component/Mime/Header/Headers.php b/src/Symfony/Component/Mime/Header/Headers.php
index 9493e2c2da234..b8d8da64f0718 100644
--- a/src/Symfony/Component/Mime/Header/Headers.php
+++ b/src/Symfony/Component/Mime/Header/Headers.php
@@ -143,7 +143,7 @@ public function addParameterizedHeader(string $name, string $value, array $param
*/
public function addHeader(string $name, $argument, array $more = []): self
{
- $parts = explode('\\', self::HEADER_CLASS_MAP[$name] ?? UnstructuredHeader::class);
+ $parts = explode('\\', self::HEADER_CLASS_MAP[strtolower($name)] ?? UnstructuredHeader::class);
$method = 'add'.ucfirst(array_pop($parts));
if ('addUnstructuredHeader' === $method) {
$method = 'addTextHeader';
@@ -217,7 +217,7 @@ public function remove(string $name): void
public static function isUniqueHeader(string $name): bool
{
- return \in_array($name, self::UNIQUE_HEADERS, true);
+ return \in_array(strtolower($name), self::UNIQUE_HEADERS, true);
}
/**
diff --git a/src/Symfony/Component/Mime/Tests/Header/HeadersTest.php b/src/Symfony/Component/Mime/Tests/Header/HeadersTest.php
index 2255dbe7a7c8c..f465fb9e8515f 100644
--- a/src/Symfony/Component/Mime/Tests/Header/HeadersTest.php
+++ b/src/Symfony/Component/Mime/Tests/Header/HeadersTest.php
@@ -239,6 +239,20 @@ public function testRemoveIsNotCaseSensitive()
$this->assertFalse($headers->has('Message-ID'));
}
+ public function testAddHeaderIsNotCaseSensitive()
+ {
+ $headers = new Headers();
+ $headers->addHeader('From', ['from@example.com']);
+
+ $this->assertInstanceOf(MailboxListHeader::class, $headers->get('from'));
+ $this->assertEquals([new Address('from@example.com')], $headers->get('from')->getBody());
+ }
+
+ public function testIsUniqueHeaderIsNotCaseSensitive()
+ {
+ $this->assertTrue(Headers::isUniqueHeader('From'));
+ }
+
public function testToStringJoinsHeadersTogether()
{
$headers = new Headers();
diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/AuthenticationTrustResolverTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/AuthenticationTrustResolverTest.php
index 70c8e7a113791..cd1924c63edf6 100644
--- a/src/Symfony/Component/Security/Core/Tests/Authentication/AuthenticationTrustResolverTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Authentication/AuthenticationTrustResolverTest.php
@@ -107,8 +107,8 @@ protected function getRememberMeToken()
protected function getResolver()
{
return new AuthenticationTrustResolver(
- 'Symfony\\Component\\Security\\Core\\Authentication\\Token\\AnonymousToken',
- 'Symfony\\Component\\Security\\Core\\Authentication\\Token\\RememberMeToken'
+ AnonymousToken::class,
+ RememberMeToken::class
);
}
}
diff --git a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
index cb172d2b5138b..b7e2a411b392d 100644
--- a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
@@ -24,7 +24,7 @@ class ChainUserProviderTest extends TestCase
{
public function testLoadUserByUsername()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('loadUserByUsername')
@@ -32,12 +32,12 @@ public function testLoadUserByUsername()
->willThrowException(new UsernameNotFoundException('not found'))
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('loadUserByUsername')
->with($this->equalTo('foo'))
- ->willReturn($account = $this->getAccount())
+ ->willReturn($account = $this->createMock(UserInterface::class))
;
$provider = new ChainUserProvider([$provider1, $provider2]);
@@ -47,7 +47,7 @@ public function testLoadUserByUsername()
public function testLoadUserByUsernameThrowsUsernameNotFoundException()
{
$this->expectException(UsernameNotFoundException::class);
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('loadUserByUsername')
@@ -55,7 +55,7 @@ public function testLoadUserByUsernameThrowsUsernameNotFoundException()
->willThrowException(new UsernameNotFoundException('not found'))
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('loadUserByUsername')
@@ -69,14 +69,14 @@ public function testLoadUserByUsernameThrowsUsernameNotFoundException()
public function testRefreshUser()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
->willReturn(false)
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -89,7 +89,7 @@ public function testRefreshUser()
->willThrowException(new UnsupportedUserException('unsupported'))
;
- $provider3 = $this->getProvider();
+ $provider3 = $this->createMock(UserProviderInterface::class);
$provider3
->expects($this->once())
->method('supportsClass')
@@ -99,16 +99,16 @@ public function testRefreshUser()
$provider3
->expects($this->once())
->method('refreshUser')
- ->willReturn($account = $this->getAccount())
+ ->willReturn($account = $this->createMock(UserInterface::class))
;
$provider = new ChainUserProvider([$provider1, $provider2, $provider3]);
- $this->assertSame($account, $provider->refreshUser($this->getAccount()));
+ $this->assertSame($account, $provider->refreshUser($this->createMock(UserInterface::class)));
}
public function testRefreshUserAgain()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
@@ -121,7 +121,7 @@ public function testRefreshUserAgain()
->willThrowException(new UsernameNotFoundException('not found'))
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -131,17 +131,17 @@ public function testRefreshUserAgain()
$provider2
->expects($this->once())
->method('refreshUser')
- ->willReturn($account = $this->getAccount())
+ ->willReturn($account = $this->createMock(UserInterface::class))
;
$provider = new ChainUserProvider([$provider1, $provider2]);
- $this->assertSame($account, $provider->refreshUser($this->getAccount()));
+ $this->assertSame($account, $provider->refreshUser($this->createMock(UserInterface::class)));
}
public function testRefreshUserThrowsUnsupportedUserException()
{
$this->expectException(UnsupportedUserException::class);
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
@@ -154,7 +154,7 @@ public function testRefreshUserThrowsUnsupportedUserException()
->willThrowException(new UnsupportedUserException('unsupported'))
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -168,12 +168,12 @@ public function testRefreshUserThrowsUnsupportedUserException()
;
$provider = new ChainUserProvider([$provider1, $provider2]);
- $provider->refreshUser($this->getAccount());
+ $provider->refreshUser($this->createMock(UserInterface::class));
}
public function testSupportsClass()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
@@ -181,7 +181,7 @@ public function testSupportsClass()
->willReturn(false)
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -195,7 +195,7 @@ public function testSupportsClass()
public function testSupportsClassWhenNotSupported()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
@@ -203,7 +203,7 @@ public function testSupportsClassWhenNotSupported()
->willReturn(false)
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -217,7 +217,7 @@ public function testSupportsClassWhenNotSupported()
public function testAcceptsTraversable()
{
- $provider1 = $this->getProvider();
+ $provider1 = $this->createMock(UserProviderInterface::class);
$provider1
->expects($this->once())
->method('supportsClass')
@@ -230,7 +230,7 @@ public function testAcceptsTraversable()
->willThrowException(new UnsupportedUserException('unsupported'))
;
- $provider2 = $this->getProvider();
+ $provider2 = $this->createMock(UserProviderInterface::class);
$provider2
->expects($this->once())
->method('supportsClass')
@@ -240,11 +240,11 @@ public function testAcceptsTraversable()
$provider2
->expects($this->once())
->method('refreshUser')
- ->willReturn($account = $this->getAccount())
+ ->willReturn($account = $this->createMock(UserInterface::class))
;
$provider = new ChainUserProvider(new \ArrayObject([$provider1, $provider2]));
- $this->assertSame($account, $provider->refreshUser($this->getAccount()));
+ $this->assertSame($account, $provider->refreshUser($this->createMock(UserInterface::class)));
}
public function testPasswordUpgrades()
@@ -268,14 +268,4 @@ public function testPasswordUpgrades()
$provider = new ChainUserProvider([$provider1, $provider2]);
$provider->upgradePassword($user, 'foobar');
}
-
- protected function getAccount()
- {
- return $this->createMock(UserInterface::class);
- }
-
- protected function getProvider()
- {
- return $this->createMock(UserProviderInterface::class);
- }
}
diff --git a/src/Symfony/Component/Security/Core/Tests/Validator/Constraints/UserPasswordValidatorTest.php b/src/Symfony/Component/Security/Core/Tests/Validator/Constraints/UserPasswordValidatorTest.php
index 617d27f99b4f8..2be5a50ded7b5 100644
--- a/src/Symfony/Component/Security/Core/Tests/Validator/Constraints/UserPasswordValidatorTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Validator/Constraints/UserPasswordValidatorTest.php
@@ -54,7 +54,7 @@ protected function setUp(): void
{
$user = $this->createUser();
$this->tokenStorage = $this->createTokenStorage($user);
- $this->encoder = $this->createPasswordEncoder();
+ $this->encoder = $this->createMock(PasswordEncoderInterface::class);
$this->encoderFactory = $this->createEncoderFactory($this->encoder);
parent::setUp();
@@ -154,11 +154,6 @@ protected function createUser()
return $mock;
}
- protected function createPasswordEncoder($isPasswordValid = true)
- {
- return $this->createMock(PasswordEncoderInterface::class);
- }
-
protected function createEncoderFactory($encoder = null)
{
$mock = $this->createMock(EncoderFactoryInterface::class);
diff --git a/src/Symfony/Component/Security/Http/Tests/Session/SessionAuthenticationStrategyTest.php b/src/Symfony/Component/Security/Http/Tests/Session/SessionAuthenticationStrategyTest.php
index 94ff9228bca29..69953ae6fd14e 100644
--- a/src/Symfony/Component/Security/Http/Tests/Session/SessionAuthenticationStrategyTest.php
+++ b/src/Symfony/Component/Security/Http/Tests/Session/SessionAuthenticationStrategyTest.php
@@ -25,7 +25,7 @@ public function testSessionIsNotChanged()
$request->expects($this->never())->method('getSession');
$strategy = new SessionAuthenticationStrategy(SessionAuthenticationStrategy::NONE);
- $strategy->onAuthentication($request, $this->getToken());
+ $strategy->onAuthentication($request, $this->createMock(TokenInterface::class));
}
public function testUnsupportedStrategy()
@@ -36,7 +36,7 @@ public function testUnsupportedStrategy()
$request->expects($this->never())->method('getSession');
$strategy = new SessionAuthenticationStrategy('foo');
- $strategy->onAuthentication($request, $this->getToken());
+ $strategy->onAuthentication($request, $this->createMock(TokenInterface::class));
}
public function testSessionIsMigrated()
@@ -45,7 +45,7 @@ public function testSessionIsMigrated()
$session->expects($this->once())->method('migrate')->with($this->equalTo(true));
$strategy = new SessionAuthenticationStrategy(SessionAuthenticationStrategy::MIGRATE);
- $strategy->onAuthentication($this->getRequest($session), $this->getToken());
+ $strategy->onAuthentication($this->getRequest($session), $this->createMock(TokenInterface::class));
}
public function testSessionIsInvalidated()
@@ -54,7 +54,7 @@ public function testSessionIsInvalidated()
$session->expects($this->once())->method('invalidate');
$strategy = new SessionAuthenticationStrategy(SessionAuthenticationStrategy::INVALIDATE);
- $strategy->onAuthentication($this->getRequest($session), $this->getToken());
+ $strategy->onAuthentication($this->getRequest($session), $this->createMock(TokenInterface::class));
}
private function getRequest($session = null)
@@ -67,9 +67,4 @@ private function getRequest($session = null)
return $request;
}
-
- private function getToken()
- {
- return $this->createMock(TokenInterface::class);
- }
}
diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
index 4b438c2d51fc9..c830359d269f0 100644
--- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
+++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
@@ -111,8 +111,9 @@ protected function extractAttributes(object $object, string $format = null, arra
// properties
foreach ($reflClass->getProperties() as $reflProperty) {
+ $isPublic = $reflProperty->isPublic();
+
if ($checkPropertyInitialization) {
- $isPublic = $reflProperty->isPublic();
if (!$isPublic) {
$reflProperty->setAccessible(true);
}
@@ -120,9 +121,10 @@ protected function extractAttributes(object $object, string $format = null, arra
unset($attributes[$reflProperty->name]);
continue;
}
- if (!$isPublic) {
- continue;
- }
+ }
+
+ if (!$isPublic) {
+ continue;
}
if ($reflProperty->isStatic() || !$this->isAllowedAttribute($object, $reflProperty->name, $format, $context)) {
diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/DummyPrivatePropertyWithoutGetter.php b/src/Symfony/Component/Serializer/Tests/Fixtures/DummyPrivatePropertyWithoutGetter.php
new file mode 100644
index 0000000000000..d20832131b29a
--- /dev/null
+++ b/src/Symfony/Component/Serializer/Tests/Fixtures/DummyPrivatePropertyWithoutGetter.php
@@ -0,0 +1,23 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Serializer\Tests\Fixtures;
+
+final class DummyPrivatePropertyWithoutGetter
+{
+ private $foo = 'foo';
+ private $bar = 'bar';
+
+ public function getBar()
+ {
+ return $this->bar;
+ }
+}
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
index ccb54d9c6fd25..459b01c92408f 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
@@ -29,7 +29,7 @@ public function testCallbacks($callbacks, $valueBar, $result)
}
/**
- * @dataProvider provideInvalidCallbacks()
+ * @dataProvider provideInvalidCallbacks
*/
public function testUncallableCallbacks($callbacks)
{
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
index 259a00751818c..f23bedea1fb58 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
@@ -33,6 +33,7 @@
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Tests\Fixtures\Annotations\GroupDummy;
use Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy;
+use Symfony\Component\Serializer\Tests\Fixtures\DummyPrivatePropertyWithoutGetter;
use Symfony\Component\Serializer\Tests\Fixtures\OtherSerializedNameDummy;
use Symfony\Component\Serializer\Tests\Fixtures\Php74Dummy;
use Symfony\Component\Serializer\Tests\Fixtures\Php74DummyPrivate;
@@ -140,6 +141,15 @@ public function testNormalizeObjectWithUninitializedPrivateProperties()
);
}
+ public function testNormalizeObjectWithPrivatePropertyWithoutGetter()
+ {
+ $obj = new DummyPrivatePropertyWithoutGetter();
+ $this->assertEquals(
+ ['bar' => 'bar'],
+ $this->normalizer->normalize($obj, 'any')
+ );
+ }
+
public function testDenormalize()
{
$obj = $this->normalizer->denormalize(
diff --git a/src/Symfony/Component/Uid/BinaryUtil.php b/src/Symfony/Component/Uid/BinaryUtil.php
index 32e7e0dff3c6c..5e9741cbea200 100644
--- a/src/Symfony/Component/Uid/BinaryUtil.php
+++ b/src/Symfony/Component/Uid/BinaryUtil.php
@@ -40,6 +40,8 @@ class BinaryUtil
// 0x01b21dd213814000 is the number of 100-ns intervals between the
// UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00.
private const TIME_OFFSET_INT = 0x01b21dd213814000;
+ private const TIME_OFFSET_BIN = "\x01\xb2\x1d\xd2\x13\x81\x40\x00";
+ private const TIME_OFFSET_COM1 = "\xfe\x4d\xe2\x2d\xec\x7e\xbf\xff";
private const TIME_OFFSET_COM2 = "\xfe\x4d\xe2\x2d\xec\x7e\xc0\x00";
public static function toBase(string $bytes, array $map): string
@@ -114,20 +116,24 @@ public static function add(string $a, string $b): string
return $a;
}
+ /**
+ * @param string $time Count of 100-nanosecond intervals since the UUID epoch 1582-10-15 00:00:00 in hexadecimal
+ */
public static function timeToFloat(string $time): float
{
if (\PHP_INT_SIZE >= 8) {
- return (hexdec($time) - self::TIME_OFFSET_INT) / 10000000;
- }
-
- $time = str_pad(hex2bin($time), 8, "\0", \STR_PAD_LEFT);
- $time = self::add($time, self::TIME_OFFSET_COM2);
-
- if ($time >= self::TIME_OFFSET_COM2) {
- $time = -1 * self::toBase($time ^ "\xff\xff\xff\xff\xff\xff\xff\xff", self::BASE10);
+ $time = hexdec($time) - self::TIME_OFFSET_INT;
} else {
- $time[0] = $time[0] & "\x7F";
- $time = self::toBase($time, self::BASE10);
+ $time = str_pad(hex2bin($time), 8, "\0", \STR_PAD_LEFT);
+
+ if (self::TIME_OFFSET_BIN <= $time) {
+ $time = self::add($time, self::TIME_OFFSET_COM2);
+ $time[0] = $time[0] & "\x7F";
+ $time = self::toBase($time, self::BASE10);
+ } else {
+ $time = self::add($time, self::TIME_OFFSET_COM1);
+ $time = '-'.self::toBase($time ^ "\xff\xff\xff\xff\xff\xff\xff\xff", self::BASE10);
+ }
}
return $time / 10000000;
diff --git a/src/Symfony/Component/Uid/Tests/UuidTest.php b/src/Symfony/Component/Uid/Tests/UuidTest.php
index 5369477d3ca3e..6b5b27f3b5001 100644
--- a/src/Symfony/Component/Uid/Tests/UuidTest.php
+++ b/src/Symfony/Component/Uid/Tests/UuidTest.php
@@ -199,4 +199,13 @@ public function testFromStringOnExtendedClassReturnsStatic()
{
$this->assertInstanceOf(CustomUuid::class, CustomUuid::fromString(self::A_UUID_V4));
}
+
+ public function testGetTime()
+ {
+ $this->assertSame(103072857660.6847, ((new UuidV1('ffffffff-ffff-1fff-a456-426655440000'))->getTime()));
+ $this->assertSame(0.0000001, ((new UuidV1('13814001-1dd2-11b2-a456-426655440000'))->getTime()));
+ $this->assertSame(0.0, (new UuidV1('13814000-1dd2-11b2-a456-426655440000'))->getTime());
+ $this->assertSame(-0.0000001, (new UuidV1('13813fff-1dd2-11b2-a456-426655440000'))->getTime());
+ $this->assertSame(-12219292800.0, ((new UuidV1('00000000-0000-1000-a456-426655440000'))->getTime()));
+ }
}
diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
index 68e21606edcab..ea5e947be880b 100644
--- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
+++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
@@ -21,13 +21,13 @@ class FilesLoaderTest extends TestCase
{
public function testCallsGetFileLoaderInstanceForeachPath()
{
- $loader = $this->getFilesLoader($this->getFileLoader());
+ $loader = $this->getFilesLoader($this->createMock(LoaderInterface::class));
$this->assertEquals(4, $loader->getTimesCalled());
}
public function testCallsActualFileLoaderForMetadata()
{
- $fileLoader = $this->getFileLoader();
+ $fileLoader = $this->createMock(LoaderInterface::class);
$fileLoader->expects($this->exactly(4))
->method('loadClassMetadata');
$loader = $this->getFilesLoader($fileLoader);
@@ -43,9 +43,4 @@ public function getFilesLoader(LoaderInterface $loader)
__DIR__.'/constraint-mapping.txt',
], $loader]);
}
-
- public function getFileLoader()
- {
- return $this->createMock(LoaderInterface::class);
- }
}
diff --git a/src/Symfony/Component/Yaml/Dumper.php b/src/Symfony/Component/Yaml/Dumper.php
index 2de07d023142f..dcb104ccff065 100644
--- a/src/Symfony/Component/Yaml/Dumper.php
+++ b/src/Symfony/Component/Yaml/Dumper.php
@@ -68,7 +68,7 @@ public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0):
$output .= "\n";
}
- if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) {
+ if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) {
// If the first line starts with a space character, the spec requires a blockIndicationIndicator
// http://www.yaml.org/spec/1.2/spec.html#id2793979
$blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : '';
@@ -97,7 +97,7 @@ public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0):
if ($value instanceof TaggedValue) {
$output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag());
- if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) {
+ if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) {
// If the first line starts with a space character, the spec requires a blockIndicationIndicator
// http://www.yaml.org/spec/1.2/spec.html#id2793979
$blockIndentationIndicator = (' ' === substr($value->getValue(), 0, 1)) ? (string) $this->indentation : '';
diff --git a/src/Symfony/Contracts/Cache/composer.json b/src/Symfony/Contracts/Cache/composer.json
index f95df70f6496c..6f274f1774d5c 100644
--- a/src/Symfony/Contracts/Cache/composer.json
+++ b/src/Symfony/Contracts/Cache/composer.json
@@ -27,7 +27,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/Deprecation/composer.json b/src/Symfony/Contracts/Deprecation/composer.json
index 27aa491e11d99..88d3055927dea 100644
--- a/src/Symfony/Contracts/Deprecation/composer.json
+++ b/src/Symfony/Contracts/Deprecation/composer.json
@@ -24,7 +24,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/EventDispatcher/composer.json b/src/Symfony/Contracts/EventDispatcher/composer.json
index 36aeed02d3767..8eaf0354fd2d7 100644
--- a/src/Symfony/Contracts/EventDispatcher/composer.json
+++ b/src/Symfony/Contracts/EventDispatcher/composer.json
@@ -27,7 +27,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/HttpClient/composer.json b/src/Symfony/Contracts/HttpClient/composer.json
index 2dc9990e1e886..9ab9eaf76cc7a 100644
--- a/src/Symfony/Contracts/HttpClient/composer.json
+++ b/src/Symfony/Contracts/HttpClient/composer.json
@@ -26,7 +26,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/Service/composer.json b/src/Symfony/Contracts/Service/composer.json
index efbf399d1c900..524f6a6c6c1ec 100644
--- a/src/Symfony/Contracts/Service/composer.json
+++ b/src/Symfony/Contracts/Service/composer.json
@@ -27,7 +27,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/Translation/composer.json b/src/Symfony/Contracts/Translation/composer.json
index 311c38b28c2a9..907d28f0a878e 100644
--- a/src/Symfony/Contracts/Translation/composer.json
+++ b/src/Symfony/Contracts/Translation/composer.json
@@ -26,7 +26,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
},
diff --git a/src/Symfony/Contracts/composer.json b/src/Symfony/Contracts/composer.json
index eecf32761fb35..4675ba056954b 100644
--- a/src/Symfony/Contracts/composer.json
+++ b/src/Symfony/Contracts/composer.json
@@ -48,7 +48,6 @@
},
"minimum-stability": "dev",
"extra": {
- "branch-version": "2.3",
"branch-alias": {
"dev-main": "2.3-dev"
}
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy