package net.sourceforge.phpeclipse.tests.parser;
/*******************************************************************************
 * Copyright (c) 2002 Klaus Hartlage - www.eclipseproject.de All rights
 * reserved. This program and the accompanying materials are made available
 * under the terms of the Common Public License v1.0 which accompanies this
 * distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html
 ******************************************************************************/
import net.sourceforge.phpdt.core.tests.util.AbstractCompilerTest;
import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
/**
 * Tests the php parser
 */
public class PHPManualTestCase extends AbstractCompilerTest {
//  Parser parser;
  public PHPManualTestCase(String name) {
    super(name);
  }
  /**
   * Test the PHP Parser with different PHP snippets
   */
  public void testPHPParser() {
    checkPHP("function foo()" + "{" + "    echo \"In foo()
\\n\";" + "}"
        + "" + "function bar($arg = '')" + "{"
        + "    echo \"In bar(); argument was '$arg'.
\\n\";" + "}" + ""
        + "// This is a wrapper function around echo"
        + "function echoit($string)" + "{" + "    echo $string;" + "}" + ""
        + "$func = 'foo';" + "$func();        // This calls foo()" + ""
        + "$func = 'bar';" + "$func('test');  // This calls bar()" + ""
        + "$func = 'echoit';" + "$func('test');  // This calls echoit()" + "");
    checkPHP("class Foo" + "{" + "    function Vari()" + "    {"
        + "        $name = 'Bar';"
        + "        $this->$name(); // This calls the Bar() method\n" + "    }"
        + "    " + "    function Bar()" + "    {"
        + "        echo \"This is Bar\";" + "    }" + "}" + ""
        + "$foo = new Foo();" + "$funcname = \"Var\";"
        + "$foo->$varname();   // This calls $foo->Var()\n" + "");
    checkPHP("function square ($num)" + "{" + "    return $num * $num;" + "}"
        + "echo square (4);   // outputs '16'." + "");
    checkPHP("function small_numbers()" + "{" + "    return array (0, 1, 2);"
        + "}" + "list ($zero, $one, $two) = small_numbers();" + "");
    checkPHP("function &returns_reference()" + "{" + "    return $someref;"
        + "}" + "" + "$newref =& returns_reference();" + " " + "");
    checkPHP("function add_some_extra(&$string)" + "{"
        + "    $string .= 'and something extra.';" + "}"
        + "$str = 'This is a string, ';" + "add_some_extra($str);"
        + "echo $str;    ");
    checkPHP("function makecoffee ($type = \"cappuccino\")\n" + "{\n"
        + "    return \"Making a cup of $type.\\n\";\n" + "}"
        + "echo makecoffee ();" + "echo makecoffee (\"espresso\");" + "");
    checkPHP("$makefoo = true;" + "" + "/* We can't call foo() from here "
        + "   since it doesn't exist yet," + "   but we can call bar() */" + ""
        + "bar();" + "" + "if ($makefoo) {" + "  function foo ()" + "  {"
        + "    echo \"I don't exist until program execution reaches me.\\n\";"
        + "  }" + "}" + "" + "/* Now we can safely call foo()"
        + "   since $makefoo evaluated to true */" + ""
        + "if ($makefoo) foo();" + "" + "function bar() " + "{"
        + "  echo \"I exist immediately upon program start.\\n\";" + "}" + ""
        + "");
    checkPHP("function foo() " + "{" + "  function bar() " + "  {"
        + "    echo \"I don't exist until foo() is called.\\n\";" + "  }" + "}"
        + "" + "/* We can't call bar() yet" + "   since it doesn't exist. */"
        + "" + "foo();\n" + "" + "/* Now we can call bar(),"
        + "   foo()'s processesing has" + "   made it accessable. */" + ""
        + "bar();" + "");
    // Bugs item #690938
    checkPHP("    echo \"This is a test\"; // This is a one-line c++ style comment\n"
        + "    /* This is a multi line comment\n"
        + "       yet another line of comment */\n"
        + "    echo \"This is yet another test\";\n"
        + "    echo \"One Final Test\"; # This is shell-style style comment \n");
    checkPHP("$bool = TRUE;   // a boolean\n"
        + "$str  = \"foo\";  // a string\n" + "$int  = 12;     // an integer\n"
        + "\n" + "echo gettype($bool); // prints out \"boolean\"\n"
        + "echo gettype($str);  // prints out \"string\"\n" + ""
        + "// If this is an integer, increment it by four\n"
        + "if (is_int($int)) {\n" + "    $int += 4;\n" + "}\n" + "\n"
        + "// If $bool is a string, print it out\n"
        + "// (does not print out anything)\n" + "if (is_string($bool)) {\n"
        + "    echo \"String: $bool\";\n" + "}\n");
    checkPHP("$foo = True; // assign the value TRUE to $foo");
    checkPHP("// == is an operator which test\n"
        + "// equality and returns a boolean\n"
        + "if ($action == \"show_version\") {\n"
        + "    echo \"The version is 1.23\";\n" + "}\n" + "\n"
        + "// this is not necessary...\n" + "if ($show_separators == TRUE) {\n"
        + "    echo \"