blob: ef8436193a953388eb9575831a34a1f6091aac2e [file] [log] [blame]
// [The "BSD licence"]
// Copyright (c) 2007 Kay Roepke
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import "TestRewriteRuleTokenStream.h"
#import "ANTLRRewriteRuleTokenStream.h"
#import "ANTLRCommonTreeAdaptor.h"
#import "ANTLRCommonToken.h"
@implementation TestRewriteRuleTokenStream
- (void) setUp
{
treeAdaptor = [ANTLRCommonTreeAdaptor newTreeAdaptor];
stream = [ANTLRRewriteRuleTokenStream newANTLRRewriteRuleTokenStream:treeAdaptor
description:@"rewrite rule token stream"];
token1 = [ANTLRCommonToken newToken:5];
token2 = [ANTLRCommonToken newToken:6];
token3 = [ANTLRCommonToken newToken:7];
token4 = [ANTLRCommonToken newToken:8];
[token1 setText:@"token 1"];
[token2 setText:@"token 2"];
[token3 setText:@"token 3"];
[token4 setText:@"token 4"];
}
- (void) tearDown
{
[token1 release]; token1 = nil;
[token2 release]; token2 = nil;
[token3 release]; token3 = nil;
[token4 release]; token4 = nil;
[treeAdaptor release]; treeAdaptor = nil;
[stream release]; stream = nil;
}
- (void) test01EmptyRewriteStream
{
treeAdaptor = [ANTLRCommonTreeAdaptor newTreeAdaptor];
stream = [ANTLRRewriteRuleTokenStream newANTLRRewriteRuleTokenStream:treeAdaptor
description:@"rewrite rule token stream"];
STAssertFalse([stream hasNext], @"-(BOOL)hasNext should be NO, but isn't");
STAssertThrows([stream nextToken], @"-next on empty stream should throw exception, but doesn't");
}
- (void) test02RewriteStreamCount
{
treeAdaptor = [ANTLRCommonTreeAdaptor newTreeAdaptor];
stream = [ANTLRRewriteRuleTokenStream newANTLRRewriteRuleTokenStream:treeAdaptor
description:@"rewrite rule token stream"];
token1 = [ANTLRCommonToken newToken:5];
token2 = [ANTLRCommonToken newToken:6];
[token1 setText:@"token 1"];
[token2 setText:@"token 2"];
STAssertTrue([stream size] == 0,
@"empty stream should have count==0");
[stream addElement:token1];
STAssertTrue([stream size] == 1,
@"single element stream should have count==1");
[stream addElement:token2];
STAssertTrue([stream size] == 2,
@"multiple stream should have count==2");
}
- (void) test03SingleElement
{
treeAdaptor = [ANTLRCommonTreeAdaptor newTreeAdaptor];
stream = [ANTLRRewriteRuleTokenStream newANTLRRewriteRuleTokenStream:treeAdaptor
description:@"rewrite rule token stream"];
token1 = [ANTLRCommonToken newToken:5];
token2 = [ANTLRCommonToken newToken:6];
token3 = [ANTLRCommonToken newToken:7];
token4 = [ANTLRCommonToken newToken:8];
[token1 setText:@"token 1"];
[token2 setText:@"token 2"];
[token3 setText:@"token 3"];
[token4 setText:@"token 4"];
[stream addElement:token1];
STAssertTrue([stream hasNext], @"-hasNext should be YES, but isn't");
ANTLRCommonTree *tree = [stream nextNode];
STAssertEqualObjects([tree getToken], token1, @"return token from stream should be token1, but isn't");
}
- (void) test04SingleElementDup
{
[stream addElement:token1];
ANTLRCommonTree *tree1, *tree2;
STAssertNoThrow(tree1 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertNoThrow(tree2 = [stream nextNode],
@"stream iteration past element count (single element) should not throw exception"
);
STAssertEqualObjects([tree1 getToken], [tree2 getToken],
@"tokens should be the same");
STAssertFalse(tree1 == tree2,
@"trees should be different, but aren't");
}
- (void) test05MultipleElements
{
[stream addElement:token1];
[stream addElement:token2];
[stream addElement:token3];
ANTLRCommonTree *tree1, *tree2, *tree3, *tree4;
STAssertNoThrow(tree1 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertEqualObjects([tree1 getToken], token1,
@"[tree1 token] should be equal to token1"
);
STAssertNoThrow(tree2 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertEqualObjects([tree2 getToken], token2,
@"[tree2 token] should be equal to token2"
);
STAssertNoThrow(tree3 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertEqualObjects([tree3 getToken], token3,
@"[tree3 token] should be equal to token3"
);
STAssertThrows(tree4 = [stream nextNode],
@"iterating beyond end of stream should throw an exception"
);
}
- (void) test06MultipleElementsAfterReset
{
[stream addElement:token1];
[stream addElement:token2];
[stream addElement:token3];
ANTLRCommonTree *tree1, *tree2, *tree3;
// consume the stream completely
STAssertNoThrow(tree1 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertEqualObjects([tree1 getToken], token1,
@"[tree1 token] should be equal to token1"
);
STAssertNoThrow(tree2 = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertEqualObjects([tree2 getToken], token2,
@"[tree2 token] should be equal to token2"
);
STAssertNoThrow(tree3 = [stream nextNode],
@"stream iteration should not throw exception"
);
[stream reset]; // after resetting the stream it should dup
ANTLRCommonTree *tree1Dup, *tree2Dup, *tree3Dup;
STAssertNoThrow(tree1Dup = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertTrue(tree1 != tree1Dup,
@"[tree1 token] should be equal to token1"
);
STAssertNoThrow(tree2Dup = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertTrue(tree2 != tree2Dup,
@"[tree2 token] should be equal to token2"
);
STAssertNoThrow(tree3Dup = [stream nextNode],
@"stream iteration should not throw exception"
);
STAssertTrue(tree3 != tree3Dup,
@"[tree3 token] should be equal to token3"
);
}
@end