Unreviewed, fix build failure
[WebKit-https.git] / Tools / EditingHistory / EditingHistoryTests / RewindAndPlaybackTests.m
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "TestRunner.h"
27 #import "TestUtil.h"
28 #import "WKWebViewAdditions.h"
29 #import <XCTest/XCTest.h>
30
31 @interface RewindAndPlaybackTests : XCTestCase
32
33 @end
34
35 @implementation RewindAndPlaybackTests {
36     TestRunner *testRunner;
37 }
38
39 - (void)setUp
40 {
41     testRunner = [[TestRunner alloc] init];
42     [testRunner loadCaptureTestHarness];
43     [testRunner setTextObfuscationEnabled:NO];
44 }
45
46 - (void)tearDown
47 {
48     testRunner = nil;
49 }
50
51 - (void)testTypingSingleLineOfText
52 {
53     [testRunner typeString:@"hello world"];
54     NSString *originalSubtree = testRunner.bodyElementSubtree;
55
56     [self rewindAndPlaybackEditingInPlaybackTestHarness];
57     XCTAssertTrue([self originalBodySubtree:originalSubtree isEqualToFinalSubtree:testRunner.bodyElementSubtree]);
58     XCTAssertEqualObjects(testRunner.bodyTextContent, @"hello world");
59 }
60
61 - (void)testTypingMultipleLinesOfText
62 {
63     [testRunner typeString:@"foo"];
64     [testRunner typeString:@"\n"];
65     [testRunner typeString:@"bar"];
66     NSString *originalSubtree = testRunner.bodyElementSubtree;
67
68     [self rewindAndPlaybackEditingInPlaybackTestHarness];
69     XCTAssertTrue([self originalBodySubtree:originalSubtree isEqualToFinalSubtree:testRunner.bodyElementSubtree]);
70     XCTAssertEqualObjects(testRunner.bodyTextContent, @"foobar");
71 }
72
73 - (void)testTypingAndDeletingText
74 {
75     [testRunner typeString:@"apple"];
76     [testRunner deleteBackwards:3];
77
78     NSString *originalSubtree = testRunner.bodyElementSubtree;
79
80     [self rewindAndPlaybackEditingInPlaybackTestHarness];
81     XCTAssertTrue([self originalBodySubtree:originalSubtree isEqualToFinalSubtree:testRunner.bodyElementSubtree]);
82     XCTAssertEqualObjects(testRunner.bodyTextContent, @"ap");
83 }
84
85 - (void)rewindAndPlaybackEditingInPlaybackTestHarness
86 {
87     // This assumes that the test runner has loaded the capture test harness.
88     [testRunner loadPlaybackTestHarnessWithJSON:testRunner.editingHistoryJSON];
89
90     // Rewind to the very beginning, then play back all editing again.
91     [testRunner jumpToUpdateIndex:0];
92     [testRunner jumpToUpdateIndex:testRunner.numberOfUpdates];
93 }
94
95 - (BOOL)originalBodySubtree:(NSString *)originalSubtree isEqualToFinalSubtree:(NSString *)finalSubtree
96 {
97     if ([originalSubtree isEqualToString:finalSubtree])
98         return YES;
99
100     NSLog(@">>>>>>>");
101     NSLog(@"The original subtree is:\n%@", originalSubtree);
102     NSLog(@"=======");
103     NSLog(@"The final subtree is:\n%@", finalSubtree);
104     NSLog(@"<<<<<<<");
105
106     return NO;
107 }
108
109 @end