/******************************************************************************
 * Copyright (c) ETSI 2017.
 *
 * This file is subject to copyrights owned by ETSI. Non-exclusive permission
 * is hereby granted, free of charge, to copy, reproduce and amend this file
 * under the following conditions: It is provided "as is", without warranty of any
 * kind, expressed or implied.
 * 
 * ETSI shall never be liable for any claim, damages, or other liability arising
 * from its use or inability of use.This permission does not apply to any documentation
 * associated with this file for which ETSI keeps all rights reserved. The present
 * copyright notice shall be included in all copies of whole or part of this
 * file and shall not imply any sub-license right.
 *
 * Modified by: Adrien Kirjak
 *
 ** @version  0.0.1
 ** @purpose  1:B.1.2.6, Ensure that the IUT correctly handles template matching of subset definitions 
 ** @verdict  pass reject
 ***************************************************/

//Restriction e)
/*The individual members of the SubSet's argument and the elements of the template in the all from clause
shall not be the matching mechanisms omit, SuperSet, SubSet and the matching attributes (length restriction
and ifpresent). In addition, individual members shall not resolve to AnyValueOrNone and individual fields of
the template in the all from clause shall not resolve to AnyElementsOrNone or permutation.*/

module NegSem_B010207_subset_006 { 

  	type set of integer SoI;

    type port loopbackPort message {
	  	inout SoI
	} with {extension "internal"}
	
	type component GeneralComp {	    	    
	  	port loopbackPort messagePort
	}	

	testcase TC_NegSem_B010207_subset_006() runs on GeneralComp {

    	var SoI v_testMessage;

 		template SoI Template:= subset(3,4);

 		template SoI mw_matchingTemplate:= subset(all from Template);    
		//error: The "all from" clause contains a matching mechanism.

 		v_testMessage:={2};
 
		connect(self:messagePort, self:messagePort);
 		messagePort.send(v_testMessage);

    	alt {
     		[] messagePort.receive(mw_matchingTemplate) {
        		setverdict(pass);
     		}
     		[] messagePort.receive {
        		setverdict(fail);
     		}
    	}
	}

	control{
		execute(TC_NegSem_B010207_subset_006());
	}

}
 
