All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.automationrockstars.gir.mobile.PageUtils Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2015, 2016 Automation RockStars Ltd.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Apache License v2.0
 * which accompanies this distribution, and is available at
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Contributors:
 *     Automation RockStars - initial API and implementation
 *******************************************************************************/
package com.automationrockstars.gir.mobile;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.commons.lang.ArrayUtils;

import java.util.List;
import java.util.regex.Pattern;

public class PageUtils {

    public static String getValueFromLine(String name, String pageLine) {
        return pageLine.replaceAll("^.* " + name + "=\"", "").replaceAll("\".*", "");
    }

    public static String getPageSource() {
        return MobileFactory.getDriver().getPageSource();
    }

    public static List getPageSourceAsList() {
        return Splitter.on("\n").omitEmptyStrings().splitToList(getPageSource().replaceAll("><", ">\n<"));
    }

    private static Predicate linesContaining(final String... parts) {

        return new Predicate() {
            @Override
            public boolean apply(String input) {
                boolean result = true;
                for (String part : parts) {
                    result = result && input.contains(part);
                }
                return result;
            }
        };
    }

    public static List getLinesContaining(final String... parts) {
        return getLinesContaining(getPageSourceAsList(), parts);
    }

    static List getLinesContaining(final Iterable lines, final String... parts) {
        return Lists.newArrayList(Iterables.filter(lines, linesContaining(parts)));
    }

    static List getLinesMatching(Iterable lines, final String regex) {
        return Lists.newArrayList(Iterables.filter(lines, new Predicate() {
            @Override
            public boolean apply(String input) {
                return Pattern.matches(regex, input);
            }
        }));
    }

    public static List getLinesMatching(final String regex) {
        return getLinesMatching(getPageSourceAsList(), regex);
    }

    public static List getLinesBetween(String[] start, String[] end) {
        List source = getPageSourceAsList();
        int startLine = 0;
        int endLine = source.size() - 1;
        if (!ArrayUtils.isEmpty(start)) {
            startLine = source.indexOf(getLinesContaining(source, start).get(0));
        }
        if (!ArrayUtils.isEmpty(end)) {
            endLine = source.indexOf(getLinesContaining(source, end).get(0));
            if (endLine < 0) {
                endLine = source.size() - 1;
            }
        }
        return source.subList(startLine + 1, endLine - 1);
    }

    public static List getLinesBetween(String start, String end) {
        List source = getPageSourceAsList();
        int startLine = source.indexOf(getLinesContaining(start).get(0));
        int endLine = source.indexOf(getLinesContaining(end).get(0));
        return source.subList(startLine + 1, endLine - 1);
    }

    public static List getNameValues(List linesBetween) {
        return Lists.newArrayList(
                Iterables.transform(Iterables.filter(linesBetween, linesContaining("name")),
                        new Function() {

                            @Override
                            public String apply(String input) {
                                return getValueFromLine("name", input);
                            }
                        }));
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy