//
//  AnchoredLayoutPluginTests.swift
//  Astro
//
//  Created by Mark Sandstrom on 6/11/15.
//  Copyright (c) 2015 Mobify Research & Development Inc. All rights reserved.
//

import XCTest
@testable import Astro

class AnchoredLayoutPluginTests: AstroTestCase {
    var messageBus: MessageBus!
    var pluginResolver: StubPluginResolver!
    var anchoredLayoutPlugin: AnchoredLayoutPlugin!

    override func setUp() {
        messageBus = MessageBus()
        pluginResolver = StubPluginResolver()
        anchoredLayoutPlugin = AnchoredLayoutPlugin(address: "TestPlugin:0", messageBus: messageBus, pluginResolver: pluginResolver, options: nil)
    }

    func testAnAnchoredLayoutPluginCanBeConstructed() {
        XCTAssertNotNil(anchoredLayoutPlugin)
    }

    func testSetContentView() {
        let webViewPlugin = WebViewPlugin(address: "WebViewPlugin:0", messageBus: messageBus, pluginResolver: pluginResolver, options: nil)
        pluginResolver.addPlugin(webViewPlugin)

        anchoredLayoutPlugin.setContentView(webViewPlugin.address) { _ in }

        XCTAssertEqual(webViewPlugin.viewController.parent!, anchoredLayoutPlugin.viewController)
        XCTAssertTrue(containsChildView(anchoredLayoutPlugin.viewController.view!, childView: webViewPlugin.viewController.view!))

        let webViewPlugin2 = WebViewPlugin(address: "WebViewPlugin:2", messageBus: messageBus, pluginResolver: pluginResolver, options: nil)
        pluginResolver.addPlugin(webViewPlugin2)

        anchoredLayoutPlugin.setContentView(webViewPlugin2.address) { _ in }

        XCTAssertNil(webViewPlugin.viewController.parent)
        XCTAssertEqual(webViewPlugin2.viewController.parent!, anchoredLayoutPlugin.viewController)

        XCTAssertFalse(containsChildView(anchoredLayoutPlugin.viewController.view!, childView: webViewPlugin.viewController.view!))
        XCTAssertTrue(containsChildView(anchoredLayoutPlugin.viewController.view!, childView: webViewPlugin2.viewController.view!))
    }
}
