<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!DOCTYPE html>
<html>
<head>
    <title>Calculator (PHPUnit) - sample application for NetBeans IDE</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
        /** general **/
        * {
            margin: 0;
            padding: 0;
        }
        body {
            font-family: Tahoma, Geneva, sans-serif;
            font-size: 100%;
            line-height: 1em;
            color: #414141;
        }

        h1 {
            margin-bottom: 30px;
        }
        h2 {
            margin-bottom: 20px;
        }
        h3 {
            font-size: 1em;
            color: #4c7cbd;
            margin-bottom: 12px;
        }
        h3 a {
            color: #4c7cbd;
            text-decoration: none;
        }
        h3 a:hover {
            text-decoration: underline;
        }

        p {
            margin: 0;
            padding: 0;
        }
        .p {
            margin-bottom: 14px;
        }

        a {
            color: #414141;
            outline: none;
        }
        a:hover {
            text-decoration: none;
        }

        /** lists **/
        ul {
            list-style: circle;
        }
        li {
            margin-left: 30px;
        }
        ul.list {
            list-style: none;
        }
        .list li {
            width: 100%;
            overflow: hidden;
            vertical-align: bottom;
            padding: 3px 0 20px 0;
            margin-left: 0;
        }
        .list li img {
            float: left;
            margin: -3px 15px 0 0;
            width: 16px;
            height: 16px;
        }
        .list p.description {
            margin-bottom: 5px;
        }
        .list span.label {
            font-weight: bold;
        }


        /** other **/
        .fleft {
            float: left;
        }
        .fright {
            float: right;
        }
        .clear {
            clear: both;
        }

        .wrapper {
            width: 100%;
            overflow: hidden;
        }

        #main {
            width: 1000px;
            margin: 0 auto;
            position: relative;
        }

        #content, #footer {
            font-size: 0.75em;
        }

        .col-1, .col-2, .col-3 {
            float: left;
        }

        #page #content .col-1 {
            width: 250px;
            margin-right: 20px;
        }
        #page #content .col-2 {
            width: 650px;
            min-height: 500px;
        }

        #footer {
            height: 89px;
        }

        /** content **/
        #content {
            padding: 20px 40px 0 40px;
        }
        #content .indent {
            padding: 14px 0 0 9px;
        }
        #content p {
            line-height: 1.17em;
        }

        /** footer **/
        #footer .indent {
            padding: 37px 40px 20px 40px;
        }
        #footer img {
            position: relative; top: -4px;
        }
        #footer a {
            color: #4c7cbd;
        }

    </style>
</head>
<body id="page">
    <div id="main">
        <!-- content -->
        <div id="content">
            <div class="wrapper">
                <div class="col-2">
                    <div class="indent">

                        <h1>Calculator (PHPUnit)</h1>
                        <h2>NetBeans PHP Sample Application</h2>

                        <h3>What is Calculator?</h3>
                        <p class="p">Calculator is a simple calculator that supports basic arithmetical operations.
                            This PHP application is created to highlight PHP features supported by NetBeans IDE.
                        </p>
                        <p class="p">
                            <b>This sample is not intended to be used in a production environment without any changes.</b>
                        </p>

                        <h3>This sample demonstrates the following features:</h3>
                        <ul class="p">
                            <li>unit testing using PHPUnit</li>
                            <li>code coverage of project files</li>
                        </ul>

                        <h3>Requirements</h3>
                        Follow these before you run the sample:
                        <ul class="p">
                            <li>Install NetBeans IDE with PHP support</li>
                            <li>Install and configure PHP Runtime</li>
                            <li>Install all dependencies using <a href="https://getcomposer.org/">Composer</a>
                                (click on project and invoke <i>Composer</i> &gt; <i>Install (dev)</i>)<br>
                                <i>Note:</i> PHPUnit can also be installed <a href="https://github.com/sebastianbergmann/phpunit/#installation" target="_blank">globally as PHAR file</a></li>
                            <li>For debugging and code coverage, <a href="http://www.xdebug.org/">Xdebug</a> PHP extension is required</li>
                        </ul>

                        <h3>What is included?</h3>
                        <ul class="p">
                            <li>NetBeans <i>PHP Application</i> Project</li>
                        </ul>

                        <h3>Before the start</h3>
                        <ul class="p">
                            <li>If you want to try the sample out, follow <a href="#getting_started">Getting Started</a> guidelines.</li>
                            <li>In case if you want to try debugging features of the NetBeans IDE,
                                follow the <a href="#debugging">Debugging</a> guidelines.</li>
                        </ul>

                        <h3 id="getting_started">Getting Started</h3>
                        <ol class="p">
                            <li>
                                For the very first run, PHPUnit must be installed via Composer (see Requirements).
                            </li>
                            <li>
                                Simply test the project. Right-click the project node and select <i>Test</i>.
                                IDE will inform you about the test results (window with test results can be opened manually).
                            </li>
                            <li>
                                For code coverage, open its report (right-click the project node and select <i>Code Coverage &gt; Show Report...</i>)
                                and <i>Run All Tests</i> if there are no data available yet. Open <i>Calculator.php</i> file from the list of the files
                                to see which lines are and which lines are not tested.
                            </li>
                            <li>Play futher with the sample :)</li>
                        </ol>

                        <h3 id="debugging">Debugging</h3>
                        <p class="p">
                            These steps should enable you the debugging option at the sample project,
                            <a href="http://wiki.netbeans.org/HowToConfigureXDebug" target="_blank">if you already have PHP debugger (Xdebug)
                            installed and configured</a>.<br>
                            For demonstrating the PHP debugger in NetBeans, try the following:
                        </p>
                        <ol class="p">
                            <li>Open source class <i>Calculator.php</i> or generated <i>CalculatorTest.php</i> in the editor.</li>
                            <li>Put breakpoint on some line with PHP code.</li>
                            <li>To debug, right-click <i>CalculatorTest.php</i> and select <i>Debug</i>.</li>
                        </ol>

                    </div>
                </div>
            </div>
        </div>
        <!-- footer -->
        <div id="footer">
            <div class="indent">
                <div class="fleft">2019 &copy; Copyright The Apache Software Foundation, All rights reserved</div>
            </div>
        </div>
    </div>
</body>
</html>
