<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://www.josefsustacek.cz/blog</id>
    <title>Josef Šustáček</title>
    <updated>2016-09-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://www.josefsustacek.cz/blog"/>
    <subtitle>Josef Šustáček – Java Developer and Software Engineer with over 15 years of experience, ex-Liferay Global Services consultant. Java, Amazon Web Services (AWS), CI/CD, Tomcat, nginx, Gradle, git, best practices, code reviews.</subtitle>
    <icon>https://www.josefsustacek.cz/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[Cloud Formation - Boolean as Parameter in template]]></title>
        <id>https://www.josefsustacek.cz/blog/2016/09/15/cloud-formation-boolean-as-parameter-in</id>
        <link href="https://www.josefsustacek.cz/blog/2016/09/15/cloud-formation-boolean-as-parameter-in"/>
        <updated>2016-09-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[You've most likely noticed, that Cloud Formation does not support any Boolean type for template Parameters (see AWS docs). You will get:]]></summary>
        <content type="html"><![CDATA[<p>You've most likely noticed, that Cloud Formation does not support any Boolean type for template Parameters (see <a href="http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html?shortFooter=true" target="_blank" rel="noopener noreferrer" class="">AWS docs</a>). You will get:</p>
<div class="language-text codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-text codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token plain">Template format error: Unrecognized parameter type: Boolean</span><br></div></code></pre></div></div>
<p>But many of the resources have <code>Boolean</code> parameter, like <a href="http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html?shortFooter=true#cfn-rds-dbinstance-multiaz" target="_blank" rel="noopener noreferrer" class="">AWS::RDS::DBInstance -&gt; MultiAZ</a> or its <em>StorageEncrypted</em> property.</p>
<p>Solution? Use following workaround:</p>
<ul>
<li class="">a "yes" / "no" selection <em>Parameter</em> with <code>String</code> type (or really any two values which make sense to your use case / language),</li>
<li class="">a <em>Condition</em> (converting <code>String</code> to a semi-<code>Boolean</code>) and</li>
<li class="">in the resource's property, use the intrinsic function <code>Fn:If</code> to convert semi-<code>Boolean</code> result of the condition into real <code>Boolean</code></li>
</ul>
<p>Note that you cannot use the <em>Condition</em> directly as the property's value, using e.g. "Ref" + its name - you'd get a validation error, even if you defined "DependsOn":</p>
<div class="language-text codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-text codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token plain">Unresolved resource dependencies [DbRdsMultiAZCondition] in the Resources block of the template</span><br></div></code></pre></div></div>
<p>See <a href="https://gist.github.com/sustacek/987a85e51387849d7debe676ed7d19ff" target="_blank" rel="noopener noreferrer" class="">the following Gist</a> showing the relevant parts of the template to implement the solution.</p>
<p>It's long and ugly, but it works :-)</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2016/09/cloud-formation-boolean-as-parameter-in.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_iVSS" id="1-comments-captured-from-original-post-on-blogger">1 comments captured from <a href="https://josef-sustacek-ee.blogspot.com/2016/09/cloud-formation-boolean-as-parameter-in.html" target="_blank" rel="noopener noreferrer" class="">original post</a> on Blogger<a href="https://www.josefsustacek.cz/blog/2016/09/15/cloud-formation-boolean-as-parameter-in#1-comments-captured-from-original-post-on-blogger" class="hash-link" aria-label="Direct link to 1-comments-captured-from-original-post-on-blogger" title="Direct link to 1-comments-captured-from-original-post-on-blogger" translate="no">​</a></h2>
<p><strong>pauldevine said on 2017-11-12</strong></p>
<p>Thanks for this.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="cloudformation" term="cloudformation"/>
        <category label="aws" term="aws"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Testing plugins with Ivy using Powermock]]></title>
        <id>https://www.josefsustacek.cz/blog/2013/03/22/testing-plugins-with-ivy-using-powermock</id>
        <link href="https://www.josefsustacek.cz/blog/2013/03/22/testing-plugins-with-ivy-using-powermock"/>
        <updated>2013-03-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Recently, liferay-plugins SDK (and also its EE version) switched to using Ivy to manage some of the dependencies. Even when there are still static dependencies taken from defined portal -- Ivy dependencies are added to the lib/ext and ROOT/WEB-INF/lib ones, see build-common.xml -- this makes adding dependencies into plugins so much easier and cleaner.]]></summary>
        <content type="html"><![CDATA[<p>Recently, <a href="https://github.com/liferay/liferay-plugins" target="_blank" rel="noopener noreferrer" class="">liferay-plugins</a> SDK (and also its EE version) switched to using Ivy to manage some of the dependencies. Even when there are still static dependencies taken from defined portal -- Ivy dependencies are added to the <code>lib/ext</code> and <code>ROOT/WEB-INF/lib</code> ones, see <a href="https://github.com/liferay/liferay-plugins/blob/master/build-common.xml#L25" target="_blank" rel="noopener noreferrer" class="">build-common.xml</a> -- this makes adding dependencies into plugins so much easier and cleaner.</p>
<p>Since I'm working on some plugins, I wanted to cover the functionality properly using JUnit tests, using <a href="https://code.google.com/p/powermock/" target="_blank" rel="noopener noreferrer" class="">Powermock</a> and <a href="https://code.google.com/p/mockito/" target="_blank" rel="noopener noreferrer" class="">Mockito</a>. Here are necessary steps to get those libraries on test classpath in plugins SDK:</p>
<ol>
<li class="">open <code>./ivy.xml</code></li>
<li class="">add following dependencies:</li>
</ol>
<div class="language-xml codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-xml codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">runtime</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">xml-apis</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">xml-apis</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.4.01</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">junit</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">junit</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">4.11</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- CUSTOM BEGIN --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">mockito-all</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.mockito</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.9.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-api-mockito</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-api-support</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-core</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-reflect</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-module-junit4</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">powermock-module-junit4-common</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.powermock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.5</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">conf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">test</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">javassist</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">org</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">javassist</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">rev</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.12.1.GA</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- CUSTOM END --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div></code></pre></div></div>
<p>I'm sure there may be more combinations of dependencies, this is the first that fully worked for my basic tests using classes and calls like <code>@PrepareForTest</code>, <code>@RunWith(PowerMockRunner.class)</code>, <code>PowerMockito.mock(...)</code> and <code>Mockito.*</code>.</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2013/03/testing-plugins-with-ivy-using-powermock.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="test" term="test"/>
        <category label="plugins" term="plugins"/>
        <category label="mock" term="mock"/>
        <category label="liferay" term="liferay"/>
        <category label="junit" term="junit"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Want lambdas with jdk6? Here's an IDEA]]></title>
        <id>https://www.josefsustacek.cz/blog/2013/02/14/want-lambdas-with-jdk6-heres-idea</id>
        <link href="https://www.josefsustacek.cz/blog/2013/02/14/want-lambdas-with-jdk6-heres-idea"/>
        <updated>2013-02-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[All Java people are looking forward to jdk8 to bring more functional-like syntax to the language, but it will take some time before we'll really be able to code like that day to day. It may take years, before jdk8 gets fully adopted as a standard (how many of you already use jdk7 in production these days?) Till then, we'll still have to write all the verbose code around -- if you want to stick with Java language, of course.]]></summary>
        <content type="html"><![CDATA[<p>All Java people are looking forward to jdk8 to bring more functional-like syntax to the language, but it will take some time before we'll really be able to code like that day to day. It may take years, before jdk8 gets fully adopted as a standard (how many of you already use jdk7 in production these days?) Till then, we'll still have to write all the verbose code around -- if you want to stick with Java language, of course.</p>
<p>Want to try how it will look like in your code today? Get <a href="http://www.jetbrains.com/idea/" target="_blank" rel="noopener noreferrer" class="">IntelliJ IDEA 12</a>. This is how my source code looks in it (Java <em>1.6.0_38-b05</em>):</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpks437MZ-4RadMWTAxmyL_xdmCWXWhuzan7vVXglIJHhDpRsA3Ve_ndnKrduH4s8oZ98BWmZ08Ia9Nv6377-quCkiI7jOAo35G_qjvUyepxuQooJ1B2wYpN_EHTs4SbPIQG3thJn9zfbm/s1600/lambdas+in+JDK6.png" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpks437MZ-4RadMWTAxmyL_xdmCWXWhuzan7vVXglIJHhDpRsA3Ve_ndnKrduH4s8oZ98BWmZ08Ia9Nv6377-quCkiI7jOAo35G_qjvUyepxuQooJ1B2wYpN_EHTs4SbPIQG3thJn9zfbm/s640/lambdas+in+JDK6.png" alt="Lambdas in JDK6" class="img_kKxa"></a></p>
<p>When I hover the grayed code, real syntax comes up:</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9OfRbrX86-32fgxqUp4AZw5_81P7lXYFVMOi15h43v55hFFfVUpxY-7glUSsCitFfgUChnATH5ol10auLSX2a4ytIuR78ipvHngr1Ja_9JmvfVZWd3taERR861SWCxQTsLFuQ9CrY9H-/s1600/lambdas+in+JDK6+-+hover.png" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9OfRbrX86-32fgxqUp4AZw5_81P7lXYFVMOi15h43v55hFFfVUpxY-7glUSsCitFfgUChnATH5ol10auLSX2a4ytIuR78ipvHngr1Ja_9JmvfVZWd3taERR861SWCxQTsLFuQ9CrY9H-/s640/lambdas+in+JDK6+-+hover.png" alt="Lambdas in JDK6 - hover" class="img_kKxa"></a></p>
<p>Pretty cool, huh?</p>
<p>Extremely improves readability, when your anonymous class method's body is just one line return statement. And that's pretty often, when you're e.g. mocking method calls in unit tests.</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2013/02/want-lambdas-with-jdk6-heres-idea.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="idea" term="idea"/>
        <category label="development" term="development"/>
        <category label="java" term="java"/>
        <category label="lambda" term="lambda"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[SmartGit/Hg 4 and Docky in Ubuntu 12.10]]></title>
        <id>https://www.josefsustacek.cz/blog/2013/02/12/smartgithg-4-and-docky-in-ubuntu-1210</id>
        <link href="https://www.josefsustacek.cz/blog/2013/02/12/smartgithg-4-and-docky-in-ubuntu-1210"/>
        <updated>2013-02-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Since the first time I started to use Ubuntu as a primary operating system on my work laptop, I liked the possibility of endless customization possibilities I could make in the OS to have the UI match my preferences. Although I trust UX engineers from Canonical to do the work for me in most cases, sometimes you like to use few things differently or simply try new cool widget in your day to day work.]]></summary>
        <content type="html"><![CDATA[<p>Since the first time I started to use Ubuntu as a primary operating system on my work laptop, I liked the possibility of endless customization possibilities I could make in the OS to have the UI match my preferences. Although I trust UX engineers from Canonical to do the work for me in most cases, sometimes you like to use few things differently or simply try new cool widget in your day to day work.</p>
<p>One major customization that I've started to use is <em>dock</em> at the bottom or the screen. It keeps my most-used applications and aggregates their windows (when they are running). This functionality is of course inspired by great dock present in OS X systems.</p>
<p>I've used <a href="https://launchpad.net/awn/" target="_blank" rel="noopener noreferrer" class="">AWN</a> in previous versions of Ubuntu, quite happily except few quirks, but in my newest 12.10 release, I've switched to <a href="http://www.go-docky.com/" target="_blank" rel="noopener noreferrer" class="">Docky</a>. I came across it on some Internet forum where I was looking for solutions to my issues with AWN in freshly installed system.</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiegX0yPeDg-oBZB8l2Egnr0KceG4utjrB0VcpDkFT82SZ-azxJlRNp5ylQ_pGZrqys93uqkkYDlXmf78M8anE_qFDI_epmEM-I8OksW6obwdHCZCdjLV0Nrg3STAA72LMV975gQM7Z3xjF/s1600/docky.png" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiegX0yPeDg-oBZB8l2Egnr0KceG4utjrB0VcpDkFT82SZ-azxJlRNp5ylQ_pGZrqys93uqkkYDlXmf78M8anE_qFDI_epmEM-I8OksW6obwdHCZCdjLV0Nrg3STAA72LMV975gQM7Z3xjF/s320/docky.png" alt="Docky bar at the bottom of the screen" class="img_kKxa"></a></p>
<p><em>Docky bar at the bottom of the screen</em></p>
<p>Docky seems much simpler, robust and reliable so far. Everything works pretty much out of the box, my dock contains 5 static launchers right now (Skype, Google Chrome, Firefox, Last.fm, IntelliJ IDEA and SmartGit/Hg) and then some utilities offered by Docky.</p>
<p>Regular applications, where binary executable file is used to launch and run the program, are usually working without any issues in Docky, However, some special applications, script- or Java-based, may have problems with dock. In my case, this happened with newest <a href="http://www.syntevo.com/smartgithg/index.html" target="_blank" rel="noopener noreferrer" class="">SmartGit/Hg 4</a>. While I was able to pin it into launcher (SmartGit/Hg's distribution for Linux contains shell script to generate the <code>*.desktop</code> launcher file), I had problem with duplicate icon in the dock, once program was launched. Docky did not recognize the application's windows and thus was considering it to be a separate application then the pinned icon.</p>
<p>Problem is the way in which Docky is able to match the launchers (pinned icons) to actual application's windows. Docky's options are sometimes limited, in case of SmartGit/Hg 4, the Ubuntu launcher runs a shell script <code>...smartgithg-4_0_1/bin/smartgithg.sh</code>, which then starts a JVM which as an OS process looks like <code>java -D ... -jar ...bootloader.jar</code>. Moreover, the title of the window is not static, SmartGit/Hg places the name of project into it. So Docky has obviously problem to match new OS process to the icon in dock.</p>
<p>After a while, I was able to get the solution: use <em>StartupWMClass</em> hint in the launcher file, to help Docky identify the application's window. I found the hint in <a href="https://bugs.launchpad.net/docky/+bug/484610" target="_blank" rel="noopener noreferrer" class="">Docky's bugtracker pages</a>. Necessary steps:</p>
<ol>
<li class="">
<p>find out the value for <em>StartupWMClass</em>:</p>
<ol>
<li class="">
<p>start SmartGit/Hg 4,</p>
</li>
<li class="">
<p>start terminal, run <code>xprops</code>,</p>
</li>
<li class="">
<p>with cursor (changed to cross by <code>xprops</code> command) click on title of the SmartGit/Hg main window,</p>
</li>
<li class="">
<p>look into terminal, xprops finished, dumping a lot of information. The one we're looking for is at the bottom:</p>
<div class="language-text codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-text codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ET_WM_SYNC_REQUEST</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">WM_CLASS(STRING) = "SmartGit/Hg", "SmartGit/Hg"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">WM_ICON_NAME(STRING) = "Liferay - SmartGit/Hg 4.0.1 "</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div></code></pre></div></div>
</li>
</ol>
</li>
<li class="">
<p>open <code>~/.local/share/applications/syntevo-smartgithg.desktop</code> -- the default launcher file for SmartGit/Hg 4,</p>
</li>
<li class="">
<p>add following line to the file:</p>
<div class="language-properties codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-properties codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token key attr-name" style="color:#00a4db">StartupWMClass</span><span class="token punctuation" style="color:#393A34">=</span><span class="token value attr-value" style="color:#e3116c">SmartGit/Hg</span><br></div></code></pre></div></div>
</li>
</ol>
<p>Then Docky will be able to match your SmartGit/Hg windows to pinned icon and you won't see double icon in dock any more.</p>
<p>While looking at <code>jetbrains-idea.desktop</code> launcher file for IntelliJ IDEA, I've noticed it uses the same approach and I've never had a problem with it in Docky, so I assume this approach may be reliable in a longer run.</p>
<p>Btw. <a href="http://www.ubuntugeek.com/menulibre-menu-editor-for-gnome-and-unity.html" target="_blank" rel="noopener noreferrer" class="">MenuLibre</a> has been very useful to manage all the launchers in Ubuntu. With Unity, the old-fashioned application's categories are not present in the UI any more. If allows you to change the <code>*.desktop</code> files manually in built-in editor or use GUI to form the file content's for you (selecting the executable file and icon using pop-up dialog etc.)</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2013/02/smartgithg-4-and-docky-in-ubuntu-1210.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="ubuntu" term="ubuntu"/>
        <category label="linux" term="linux"/>
        <category label="docky" term="docky"/>
        <category label="smartgithg" term="smartgithg"/>
        <category label="java" term="java"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Creating unit tests in core Liferay sources]]></title>
        <id>https://www.josefsustacek.cz/blog/2013/02/05/creating-unit-tests-in-core-liferay</id>
        <link href="https://www.josefsustacek.cz/blog/2013/02/05/creating-unit-tests-in-core-liferay"/>
        <updated>2013-02-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Liferay has been catching up lately on the tests coverage. Many improvements have been made in the trunk located in liferay-portal / master branch on GitHub and since I've been fixing some things recently, I've included unit test for the changed class as well.]]></summary>
        <content type="html"><![CDATA[<p>Liferay has been catching up lately on the tests coverage. Many improvements have been made in the trunk located in <a href="https://github.com/liferay/liferay-portal" target="_blank" rel="noopener noreferrer" class="">liferay-portal / master branch on GitHub</a> and since I've been fixing some things recently, I've included unit test for the changed class as well.</p>
<p>Quick start how-to:</p>
<ol>
<li class="">read <a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+Testing+Infrastructure" target="_blank" rel="noopener noreferrer" class="">Liferay testing documentation</a> to get the basic picture,</li>
<li class="">create your unit test in <code>portal-impl/test/unit/.../&lt;your_class&gt;Test.java</code>,</li>
<li class="">create test methods as usual with JUnit 4.x,</li>
<li class="">run the test and see results:
<ul>
<li class=""><code>cd portal-impl</code>,</li>
<li class=""><code>ant test-class -Dclass=CustomJspRegistryImplTest</code>,</li>
<li class="">note that only the name of the class is used, not the full name including package.</li>
</ul>
</li>
</ol>
<p>Testing just a single class at a time seems to be necessary, executing <code>ant test-unit</code> to run all existing unit tests seems to be time consuming (from minutes to tens of minutes).</p>
<p>For simple tests and classes, you'll be just fine with just instantiating your tested class, calling the method and verifying the returned result:</p>
<div class="language-java codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-java codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">CustomJspRegistryImplTest</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token annotation punctuation" style="color:#393A34">@Test</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">testGetCustomJspFileName_noExtension</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Assert</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">assertEquals</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token string" style="color:#e3116c">"/some/absolute/non_extension_page.test-context"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            _customJspRegistry</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getCustomJspFileName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token string" style="color:#e3116c">"test-context"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/some/absolute/non_extension_page"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">CustomJspRegistryImpl</span><span class="token plain"> _customJspRegistry </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">CustomJspRegistryImpl</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>But what if code inside <code>getCustomJspFileName()</code> calls some other methods, how to ensure we're not testing their implementation instead of ours? The answer is a technique extensively used in software development: <em>mocking</em>.</p>
<p><a href="http://www.liferay.com/community/wiki/-/wiki/Main/Liferay+Testing+Infrastructure#section-Liferay+Testing+Infrastructure-Unit+test+with+external+dependencies" target="_blank" rel="noopener noreferrer" class="">Wiki link above</a> contains some basic examples of static methods' mocking. When you need to mock some instance method's call, you can use either:</p>
<ol>
<li class="">already, fully mocked classes from libraries like <code>spring-test</code>, available in Liferay out of the box. Examples could be <code>MockServletContext</code> or <code>MockHttpServletRequest</code>, allowing you to tailor the objects as you need.</li>
<li class="">use PowerMock and Mockito libraries to mock individual calls on any class objects:</li>
</ol>
<div class="language-java codeBlockContainer_Qol5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_pRUE"><pre tabindex="0" class="prism-code language-java codeBlock_V_CX thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_bN7Z"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">HttpServletRequest</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">_getRequestWithApplicatoinAdapter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">String</span><span class="token plain"> adapterServletContextName</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">MockHttpServletRequest</span><span class="token plain"> request </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">MockHttpServletRequest</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">ThemeDisplay</span><span class="token plain"> spyThemeDisplay </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">spy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">ThemeDisplay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    request</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setAttribute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">WebKeys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">THEME_DISPLAY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> spyThemeDisplay</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">Group</span><span class="token plain"> spyScopeGroup </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">spy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">GroupImpl</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">UnicodeProperties</span><span class="token plain"> spyProps </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">spy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">UnicodeProperties</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">doReturn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">spyScopeGroup</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">when</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">spyThemeDisplay</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getScopeGroup</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">doReturn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">spyProps</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">when</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">spyScopeGroup</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getTypeSettingsProperties</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">doReturn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">adapterServletContextName</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">when</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">spyProps</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getProperty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"customJspServletContextName"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> request</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>As you can see, we need to provide particular <code>typeSetting</code> in scope group of given HTTP request. Every time we want to mock an object's method call, we need to do two things:</p>
<ol>
<li class="">get instrumented version of the object:
<ul>
<li class=""><code>ThemeDisplay spyThemeDisplay = spy(new ThemeDisplay());</code></li>
</ul>
</li>
<li class="">say which methods we want to mock and how:
<ul>
<li class=""><code>doReturn(spyScopeGroup).when(spyThemeDisplay).getScopeGroup();</code></li>
<li class="">this line could be read as:
<ul>
<li class="">whenever method <code>getScopeGroup()</code> is being called on our instrumented object (<code>spyThemeDisplay)</code>, we'll get object <code>spyScopeGroup</code></li>
<li class="">returned object <code>spyScopeGroup</code> could be (and in our example is) further mocked as well.</li>
</ul>
</li>
</ul>
</li>
</ol>
<p><a href="http://code.google.com/p/powermock/wiki/MockitoUsage13" target="_blank" rel="noopener noreferrer" class="">Powermock documentation</a> contains a ton of useful examples and provides a very god entry point. Complete source of the test class I've used in this post could be found on <a href="https://github.com/sustacek/liferay-portal/blob/LPS-30219/portal-impl/test/unit/com/liferay/portal/util/CustomJspRegistryImplTest.java" target="_blank" rel="noopener noreferrer" class="">Github</a>.</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2013/02/creating-unit-tests-in-core-liferay.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="test" term="test"/>
        <category label="development" term="development"/>
        <category label="mock" term="mock"/>
        <category label="liferay" term="liferay"/>
        <category label="java" term="java"/>
        <category label="junit" term="junit"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenDS -- testing LDAP server]]></title>
        <id>https://www.josefsustacek.cz/blog/2013/01/10/opends-testing-ldap-server</id>
        <link href="https://www.josefsustacek.cz/blog/2013/01/10/opends-testing-ldap-server"/>
        <updated>2013-01-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Since LDAP integration is part of most modern servers and Liferay also supports this directory service protocol, development on local machine gives us the challenge of testing the integration, without installing (or using remote) full-blown LDAP server. Since I've been implementing some LDAP classes changes recently and had to test them manually, I was looking around what could I use easily use for this purpose.]]></summary>
        <content type="html"><![CDATA[<p>Since LDAP integration is part of most modern servers and Liferay also supports this directory service protocol, development on local machine gives us the challenge of testing the integration, without installing (or using remote) full-blown LDAP server. Since I've been implementing some LDAP classes changes recently and had to test them manually, I was looking around what could I use easily use for this purpose.</p>
<p>I was on Windows that time, but using Ubuntu simultaneously when possible, so the tool would ideally be available on both operating systems. Among other requirements, I wanted the obvious:</p>
<ol>
<li class="">easy and quick installation,</li>
<li class="">quick startup with small footprint on computer's performance,</li>
<li class="">sample data (users) generation,</li>
<li class="">free of at low cost.</li>
</ol>
<p>After some googling, I came across <a href="https://www.oracle.com/technical-resources/articles/opends.html" target="_blank" rel="noopener noreferrer" class="">OpenDS</a>, which seemed to fullfil all my requirements. It's written in  Java, does not require OS installation (just unzipping) and initial server setup is quick and easy.</p>
<p>Zipped package contains setup and setup.bat, launching GUI setup tool. You can create default LDAP structure (with sample data, if you wish) and within 2 minutes, you have LDAP server up and running, ready to be accessed by your LDAP clients. OpenDS contains also simple GUI browser, allowing inline modifications to entries.</p>
<p>I can only recommend.</p>
<p><em>This was originally posted on blogger <a href="https://josef-sustacek-ee.blogspot.com/2013/01/opends-testing-ldap-server.html" target="_blank" rel="noopener noreferrer" class="">here</a></em>.</p>]]></content>
        <author>
            <name>Josef Šustáček</name>
            <uri>https://www.josefsustacek.cz</uri>
        </author>
        <category label="ldap" term="ldap"/>
        <category label="development" term="development"/>
        <category label="java" term="java"/>
    </entry>
</feed>