request = $this->createMock(IRequest::class); $this->clientMapper = $this->createMock(ClientMapper::class); $this->secureRandom = $this->createMock(ISecureRandom::class); $this->accessTokenMapper = $this->createMock(AccessTokenMapper::class); $this->authTokenProvider = $this->createMock(IAuthTokenProvider::class); $this->userManager = $this->createMock(IUserManager::class); $this->crypto = $this->createMock(ICrypto::class); $this->l = $this->createMock(IL10N::class); $this->l->method('t') ->willReturnArgument(0); $this->settingsController = new SettingsController( 'oauth2', $this->request, $this->clientMapper, $this->secureRandom, $this->accessTokenMapper, $this->l, $this->authTokenProvider, $this->userManager, $this->crypto ); } public function testAddClient(): void { $this->secureRandom ->expects($this->exactly(2)) ->method('generate') ->with(64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') ->willReturnOnConsecutiveCalls( 'MySecret', 'MyClientIdentifier'); $this->crypto ->expects($this->once()) ->method('calculateHMAC') ->willReturn('MyHashedSecret'); $client = new Client(); $client->setName('My Client Name'); $client->setRedirectUri('https://example.com/'); $client->setSecret(bin2hex('MyHashedSecret')); $client->setClientIdentifier('MyClientIdentifier'); $this->clientMapper ->expects($this->once()) ->method('insert') ->with($this->callback(function (Client $c) { return $c->getName() === 'My Client Name' && $c->getRedirectUri() === 'https://example.com/' && $c->getSecret() === bin2hex('MyHashedSecret') && $c->getClientIdentifier() === 'MyClientIdentifier'; }))->willReturnCallback(function (Client $c) { $c->setId(42); return $c; }); $result = $this->settingsController->addClient('My Client Name', 'https://example.com/'); $this->assertInstanceOf(JSONResponse::class, $result); $data = $result->getData(); $this->assertEquals([ 'id' => 42, 'name' => 'My Client Name', 'redirectUri' => 'https://example.com/', 'clientId' => 'MyClientIdentifier', 'clientSecret' => 'MySecret', ], $data); } public function testDeleteClient(): void { $userManager = \OC::$server->getUserManager(); // count other users in the db before adding our own $count = 0; $function = function (IUser $user) use (&$count): void { if ($user->getLastLogin() > 0) { $count++; } }; $userManager->callForAllUsers($function); $user1 = $userManager->createUser('test101', 'test101'); $user1->updateLastLoginTimestamp(); $tokenProviderMock = $this->getMockBuilder(IAuthTokenProvider::class)->getMock(); // expect one call per user and ensure the correct client name $tokenProviderMock ->expects($this->exactly($count + 1)) ->method('invalidateTokensOfUser') ->with($this->isType('string'), 'My Client Name'); $client = new Client(); $client->setId(123); $client->setName('My Client Name'); $client->setRedirectUri('https://example.com/'); $client->setSecret(bin2hex('MyHashedSecret')); $client->setClientIdentifier('MyClientIdentifier'); $this->clientMapper ->method('getByUid') ->with(123) ->willReturn($client); $this->accessTokenMapper ->expects($this->once()) ->method('deleteByClientId') ->with(123); $this->clientMapper ->expects($this->once()) ->method('delete') ->with($client); $settingsController = new SettingsController( 'oauth2', $this->request, $this->clientMapper, $this->secureRandom, $this->accessTokenMapper, $this->l, $tokenProviderMock, $userManager, $this->crypto ); $result = $settingsController->deleteClient(123); $this->assertInstanceOf(JSONResponse::class, $result); $this->assertEquals([], $result->getData()); $user1->delete(); } public function testInvalidRedirectUri(): void { $result = $this->settingsController->addClient('test', 'invalidurl'); $this->assertEquals(Http::STATUS_BAD_REQUEST, $result->getStatus()); $this->assertSame(['message' => 'Your redirect URL needs to be a full URL for example: https://yourdomain.com/path'], $result->getData()); } } /tree/docs/design/fo_impl/fo_classes.xsl?h=Temp_PDF_in_PDF&id=c7a95e6401945cd7df098faa6046ffc0f1247d4d'>treecommitdiffstats
path: root/docs/design/fo_impl/fo_classes.xsl
blob: bacb805df52c8d3a99960d1ddac44e7f69a7e058 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?xml version="1.0"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:output method="html"/>

<xsl:strip-space elements="*"/>

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="formattingObjects">
<html>
<head>
<title><xsl:value-of select="title"/></title>
</head>
<body>
<h2><xsl:value-of select="title"/></h2>
<xsl:apply-templates select="usage"/>
<h2>Block-Level Formatting Objects</h2>
<xsl:apply-templates select="category[@class='block-level']"/>
<h2>Inline-Level Formatting Objects</h2>
<xsl:apply-templates select="category[@class='inline-level']"/>
<h2>Other Formatting Objects</h2>
<xsl:apply-templates select="category[@class='other']"/>
<xsl:apply-templates select="notes"/>
</body>
</html>
</xsl:template>

<xsl:template match="usage">
  <xsl:apply-templates select="para"/>
</xsl:template>

<xsl:template match="para">
  <p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match="em">
  <em><xsl:apply-templates/></em>
</xsl:template>

<xsl:template match="term">
  <b><xsl:apply-templates/></b>
</xsl:template>

<xsl:template match="category">
  <table width="100%" cellpadding="5" cellspacing="1" border="1">
  <tr>
    <th>Name</th><th>Base Class</th><th>Spec Content</th>
    <th>Generated Areas</th><th>Breaks and Keeps</th>
  </tr>
  <xsl:apply-templates select="object"/>
  </table>
</xsl:template>

<xsl:template match="object">
  <tr>
    <td>
    <xsl:value-of select="name"/>
    <xsl:if test="self::node()[@implemented='false']">&#0160;*</xsl:if>
    </td>
    <td><xsl:value-of select="baseClass"/></td>
    <td><xsl:value-of select="specContent"/></td>
    <td><xsl:apply-templates select="generatedAreas"/></td>
    <td><xsl:value-of select="breaksKeeps"/>&#0160;</td>
  </tr>
</xsl:template>

<xsl:template match="generatedAreas">
<xsl:choose>
  <xsl:when test="currentLayout">
  <ul>
  <li>Class: <xsl:value-of select="type/class"/>&#0160;
  Stacking: <xsl:value-of select="type/stacking"/></li>
  <li>Multiplicity: <xsl:value-of select="multiplicity"/></li>
  <li>Layout into: <xsl:value-of select="currentLayout"/>
  <xsl:if test="currentLayout[@intoParentArea='true']">&#0160;(parent)</xsl:if></li>
  <xsl:if test="self::node()[@isReference='true']">
  <li>Reference Area(s)</li>
  </xsl:if>
  </ul>
  </xsl:when>
  <xsl:otherwise>&#0160;</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="notes">
<p><b>Notes:</b></p>
  <ol>
  <xsl:for-each select="note">
  <li><xsl:value-of select="."/></li>
  </xsl:for-each>
  </ol>
</xsl:template>

</xsl:stylesheet>