From 463c9ddf5cf14fcc24edcd980a17b2e0107a81c0 Mon Sep 17 00:00:00 2001
From: Letitia Li <letitia.li@telecom-paristech.fr>
Date: Tue, 6 Feb 2018 11:44:53 +0100
Subject: [PATCH] Performance pragma format syntax checking

---
 .../java/ui/AvatarDesignPanelTranslator.java  |  8 +++----
 .../avatartranslator/AvatarSafetyTests.java   | 22 +++++++++++++++++++
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index 892e452735..3cc5cf8ea3 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -241,7 +241,7 @@ public class AvatarDesignPanelTranslator {
     }
 	
 	public AvatarPragmaLatency checkPerformancePragma(String _pragma, List<AvatarBDBlock> _blocks, AvatarSpecification as, TGComponent tgc){	
-		if (_pragma.contains("=") || (!_pragma.contains(">") && !_pragma.contains("<") && !_pragma.contains("?")) || !_pragma.contains("Latency")){
+		if (_pragma.contains("=") || (!_pragma.contains(">") && !_pragma.contains("<") && !_pragma.contains("?")) || !_pragma.contains("Latency(")){
 			UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "No latency expression found in pragma "+ _pragma);
 		   	ce.setTDiagramPanel(adp.getAvatarBDPanel());
 		   	ce.setTGComponent(tgc);
@@ -256,7 +256,6 @@ public class AvatarDesignPanelTranslator {
 		
 
 		String p1 = pragma.split(",")[0];
-
 		//Throw error if lack of '.' in block.signal
 		if (!p1.contains(".")){
 			UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Invalid block.signal format in pragma " + _pragma);
@@ -266,9 +265,8 @@ public class AvatarDesignPanelTranslator {
 			TraceManager.addDev("Invalid block.signal format in pragma " + _pragma);
 			return null;
 		}
-
 		String block1 = p1.split("\\.")[0];
-		String state1 = p1.split("\\.")[1];
+		String state1 = p1.split("\\.",-1)[1];
 		AvatarBlock bl1;
 		AvatarStateMachineElement st1=null;
 		List<String> id1= new ArrayList<String>();
@@ -323,7 +321,7 @@ public class AvatarDesignPanelTranslator {
 		}
 
 		String block2 = p2.split("\\.")[0];
-		String state2 = p2.split("\\.")[1];
+		String state2 = p2.split("\\.",-1)[1];
 
 
 
diff --git a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
index 172fb14e55..81489cb4c8 100644
--- a/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
+++ b/ttool/src/test/java/avatartranslator/AvatarSafetyTests.java
@@ -129,9 +129,19 @@ public class AvatarSafetyTests {
 		//Fail if does not contain 'Latency()'
 		pragma = adpt.checkPerformancePragma("Lat(b,s)<1", blocks, as, null);
 		assertNull(pragma);
+		//Fail if missing comma
+		pragma = adpt.checkPerformancePragma("Latency(bs)<1", blocks, as, null);
+		assertNull(pragma);
 		//Fail if unmatched ')'
 		pragma = adpt.checkPerformancePragma("Latency(b,s<1", blocks, as, null);
 		assertNull(pragma);
+		//Fail if invalid comparison sign
+		pragma = adpt.checkPerformancePragma("Latency(b,s)-1", blocks, as, null);
+		assertNull(pragma);
+		pragma = adpt.checkPerformancePragma("Latency(b,s)*1", blocks, as, null);
+		assertNull(pragma);
+		pragma = adpt.checkPerformancePragma("Latency(b<s),1", blocks, as, null);
+		assertNull(pragma);
 	}
 
 	@Test
@@ -217,6 +227,18 @@ public class AvatarSafetyTests {
 		assertEquals(pragma.getId2().size(),2);	
 	
 	}
+   
+    @Test
+    public void testFailInvalidStateFormatPerformancePragma(){
+       	pragma = adpt.checkPerformancePragma("Latency(A,C.c1)<1", blocks, as, null);
+		assertTrue(pragma ==null);
+    	pragma = adpt.checkPerformancePragma("Latency(A.,C.c1)<1", blocks, as, null);
+		assertTrue(pragma ==null);
+		pragma = adpt.checkPerformancePragma("Latency(B.sig2,C)<1", blocks, as, null);
+		assertTrue(pragma ==null);
+		pragma = adpt.checkPerformancePragma("Latency(B.sig2,C.)<1", blocks, as, null);
+		assertTrue(pragma ==null);
+    }
     
     @Test
     public void testFormAvatarStatePragma(){
-- 
GitLab