Search in sources :

Example 1 with Region

use of de.fraunhofer.aisec.cpg.sarif.Region in project cpg by Fraunhofer-AISEC.

the class CXXIncludeTest method testCodeAndRegionInInclude.

@Test
void testCodeAndRegionInInclude() throws Exception {
    // checks, whether code and region for nodes in includes are properly set
    File file = new File("src/test/resources/include.cpp");
    TranslationUnitDeclaration tu = TestUtils.analyzeAndGetFirstTU(List.of(file), file.getParentFile().toPath(), true);
    Set<RecordDeclaration> someClass = tu.getDeclarationsByName("SomeClass", RecordDeclaration.class);
    assertFalse(someClass.isEmpty());
    ConstructorDeclaration decl = someClass.iterator().next().getConstructors().get(0);
    assertEquals("SomeClass();", decl.getCode());
    PhysicalLocation location = decl.getLocation();
    assertNotNull(location);
    assertEquals(new Region(16, 3, 16, 15), location.getRegion());
}
Also used : Region(de.fraunhofer.aisec.cpg.sarif.Region) File(java.io.File) PhysicalLocation(de.fraunhofer.aisec.cpg.sarif.PhysicalLocation) BaseTest(de.fraunhofer.aisec.cpg.BaseTest) Test(org.junit.jupiter.api.Test)

Example 2 with Region

use of de.fraunhofer.aisec.cpg.sarif.Region in project cpg by Fraunhofer-AISEC.

the class LocationConverterTest method toEntityAttributeWithInteger.

@Test
void toEntityAttributeWithInteger() {
    // arrange
    final CompositeAttributeConverter<PhysicalLocation> sut = getSut();
    final Map<String, Object> value = new HashMap<>();
    final int startLineValue = 1;
    // autoboxing to Integer
    value.put(LocationConverter.START_LINE, startLineValue);
    final int endLineValue = 2;
    value.put(LocationConverter.END_LINE, endLineValue);
    final int startColumnValue = 3;
    value.put(LocationConverter.START_COLUMN, startColumnValue);
    final int endColumnValue = 4;
    value.put(LocationConverter.END_COLUMN, endColumnValue);
    value.put(LocationConverter.ARTIFACT, URI_STRING);
    final Region region = new Region(startLineValue, startColumnValue, endLineValue, endColumnValue);
    final PhysicalLocation want = new PhysicalLocation(URI_TO_TEST, region);
    // act
    final PhysicalLocation have = sut.toEntityAttribute(value);
    // assert
    Assertions.assertEquals(want, have);
}
Also used : HashMap(java.util.HashMap) Region(de.fraunhofer.aisec.cpg.sarif.Region) PhysicalLocation(de.fraunhofer.aisec.cpg.sarif.PhysicalLocation) Test(org.junit.jupiter.api.Test)

Example 3 with Region

use of de.fraunhofer.aisec.cpg.sarif.Region in project cpg by Fraunhofer-AISEC.

the class LocationConverterTest method toEntityAttributeWithMixedTypes.

@Test
void toEntityAttributeWithMixedTypes() {
    // arrange
    final CompositeAttributeConverter<PhysicalLocation> sut = getSut();
    final Map<String, Object> value = new HashMap<>();
    final Object startLineValue = 1;
    value.put(LocationConverter.START_LINE, startLineValue);
    final Object endLineValue = (long) 2;
    value.put(LocationConverter.END_LINE, endLineValue);
    final Object startColumnValue = "3";
    value.put(LocationConverter.START_COLUMN, startColumnValue);
    final Object endColumnValue = new CustomNumber(4);
    value.put(LocationConverter.END_COLUMN, endColumnValue);
    value.put(LocationConverter.ARTIFACT, URI_STRING);
    final Region region = new Region(Integer.parseInt(startLineValue.toString()), Integer.parseInt(startColumnValue.toString()), Integer.parseInt(endLineValue.toString()), Integer.parseInt(endColumnValue.toString()));
    final PhysicalLocation want = new PhysicalLocation(URI_TO_TEST, region);
    // act
    final PhysicalLocation have = sut.toEntityAttribute(value);
    // assert
    Assertions.assertEquals(want, have);
}
Also used : HashMap(java.util.HashMap) Region(de.fraunhofer.aisec.cpg.sarif.Region) PhysicalLocation(de.fraunhofer.aisec.cpg.sarif.PhysicalLocation) Test(org.junit.jupiter.api.Test)

Example 4 with Region

use of de.fraunhofer.aisec.cpg.sarif.Region in project cpg by Fraunhofer-AISEC.

the class LocationConverterTest method toEntityAttributeWithLong.

@Test
void toEntityAttributeWithLong() {
    // arrange
    final CompositeAttributeConverter<PhysicalLocation> sut = getSut();
    final Map<String, Object> value = new HashMap<>();
    final long startLineValue = 1;
    // autoboxing to Long
    value.put(LocationConverter.START_LINE, startLineValue);
    final long endLineValue = 2;
    value.put(LocationConverter.END_LINE, endLineValue);
    final long startColumnValue = 3;
    value.put(LocationConverter.START_COLUMN, startColumnValue);
    final long endColumnValue = 4;
    value.put(LocationConverter.END_COLUMN, endColumnValue);
    value.put(LocationConverter.ARTIFACT, URI_STRING);
    final Region region = new Region((int) startLineValue, (int) startColumnValue, (int) endLineValue, (int) endColumnValue);
    final PhysicalLocation want = new PhysicalLocation(URI_TO_TEST, region);
    // act
    final PhysicalLocation have = sut.toEntityAttribute(value);
    // assert
    Assertions.assertEquals(want, have);
}
Also used : HashMap(java.util.HashMap) Region(de.fraunhofer.aisec.cpg.sarif.Region) PhysicalLocation(de.fraunhofer.aisec.cpg.sarif.PhysicalLocation) Test(org.junit.jupiter.api.Test)

Example 5 with Region

use of de.fraunhofer.aisec.cpg.sarif.Region in project cpg by Fraunhofer-AISEC.

the class LanguageFrontend method mergeRegions.

/**
 * Merges two regions. The new region contains both and is the minimal region to do so.
 *
 * @param regionOne the first region
 * @param regionTwo the second region
 * @return the merged region
 */
public Region mergeRegions(Region regionOne, Region regionTwo) {
    Region ret = new Region();
    if (regionOne.getStartLine() < regionTwo.getStartLine() || regionOne.getStartLine() == regionTwo.getStartLine() && regionOne.getStartColumn() < regionTwo.getStartColumn()) {
        ret.setStartLine(regionOne.getStartLine());
        ret.setStartColumn(regionOne.getStartColumn());
    } else {
        ret.setStartLine(regionTwo.getStartLine());
        ret.setStartColumn(regionTwo.getStartColumn());
    }
    if (regionOne.getEndLine() > regionTwo.getEndLine() || regionOne.getEndLine() == regionTwo.getEndLine() && regionOne.getEndColumn() > regionTwo.getEndColumn()) {
        ret.setEndLine(regionOne.getEndLine());
        ret.setEndColumn(regionOne.getStartColumn());
    } else {
        ret.setEndLine(regionTwo.getEndLine());
        ret.setEndColumn(regionTwo.getEndColumn());
    }
    return ret;
}
Also used : Region(de.fraunhofer.aisec.cpg.sarif.Region)

Aggregations

Region (de.fraunhofer.aisec.cpg.sarif.Region)12 PhysicalLocation (de.fraunhofer.aisec.cpg.sarif.PhysicalLocation)10 Test (org.junit.jupiter.api.Test)9 HashMap (java.util.HashMap)6 BaseTest (de.fraunhofer.aisec.cpg.BaseTest)3 File (java.io.File)3 FunctionDeclaration (de.fraunhofer.aisec.cpg.graph.declarations.FunctionDeclaration)2 TranslationUnitDeclaration (de.fraunhofer.aisec.cpg.graph.declarations.TranslationUnitDeclaration)2 Range (com.github.javaparser.Range)1 TokenRange (com.github.javaparser.TokenRange)1 Node (de.fraunhofer.aisec.cpg.graph.Node)1 CompoundStatement (de.fraunhofer.aisec.cpg.graph.statements.CompoundStatement)1 URI (java.net.URI)1 Path (java.nio.file.Path)1 Nullable (org.checkerframework.checker.nullness.qual.Nullable)1