// REQUIRES: OS=macosx
// RUN: %target-swift-frontend -typecheck %s -swift-version 3
// RUN: %target-swift-frontend -typecheck -update-code -primary-file %s -emit-migrated-file-path %t.result -swift-version 3 -disable-migrator-fixits
// RUN: diff -u %s.expected %t.result

import AppKit

func a(_ outlineView: NSOutlineView) {
  let cell: NSTableCellView = outlineView.makeView(withIdentifier: "HeaderCell", owner: outlineView) as! NSTableCellView
}

NSApplication.load()
NSSound.beep()

NSRect.zero.fill()
NSRect.zero.clip
NSRect.zero.frame()

// NSRect.zero.fill(using: NSCompositingOperation.clear)
NSRect.zero.fill(using: NSCompositingOperation.clear)

// NSRect.zero.frame(withWidth: 0.0)
NSRect.zero.frame(withWidth: 0.0)

// NSRect.zero.frame(withWidth: 0.0, using: NSCompositingOperation.clear)
NSRect.zero.frame(withWidth: 0.0, using: NSCompositingOperation.clear)

let isTrue = true

// (isTrue ? NSRect.zero : NSRect.zero).frame(withWidth: 0.0)
(isTrue ? NSRect.zero : NSRect.zero).frame(withWidth: 0.0)

var rekts = [NSRect.zero]
var kolors = [NSColor.red]
var grays = [CGFloat(0)]

// rekts.fill()
rekts.fill()

// rekts.fill(using: NSCompositingOperation.clear)
rekts.fill(using: NSCompositingOperation.clear)

// rekts.clip()
rekts.clip()

// TODO: zip2(rekts, kolors).fill()
// NSRectFillListWithColors(&rekts, &kolors, 1)

// TODO: zip2(rekts, kolors).fill(using: NSCompositingOperation.clear)
// NSRectFillListWithColorsUsingOperation(&rekts, &kolors, 1, NSCompositingOperation.clear)

// TODO: zip2(rekts, grays).fill()
// NSRectFillListWithGrays(&rekts, &grays, 1)

// TODO: NSAnimationEffect.poof.show(centeredAt: NSPoint.zero, size: NSSize.zero)
// NSShowAnimationEffect(NSAnimationEffect.poof, NSPoint.zero, NSSize.zero, nil, nil, nil)

// _ = NSWindow.Depth.availableDepths
_ = NSWindow.Depth.availableDepths

// TODO: _ = NSWindow.Depth.bestDepth("", 24, 0, false)
// _ = NSBestDepth("", 24, 0, false, nil)

var cacheSize: GLint = 0

// cacheSize = NSOpenGLGOFormatCacheSize.globalValue
cacheSize = NSOpenGLGOFormatCacheSize.globalValue

// NSOpenGLGOFormatCacheSize.globalValue = 5
NSOpenGLGOFormatCacheSize.globalValue = 5

var major = GLint(0)
var minor = GLint(0)

// TODO: (major, minor) = NSOpenGLContext.openGLVersion
// NSOpenGLGetVersion(&major, &minor)

class MyDocument : NSDocument {
  override class var autosavesInPlace: Bool {
    return false
  }
}
