gobblin.ingestion.google.webmaster.UrlTriePostOrderIteratorTest.java Source code

Java tutorial

Introduction

Here is the source code for gobblin.ingestion.google.webmaster.UrlTriePostOrderIteratorTest.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 gobblin.ingestion.google.webmaster;

import java.util.ArrayList;
import java.util.Arrays;

import org.apache.commons.lang3.tuple.Pair;
import org.testng.Assert;
import org.testng.annotations.Test;

@Test(groups = { "gobblin.source.extractor.extract.google.webmaster" })
public class UrlTriePostOrderIteratorTest {
    private String _property = "www.linkedin.com/";

    @Test
    public void testEmptyTrie1WithSize1() {
        UrlTrie trie = new UrlTrie("", new ArrayList<String>());
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 1);
        Assert.assertFalse(iterator.hasNext());
    }

    @Test
    public void testEmptyTrie2WithSize1() {
        UrlTrie trie = new UrlTrie(_property, new ArrayList<String>());
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 1);
        Assert.assertFalse(iterator.hasNext());
    }

    /**
     * The trie is:
     *  /
     *  0
     *  1
     *  2
     */
    @Test
    public void testVerticalTrie1TraversalWithSize1() {
        UrlTrie trie = new UrlTrie(_property, Arrays.asList(_property + "0", _property + "01", _property + "012"));
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 1);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(new String[] { _property + "012", _property + "01", _property + "0", _property },
                chars.toArray());
    }

    /**
     * The trie is:
     *  /
     *  0
     *  1
     *  2
     */
    @Test
    public void testVerticalTrie1TraversalWithSize2() {
        UrlTrie trie = new UrlTrie(_property, Arrays.asList(_property + "0", _property + "01", _property + "012"));
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 2);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(new String[] { _property + "01", _property + "0", _property }, chars.toArray());
    }

    /**
     * The trie is:
     *  /
     *  0
     *  1
     *  2
     */
    @Test
    public void testVerticalTrie1TraversalWithSize3() {
        UrlTrie trie = new UrlTrie(_property, Arrays.asList(_property + "0", _property + "01", _property + "012"));
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 3);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        //the root node is a leaf node
        Assert.assertEquals(new String[] { _property }, chars.toArray());
    }

    /**
     * The trie is:
     *  /
     *  0
     *  1
     *  2
     */
    @Test
    public void testVerticalTrie1TraversalWithSize4() {
        UrlTrie trie = new UrlTrie(_property, Arrays.asList(_property + "0", _property + "01", _property + "012"));
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 4);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        //the root node is a leaf node
        Assert.assertEquals(new String[] { _property }, chars.toArray());
    }

    @Test
    public void testTrie1TraversalWithSize1() {
        UrlTrie trie = getUrlTrie1(_property);
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 1);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(
                new String[] { _property + "0", _property + "13", _property + "14", _property + "1", _property },
                chars.toArray());
    }

    @Test
    public void testTrie2TraversalWithSize1() {
        UrlTrie trie = getUrlTrie2(_property);
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 1);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(
                new String[] { _property + "03", _property + "04", _property + "0", _property + "1",
                        _property + "257", _property + "25", _property + "26", _property + "2", _property },
                chars.toArray());
    }

    @Test
    public void testTrie2TraversalWithSize2() {
        UrlTrie trie = getUrlTrie2(_property);
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 2);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(new String[] { //
                _property + "03", //group size 1, contains
                _property + "04", //group size 1, contains
                _property + "0", //group size 1(count is 3), equals
                _property + "1", //group size 1, contains
                _property + "25", //group size 2, contains
                _property + "26", //group size 1, contains
                _property + "2", //group size 1(count is 4), equals
                _property //group size 1(count is 9), equals
        }, chars.toArray());
    }

    @Test
    public void testTrie2TraversalWithSize3() {
        UrlTrie trie = getUrlTrie2(_property);
        UrlTriePostOrderIterator iterator = new UrlTriePostOrderIterator(trie, 3);
        ArrayList<String> chars = new ArrayList<>();
        while (iterator.hasNext()) {
            Pair<String, UrlTrieNode> next = iterator.next();
            chars.add(next.getLeft());
        }
        Assert.assertEquals(new String[] { //
                _property + "0", //group size 3, contains
                _property + "1", //group size 1, contains
                _property + "25", //group size 2, contains
                _property + "26", //group size 1, contains
                _property + "2", //group size 1(count is 4), equals
                _property //group size 1(count is 9), equals
        }, chars.toArray());
    }

    /**
     * The trie is:
     *    /
     *  0  1
     *    3 4
     */
    public static UrlTrie getUrlTrie1(String property) {
        return new UrlTrie(property,
                Arrays.asList(property + "1", property + "0", property + "13", property + "14"));
    }

    /**
     * The trie is:
     *     /
     *  0  1  2
     * 3 4   5 6
     *       7
     */
    public static UrlTrie getUrlTrie2(String property) {
        return new UrlTrie(property, Arrays.asList(property + "26", property + "257", property + "25",
                property + "1", property + "0", property + "2", property + "03", property + "04"));
    }
}