/**
* Copyright (C) 2005 - 2015 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.cdt.command.search;
import java.util.List;
import java.util.Map;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.eclim.Eclim;
import org.eclim.plugin.cdt.Cdt;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test case for SearchCommand.
*
* @author Eric Van Dewoestine
*/
public class SearchCommandTest
{
private static final String TEST_FILE = "src/test_search.c";
private static final String TEST_FILE_C = "src/test.c";
private static final String TEST_FILE_H = "src/test.h";
@Test
@SuppressWarnings("unchecked")
public void searchElement()
{
assertTrue("Project doesn't exist.",
Eclim.projectExists(Cdt.TEST_PROJECT));
// testFunction definition (c file result)
List<Map<String,Object>> results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "136", "-l", "12", "-e", "utf-8", "-x", "definitions"
});
String file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE_C);
Map<String,Object> result = results.get(0);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 1);
assertEquals(result.get("column"), 6);
// testFunction declarations (header file result)
results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "136", "-l", "12", "-e", "utf-8", "-x", "declarations"
});
file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE_H);
result = results.get(0);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 4);
assertEquals(result.get("column"), 6);
// testFunction references
results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "136", "-l", "12", "-e", "utf-8", "-x", "references"
});
assertEquals("Wrong number of results", 2, results.size());
file = Eclim.resolveFile(Cdt.TEST_PROJECT, "src/test_search_vunit.c");
result = results.get(0);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 11);
assertEquals(result.get("column"), 3);
file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE);
result = results.get(1);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 11);
assertEquals(result.get("column"), 3);
// testFunction all
results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "136", "-l", "12", "-e", "utf-8", "-x", "all"
});
assertEquals("Wrong number of results", 4, results.size());
file = Eclim.resolveFile(Cdt.TEST_PROJECT, "src/test_search_vunit.c");
result = results.get(2);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 11);
assertEquals(result.get("column"), 3);
file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE);
result = results.get(3);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 11);
assertEquals(result.get("column"), 3);
// puts
results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "154", "-l", "4", "-e", "utf-8", "-x", "declarations"
});
result = results.get(0);
if (Os.isFamily(Os.FAMILY_WINDOWS)){
assertTrue(((String)result.get("filename"))
.endsWith("/include/stdio.h"));
assertEquals(result.get("message"), "");
}else{
assertEquals(result.get("filename"), "/usr/include/stdio.h");
assertEquals(result.get("message"), "");
assertEquals(result.get("column"), 12);
int line = ((Integer)result.get("line")).intValue();
assertTrue(line > 650 && line < 750);
}
// EXIT_SUCCESS
results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-f", TEST_FILE,
"-o", "186", "-l", "12", "-e", "utf-8", "-x", "declarations"
});
result = results.get(0);
if (Os.isFamily(Os.FAMILY_WINDOWS)){
assertTrue(((String)result.get("filename"))
.endsWith("/include/stdlib.h"));
assertEquals(result.get("message"), "");
assertEquals(result.get("line"), 33);
assertEquals(result.get("column"), 9);
}else{
assertEquals(result.get("filename"), "/usr/include/stdlib.h");
assertEquals(result.get("message"), "");
assertEquals(result.get("column"), 9);
int line = ((Integer)result.get("line")).intValue();
assertTrue(line > 130 && line < 140);
}
}
@Test
@SuppressWarnings("unchecked")
public void searchFunction()
{
assertTrue("Project doesn't exist.",
Eclim.projectExists(Cdt.TEST_PROJECT));
List<Map<String,Object>> results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT,
"-p", "test_search_function", "-t", "function"
});
String file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE);
Map<String,Object> result = results.get(0);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "int test_search_function(void) {");
assertEquals(result.get("line"), 16);
assertEquals(result.get("column"), 5);
}
@Test
@SuppressWarnings("unchecked")
public void searchConstant()
{
assertTrue("Project doesn't exist.",
Eclim.projectExists(Cdt.TEST_PROJECT));
List<Map<String,Object>> results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT, "-p", "EXIT_FAILURE", "-t", "macro"
});
Map<String,Object> result = results.get(0);
if (Os.isFamily(Os.FAMILY_WINDOWS)){
assertTrue(((String)result.get("filename"))
.endsWith("/include/stdlib.h"));
assertEquals(result.get("line"), 34);
assertEquals(result.get("column"), 9);
}else{
assertEquals(result.get("filename"), "/usr/include/stdlib.h");
assertEquals(result.get("message"),
"#define EXIT_FAILURE 1 /* Failing exit status. */");
assertEquals(result.get("column"), 9);
int line = ((Integer)result.get("line")).intValue();
assertTrue(line > 130 && line < 140);
}
}
@Test
@SuppressWarnings("unchecked")
public void searchStruct()
{
assertTrue("Project doesn't exist.",
Eclim.projectExists(Cdt.TEST_PROJECT));
List<Map<String,Object>> results = (List<Map<String,Object>>)
Eclim.execute(new String[]{
"c_search", "-n", Cdt.TEST_PROJECT,
"-p", "test_search_struct", "-t", "class_struct"
});
String file = Eclim.resolveFile(Cdt.TEST_PROJECT, TEST_FILE);
Map<String,Object> result = results.get(0);
assertEquals(result.get("filename"), file);
assertEquals(result.get("message"), "struct test_search_struct {");
assertEquals(result.get("line"), 5);
assertEquals(result.get("column"), 8);
}
}