/******************************************************************************* * Copyright 2017 Ivan Shubin http://galenframework.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.galenframework.tests.speclang2.pagespec; import com.galenframework.components.validation.MockedPage; import com.galenframework.page.PageElement; import com.galenframework.specs.page.PageSection; import com.galenframework.specs.page.PageSpec; import org.testng.annotations.Test; import java.io.IOException; import java.util.HashMap; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class PageSpecReaderRulesTest extends PageSpecReaderTestBase { @Test public void shouldRead_customSpecRules_andProcessThem() throws IOException { PageSpec pageSpec = readPageSpec("speclang2/custom-rules.gspec"); assertThat(pageSpec.getSections().size(), is(1)); assertThat(pageSpec.getSections().get(0).getName(), is("Main section")); assertThat(pageSpec.getSections().get(0).getSections().size(), is(1)); PageSection subSection = pageSpec.getSections().get(0).getSections().get(0); assertThat(subSection.getName(), is("menu-item-* should be aligned horizontally")); assertThat(subSection.getObjects().size(), is(2)); assertThat(subSection.getObjects().get(0).getObjectName(), is("menu-item-2")); assertThat(subSection.getObjects().get(0).getSpecs().size(), is(1)); assertThat(subSection.getObjects().get(0).getSpecs().get(0).getOriginalText(), is("aligned horizontally all menu-item-1")); assertThat(subSection.getObjects().get(1).getObjectName(), is("menu-item-3")); assertThat(subSection.getObjects().get(1).getSpecs().size(), is(1)); assertThat(subSection.getObjects().get(1).getSpecs().get(0).getOriginalText(), is("aligned horizontally all menu-item-2")); assertThat(pageSpec.getSections().get(0).getObjects().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getObjectName(), is("menu-item-1")); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecs().size(), is(0)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getSpecs().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getName(), is("squared")); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getSpecs().get(0).getOriginalText(), is("width 100 % of menu-item-1/height")); } @Test public void shouldRead_customSpecRulesInSections_withoutOtherObjects_andProcessThem() throws IOException { PageSpec pageSpec = readPageSpec("speclang2/custom-rules-only-per-section.gspec"); assertThat(pageSpec.getSections().size(), is(1)); assertThat(pageSpec.getSections().get(0).getName(), is("Main section")); assertThat(pageSpec.getSections().get(0).getSections().size(), is(1)); PageSection subSection = pageSpec.getSections().get(0).getSections().get(0); assertThat(subSection.getName(), is("menu-item-1 is squared")); assertThat(subSection.getObjects().size(), is(1)); assertThat(subSection.getObjects().get(0).getObjectName(), is("menu-item-1")); assertThat(subSection.getObjects().get(0).getSpecs().size(), is(1)); assertThat(subSection.getObjects().get(0).getSpecs().get(0).getOriginalText(), is("width 100 % of menu-item-1/height")); } @Test public void shouldRead_customRulesFromJavaScript_andProcessThem() throws IOException { PageSpec pageSpec = readPageSpec("speclang2/custom-js-rules.gspec", new MockedPage(new HashMap<String, PageElement>()), EMPTY_TAGS, EMPTY_TAGS); assertThat(pageSpec.getSections().size(), is(1)); assertThat(pageSpec.getSections().get(0).getName(), is("Main section")); assertThat(pageSpec.getSections().get(0).getSections().size(), is(1)); PageSection subSection = pageSpec.getSections().get(0).getSections().get(0); assertThat(subSection.getName(), is("menu-item-* should be aligned horizontally")); assertThat(subSection.getObjects().size(), is(2)); assertThat(subSection.getObjects().get(0).getObjectName(), is("menu-item-2")); assertThat(subSection.getObjects().get(0).getSpecs().size(), is(1)); assertThat(subSection.getObjects().get(0).getSpecs().get(0).getOriginalText(), is("aligned horizontally all menu-item-1")); assertThat(subSection.getObjects().get(1).getObjectName(), is("menu-item-3")); assertThat(subSection.getObjects().get(1).getSpecs().size(), is(1)); assertThat(subSection.getObjects().get(1).getSpecs().get(0).getOriginalText(), is("aligned horizontally all menu-item-2")); assertThat(pageSpec.getSections().get(0).getObjects().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getObjectName(), is("menu-item-1")); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecs().size(), is(0)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getSpecs().size(), is(1)); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getName(), is("squared")); assertThat(pageSpec.getSections().get(0).getObjects().get(0).getSpecGroups().get(0).getSpecs().get(0).getOriginalText(), is("width 100 % of menu-item-1/height")); } @Test public void shouldRead_customRules_andNotCare_aboutExtraWhiteSpace() throws IOException { PageSpec pageSpec = readPageSpec("speclang2/custom-rules-white-space.gspec", new MockedPage(new HashMap<String, PageElement>()), EMPTY_TAGS, EMPTY_TAGS); assertThat(pageSpec.getSections().size(), is(1)); PageSection section = pageSpec.getSections().get(0); assertThat(section.getSections().size(), is(1)); PageSection ruleSection = section.getSections().get(0); assertThat(ruleSection.getName(), is("login_panel should stretch to screen")); assertThat(ruleSection.getObjects().size(), is(1)); assertThat(ruleSection.getObjects().get(0).getObjectName(), is("login_panel")); assertThat(ruleSection.getObjects().get(0).getSpecs().size(), is(1)); assertThat(ruleSection.getObjects().get(0).getSpecs().get(0).getOriginalText(), is("inside screen 0px left right")); } }