/* * 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")); } }