blob: 32044a6a51bf29c3ba4f0c7d8b5d1807ee73a56a [file] [log] [blame]
// TODO: Relies on AnyObject lvalues <rdar://problem/17755906>
// R/UN: %target-run-simple-swift | %FileCheck %s
// RUN: not %target-build-swift -typecheck
// REQUIRES: executable_test
import Foundation
class Model : NSObject {
let undoManager: NSUndoManager = {
let u = NSUndoManager()
u.groupsByEvent = false
return u
}()
var _value: Float = 0
var value: Float {
get {
return _value
}
set(newValue) {
undoManager.prepareWithInvocationTarget(self).value = _value
_value = newValue
}
}
func print(_ message: String) {
print(message + ": \(value)")
}
}
let m = Model()
let u = m.undoManager
m.print("start")
// CHECK: start: 0
u.beginUndoGrouping()
m.value = 1
u.endUndoGrouping()
m.print("set")
// CHECK: set: 1
u.undo()
m.print("undo")
// CHECK: undo: 0
u.redo()
m.print("redo")
// CHECK: redo: 1
u.beginUndoGrouping()
m.value = 1.5
m.value = 2
u.endUndoGrouping()
m.print("set 2")
// CHECK: set 2: 2
u.beginUndoGrouping()
m.value = 2.5
m.value = 3
u.endUndoGrouping()
m.print("set 3")
// CHECK: set 3: 3
u.beginUndoGrouping()
m.value = 3.5
m.value = 4
u.endUndoGrouping()
m.print("set 4")
// CHECK: set 4: 4
u.undo()
m.print("undo 4")
// CHECK: undo 4: 3
u.undo()
m.print("undo 3")
// CHECK: undo 3: 2
u.undo()
m.print("undo 2")
// CHECK: undo 2: 1
u.undo()
m.print("undo 1")
// CHECK: undo 1: 0
u.redo()
m.print("redo 1")
// CHECK: redo 1: 1
u.redo()
m.print("redo 2")
// CHECK: redo 2: 2
u.redo()
m.print("redo 3")
// CHECK: redo 3: 3
u.redo()
m.print("redo 4")
// CHECK: redo 4: 4