3 namespace Drupal\Tests\Core\Language;
5 use Drupal\Core\Language\Language;
6 use Drupal\Core\Language\LanguageInterface;
7 use Drupal\Tests\UnitTestCase;
10 * @coversDefaultClass \Drupal\Core\Language\Language
13 class LanguageUnitTest extends UnitTestCase {
16 * @covers ::__construct
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'));
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());
42 public function testGetLangcode() {
43 $language_code = $this->randomMachineName(2);
44 $language = new Language(['id' => $language_code]);
45 $this->assertSame($language_code, $language->getId());
49 * @covers ::getDirection
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());
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())
65 ->with('language.default')
66 ->will($this->returnValue($language_default));
67 \Drupal::setContainer($container);
69 $language = new Language(['id' => $this->randomMachineName(2)]);
70 // Set up the LanguageDefault to return different default languages on
72 $language_default->expects($this->any())
74 ->willReturnOnConsecutiveCalls(
76 new Language(['id' => $this->randomMachineName(2)])
79 $this->assertTrue($language->isDefault());
80 $this->assertFalse($language->isDefault());
84 * Tests sorting an array of language objects.
88 * @dataProvider providerTestSortArrayOfLanguages
90 * @param \Drupal\Core\Language\LanguageInterface[] $languages
91 * An array of language objects.
92 * @param array $expected
93 * The expected array of keys.
95 public function testSortArrayOfLanguages(array $languages, array $expected) {
96 Language::sort($languages);
97 $this->assertSame($expected, array_keys($languages));
101 * Provides data for testSortArrayOfLanguages.
104 * An array of test data.
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]);
112 // Set up data set #0, already ordered by weight.
116 $language9A->getId() => $language9A,
117 $language10B->getId() => $language10B,
119 // Set the expected key order.
121 $language9A->getId(),
122 $language10B->getId(),
125 // Set up data set #1, out of order by weight.
128 $language10B->getId() => $language10B,
129 $language9A->getId() => $language9A,
132 $language9A->getId(),
133 $language10B->getId(),
136 // Set up data set #2, tied by weight, already ordered by name.
139 $language10A->getId() => $language10A,
140 $language10B->getId() => $language10B,
143 $language10A->getId(),
144 $language10B->getId(),
147 // Set up data set #3, tied by weight, out of order by name.
150 $language10B->getId() => $language10B,
151 $language10A->getId() => $language10A,
154 $language10A->getId(),
155 $language10B->getId(),