/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.liferay.poshi.runner; import com.liferay.poshi.runner.util.OSDetector; import com.liferay.poshi.runner.util.PropsValues; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * @author Karen Dang * @author Michael Hashimoto */ public class PoshiRunnerValidationTest extends TestCase { @Before @Override public void setUp() throws Exception { PoshiRunnerContext.readFiles(); } @After @Override public void tearDown() throws Exception { PoshiRunnerContext.clear(); } @Test public void testGetPrimaryAttributeName() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "AssertTextPresent"); element.addAttribute("value1", "hello world"); String primaryAttributeName = PoshiRunnerValidation.getPrimaryAttributeName( element, Arrays.asList("function", "selenium"), "GetPrimaryAttributeName.macro"); Assert.assertEquals( "getPrimaryAttributeName is failing", "function", primaryAttributeName); Assert.assertNotEquals( "getPrimaryAttributeName is failing", "value1", primaryAttributeName); } @Test public void testValidateClassCommandName() { String classCommandName = "ValidateClassCommandName#classCommandName"; Element element = PoshiRunnerContext.getTestCaseCommandElement( classCommandName); String filePath = getFilePath("ValidateClassCommandName.testcase"); PoshiRunnerValidation.validateClassCommandName( element, classCommandName, "test-case", filePath); Assert.assertEquals( "validateClassCommandName is failing", "", getExceptionMessage()); PoshiRunnerValidation.validateClassCommandName( element, "ValidateClassCommandName#fail", "test-case", filePath); Assert.assertEquals( "validateClassCommandName is failing", "Invalid test-case command ValidateClassCommandName#fail", getExceptionMessage()); } @Test public void testValidateCommandElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("command"); element.addAttribute("name", "validateCommandElement"); element.addAttribute("summary", "This is a test"); PoshiRunnerValidation.validateCommandElement( element, "ValidateCommandElement.macro"); Assert.assertEquals( "validateCommandElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("command"); element.addAttribute("summary", "This is a test"); PoshiRunnerValidation.validateCommandElement( element, "ValidateCommandElement.macro"); Assert.assertEquals( "validateCommandElement is failing", "Missing name attribute", getExceptionMessage()); } @Test public void testValidateConditionElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("and"); Element childElement1 = element.addElement("contains"); childElement1.addAttribute("line-number", "1"); childElement1.addAttribute("string", "hello world"); childElement1.addAttribute("substring", "hello"); Element childElement2 = element.addElement("equals"); childElement2.addAttribute("arg1", "true"); childElement2.addAttribute("arg2", "true"); childElement2.addAttribute("line-number", "1"); PoshiRunnerValidation.validateConditionElement( element, "ValidateConditionElement.macro"); Assert.assertEquals( "validateConditionElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("and"); childElement1 = element.addElement("contains"); childElement1.addAttribute("line-number", "1"); childElement1.addAttribute("string", "hello world"); childElement1.addAttribute("substring", "hello"); PoshiRunnerValidation.validateConditionElement( element, "ValidateConditionElement.macro"); Assert.assertEquals( "validateConditionElement is failing", "Too few child elements", getExceptionMessage()); } @Test public void testValidateDefinitionElement() throws Exception { String filePath = getFilePath("ValidateDefinitionElement.macro"); Element rootElement = PoshiRunnerGetterUtil.getRootElementFromFilePath( filePath); PoshiRunnerValidation.validateDefinitionElement(rootElement, filePath); Assert.assertEquals( "validateDefinitionElement is failing", "", getExceptionMessage()); filePath = getFilePath("ValidateDefinitionElement2.macro"); rootElement = PoshiRunnerGetterUtil.getRootElementFromFilePath( filePath); PoshiRunnerValidation.validateDefinitionElement(rootElement, filePath); Assert.assertEquals( "validateDefinitionElement is failing", "Root element name must be definition", getExceptionMessage()); } @Test public void testValidateElementName() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "AssertTextPresent"); element.addAttribute("value1", "hello world"); List<String> possibleElementNames = Arrays.asList("command", "execute"); PoshiRunnerValidation.validateElementName( element, possibleElementNames, "ValidateElementName.macro"); Assert.assertEquals( "validateElementName is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("poshi"); element.addAttribute("function", "AssertTextPresent"); element.addAttribute("value1", "hello world"); PoshiRunnerValidation.validateElementName( element, possibleElementNames, "ValidateElementName.macro"); Assert.assertEquals( "validateElementName is failing", "Missing " + possibleElementNames + " element", getExceptionMessage()); } @Test public void testValidateElseElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("if"); Element elseElement1 = element.addElement("else"); Element executeElement1 = elseElement1.addElement("execute"); executeElement1.addAttribute("function", "Click"); executeElement1.addAttribute("locator1", "//else element"); PoshiRunnerValidation.validateElseElement( element, "ValidateElseElement.macro"); Assert.assertEquals( "validateElseElement is failing", "", getExceptionMessage()); Element elseElement2 = element.addElement("else"); Element executeElement2 = elseElement2.addElement("execute"); executeElement2.addAttribute("function", "Click"); executeElement2.addAttribute("locator1", "//else element"); PoshiRunnerValidation.validateElseElement( element, "ValidateElseElement.macro"); Assert.assertEquals( "validateElseElement is failing", "Too many else elements", getExceptionMessage()); } @Test public void testValidateElseIfElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("elseif"); Element conditionElement = element.addElement("equals"); conditionElement.addAttribute("arg1", "true"); conditionElement.addAttribute("arg2", "true"); conditionElement.addAttribute("line-number", "12"); Element thenElement = element.addElement("then"); Element executeElement1 = thenElement.addElement("execute"); executeElement1.addAttribute("function", "Click"); executeElement1.addAttribute("line-number", "15"); executeElement1.addAttribute("locator1", "//else if element"); PoshiRunnerValidation.validateElseIfElement( element, "ValidateElseIfElement.macro"); Assert.assertEquals( "validateElseIfElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("elseif"); Element executeElement2 = element.addElement("execute"); executeElement2.addAttribute("function", "Click"); executeElement2.addAttribute("locator1", "//else if element"); thenElement = element.addElement("then"); executeElement1 = thenElement.addElement("execute"); executeElement1.addAttribute("function", "Click"); executeElement1.addAttribute("line-number", "15"); executeElement1.addAttribute("locator1", "//else if element"); PoshiRunnerValidation.validateElseIfElement( element, "ValidateElseIfElement.macro"); Assert.assertEquals( "validateElseIfElement is failing", "Invalid execute element", getExceptionMessage()); } @Test public void testValidateExecuteElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); Element childElement = element.addElement("var"); childElement.addAttribute("line-number", "1"); childElement.addAttribute("name", "name"); childElement.addAttribute("value", "value"); PoshiRunnerValidation.validateExecuteElement( element, "ValidateExecuteElement.macro"); Assert.assertEquals( "validateExecuteElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); childElement = element.addElement("execute"); childElement.addAttribute("function", "Click"); childElement.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateExecuteElement( element, "ValidateExecuteElement.macro"); Assert.assertEquals( "validateExecuteElement is failing", "Invalid child element", getExceptionMessage()); } @Test public void testValidateForElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("for"); element.addAttribute("line-number", "1"); element.addAttribute("list", "1,2,3"); element.addAttribute("param", "i"); Element childElement = element.addElement("execute"); childElement.addAttribute("function", "Click"); childElement.addAttribute("locator1", "//here"); childElement.addAttribute("value1", "${i}"); PoshiRunnerValidation.validateForElement( element, "ValidateForElement.macro"); Assert.assertEquals( "validateForElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("for"); element.addAttribute("line-number", "1"); element.addAttribute("list", "1,2,3"); childElement = element.addElement("execute"); childElement.addAttribute("function", "Click"); childElement.addAttribute("locator1", "//here"); childElement.addAttribute("value1", "${i}"); PoshiRunnerValidation.validateForElement( element, "ValidateForElement.macro"); Assert.assertEquals( "validateForElement is failing", "Missing param attribute", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("for"); element.addAttribute("line-number", "1"); element.addAttribute("list", "1,2,3"); element.addAttribute("param", "i"); PoshiRunnerValidation.validateForElement( element, "ValidateForElement.macro"); Assert.assertEquals( "validateForElement is failing", "Missing child elements", getExceptionMessage()); } @Test public void testValidateFunctionContext() { String filePath = getFilePath("ValidateFunctionContext.macro"); Element element = PoshiRunnerContext.getMacroCommandElement( "ValidateFunctionContext#validateFunctionContextPass"); List<Element> functionElements = element.elements("execute"); for (Element functionElement : functionElements) { PoshiRunnerValidation.validateFunctionContext( functionElement, filePath); } Assert.assertEquals( "ValidateFunctionContext is failing", "", getExceptionMessage()); element = PoshiRunnerContext.getMacroCommandElement( "ValidateFunctionContext#validateFunctionContextFail1"); functionElements = element.elements("execute"); for (Element functionElement : functionElements) { PoshiRunnerValidation.validateFunctionContext( functionElement, filePath); } Assert.assertEquals( "validateFunctionContext is failing", "Invalid path name ClickAt", getExceptionMessage()); element = PoshiRunnerContext.getMacroCommandElement( "ValidateFunctionContext#validateFunctionContextFail2"); functionElements = element.elements("execute"); for (Element functionElement : functionElements) { PoshiRunnerValidation.validateFunctionContext( functionElement, filePath); } Assert.assertEquals( "validateFunctionContext is failing", "Invalid path locator Click#CLICK_THERE", getExceptionMessage()); } @Test public void testValidateFunctionFile() throws Exception { Document document = DocumentHelper.createDocument(); Element rootElement = document.addElement("definition"); rootElement.addAttribute("default", "close"); Element commandElement = rootElement.addElement("command"); commandElement.addAttribute("name", "close"); Element executeElement1 = commandElement.addElement("execute"); executeElement1.addAttribute("argument1", "null"); executeElement1.addAttribute("selenium", "selectWindow"); Element executeElement2 = commandElement.addElement("execute"); executeElement2.addAttribute("argument1", "relative=top"); executeElement2.addAttribute("selenium", "selectFrame"); PoshiRunnerValidation.validateFunctionFile( rootElement, "Close.function"); Assert.assertEquals( "validateFunctionFile is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); rootElement = document.addElement("definition"); rootElement.addAttribute("default", "open"); commandElement = rootElement.addElement("command"); commandElement.addAttribute("name", "open"); executeElement1 = commandElement.addElement("execute"); executeElement1.addAttribute("argument1", "//hello"); executeElement1.addAttribute("selenium", "open"); executeElement2 = commandElement.addElement("execute"); executeElement2.addAttribute("macro", "MacroFileName#macroCommandName"); PoshiRunnerValidation.validateFunctionFile( rootElement, "Open.function"); Assert.assertEquals( "validateFunctionFile is failing", "Invalid or missing attribute", getExceptionMessage()); } @Test public void testValidateHasChildElements() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); element.addAttribute("value", "value"); Element childElement = element.addElement("var"); childElement.addAttribute("name", "hello"); childElement.addAttribute("value", "world"); PoshiRunnerValidation.validateHasChildElements( element, "ValidateHasChildElements.macro"); Assert.assertEquals( "validateHasChildElements is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); element.addAttribute("value", "value"); PoshiRunnerValidation.validateHasChildElements( element, "ValidateHasChildElements.macro"); Assert.assertEquals( "validateHasChildElements is failing", "Missing child elements", getExceptionMessage()); } @Test public void testValidateHasMultiplePrimaryAttributeNames() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("selenium", "click"); List<String> attributeNames = new ArrayList<>(); List<Attribute> attributes = element.attributes(); for (Attribute attribute : attributes) { attributeNames.add(attribute.getName()); } PoshiRunnerValidation.validateHasMultiplePrimaryAttributeNames( element, attributeNames, Arrays.asList("function", "selenium"), "ValidateHasMultiplePrimaryAttributeNames.macro"); Assert.assertEquals( "validateHasMultiplePrimaryAttributeNames is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); attributeNames = new ArrayList<>(); attributes = element.attributes(); for (Attribute attribute : attributes) { attributeNames.add(attribute.getName()); } PoshiRunnerValidation.validateHasMultiplePrimaryAttributeNames( element, attributeNames, Arrays.asList("function", "selenium"), "ValidateHasMultiplePrimaryAttributeNames.macro"); Assert.assertEquals( "validateHasMultiplePrimaryAttributeNames is failing", "Too many attributes", getExceptionMessage()); } @Test public void testValidateHasNoAttributes() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("if"); Element childElement = element.addElement("equals"); childElement.addAttribute("arg1", "hello"); childElement.addAttribute("arg2", "world"); PoshiRunnerValidation.validateHasNoAttributes( element, "ValidateHasNoAttributes.macro"); Assert.assertEquals( "validateHasNoAttributes is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("while"); element.addAttribute("then", "Click"); PoshiRunnerValidation.validateHasNoAttributes( element, "ValidateHasNoAttributes.macro"); Assert.assertEquals( "validateHasNoAttributes is failing", "Invalid then attribute", getExceptionMessage()); } @Test public void testValidateHasNoChildElements() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateHasNoChildElements( element, "ValidateHasNoChildElements.macro"); Assert.assertEquals( "validateHasNoChildElements is failing", "", getExceptionMessage()); Element childElement = element.addElement("var"); childElement.addAttribute("name", "hello"); childElement.addAttribute("value", "world"); PoshiRunnerValidation.validateHasNoChildElements( element, "ValidateHasNoChildElements.macro"); Assert.assertEquals( "validateHasNoChildElements is failing", "Invalid child elements", getExceptionMessage()); } @Test public void testValidateHasPrimaryAttributeName() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateHasPrimaryAttributeName( element, Arrays.asList("function", "macro"), "ValidateHasPrimaryAttributeName.macro"); Assert.assertEquals( "validateHasPrimaryAttributeName is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("selenium", "click"); PoshiRunnerValidation.validateHasPrimaryAttributeName( element, Arrays.asList("function", "selenium"), "ValidateHasPrimaryAttributeName.macro"); Assert.assertEquals( "validateHasPrimaryAttributeName is failing", "Too many attributes", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); PoshiRunnerValidation.validateHasPrimaryAttributeName( element, Arrays.asList("function", "selenium"), "ValidateHasPrimaryAttributeName.macro"); Assert.assertEquals( "validateHasPrimaryAttributeName is failing", "Invalid or missing attribute", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("selenium", "click"); PoshiRunnerValidation.validateHasPrimaryAttributeName( element, Arrays.asList("function", "selenium"), Arrays.asList("function", "selenium"), "ValidateHasPrimaryAttributeName.macro"); Assert.assertEquals( "validateHasPrimaryAttributeName is failing", "", getExceptionMessage()); } @Test public void testValidateIfElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("if"); Element conditionElement = element.addElement("equals"); conditionElement.addAttribute("arg1", "true"); conditionElement.addAttribute("arg2", "true"); conditionElement.addAttribute("line-number", "2"); Element thenElement = element.addElement("then"); Element thenChildElement = thenElement.addElement("execute"); thenChildElement.addAttribute("function", "Click"); thenChildElement.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateIfElement( element, "ValidateIfElement.macro"); Assert.assertEquals( "validateIfElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("if"); conditionElement = element.addElement("execute"); conditionElement.addAttribute("function", "Click"); conditionElement.addAttribute("selenium", "click"); thenElement = element.addElement("then"); thenChildElement = thenElement.addElement("execute"); thenChildElement.addAttribute("function", "Click"); thenChildElement.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateIfElement( element, "ValidateIfElement.macro"); Assert.assertEquals( "validateIfElement is failing", "Missing or invalid if condition element", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("if"); conditionElement = element.addElement("equals"); conditionElement.addAttribute("arg1", "true"); conditionElement.addAttribute("arg2", "true"); conditionElement.addAttribute("line-number", "2"); thenElement = element.addElement("then"); thenChildElement = thenElement.addElement("execute"); thenChildElement.addAttribute("function", "Click"); thenChildElement.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateIfElement( element, "ValidateIfElement.function"); Assert.assertEquals( "validateIfElement is failing", "Missing or invalid if condition element", getExceptionMessage()); } @Test public void testValidateMacroContext() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute( "macro", "ValidateMacroContext#validateMacroContextPass"); Element childElement = element.addElement("var"); childElement.addAttribute("name", "varName"); childElement.addAttribute("value", "varValue"); PoshiRunnerValidation.validateMacroContext( element, "macro", "ValidateMacroContext.macro"); Assert.assertEquals( "validateMacroContext is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("macro", "ValidateMacroContext#fail"); childElement = element.addElement("var"); childElement.addAttribute("name", "varName"); childElement.addAttribute("value", "varValue"); PoshiRunnerValidation.validateMacroContext( element, "macro", "ValidateMacroContext.macro"); Assert.assertEquals( "validateMacroContext is failing", "Invalid macro command ValidateMacroContext#fail", getExceptionMessage()); } @Test public void testValidateMacroFile() throws Exception { Document document = DocumentHelper.createDocument(); Element rootElement = document.addElement("definition"); Element commandElement = rootElement.addElement("command"); commandElement.addAttribute("name", "validateMacroFile"); Element echoElement = commandElement.addElement("echo"); echoElement.addAttribute("message", "hello world"); PoshiRunnerValidation.validateMacroFile( rootElement, "ValidateMacroFile.macro"); Assert.assertEquals( "validateMacroFile is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); rootElement = document.addElement("definition"); commandElement = rootElement.addElement("command"); commandElement.addAttribute("name", "validateMacroFile"); Element containsElement = commandElement.addElement("contains"); containsElement.addAttribute("string", "string"); PoshiRunnerValidation.validateMacroFile( rootElement, "ValidateMacroFile.macro"); Assert.assertEquals( "validateMacroFile is failing", "Invalid contains element", getExceptionMessage()); } @Test public void testValidateMessageElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("echo"); element.addAttribute("message", "This test passed"); PoshiRunnerValidation.validateMessageElement( element, "ValidateMessageElement.macro"); Assert.assertEquals( "validateMessageElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("echo"); PoshiRunnerValidation.validateMessageElement( element, "ValidateMessageElement.macro"); Assert.assertEquals( "validateMessageElement is failing", "Missing message attribute", getExceptionMessage()); } @Test public void testValidateMethodExecuteElement() { String filePath = "validateMethodExecuteElement.macro"; String invalidClassName = "com.liferay.poshi.runner.util.FakeUtil"; String invalidMethodName = "FakeMethod"; String validClassName = "com.liferay.poshi.runner.util.StringUtil"; String validMethodName = "add"; List<String> testClassNames = new ArrayList<>(); testClassNames.add(invalidClassName); testClassNames.add(validClassName); List<String> testMethodNames = new ArrayList<>(); testMethodNames.add(validMethodName); testMethodNames.add(invalidMethodName); List<List<String>> testArguments = new ArrayList<>(); testArguments.add(new ArrayList<String>()); testArguments.add(new ArrayList<String>()); List<String> expectedMessages = new ArrayList<>(); expectedMessages.add("Unable to find class " + invalidClassName); expectedMessages.add( "Unable to find method " + validClassName + "#" + invalidMethodName); for (int i = 0; i < testClassNames.size(); i++) { Document document = DocumentHelper.createDocument(); Element executeElement = document.addElement("execute"); executeElement.addAttribute("class", testClassNames.get(i)); executeElement.addAttribute("method", testMethodNames.get(i)); for (String argument : testArguments.get(i)) { Element argElement = executeElement.addElement("arg"); argElement.addAttribute("value", argument); } PoshiRunnerValidation.validateMethodExecuteElement( executeElement, filePath); Assert.assertEquals( "validateMethodExecuteElement is failing", expectedMessages.get(i), getExceptionMessage()); } } @Test public void testValidateNumberOfAttributes() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Open"); element.addAttribute("locator1", "http://www.liferay.com"); PoshiRunnerValidation.validateNumberOfAttributes( element, 2, "ValidateNumberOfAttributes.macro"); Assert.assertEquals( "validateNumberOfAttributes is failing", "", getExceptionMessage()); PoshiRunnerValidation.validateNumberOfAttributes( element, 1, "ValidateNumberOfAttributes.macro"); Assert.assertEquals( "validateNumberOfAttributes is failing", "Too many attributes", getExceptionMessage()); PoshiRunnerValidation.validateNumberOfAttributes( element, 3, "ValidateNumberOfAttributes.macro"); Assert.assertEquals( "validateNumberOfAttributes is failing", "Too few attributes", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); PoshiRunnerValidation.validateNumberOfAttributes( element, 2, "ValidateNumberOfAttributes.macro"); Assert.assertEquals( "validateNumberOfAttributes is failing", "Missing attributes", getExceptionMessage()); } @Test public void testValidateNumberOfChildElements() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); Element childElement1 = element.addElement("var"); childElement1.addAttribute("name", "varName"); childElement1.addAttribute("value", "varValue"); PoshiRunnerValidation.validateNumberOfChildElements( element, 1, "ValidateNumberOfChildElements.macro"); Assert.assertEquals( "validateNumberofChildElements is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); PoshiRunnerValidation.validateNumberOfChildElements( element, 1, "ValidateNumberOfChildElements.macro"); Assert.assertEquals( "validateNumberofChildElements is failing", "Missing child elements", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); childElement1 = element.addElement("var"); childElement1.addAttribute("name", "varName"); childElement1.addAttribute("value", "varValue"); Element childElement2 = element.addElement("var"); childElement2.addAttribute("name", "varName"); childElement2.addAttribute("value", "varValue"); PoshiRunnerValidation.validateNumberOfChildElements( element, 1, "ValidateNumberOfChildElements.macro"); Assert.assertEquals( "validateNumberofChildElements is failing", "Too many child elements", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); childElement1 = element.addElement("var"); childElement1.addAttribute("name", "varName"); childElement1.addAttribute("value", "varValue"); PoshiRunnerValidation.validateNumberOfChildElements( element, 2, "ValidateNumberOfChildElements.macro"); Assert.assertEquals( "validateNumberofChildElements is failing", "Too few child elements", getExceptionMessage()); } @Test public void testValidatePathFile() throws Exception { String filePath = getFilePath("Click.path"); Element element = PoshiRunnerGetterUtil.getRootElementFromFilePath( filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "", getExceptionMessage()); filePath = getFilePath("ValidatePathFile1.path"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "Invalid definition element", getExceptionMessage()); filePath = getFilePath("ValidatePathFile2.path"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "Missing locator", getExceptionMessage()); filePath = getFilePath("ValidatePathFile3.path"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "Missing thead class name", getExceptionMessage()); filePath = getFilePath("ValidatePathFile4.path"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "Thead class name does not match file name", getExceptionMessage()); filePath = getFilePath("ValidatePathFile5.path"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validatePathFile(element, filePath); Assert.assertEquals( "validatePathFile is failing", "File name and title are different", getExceptionMessage()); } @Test public void testValidatePossibleAttributeNames() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); element.addAttribute("value1", "there"); PoshiRunnerValidation.validatePossibleAttributeNames( element, Arrays.asList("function", "locator1", "value1"), "ValidatePossibleAttributeNames.macro"); Assert.assertEquals( "validatePossibleAttributeNames is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); element.addAttribute("value", "there"); PoshiRunnerValidation.validatePossibleAttributeNames( element, Arrays.asList("function", "locator1", "value1"), "ValidatePossibleAttributeNames.macro"); Assert.assertEquals( "validatePossibleAttributeNames is failing", "Invalid value attribute", getExceptionMessage()); } @Test public void testValidatePropertyElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("property"); element.addAttribute("line-number", "1"); element.addAttribute("name", "testray.main.component.name"); element.addAttribute("value", "Tools"); PoshiRunnerValidation.validatePropertyElement( element, "ValidatePossibleAttributeNames.macro"); Assert.assertEquals( "validatePropertyElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("property"); element.addAttribute("line-number", "1"); element.addAttribute("name", "property.name"); element.addAttribute("value", "Tools"); PoshiRunnerValidation.validatePropertyElement( element, "ValidatePossibleAttributeNames.macro"); Assert.assertEquals( "validatePropertyElement is failing", "Invalid property name property.name", getExceptionMessage()); } @Test public void testValidateRequiredAttributeNames() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("property"); element.addAttribute("line-number", "1"); element.addAttribute("name", "testray.main.component.name"); element.addAttribute("value", "Tools"); PoshiRunnerValidation.validateRequiredAttributeNames( element, Arrays.asList("line-number", "name", "value"), "ValidateRequiredAttributeNames.macro"); Assert.assertEquals( "validateRequiredAttributeNames is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("property"); element.addAttribute("name", "testray.main.component.name"); element.addAttribute("value", "Tools"); PoshiRunnerValidation.validateRequiredAttributeNames( element, Arrays.asList("line-number", "name", "value"), "ValidateRequiredAttributeNames.macro"); Assert.assertEquals( "validateRequiredAttributeNames is failing", "Missing line-number attribute", getExceptionMessage()); } @Test public void testValidateRequiredChildElementName() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); Element childElement = element.addElement("var"); childElement.addAttribute("name", "varName"); childElement.addAttribute("value", "varValue"); String requiredChildElementName = "var"; PoshiRunnerValidation.validateRequiredChildElementName( element, requiredChildElementName, "ValidateRequiredChildElementName,macro"); Assert.assertEquals( "validateRequiredChildElementName is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("execute"); element.addAttribute("function", "Click"); element.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateRequiredChildElementName( element, requiredChildElementName, "ValidateRequiredChildElementName,macro"); Assert.assertEquals( "validateRequiredChildElementName is failing", "Missing required var child element", getExceptionMessage()); } @Test public void testValidateRequiredChildElementNames() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("and"); Element childElement1 = element.addElement("condition"); childElement1.addAttribute("argument", "//here"); childElement1.addAttribute("selenium", "isElementPresent"); Element childElement2 = element.addElement("contains"); childElement2.addAttribute("string", "name"); childElement2.addAttribute("substring", "value"); PoshiRunnerValidation.validateRequiredChildElementNames( element, Arrays.asList("condition", "contains"), "ValidateRequiredChildElementNames.macro"); Assert.assertEquals( "validateRequiredChildElementNames is failing", "", getExceptionMessage()); PoshiRunnerValidation.validateRequiredChildElementNames( element, Arrays.asList("condition", "contains", "equals"), "ValidateRequiredChildElementNames.macro"); Assert.assertEquals( "validateRequiredChildElementNames is failing", "Missing required equals child element", getExceptionMessage()); } @Test public void testValidateTestCaseFile() throws Exception { String filePath = getFilePath("ValidateTestCaseFile1.testcase"); Element element = PoshiRunnerGetterUtil.getRootElementFromFilePath( filePath); PoshiRunnerValidation.validateTestCaseFile(element, filePath); Assert.assertEquals( "validateTestCaseFile is failing", "", getExceptionMessage()); filePath = getFilePath("ValidateTestCaseFile2.testcase"); element = PoshiRunnerGetterUtil.getRootElementFromFilePath(filePath); PoshiRunnerValidation.validateTestCaseFile(element, filePath); Assert.assertEquals( "validateTestCaseFile is failing", "Invalid execute element", getExceptionMessage()); } @Test public void testValidateTestName() { PoshiRunnerValidation.validateTestName("ValidateTestName#testName"); Assert.assertEquals( "validateTestName is failing", "", getExceptionMessage()); PoshiRunnerValidation.validateTestName("ValidateTestName#fail"); Assert.assertEquals( "validateTestName is failing", "Invalid test case command fail", getExceptionMessage()); } @Test public void testValidateThenElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("if"); Element thenElement = element.addElement("then"); Element thenChildElement = thenElement.addElement("execute"); thenChildElement.addAttribute("function", "Click"); thenChildElement.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateThenElement( element, "ValidateThenElement.macro"); Assert.assertEquals( "validateThenElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("if"); PoshiRunnerValidation.validateThenElement( element, "ValidateThenElement.macro"); Assert.assertEquals( "validateThenElement is failing", "Missing then element", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("if"); Element thenElement1 = element.addElement("then"); Element thenChildElement1 = thenElement1.addElement("execute"); thenChildElement1.addAttribute("function", "Click"); thenChildElement1.addAttribute("locator1", "//here"); Element thenElement2 = element.addElement("then"); Element thenChildElement2 = thenElement2.addElement("execute"); thenChildElement2.addAttribute("function", "Click"); thenChildElement2.addAttribute("locator1", "//here"); PoshiRunnerValidation.validateThenElement( element, "ValidateThenElement.macro"); Assert.assertEquals( "validateThenElement is failing", "Too many then elements", getExceptionMessage()); } @Test public void testValidateToggleElement() { Document document = DocumentHelper.createDocument(); Element toggleElement = document.addElement("toggle"); toggleElement.addAttribute("name", "LRQA-TOGGLE"); toggleElement.addAttribute("line-number", "1"); Element onElement = toggleElement.addElement("on"); onElement.addAttribute("line-number", "2"); Element onChildElement = onElement.addElement("execute"); onChildElement.addAttribute("function", "Click"); onChildElement.addAttribute("locator1", "//here"); onChildElement.addAttribute("line-number", "3"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "", getExceptionMessage()); Element onElement2 = toggleElement.addElement("on"); onElement2.addAttribute("line-number", "5"); Element onChildElement2 = onElement2.addElement("execute"); onChildElement2.addAttribute("function", "Click"); onChildElement2.addAttribute("locator1", "//here"); onChildElement2.addAttribute("line-number", "6"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "Too many on elements", getExceptionMessage()); document = DocumentHelper.createDocument(); toggleElement = document.addElement("toggle"); toggleElement.addAttribute("name", "LRQA-TOGGLE"); toggleElement.addAttribute("line-number", "1"); Element offElement = toggleElement.addElement("off"); offElement.addAttribute("line-number", "2"); Element offChildElement = offElement.addElement("execute"); offChildElement.addAttribute("function", "Click"); offChildElement.addAttribute("locator1", "//here"); offChildElement.addAttribute("line-number", "3"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "", getExceptionMessage()); Element offElement2 = toggleElement.addElement("off"); offElement2.addAttribute("line-number", "5"); Element offChildElement2 = offElement2.addElement("execute"); offChildElement2.addAttribute("function", "Click"); offChildElement2.addAttribute("locator1", "//here"); offChildElement2.addAttribute("line-number", "6"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "Too many off elements", getExceptionMessage()); document = DocumentHelper.createDocument(); toggleElement = document.addElement("toggle"); toggleElement.addAttribute("name", "LRQA-TOGGLE"); toggleElement.addAttribute("line-number", "1"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "Missing child elements", getExceptionMessage()); document = DocumentHelper.createDocument(); toggleElement = document.addElement("toggle"); toggleElement.addAttribute("line-number", "1"); onElement = toggleElement.addElement("on"); onElement.addAttribute("line-number", "2"); onChildElement = onElement.addElement("execute"); onChildElement.addAttribute("function", "Click"); onChildElement.addAttribute("locator1", "//here"); onChildElement.addAttribute("line-number", "3"); PoshiRunnerValidation.validateToggleElement( toggleElement, "ValidateToggleElement.macro"); Assert.assertEquals( "ValidateToggleElement is failing", "Missing name attribute", getExceptionMessage()); } @Test public void testValidateVarElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("var"); element.addAttribute("line-number", "1"); element.addAttribute("name", "name"); element.addAttribute("value", "value"); PoshiRunnerValidation.validateVarElement( element, "ValidateVarElement.macro"); Assert.assertEquals( "validateVarElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("var"); element.addAttribute("line-number", "1"); element.addAttribute("name", "name"); element.addText("value"); PoshiRunnerValidation.validateVarElement( element, "ValidateVarElement.macro"); Assert.assertEquals( "validateVarElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("var"); element.addAttribute("line-number", "1"); element.addAttribute("name", "name"); PoshiRunnerValidation.validateVarElement( element, "ValidateVarElement.macro"); Assert.assertEquals( "validateVarElement is failing", "Missing value attribute", getExceptionMessage()); } @Test public void testValidateWhileElement() { Document document = DocumentHelper.createDocument(); Element element = document.addElement("while"); Element childElement = element.addElement("condition"); childElement.addAttribute("function", "isElementPresent"); childElement.addAttribute("locator1", "//here"); Element thenElement = element.addElement("then"); Element executeElement = thenElement.addElement("execute"); executeElement.addAttribute("function", "Click"); executeElement.addAttribute("locator1", "//else if element"); PoshiRunnerValidation.validateWhileElement(element, "While.macro"); Assert.assertEquals( "validateWhileElement is failing", "", getExceptionMessage()); document = DocumentHelper.createDocument(); element = document.addElement("while"); thenElement = element.addElement("then"); executeElement = thenElement.addElement("execute"); executeElement.addAttribute("function", "Click"); executeElement.addAttribute("locator1", "//else if element"); PoshiRunnerValidation.validateWhileElement(element, "While.macro"); Assert.assertEquals( "validateWhileElement is failing", "Missing while condition element", getExceptionMessage()); } protected String getExceptionMessage() { Set<Exception> exceptions = PoshiRunnerValidation.getExceptions(); StringBuilder sb = new StringBuilder(); for (Exception exception : exceptions) { String message = exception.getMessage(); int x = message.indexOf("\n"); if (x == -1) { sb.append(message); } else { sb.append(message.substring(0, x)); } } PoshiRunnerValidation.clearExceptions(); return sb.toString(); } protected String getFilePath(String fileName) { String filePath = PropsValues.TEST_BASE_DIR_NAME + "resources/com/liferay/poshi/runner/dependencies/validation/" + fileName; if (OSDetector.isWindows()) { filePath = filePath.replace("/", "\\"); } return filePath; } }