| Index: test/Notification.cpp | 
| =================================================================== | 
| --- a/test/Notification.cpp | 
| +++ b/test/Notification.cpp | 
| @@ -43,32 +43,27 @@ | 
| void AddNotification(const std::string& notification) | 
| { | 
| jsEngine->Evaluate("(function()" | 
| "{" | 
| "require('notification').Notification.addNotification(" + notification + ");" | 
| "})();"); | 
| } | 
|  | 
| -    NotificationPtr PeekNotification(const std::string& url = std::string()) | 
| +    std::unique_ptr<Notification> PeekNotification(const std::string& url = std::string()) | 
| { | 
| -      NotificationPtr retValue; | 
| -      filterEngine->SetShowNotificationCallback(std::bind( | 
| -        &NotificationTest::NotificationAvailableCallback, | 
| -        std::placeholders::_1, std::ref(retValue))); | 
| +      std::unique_ptr<Notification> retValue; | 
| +      filterEngine->SetShowNotificationCallback( | 
| +        [&retValue](Notification& notification) { | 
| +          retValue.reset(new Notification(std::move(notification))); | 
| +        }); | 
| filterEngine->ShowNextNotification(url); | 
| filterEngine->RemoveShowNotificationCallback(); | 
| return retValue; | 
| } | 
| - | 
| -    static void NotificationAvailableCallback(const NotificationPtr& src, NotificationPtr& dst) | 
| -    { | 
| -      EXPECT_TRUE(src); | 
| -      dst = src; | 
| -    } | 
| }; | 
|  | 
| class MockWebRequest : public WebRequest | 
| { | 
| public: | 
| std::string responseText; | 
| explicit MockWebRequest(const std::string& notification) | 
| : responseText(notification) | 
| @@ -109,30 +104,25 @@ | 
| "\"en-US\": \"message\"" | 
| "}," | 
| "\"title\": \"Title\"" | 
| "}]" | 
| "}"; | 
| jsEngine->SetWebRequest(std::shared_ptr<MockWebRequest>( | 
| new MockWebRequest(responseJsonText))); | 
| jsEngine->SetLogSystem(LogSystemPtr(new DefaultLogSystem())); | 
| -      filterEngine.reset(new FilterEngine(jsEngine)); | 
| +      filterEngine = FilterEngine::Create(jsEngine); | 
| filterEngine->SetShowNotificationCallback( | 
| -        std::bind(&NotificationMockWebRequestTest::OnNotification, | 
| -        this, std::placeholders::_1)); | 
| -    } | 
| - | 
| -    void OnNotification(const NotificationPtr& notification) | 
| -    { | 
| -      isNotificationCallbackCalled = true; | 
| -      ASSERT_TRUE(notification); | 
| -      EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_INFORMATION, notification->GetType()); | 
| -      EXPECT_EQ("Title", notification->GetTexts().title); | 
| -      EXPECT_EQ("message", notification->GetTexts().message); | 
| -      notification->MarkAsShown(); | 
| +        [this](Notification& notification) { | 
| +          isNotificationCallbackCalled = true; | 
| +          EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_INFORMATION, notification.GetType()); | 
| +          EXPECT_EQ("Title", notification.GetTexts().title); | 
| +          EXPECT_EQ("message", notification.GetTexts().message); | 
| +          notification.MarkAsShown(); | 
| +        }); | 
| } | 
| }; | 
| #endif | 
| } | 
|  | 
| TEST_F(NotificationTest, NoNotifications) | 
| { | 
| EXPECT_FALSE(PeekNotification()); | 
| @@ -148,66 +138,66 @@ | 
|  | 
| TEST_F(NotificationTest, AddNotification) | 
| { | 
| AddNotification("{" | 
| "type: 'critical'," | 
| "title: 'testTitle'," | 
| "message: 'testMessage'," | 
| "}"); | 
| -  NotificationPtr notification = PeekNotification(); | 
| +  auto notification = PeekNotification(); | 
| ASSERT_TRUE(notification); | 
| EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_CRITICAL, notification->GetType()); | 
| EXPECT_EQ("testTitle", notification->GetTexts().title); | 
| EXPECT_EQ("testMessage", notification->GetTexts().message); | 
| } | 
|  | 
| TEST_F(NotificationTest, FilterByUrl) | 
| { | 
| AddNotification("{ id: 'no-filter', type: 'critical' }"); | 
| AddNotification("{ id: 'www.com', type: 'information'," | 
| "urlFilters:['||www.com$document']" | 
| "}"); | 
| AddNotification("{ id: 'www.de', type: 'question'," | 
| "urlFilters:['||www.de$document']" | 
| "}"); | 
|  | 
| -  NotificationPtr notification = PeekNotification(); | 
| +  auto notification = PeekNotification(); | 
| ASSERT_TRUE(notification); | 
| EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_CRITICAL, notification->GetType()); | 
|  | 
| notification = PeekNotification("http://www.de"); | 
| ASSERT_TRUE(notification); | 
| EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_QUESTION, notification->GetType()); | 
|  | 
| notification = PeekNotification("http://www.com"); | 
| ASSERT_TRUE(notification); | 
| EXPECT_EQ(NotificationType::NOTIFICATION_TYPE_INFORMATION, notification->GetType()); | 
| } | 
|  | 
| TEST_F(NotificationTest, MarkAsShown) | 
| { | 
| AddNotification("{ id: 'id', type: 'question' }"); | 
| EXPECT_TRUE(PeekNotification()); | 
| -  NotificationPtr notification = PeekNotification(); | 
| +  auto notification = PeekNotification(); | 
| ASSERT_TRUE(notification); | 
| notification->MarkAsShown(); | 
| EXPECT_FALSE(PeekNotification()); | 
| } | 
|  | 
| TEST_F(NotificationTest, NoLinks) | 
| { | 
| AddNotification("{ id: 'id'}"); | 
| -  NotificationPtr notification = PeekNotification(); | 
| +  auto notification = PeekNotification(); | 
| ASSERT_TRUE(notification); | 
| EXPECT_EQ(0u, notification->GetLinks().size()); | 
| } | 
|  | 
| TEST_F(NotificationTest, Links) | 
| { | 
| AddNotification("{ id: 'id', links: ['link1', 'link2'] }"); | 
| -  NotificationPtr notification = PeekNotification(); | 
| +  auto notification = PeekNotification(); | 
| ASSERT_TRUE(notification); | 
| std::vector<std::string> notificationLinks = notification->GetLinks(); | 
| ASSERT_EQ(2u, notificationLinks.size()); | 
| EXPECT_EQ("link1", notificationLinks[0]); | 
| EXPECT_EQ("link2", notificationLinks[1]); | 
| } | 
|  |