Home | History | Annotate | Download | only in core
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "components/dom_distiller/core/dom_distiller_model.h"
      6 
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 
      9 namespace dom_distiller {
     10 
     11 TEST(DomDistillerModelTest, TestGetByEntryId) {
     12   ArticleEntry entry1;
     13   entry1.set_entry_id("id1");
     14   entry1.set_title("title1");
     15   ArticleEntry entry2;
     16   entry2.set_entry_id("id2");
     17   entry2.set_title("title1");
     18 
     19   std::vector<ArticleEntry> initial_model;
     20   initial_model.push_back(entry1);
     21   initial_model.push_back(entry2);
     22 
     23   DomDistillerModel model(initial_model);
     24 
     25   ArticleEntry found_entry;
     26   EXPECT_TRUE(model.GetEntryById(entry1.entry_id(), &found_entry));
     27   ASSERT_TRUE(IsEntryValid(found_entry));
     28   EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
     29 
     30   EXPECT_TRUE(model.GetEntryById(entry2.entry_id(), &found_entry));
     31   ASSERT_TRUE(IsEntryValid(found_entry));
     32   EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
     33 
     34   EXPECT_FALSE(model.GetEntryById("some_other_id", NULL));
     35 }
     36 
     37 TEST(DomDistillerModelTest, TestGetByUrl) {
     38   ArticleEntry entry1;
     39   entry1.set_entry_id("id1");
     40   entry1.set_title("title1");
     41   ArticleEntryPage* page1 = entry1.add_pages();
     42   page1->set_url("http://example.com/1");
     43   ArticleEntryPage* page2 = entry1.add_pages();
     44   page2->set_url("http://example.com/2");
     45 
     46   ArticleEntry entry2;
     47   entry2.set_entry_id("id2");
     48   entry2.set_title("title1");
     49   ArticleEntryPage* page3 = entry2.add_pages();
     50   page3->set_url("http://example.com/a1");
     51 
     52   std::vector<ArticleEntry> initial_model;
     53   initial_model.push_back(entry1);
     54   initial_model.push_back(entry2);
     55 
     56   DomDistillerModel model(initial_model);
     57 
     58   ArticleEntry found_entry;
     59   EXPECT_TRUE(model.GetEntryByUrl(GURL(page1->url()), &found_entry));
     60   ASSERT_TRUE(IsEntryValid(found_entry));
     61   EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
     62 
     63   EXPECT_TRUE(model.GetEntryByUrl(GURL(page2->url()), &found_entry));
     64   ASSERT_TRUE(IsEntryValid(found_entry));
     65   EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
     66 
     67   EXPECT_TRUE(model.GetEntryByUrl(GURL(page3->url()), &found_entry));
     68   ASSERT_TRUE(IsEntryValid(found_entry));
     69   EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
     70 
     71   EXPECT_FALSE(model.GetEntryByUrl(GURL("http://example.com/foo"), NULL));
     72 }
     73 
     74 // This test ensures that the model handles the case where an URL maps to
     75 // multiple entries. In that case, the model is allowed to have an inconsistent
     76 // url-to-entry mapping, but it should not fail in other ways (i.e. id-to-entry
     77 // should be correct, shouldn't crash).
     78 TEST(DomDistillerModelTest, TestUrlToMultipleEntries) {
     79   ArticleEntry entry1;
     80   entry1.set_entry_id("id1");
     81   entry1.set_title("title1");
     82   ArticleEntryPage* page1 = entry1.add_pages();
     83   page1->set_url("http://example.com/1");
     84   ArticleEntryPage* page2 = entry1.add_pages();
     85   page2->set_url("http://example.com/2");
     86 
     87   ArticleEntry entry2;
     88   entry2.set_entry_id("id2");
     89   entry2.set_title("title1");
     90   ArticleEntryPage* page3 = entry2.add_pages();
     91   page3->set_url("http://example.com/1");
     92 
     93   std::vector<ArticleEntry> initial_model;
     94   initial_model.push_back(entry1);
     95   initial_model.push_back(entry2);
     96 
     97   DomDistillerModel model(initial_model);
     98 
     99   EXPECT_TRUE(model.GetEntryByUrl(GURL(page1->url()), NULL));
    100   EXPECT_TRUE(model.GetEntryByUrl(GURL(page2->url()), NULL));
    101   EXPECT_TRUE(model.GetEntryByUrl(GURL(page3->url()), NULL));
    102 
    103   ArticleEntry found_entry;
    104   EXPECT_TRUE(model.GetEntryById(entry1.entry_id(), &found_entry));
    105   ASSERT_TRUE(IsEntryValid(found_entry));
    106   EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
    107 
    108   EXPECT_TRUE(model.GetEntryById(entry2.entry_id(), &found_entry));
    109   ASSERT_TRUE(IsEntryValid(found_entry));
    110   EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
    111 
    112   syncer::SyncChangeList changes_to_apply;
    113   syncer::SyncChangeList changes_applied;
    114   syncer::SyncChangeList changes_missing;
    115 
    116   entry2.mutable_pages(0)->set_url("http://example.com/foo1");
    117   changes_to_apply.push_back(syncer::SyncChange(
    118       FROM_HERE, syncer::SyncChange::ACTION_UPDATE, CreateLocalData(entry2)));
    119   model.ApplyChangesToModel(
    120       changes_to_apply, &changes_applied, &changes_missing);
    121 
    122   EXPECT_TRUE(model.GetEntryById(entry1.entry_id(), &found_entry));
    123   ASSERT_TRUE(IsEntryValid(found_entry));
    124   EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
    125 
    126   EXPECT_TRUE(model.GetEntryById(entry2.entry_id(), &found_entry));
    127   ASSERT_TRUE(IsEntryValid(found_entry));
    128   EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
    129 }
    130 
    131 }  // namespace dom_distiller
    132