More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Language / LanguageUnitTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Language;
4
5 use Drupal\Core\Language\Language;
6 use Drupal\Core\Language\LanguageInterface;
7 use Drupal\Tests\UnitTestCase;
8
9 /**
10  * @coversDefaultClass \Drupal\Core\Language\Language
11  * @group Language
12  */
13 class LanguageUnitTest extends UnitTestCase {
14
15   /**
16    * @covers ::__construct
17    */
18   public function testConstruct() {
19     $name = $this->randomMachineName();
20     $language_code = $this->randomMachineName(2);
21     $uuid = $this->randomMachineName();
22     $language = new Language(['id' => $language_code, 'name' => $name, 'uuid' => $uuid]);
23     // Test that nonexistent properties are not added to the language object.
24     $this->assertTrue(property_exists($language, 'id'));
25     $this->assertTrue(property_exists($language, 'name'));
26     $this->assertFalse(property_exists($language, 'uuid'));
27   }
28
29   /**
30    * @covers ::getName
31    */
32   public function testGetName() {
33     $name = $this->randomMachineName();
34     $language_code = $this->randomMachineName(2);
35     $language = new Language(['id' => $language_code, 'name' => $name]);
36     $this->assertSame($name, $language->getName());
37   }
38
39   /**
40    * @covers ::getId
41    */
42   public function testGetLangcode() {
43     $language_code = $this->randomMachineName(2);
44     $language = new Language(['id' => $language_code]);
45     $this->assertSame($language_code, $language->getId());
46   }
47
48   /**
49    * @covers ::getDirection
50    */
51   public function testGetDirection() {
52     $language_code = $this->randomMachineName(2);
53     $language = new Language(['id' => $language_code, 'direction' => LanguageInterface::DIRECTION_RTL]);
54     $this->assertSame(LanguageInterface::DIRECTION_RTL, $language->getDirection());
55   }
56
57   /**
58    * @covers ::isDefault
59    */
60   public function testIsDefault() {
61     $language_default = $this->getMockBuilder('Drupal\Core\Language\LanguageDefault')->disableOriginalConstructor()->getMock();
62     $container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
63     $container->expects($this->any())
64       ->method('get')
65       ->with('language.default')
66       ->will($this->returnValue($language_default));
67     \Drupal::setContainer($container);
68
69     $language = new Language(['id' => $this->randomMachineName(2)]);
70     // Set up the LanguageDefault to return different default languages on
71     // consecutive calls.
72     $language_default->expects($this->any())
73       ->method('get')
74       ->willReturnOnConsecutiveCalls(
75         $language,
76         new Language(['id' => $this->randomMachineName(2)])
77       );
78
79     $this->assertTrue($language->isDefault());
80     $this->assertFalse($language->isDefault());
81   }
82
83   /**
84    * Tests sorting an array of language objects.
85    *
86    * @covers ::sort
87    *
88    * @dataProvider providerTestSortArrayOfLanguages
89    *
90    * @param \Drupal\Core\Language\LanguageInterface[] $languages
91    *   An array of language objects.
92    * @param array $expected
93    *   The expected array of keys.
94    */
95   public function testSortArrayOfLanguages(array $languages, array $expected) {
96     Language::sort($languages);
97     $this->assertSame($expected, array_keys($languages));
98   }
99
100   /**
101    * Provides data for testSortArrayOfLanguages.
102    *
103    * @return array
104    *   An array of test data.
105    */
106   public function providerTestSortArrayOfLanguages() {
107     $language9A = new Language(['id' => 'dd', 'name' => 'A', 'weight' => 9]);
108     $language10A = new Language(['id' => 'ee', 'name' => 'A', 'weight' => 10]);
109     $language10B = new Language(['id' => 'ff', 'name' => 'B', 'weight' => 10]);
110
111     return [
112       // Set up data set #0, already ordered by weight.
113       [
114         // Set the data.
115         [
116           $language9A->getId() => $language9A,
117           $language10B->getId() => $language10B,
118         ],
119         // Set the expected key order.
120         [
121           $language9A->getId(),
122           $language10B->getId(),
123         ],
124       ],
125       // Set up data set #1, out of order by weight.
126       [
127         [
128           $language10B->getId() => $language10B,
129           $language9A->getId() => $language9A,
130         ],
131         [
132           $language9A->getId(),
133           $language10B->getId(),
134         ],
135       ],
136       // Set up data set #2, tied by weight, already ordered by name.
137       [
138         [
139           $language10A->getId() => $language10A,
140           $language10B->getId() => $language10B,
141         ],
142         [
143           $language10A->getId(),
144           $language10B->getId(),
145         ],
146       ],
147       // Set up data set #3, tied by weight, out of order by name.
148       [
149         [
150           $language10B->getId() => $language10B,
151           $language10A->getId() => $language10A,
152         ],
153         [
154           $language10A->getId(),
155           $language10B->getId(),
156         ],
157       ],
158     ];
159   }
160
161 }